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); } }
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; } } } }
protected void skip(final Execution internalExecution) { final ActivityDefinition activity = internalExecution.getNode(); if (activity.getDynamicExecutionSummary() != null) { try { if (GroovyExpression.isGroovyExpression(activity.getDynamicExecutionSummary())) { final Object dynamicExecutionSummary = GroovyUtil.evaluate(activity.getDynamicExecutionSummary(), null, internalExecution.getActivityInstanceUUID(), false, false); if (dynamicExecutionSummary != null) { internalExecution.getActivityInstance().setDynamicExecutionSummary(dynamicExecutionSummary.toString()); } } else { internalExecution.getActivityInstance().setDynamicExecutionSummary(activity.getDynamicExecutionSummary()); } } catch (final Exception e) { throw new BonitaWrapperException(new BonitaRuntimeException("Error while ending execution: " + activity.getDynamicExecutionSummary(), e)); } } if (activity.getMultiInstantiationDefinition() != null || activity.getMultipleInstancesInstantiator() != null) { removeChildrenActivityInstances(internalExecution); terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, false); } else { terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, true); } }
} else { terminateInstanceIfNoOutgoingTransitions(execution); executeSplit(execution, false);
removeChildrenActivityInstances(internalExecution); terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, false); endChildrenActivityInstances(internalExecution); terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, false);
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); } }
} else { terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, true);
} else { terminateInstanceIfNoOutgoingTransitions(internalExecution); executeSplit(internalExecution, true);