private static JoinRunTime getJoinRuntime(XpdlExecution xpdlExecution) { return getJoinRunTime(xpdlExecution.getXpdlInstance(), xpdlExecution.getNode()); }
private List<XpdlExecution> getExecOnNode( final XpdlExecution exec, final String nodeName) { Misc.checkArgsNotNull(exec, nodeName); final List<XpdlExecution> res = new ArrayList<XpdlExecution>(); if (exec.getExecutions() == null || exec.getExecutions().isEmpty()) { if (exec.getNode() != null && exec.getNode().getName().equals(nodeName)) { res.add(exec); } } if (exec.getExecutions() != null) { for (final Execution child : exec.getExecutions()) { res.addAll(this.getExecOnNode((XpdlExecution) child, nodeName)); } } return res; }
private XpdlExecution getExecOnNode(XpdlExecution exec, String nodeName, String iterationId, String activityInstanceId) { Misc.checkArgsNotNull(exec, nodeName, iterationId, activityInstanceId); if (exec.getExecutions() == null || exec.getExecutions().isEmpty()) { if (exec.getNode() != null && exec.getNode().getName().equals(nodeName) && exec.getIterationId().equals(iterationId) && exec.getActivityInstanceId().equals(activityInstanceId)) { return exec; } } for (Execution child : exec.getExecutions()) { XpdlExecution found = getExecOnNode((XpdlExecution) child, nodeName, iterationId, activityInstanceId); if (found != null) { return found; } } return null; }
@Override protected void end(XpdlExecution xpdlExecution) { xpdlExecution = (XpdlExecution) xpdlExecution.destroyScope(xpdlExecution.getNode()); xpdlExecution.end(); XpdlExecution parent = xpdlExecution.getParent(); if (parent != null) { parent.removeExecution(xpdlExecution); } } }
@Override protected void end(XpdlExecution xpdlExecution) { xpdlExecution = (XpdlExecution) xpdlExecution.destroyScope(xpdlExecution.getNode()); xpdlExecution.end(); final XpdlExecution parent = xpdlExecution.getParent(); if (parent != null) { parent.removeExecution(xpdlExecution); } } }
/** * @param execution */ private static void cancelJoinXORIncomingTransitions(final XpdlExecution execution) { final NodeImpl currentNode = execution.getNode(); final XpdlInstance instance = execution.getXpdlInstance(); AbstractActivity.cancelJoinXORIncomingTransitions(instance, currentNode, currentNode.getName()); for (final Transition t : currentNode.getIncomingTransitions()) { instance.setTransitionState(t, TransitionState.ABORTED); } }
protected TaskRunTime getTask(final XpdlExecution xpdlExecution) { return new TaskRunTime( new TaskUUID(xpdlExecution.getCurrentActivityInstanceUUID().toString()), xpdlExecution.getNode().getName(), this, xpdlExecution); }
protected void executeSplit(Execution execution, boolean removeScope) { XpdlExecution xpdlExecution = (XpdlExecution) execution; NodeImpl currentNode = xpdlExecution.getNode(); if (LOG.isLoggable(Level.FINE)) { LOG.fine("node = " + currentNode.getName() + " - splitType = "
public void signal(ActivityExecution execution, String signal, Map<String, Object> parameters) { XpdlExecution xpdlExecution = (XpdlExecution) execution; if (BODY_FINISHED.equals(signal)) { end(xpdlExecution); } else if (ACT_INSTANCE_FINISHED.equals(signal)) { xpdlExecution.setWaitingForActivityInstanceNb(xpdlExecution.getWaitingForActivityInstanceNb() - 1); if (xpdlExecution.getWaitingForActivityInstanceNb() == 0) { // TODO: cancel remaining activity instances executeSplit(xpdlExecution, false); } } else if (signal != null && deadlines != null) { for (String deadline : deadlines) { if (deadline.equals(signal)) { Authentication.setUserId("SYSTEM"); // By default, a deadline does not propagate execution xpdlExecution.waitForSignal(); String activityId = xpdlExecution.getNode().getName(); JavaHook javaHook = new JavaHook(signal, JavaHook.Type.onDeadline, true); HookExecutor.executeHook(xpdlExecution, activityId, javaHook); return; } } } }
protected void end(XpdlExecution xpdlExecution) { EnvTool.getRecorder().recordBodyEnded(this, xpdlExecution); if (!XpdlExecution.MAIN_INSTANCE_NAME.equals(xpdlExecution.getActivityInstanceId())) { // TODO: check variable values for transition conditions XpdlExecution activityInstanceExecution = (XpdlExecution) xpdlExecution.destroyScope(xpdlExecution.getNode()); activityInstanceExecution.end(); XpdlExecution parent = activityInstanceExecution.getParent(); parent.removeExecution(activityInstanceExecution); signal(parent, ACT_INSTANCE_FINISHED, null); } else { executeSplit(xpdlExecution, true); } }
protected TaskInstance getTask(XpdlExecution xpdlExecution, ActivityInstance<ActivityBody> activityInstance) { this.taskRuntime = new TaskRunTime(new TaskUUID(activityInstance.getUUID()), xpdlExecution.getNode().getName(), this, xpdlExecution); final TaskUUID taskUUID = taskRuntime.getUUID(); final TaskState state = taskRuntime.getState(); final Date createdDate = new Date(); final Date dueDate = taskRuntime.getDueDate(); return new TaskFullInstanceImpl(taskUUID, state, createdDate, dueDate, EnvTool.getUserId()); }
@Override public void signal(ActivityExecution execution, String signal, Map<String, Object> signalParameters) { XpdlExecution xpdlExecution = (XpdlExecution) execution; if (SUBFLOW_SIGNAL.equals(signal)) { if (outParameters != null) { final Recorder recorder = EnvTool.getRecorder(); ProcessInstanceUUID instanceUUID = xpdlExecution.getXpdlInstance().getUUID(); String activityId = xpdlExecution.getNode().getName(); for (Map.Entry<String, String> parameter : outParameters.entrySet()) { String variableId = parameter.getValue(); Object variableValue = signalParameters.get(parameter.getKey()); execution.setVariable(variableId, variableValue); if (xpdlExecution.getXpdlInstance().getRootExecution().hasVariable(variableId)) { recorder.recordInstanceVariableUpdated(variableId, variableValue, instanceUUID, EnvTool.getUserId()); } else { recorder.recordActivityVariableUpdated(variableId, variableValue, instanceUUID, activityId, xpdlExecution.getIterationId(), xpdlExecution.getActivityInstanceId(), EnvTool.getUserId()); } } } super.signal(xpdlExecution, BODY_FINISHED, null); } else { super.signal(xpdlExecution, signal, signalParameters); } }
public void signal(final ActivityExecution execution, final String signal, final Map<String, Object> parameters) { final XpdlExecution xpdlExecution = (XpdlExecution) execution; if (AbstractActivity.BODY_FINISHED.equals(signal)) { this.end(xpdlExecution); } else if (AbstractActivity.ACT_INSTANCE_FINISHED.equals(signal)) { xpdlExecution.setWaitingForActivityInstanceNb(xpdlExecution.getWaitingForActivityInstanceNb() - 1); if (xpdlExecution.getWaitingForActivityInstanceNb() == 0) { if (xpdlExecution.getExecutions() != null) { for (final OpenExecution execToAbort : new ArrayList<OpenExecution>(xpdlExecution.getExecutions())) { ((XpdlExecution) execToAbort).abort(); } } this.executeSplit(xpdlExecution, false); } } else if (signal != null && this.deadlines != null) { for (final String deadline : this.deadlines) { if (deadline.equals(signal)) { Authentication.setUserId(BonitaConstants.SYSTEM_USER); // By default, a deadline does not propagate execution xpdlExecution.waitForSignal(); final String activityId = xpdlExecution.getNode().getName(); final JavaHook javaHook = new JavaHook(signal, JavaHook.Type.onDeadline, true); EngineEnvTool.getHookExecutor() .executeHook(xpdlExecution, activityId, javaHook); return; } } } }
private void createNewIteration(final XpdlExecution execution) { if (this.iterationDescriptors != null && !this.iterationDescriptors.isEmpty()) { final String iterationUUID = Misc.getUniqueId("it"); execution.setIterationId(iterationUUID); final XpdlInstance instance = execution.getXpdlInstance(); for (final IterationDescriptor it : this.iterationDescriptors) { final NodeInIterationDescriptor nodeDescr = it.getNodeInIterationDescriptor(execution.getNode()); if (nodeDescr != null && nodeDescr.isEntryNode()) { for (final NodeInIterationDescriptor joinNodeDescr : it.getCycleNodes()) { final NodeImpl joinNode = joinNodeDescr.getNode(); for (final Transition tr : joinNode.getIncomingTransitions()) { if (it.containsNode(tr.getSource())) { instance.setTransitionState(tr, TransitionState.READY); } } if (AbstractActivity.isJoinOk(instance, joinNode)) { throw new BonitaRuntimeException("Error in iteration: join " + joinNode.getName() + " has not been reinitialized"); } } } } } }
protected boolean executeJoin(final XpdlExecution execution) { final Transition previousTransition = execution.getPreviousTransition(); final String fromName = previousTransition.getSource().getName(); final TransitionStatus fromTransition = execution.getXpdlInstance().getTransitionStatus(previousTransition); if (fromTransition.getState().equals(TransitionState.ARRIVED)) { throw new BonitaRuntimeException("transition " + fromName + "->" + this.activityId + " is already arrived in this Join."); } if (fromTransition.getState().equals(TransitionState.TAKEN)) { fromTransition.setState(TransitionState.ARRIVED); } return AbstractActivity.isJoinOk(execution.getXpdlInstance(), execution.getNode()); }
protected void end(final XpdlExecution xpdlExecution) { final ActivityInstanceCurrentInfo activityInstanceCurrentInfo = new ActivityInstanceCurrentInfo( xpdlExecution.getXpdlInstance().getPackageDefinitionUUID(), xpdlExecution.getXpdlInstance().getProcessDefinitionUUID(), xpdlExecution.getXpdlInstance().getUUID(), xpdlExecution.getCurrentActivityInstanceUUID(), this.getActivityType(), this.getActivityId(), xpdlExecution.getIterationId(), xpdlExecution.getActivityInstanceId(), xpdlExecution.getScopeVariables()); ServiceEnvTool.getRecorder().recordBodyEnded(activityInstanceCurrentInfo); if (!XpdlExecution.MAIN_INSTANCE_NAME.equals(xpdlExecution.getActivityInstanceId())) { final XpdlExecution activityInstanceExecution = (XpdlExecution) xpdlExecution.destroyScope(xpdlExecution.getNode()); activityInstanceExecution.end(); final XpdlExecution parent = activityInstanceExecution.getParent(); parent.removeExecution(activityInstanceExecution); this.signal(parent, AbstractActivity.ACT_INSTANCE_FINISHED, null); } else { this.executeSplit(xpdlExecution, true); } }
final AbstractActivity activity = (AbstractActivity) this.getNode().getBehaviour();
execution.getNode().getName(), execution.getIterationId(), execution.getActivityInstanceId(), EnvTool.getUserId());
public void recordEnterActivity(final AbstractActivity activity, final XpdlExecution xpdlExecution) { Misc.checkArgsNotNull(activity, xpdlExecution); final NodeImpl node = xpdlExecution.getNode(); XpdlInstance instance = xpdlExecution.getXpdlInstance(); final String id = node.getName(); final PackageDefinitionUUID packageUUID = instance.getPackageDefinitionUUID(); final ProcessDefinitionUUID processUUID = instance.getProcessDefinitionUUID(); final ProcessInstanceUUID instanceUUID = instance.getUUID(); final String iterationId = xpdlExecution.getIterationId(); final String activityInstanceId = xpdlExecution.getActivityInstanceId(); final ActivityFullInstanceImpl<ActivityBody> activityRecord = new ActivityFullInstanceImpl<ActivityBody>( new ActivityInstanceUUID(instanceUUID, activity.getActivityId(), EnvTool.getRepository().getNextActivityInstanceNb(instanceUUID, activity.getActivityId())), id, packageUUID, processUUID, instanceUUID, iterationId, activityInstanceId); ActivityBody body = activity.getBody(xpdlExecution, activityRecord); activityRecord.setBody(body); ProcessFullInstance processInstance = getProcessInstance(instanceUUID); processInstance.addActivity(activityRecord); activityRecord.setVariablesBeforeReady(xpdlExecution.getScopeVariables()); }
final AbstractActivity activity = (AbstractActivity) this.getNode().getBehaviour();