@Override public void execute(ActivityInstanceImpl activityInstance) { activityInstance.end(); activityInstance.propagateToParent(); }
public void endAndPropagateToParent() { end(); propagateToParent(); }
public void ended(ActivityInstanceImpl activityInstance, ActivityInstanceImpl nestedEndedActivityInstance) { if (!activityInstance.hasOpenActivityInstances()) { activityInstance.end(); activityInstance.propagateToParent(); } }
@Override public void execute(ActivityInstanceImpl activityInstance) { ActivityImpl activity = activityInstance.activity; List<TransitionImpl> outgoingTransitions = activity.outgoingTransitions; TransitionImpl transition = findFirstTransitionThatMeetsCondition(activityInstance, outgoingTransitions); if (transition == null) { if (activity.defaultTransition != null) { transition = activity.defaultTransition; } else if (outgoingTransitions != null && outgoingTransitions.size() == 1) { transition = outgoingTransitions.get(0); } else if (outgoingTransitions != null && outgoingTransitions.size() > 1) { transition = handleUndefinedSelection(activityInstance, outgoingTransitions); } } if (transition != null) { activityInstance.takeTransition(transition); } else { log.debug("No transition selected. Gateway " + activity + " ends flow"); activityInstance.end(); activityInstance.propagateToParent(); } }
/** Starts the to (destination) activity in the current (parent) scope. * This methods will also end the current activity instance. * This method can be called multiple times in one start() */ public void takeTransition(TransitionImpl transition) { if (transition.id!=null || activity.activityType.saveTransitionsTaken()) { addTransitionTaken(transition.id); } ActivityInstanceImpl toActivityInstance = null; ActivityImpl to = transition.to; if (to!=null) { end(); if (log.isDebugEnabled()) { log.debug("Taking transition to "+to); } toActivityInstance = parent.createActivityInstance(to); } else { log.debug("Dangling transition. Propagating to parent."); end(); propagateToParent(); } workflow.workflowEngine.notifyTransitionTaken(this, transition, toActivityInstance); }
/** Default BPMN logic when an activity ends */ @Override public void onwards() { if (log.isDebugEnabled()) { log.debug("Onwards "+this); } // First we end the activity instance. // Subsequent invocations to end will be ignored. end(); boolean isTransitionTaken = false; // Take each outgoing transition 'in parallel' // Note that process concurrency is not the same as java multithreaded computation if (activity.hasOutgoingTransitions()) { for (TransitionImpl transition: activity.outgoingTransitions) { // Only take a transition if there is no condition or if the condition resolves to true. ConditionImpl condition = transition.condition; if (condition!=null ? condition.eval(this) : true) { isTransitionTaken = true; takeTransition(transition); } } } // if there were no outgoing transitions or none of them could be taken, if (!isTransitionTaken) { // propagate the execution flow upwards to the parent propagateToParent(); } }
@Override public void execute(ActivityInstanceImpl activityInstance) { activityInstance.end(); boolean hasOtherUnfinishedActivities = false;
if (activityImpl == null) throw new RuntimeException("To-activityId not found!"); if (activityInstanceImpl != null && !activityInstanceImpl.isEnded()) activityInstanceImpl.end(); if (workflowInstanceImpl.isEnded()) { workflowInstanceImpl.setEnd(null);