public void execute(ActivityImpl activity) { createActivityInstance(activity); }
public void setVariableValue(String variableId, Object value) { if (variableInstances!=null) { VariableInstanceImpl variableInstance = getVariableInstanceLocal(variableId); if (variableInstance!=null) { setVariableValue(variableInstance, value); return; } } if (parent!=null) { parent.setVariableValue(variableId, value); return; } DataTypeService dataTypeService = configuration.get(DataTypeService.class); Class<?> valueClass = value!=null ? value.getClass() : null; DataTypeImpl dataType = dataTypeService.getDataTypeByValue(valueClass); if (dataType==null) { throw new RuntimeException("Couldn't determine data type dynamically for value "+value); } VariableInstanceImpl variableInstance = createVariableInstanceLocal(variableId, dataType); setVariableValue(variableInstance, value); }
public void onwards() { endAndPropagateToParent(); }
public VariableInstanceImpl createVariableInstanceLocal(VariableImpl variable) { String variableInstanceId = workflowInstance.generateNextVariableInstanceId(); VariableInstanceImpl variableInstance = new VariableInstanceImpl(this, variable, variableInstanceId); variableInstance.configuration = configuration; variableInstance.workflowInstance = workflowInstance; variableInstance.type = variable.type; variableInstance.setValue(variable.defaultValue); variableInstance.variable = variable; if (updates!=null) { variableInstance.updates = new VariableInstanceUpdates(true); updates.isVariableInstancesChanged = true; if (parent!=null) { parent.propagateActivityInstanceChange(); } } addVariableInstance(variableInstance); return variableInstance; }
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; }
protected void readActivityInstances(ScopeInstanceImpl scopeInstance, BasicDBObject dbScopeInstance, Map<ActivityInstanceImpl, String> allActivityIds) { Map<Object, ActivityInstanceImpl> allActivityInstances = new LinkedHashMap<>(); List<BasicDBObject> dbActivityInstances = readList(dbScopeInstance, ACTIVITY_INSTANCES); if (dbActivityInstances!=null) { for (BasicDBObject dbActivityInstance: dbActivityInstances) { ActivityInstanceImpl activityInstance = readActivityInstance(scopeInstance, dbActivityInstance, allActivityIds); allActivityInstances.put(activityInstance.id, activityInstance); String activityId = readString(dbActivityInstance, ACTIVITY_ID); allActivityIds.put(activityInstance, activityId); scopeInstance.addActivityInstance(activityInstance); } } }
private void readVariableInstances(ScopeInstanceImpl parent, BasicDBObject dbWorkflowInstance) { List<BasicDBObject> dbVariableInstances = readList(dbWorkflowInstance, VARIABLE_INSTANCES); if (dbVariableInstances!=null && !dbVariableInstances.isEmpty()) { for (BasicDBObject dbVariableInstance: dbVariableInstances) { VariableInstance variableInstance = mongoMapper.read(dbVariableInstance, VariableInstance.class); VariableInstanceImpl variableInstanceImpl = new VariableInstanceImpl(); variableInstanceImpl.id = variableInstance.getId(); String variableId = variableInstance.getVariableId(); variableInstanceImpl.variable = findVariableByIdRecurseParents(parent.scope, variableId); if (variableInstanceImpl.variable!=null) { variableInstanceImpl.type = variableInstanceImpl.variable.type; } else { variableInstanceImpl.variable = new VariableImpl(); DataType type = variableInstance.getType(); if (type!=null) { variableInstanceImpl.type = dataTypeService.createDataType(type); } } variableInstanceImpl.value = variableInstance.getValue(); variableInstanceImpl.configuration = configuration; variableInstanceImpl.workflowInstance = parent.workflowInstance; variableInstanceImpl.parent = parent; variableInstanceImpl.workflow = parent.workflow; parent.addVariableInstance(variableInstanceImpl); } } }
public void initializeVariableInstances() { if (scope.variables!=null && !scope.variables.isEmpty()) { for (VariableImpl variable: scope.variables.values()) { createVariableInstanceLocal(variable); } } }
public void collectVariableValues(VariableValues variableValues) { // parent is added before the local variables to comply with scoping rules. if (parent!=null) { parent.collectVariableValues(variableValues); } if (variableInstancesMap!=null) { for (String variableId: variableInstancesMap.keySet()) { VariableInstanceImpl variableInstance = variableInstancesMap.get(variableId); variableValues.value(variableId, variableInstance.value, variableInstance.type.getDataType()); } } }
@Override public ActivityInstanceImpl findActivityInstanceByActivityId(String activityDefinitionId) { if (activityDefinitionId==null) { return null; } if (activityDefinitionId.equals(activity.id)) { return this; } return super.findActivityInstanceByActivityId(activityDefinitionId); }
@Override public ActivityInstanceImpl findActivityInstance(String activityInstanceId) { if (activityInstanceId == null) { return null; } if (activityInstanceId.equals(this.id)) { return this; } return super.findActivityInstance(activityInstanceId); }
public void cancel() { super.cancel(); if (updates!=null) { getUpdates().isActivityInstancesChanged = true; getUpdates().isEndStateChanged = true; getUpdates().isEndChanged = true; WorkflowInstanceStore workflowInstanceStore = configuration.get(WorkflowInstanceStore.class); workflowInstanceStore.flushAndUnlock(this); } }
log.debug("Propagating end of " + activityInstance + " to parent " + activityInstance.parent); activityInstance.parent.activityInstanceEnded(activityInstance); activityInstance.workState = null; } else if (activityInstance.workState == null) {
protected void readActivityInstances(ScopeInstanceImpl scopeInstance, BasicDBObject dbScopeInstance, Map<ActivityInstanceImpl, String> allActivityIds) { Map<Object, ActivityInstanceImpl> allActivityInstances = new LinkedHashMap<>(); List<BasicDBObject> dbActivityInstances = readList(dbScopeInstance, ACTIVITY_INSTANCES); if (dbActivityInstances!=null) { for (BasicDBObject dbActivityInstance: dbActivityInstances) { ActivityInstanceImpl activityInstance = readActivityInstance(scopeInstance, dbActivityInstance, allActivityIds); allActivityInstances.put(activityInstance.id, activityInstance); String activityId = readString(dbActivityInstance, ACTIVITY_ID); allActivityIds.put(activityInstance, activityId); scopeInstance.addActivityInstance(activityInstance); } } }
private void readVariableInstances(ScopeInstanceImpl parent, BasicDBObject dbWorkflowInstance) { List<BasicDBObject> dbVariableInstances = readList(dbWorkflowInstance, VARIABLE_INSTANCES); if (dbVariableInstances!=null && !dbVariableInstances.isEmpty()) { for (BasicDBObject dbVariableInstance: dbVariableInstances) { VariableInstance variableInstance = mongoMapper.read(dbVariableInstance, VariableInstance.class); VariableInstanceImpl variableInstanceImpl = new VariableInstanceImpl(); variableInstanceImpl.id = variableInstance.getId(); String variableId = variableInstance.getVariableId(); variableInstanceImpl.variable = findVariableByIdRecurseParents(parent.scope, variableId); if (variableInstanceImpl.variable!=null) { variableInstanceImpl.type = variableInstanceImpl.variable.type; } else { variableInstanceImpl.variable = new VariableImpl(); DataType type = variableInstance.getType(); if (type!=null) { variableInstanceImpl.type = dataTypeService.createDataType(type); } } variableInstanceImpl.value = variableInstance.getValue(); variableInstanceImpl.configuration = configuration; variableInstanceImpl.workflowInstance = parent.workflowInstance; variableInstanceImpl.parent = parent; variableInstanceImpl.workflow = parent.workflow; parent.addVariableInstance(variableInstanceImpl); } } }
public VariableInstanceImpl createVariableInstanceLocal(String variableId, DataTypeImpl dataType) { VariableImpl variable = new VariableImpl(); variable.id = variableId; variable.type = dataType; return createVariableInstanceLocal(variable); }
public VariableValues getVariableValues(WorkflowInstanceId workflowInstanceId, String activityInstanceId) { WorkflowInstanceImpl workflowInstance = workflowInstanceStore.getWorkflowInstanceImplById(workflowInstanceId); ScopeInstanceImpl scopeInstance = getScopeInstance(workflowInstance, activityInstanceId); VariableValues variableValues = new VariableValues(); scopeInstance.collectVariableValues(variableValues); return variableValues; }
public void initializeForEachElement(VariableImpl elementVariableDefinition, Object value) { VariableInstanceImpl elementVariableInstance = createVariableInstanceLocal(elementVariableDefinition); elementVariableInstance.setValue(value); }
/** 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); }