
org.ow2.bonita.definition.activity.EndingNodeBehaviour Maven / Gradle / Ivy
package org.ow2.bonita.definition.activity;
import java.util.HashMap;
import java.util.Map;
import org.ow2.bonita.facade.def.majorElement.ActivityDefinition;
import org.ow2.bonita.facade.runtime.ActivityInstance;
import org.ow2.bonita.facade.runtime.InstanceState;
import org.ow2.bonita.facade.runtime.ProcessInstance;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.pvm.Execution;
import org.ow2.bonita.runtime.InternalExecution;
import org.ow2.bonita.runtime.InternalInstance;
import org.ow2.bonita.services.Querier;
import org.ow2.bonita.services.Recorder;
import org.ow2.bonita.util.EnvTool;
public class EndingNodeBehaviour extends AbstractActivity {
/**
*
*/
private static final long serialVersionUID = 5317011615783376030L;
protected EndingNodeBehaviour() {}
public EndingNodeBehaviour(final ActivityDefinition activityDef) {
super(activityDef);
}
@Override
protected boolean bodyStartAutomatically() {
return true;
}
@Override
protected boolean executeBusinessLogic(final Execution execution) {
final InternalExecution internalExecution = (InternalExecution) execution;
final InternalInstance instance = internalExecution.getInstance();
instance.setInstanceState(InstanceState.FINISHED);
final Recorder recorder = EnvTool.getRecorder();
recorder.recordBodyEnded(internalExecution.getCurrentActivityInstanceUUID());
recorder.recordInstanceEnded(instance.getUUID(), EnvTool.getUserId());
final InternalExecution execToSignal = instance.getExecutionToSignal();
if (execToSignal != null) {
// We are in a subflow, create map of output parameters to signal parent instance
InternalExecution exec = (InternalExecution)internalExecution;
ProcessInstanceUUID instanceUUID = exec.getInstance().getUUID();
Querier journal = EnvTool.getJournalQueriers();
ActivityInstance activityInstance = journal.getActivityInstance(instanceUUID, exec.getNodeName(), exec.getIterationId(), exec.getActivityInstanceId());
ProcessInstance inst = journal.getProcessInstance(instanceUUID);
final Map activityVars = activityInstance.getLastKnownVariableValues();
final Map instanceVars = inst.getLastKnownVariableValues();
final Map allVars = new HashMap();
if (instanceVars != null) {
allVars.putAll(instanceVars);
}
if (activityVars != null) {
allVars.putAll(activityVars);
}
execToSignal.signal(SubFlow.SUBFLOW_SIGNAL, allVars);
instance.setExecutionToSignal(null);
} else {
// We are in main instance -> finish
instance.finish();
}
return true;
}
@Override
protected void end(InternalExecution internalExecution) {
internalExecution = (InternalExecution) internalExecution.destroyScope(internalExecution.getNode());
internalExecution.end();
final InternalExecution parent = internalExecution.getParent();
if (parent != null) {
parent.removeExecution(internalExecution);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy