
org.ow2.bonita.definition.activity.EndingNodeBehaviour Maven / Gradle / Ivy
package org.ow2.bonita.definition.activity;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.ow2.bonita.definition.ActivityType;
import org.ow2.bonita.definition.ProcessParameter;
import org.ow2.bonita.definition.ProcessParameter.ParameterType;
import org.ow2.bonita.facade.runtime.InstanceState;
import org.ow2.bonita.pvm.Execution;
import org.ow2.bonita.runtime.XpdlExecution;
import org.ow2.bonita.runtime.XpdlInstance;
import org.ow2.bonita.services.Recorder;
import org.ow2.bonita.services.info.ActivityInstanceCurrentInfo;
import org.ow2.bonita.services.info.ProcessInstanceCurrentInfo;
import org.ow2.bonita.services.util.ServiceEnvTool;
public class EndingNodeBehaviour extends AbstractActivity {
/**
*
*/
private static final long serialVersionUID = 5317011615783376030L;
public EndingNodeBehaviour() {
super("BonitaEnd", JoinType.XOR, SplitType.AND, ActivityType.route, null);
}
@Override
protected boolean bodyStartAutomatically() {
return true;
}
@Override
protected boolean executeBusinessLogic(final Execution execution) {
final XpdlExecution xpdlExecution = (XpdlExecution) execution;
final XpdlInstance xpdlInstance = xpdlExecution.getXpdlInstance();
xpdlInstance.setInstanceState(InstanceState.FINISHED);
final Recorder recorder = ServiceEnvTool.getRecorder();
final ActivityInstanceCurrentInfo activityInstanceCurrentInfo = new ActivityInstanceCurrentInfo(
xpdlInstance.getPackageDefinitionUUID(),
xpdlInstance.getProcessDefinitionUUID(),
xpdlInstance.getUUID(),
xpdlExecution.getCurrentActivityInstanceUUID(),
this.getActivityType(),
this.getActivityId(),
xpdlExecution.getIterationId(),
xpdlExecution.getActivityInstanceId(),
xpdlExecution.getScopeVariables());
recorder.recordBodyEnded(activityInstanceCurrentInfo);
recorder.recordInstanceEnded(new ProcessInstanceCurrentInfo(
xpdlInstance.getPackageDefinitionUUID(),
xpdlInstance.getProcessDefinitionUUID(),
xpdlInstance.getUUID(),
(xpdlInstance.getParentInstance() != null) ? xpdlInstance.getParentInstance().getUUID() : null,
xpdlExecution.getVariables(),
ServiceEnvTool.getUserId())
);
final XpdlExecution execToSignal = xpdlInstance.getExecutionToSignal();
if (execToSignal != null) {
// We are in a subflow, create map of output parameters to signal parent instance
Map parameterValues = null;
final List processParameters = xpdlExecution.getProcessDefinition().getParameters();
if (processParameters != null) {
parameterValues = new HashMap();
for (final ProcessParameter processParameter : processParameters) {
if (processParameter.getType().equals(ParameterType.OUT)
||
processParameter.getType().equals(ParameterType.INOUT)
) {
final String parameterName = processParameter.getName();
parameterValues.put(parameterName, xpdlExecution.getVariable(parameterName));
}
}
}
execToSignal.signal(SubFlow.SUBFLOW_SIGNAL, parameterValues);
xpdlInstance.setExecutionToSignal(null);
} else {
// We are in main instance -> finish
xpdlInstance.finish();
}
return true;
}
@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);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy