Package org.uengine.kernel

Source Code of org.uengine.kernel.EndActivity

package org.uengine.kernel;

import java.util.Hashtable;
import java.util.Map;

import org.metaworks.FieldDescriptor;
import org.metaworks.Type;
import org.metaworks.inputter.RadioInput;
import org.uengine.persistence.processinstance.ProcessInstanceDAO;
import org.uengine.persistence.processinstance.ProcessInstanceDAOType;

/**
* @author Jinyoung Jang
*/

public class EndActivity extends DefaultActivity{
  private static final long serialVersionUID = org.uengine.kernel.GlobalContext.SERIALIZATION_UID;
 
  public final static int STATUS_STOPPED    = 1;
  public final static int STATUS_CANCELLED  = 2;
  public final static int STATUS_FAULT    = 3;
  public final static int STATUS_COMPLETED  = 4;

  public static void metaworksCallback_changeMetadata(Type type){
    FieldDescriptor fd = null;
   
    fd = type.getFieldDescriptor("Status");
    fd.setDisplayName("Terminate Status");
    fd.setInputter(
      new RadioInput(
        new String[] {
            "Stopped",
            "Cancelled",
            "Failed",
            "Completed"
        },
        new Object[] {
            EndActivity.STATUS_STOPPED,
            EndActivity.STATUS_CANCELLED,
            EndActivity.STATUS_FAULT,
            EndActivity.STATUS_COMPLETED
        }
      )
    );
   
    type.removeFieldDescriptor("TerminateStatus");
  }
 
  boolean escalate = false;
    public boolean isEscalate() {
      return escalate;
    }
    public void setEscalate(boolean escalate) {
      this.escalate = escalate;
    }
   
  int escalationLevel;
    public int getEscalationLevel() {
      return escalationLevel;
    }
    public void setEscalationLevel(int escalationLevel) {
      this.escalationLevel = escalationLevel;
   
 
  boolean terminateRunAndForgetSubProcess = false;
    public boolean isTerminateRunAndForgetSubProcess() {
      return terminateRunAndForgetSubProcess;
    }
    public void setTerminateRunAndForgetSubProcess(boolean terminateRunAndForgetSubProcess) {
      this.terminateRunAndForgetSubProcess = terminateRunAndForgetSubProcess;
    }
   
  /**
   * @deprecated rather use status
   */
  @Deprecated
  String terminateStatus;
    @Deprecated
    public String getTerminateStatus() {
      return terminateStatus;
    }
    @Deprecated
    public void setTerminateStatus(String terminateStatus) {
      this.terminateStatus = terminateStatus;
    }
 
  int status;
    public int getStatus() {
      if (this.status == 0 ) {
        return EndActivity.STATUS_STOPPED;
      }
      return status;
    }
    public void setStatus(int status) {
      this.status = status;
    }
   
  public EndActivity() {
    super("terminate");
  }

  public void executeActivity(ProcessInstance instance) throws Exception{
   
    String terminateStatus = null;
    if (this.getStatus() == EndActivity.STATUS_STOPPED) {
      terminateStatus = Activity.STATUS_STOPPED;
    } else if (this.getStatus() == EndActivity.STATUS_CANCELLED) {
      terminateStatus = Activity.STATUS_CANCELLED;
    } else if (this.getStatus() == EndActivity.STATUS_FAULT) {
      terminateStatus = Activity.STATUS_FAULT;
    } else if (this.getStatus() == EndActivity.STATUS_COMPLETED) {
      terminateStatus = Activity.STATUS_COMPLETED;
    }
   
    if ((isEscalate() || getEscalationLevel() > 0) && instance.isSubProcess()) {
      Long targetProcessInstanceId;
      ProcessInstance targetPI = null;
     
      if (!isEscalate()) {
        targetPI = instance;
        for (int escalatedCnt = getEscalationLevel(); escalatedCnt > -1; escalatedCnt--) {
          targetPI = instance.getMainProcessInstance();
          if (targetPI == null) {
            throw new UEngineException("Can't find the parent process located in the " + getEscalationLevel() + "th higher level. Check the Process Definition.");
          }
        }
        targetProcessInstanceId = new Long(targetPI.getInstanceId());
      } else {
        targetProcessInstanceId = new Long(instance.getRootProcessInstanceId());
      }
     
      ProcessInstanceDAOType piDAOF = ProcessInstanceDAOType.getInstance(instance.getProcessTransactionContext());
      ProcessInstanceDAO piDAO = piDAO = piDAOF.getSiblingProcessInstances(targetProcessInstanceId, this.isTerminateRunAndForgetSubProcess());

      Hashtable options = new Hashtable();
      options.put("ptc", instance.getProcessTransactionContext());

      while (piDAO.next()) {
        ProcessInstance theInstance = ProcessInstance.create().getInstance(piDAO.getInstId().toString(), options);
        theInstance.stop(terminateStatus);
        if (targetPI != null && targetPI.isSubProcess()) {
          targetPI.getProcessDefinition().returnToMainProcess(targetPI);
        }
      }
     
    } else {
      instance.stop(terminateStatus);
      if (instance != null && instance.isSubProcess()) {
        instance.getProcessDefinition().returnToMainProcess(instance);
      }
    }
  }
 
  @Override
  public ValidationContext validate(Map options) {
    ValidationContext vc = super.validate(options);

    if (this.getStatus() == 0) {
      vc.add("Select a terminate Status");
    }

    return vc;
  }

}
TOP

Related Classes of org.uengine.kernel.EndActivity

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.