All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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