@Override public void execute(ActivityInstanceImpl activityInstance) { activityInstance.end(); boolean hasOtherUnfinishedActivities = false; if (!siblingActivityInstance.isEnded()) { hasOtherUnfinishedActivities = true; && siblingActivityInstance.getActivity()==activityInstance.getActivity() && siblingActivityInstance.isJoining() ) { otherJoiningActivityInstances.add(siblingActivityInstance); activityInstance.propagateToParent(); if (log.isDebugEnabled()) log.debug("Firing parallel gateway"); for (ActivityInstanceImpl otherJoiningActivityInstance: otherJoiningActivityInstances) { activityInstance.removeJoining(otherJoiningActivityInstance); activityInstance.onwards(); activityInstance.setJoining();
protected void mapOutputVariables(ActivityInstanceImpl callerActivityInstance, WorkflowInstanceImpl calledProcessInstance) { if (outputBindings!=null) { for (String subWorkflowVariableId: outputBindings.keySet()) { String variableId = outputBindings.get(subWorkflowVariableId); TypedValueImpl typedValue = calledProcessInstance.getTypedValue(subWorkflowVariableId); callerActivityInstance.setVariableValue(variableId, typedValue); } } }
public ActivityInstance toActivityInstance() { return toActivityInstance(false); }
public void message(ActivityInstanceImpl activityInstance, Message message) { activityInstance.setVariableValues(message); activityInstance.onwards(); }
public void end() { if (end==null) { if (hasOpenActivityInstances()) { throw new RuntimeException("Can't end this activity instance. There are open activity instances: " +this); } setEnd(Time.now()); workflow.workflowEngine.notifyActivityInstanceEnded(this); destroyScopeInstance(); setWorkState(null); } }
if (isList(adapterKey)) { List<BindingImpl<Object>> inputBindings = inputListBindings!=null ? inputListBindings.get(adapterKey) : null; value = inputBindings!=null ? activityInstance.getValues(inputBindings) : null; } else { BindingImpl inputBinding = inputBindings.get(adapterKey); value = activityInstance.getValue(inputBinding); activityInstance.setVariableValue(variableId, typedValue.getValue()); else log.warn("Variable type not defined for variable " + variableId); activityInstance.onwards();
while (hasWork()) { ActivityInstanceImpl activityInstance = getNextWork(); ActivityImpl activity = activityInstance.getActivity(); ActivityType activityType = activity.activityType; if (log.isDebugEnabled()) log.debug("Starting " + activityInstance); activityInstance.execute(); activityInstance.execute(); MultiInstanceImpl multiInstance = activityType.getMultiInstance(); if (multiInstance != null && multiInstance.valuesBindings != null) { Object value = activityInstance.getValues(multiInstance.valuesBindings); if (value != null) { if (value instanceof Collection) { ActivityInstanceImpl elementActivityInstance = activityInstance.createActivityInstance(activity); elementActivityInstance.setWorkState(STATE_STARTING_MULTI_INSTANCE); elementActivityInstance.initializeForEachElement(multiInstance.elementVariable, element); log.debug("Skipping empty multi instance container " + activityInstance); activityInstance.onwards();
args = new Object[argBindings.length]; for (int i=0; i<argBindings.length; i++) { args[i] = activityInstance.getValue(argBindings[i]); String beanName = activity.getBeanName(); if (beanName!=null) { bean = activityInstance.getConfiguration().get(beanName); method = Reflection.findMethod(bean.getClass(), activity.getMethodName(), args); activityInstance.onwards(); } catch (Exception e) { throw new RuntimeException(e);
if (activityInstances!=null) { for (ActivityInstanceImpl activityInstance: activityInstances) { if (activityInstance.isJoining()) { if (joiningActivityInstances==null) { joiningActivityInstances = new ArrayList<>(); if (!onwardedActivities.contains(joiningActivityInstance.activity)) { onwardedActivities.add(joiningActivityInstance.activity); joiningActivityInstance.setWorkState(null); joiningActivityInstance.onwards();
public ActivityInstanceImpl createActivityInstance(ActivityImpl activity) { String activityInstanceId = workflowInstance.generateNextActivityInstanceId(); ActivityInstanceImpl activityInstance = new ActivityInstanceImpl(this, activity, activityInstanceId); if (activity.isMultiInstance()) { activityInstance.setWorkState(STATE_STARTING_MULTI_CONTAINER); } else { activityInstance.setWorkState(STATE_STARTING); } workflowInstance.addWork(activityInstance); activityInstance.start = Time.now(); if (updates!=null) { activityInstance.updates = new ActivityInstanceUpdates(true); propagateActivityInstanceChange(); } addActivityInstance(activityInstance); activityInstance.initializeScopeInstance(); // if (log.isDebugEnabled()) // log.debug("Created "+activityInstance); return activityInstance; }
/** 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); }
protected ActivityInstanceImpl readActivityInstance(ScopeInstanceImpl parent, BasicDBObject dbActivityInstance, Map<ActivityInstanceImpl, String> allActivityIds) { ActivityInstanceImpl activityInstance = new ActivityInstanceImpl(); activityInstance.id = readId(dbActivityInstance, ID); activityInstance.calledWorkflowInstanceId = readWorkflowInstanceId(dbActivityInstance, CALLED_WORKFLOW_INSTANCE_ID); activityInstance.workState = readString(dbActivityInstance, WORK_STATE); activityInstance.configuration = configuration; activityInstance.parent = parent; activityInstance.workflow = parent.workflow; activityInstance.workflowInstance = parent.workflowInstance; readScopeImpl(activityInstance, dbActivityInstance, allActivityIds); return activityInstance; }
@Override public void execute(ActivityInstanceImpl activityInstance) { activityInstance.onwards(); }
public LocalDateTime resolve(ActivityInstanceImpl activityInstance) { LocalDateTime baseTime = null; if (activityInstance!=null && base!=null) { baseTime = activityInstance.getValue(base); } if (baseTime==null) { baseTime = Time.now(); } LocalDateTime time = relativeTime.resolve(baseTime); return time; } }
public void cancel() { if (this.end==null) { this.setEnd(Time.now()); this.endState = ScopeInstance.ENDSTATE_CANCELED; if (activityInstances!=null) { for (ActivityInstanceImpl activityInstance: activityInstances) { activityInstance.cancel(); } } } } }
if (isList(adapterKey)) { List<BindingImpl<Object>> inputBindings = inputListBindings!=null ? inputListBindings.get(adapterKey) : null; value = inputBindings!=null ? activityInstance.getValues(inputBindings) : null; } else { BindingImpl inputBinding = inputBindings.get(adapterKey); value = activityInstance.getValue(inputBinding); activityInstance.setVariableValue(variableId, typedValue.getValue()); else log.warn("Variable type not defined for variable " + variableId); activityInstance.onwards();
@Override public void execute(ActivityInstanceImpl activityInstance) { Configuration configuration = activityInstance.getConfiguration(); WorkflowId actualSubWorkflowId = null; if (this.subWorkflowId != null) { actualSubWorkflowId = this.subWorkflowId; } else if (subWorkflowSourceId != null) { WorkflowStore workflowStore = configuration.get(WorkflowStore.class); actualSubWorkflowId = workflowStore.findLatestWorkflowIdBySource(subWorkflowSourceId); } if (actualSubWorkflowId != null) { TriggerInstance triggerInstance = new TriggerInstance() .sourceWorkflowId(subWorkflowSourceId) .workflowId(actualSubWorkflowId); triggerInstance.setCallingWorkflowInstanceId(activityInstance.workflowInstance.id); triggerInstance.setCallingActivityInstanceId(activityInstance.id); if (inputBindings != null) { for (String subWorkflowVariableId: inputBindings.keySet()) { BindingImpl<?> subWorkflowBinding = inputBindings.get(subWorkflowVariableId); Object value = activityInstance.getValue(subWorkflowBinding); triggerInstance.data(subWorkflowVariableId, value); } } startWorkflowInstance(activityInstance, triggerInstance); } else { reportError(activityInstance, "Cannot execute sub-process action because no sub-process was configured."); activityInstance.onwards(); } }
protected ActivityInstanceImpl readActivityInstance(ScopeInstanceImpl parent, BasicDBObject dbActivityInstance, Map<ActivityInstanceImpl, String> allActivityIds) { ActivityInstanceImpl activityInstance = new ActivityInstanceImpl(); activityInstance.id = readId(dbActivityInstance, ID); activityInstance.calledWorkflowInstanceId = readWorkflowInstanceId(dbActivityInstance, CALLED_WORKFLOW_INSTANCE_ID); activityInstance.workState = readString(dbActivityInstance, WORK_STATE); activityInstance.configuration = configuration; activityInstance.parent = parent; activityInstance.workflow = parent.workflow; activityInstance.workflowInstance = parent.workflowInstance; readScopeImpl(activityInstance, dbActivityInstance, allActivityIds); return activityInstance; }
@Override public void execute(ActivityInstanceImpl activityInstance) { activityInstance.onwards(); }