
org.ow2.bonita.definition.activity.InitialNodeBehaviour Maven / Gradle / Ivy
package org.ow2.bonita.definition.activity;
import java.util.Map;
import org.ow2.bonita.definition.ActivityType;
import org.ow2.bonita.facade.runtime.InstanceState;
import org.ow2.bonita.pvm.Execution;
import org.ow2.bonita.pvm.activity.ActivityExecution;
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;
/**
* Node behaviour for initial node.
* Initial node is a "virtual" node added by bonita.
*
* The default behaviour is a wait state.
* The execution waits for a signal to really start the instance. This way,
* the method that created the instance can update some values in the instance
* (e.g. execution to signal on completion for a subflow instance) before the
* execution is really started.
*
* The instance is recorded as created only after this activity has been signaled.
*
* @author Guillaume Porcher
*
*/
public class InitialNodeBehaviour extends AbstractActivity {
/**
*
*/
private static final long serialVersionUID = -3394221261277776050L;
public InitialNodeBehaviour() {
super("BonitaInit", JoinType.XOR,
SplitType.AND,
ActivityType.route,
null);
}
@Override
protected boolean bodyStartAutomatically() {
return true;
}
@Override
public void execute(final ActivityExecution execution) {
final XpdlExecution xpdlExecution = (XpdlExecution) execution;
xpdlExecution.setCurrentActivityInstanceUUID(
ServiceEnvTool.getUUIDGenerator().
getActivityInstanceUUID(xpdlExecution.getXpdlInstance().getUUID(), this.activityId));
execution.waitForSignal();
}
@Override
public void signal(final ActivityExecution execution, final String signal, final Map parameters) {
final XpdlExecution xpdlExecution = (XpdlExecution) execution;
final XpdlInstance xpdlInstance = xpdlExecution.getXpdlInstance();
xpdlInstance.setInstanceState(InstanceState.STARTED);
final Recorder recorder = ServiceEnvTool.getRecorder();
recorder.recordInstanceStarted(new ProcessInstanceCurrentInfo(
xpdlInstance.getPackageDefinitionUUID(),
xpdlInstance.getProcessDefinitionUUID(),
xpdlInstance.getUUID(),
(xpdlInstance.getParentInstance() != null) ? xpdlInstance.getParentInstance().getUUID() : null,
xpdlExecution.getVariables(),
ServiceEnvTool.getUserId())
);
final ActivityInstanceCurrentInfo activityInstanceCurrentInfo = new ActivityInstanceCurrentInfo(
xpdlInstance.getPackageDefinitionUUID(),
xpdlInstance.getProcessDefinitionUUID(),
xpdlInstance.getUUID(),
xpdlExecution.getCurrentActivityInstanceUUID(),
this.getActivityType(),
this.getActivityId(),
xpdlExecution.getIterationId(),
xpdlExecution.getActivityInstanceId(),
xpdlExecution.getScopeVariables());
recorder.recordEnterActivity(activityInstanceCurrentInfo);
recorder.recordBodyStarted(activityInstanceCurrentInfo);
recorder.recordBodyEnded(activityInstanceCurrentInfo);
executeSplit(execution, false);
}
@Override
protected boolean executeBusinessLogic(final Execution execution) {
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy