Package org.uengine.kernel

Source Code of org.uengine.kernel.HumanApprovalActivity

package org.uengine.kernel;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.uengine.contexts.TextContext;
import org.uengine.persistence.dao.DAOFactory;
import org.uengine.webservices.worklist.DefaultWorkList;

/**
* TODO Insert type comment for FormApprovalActivity.
*
* @author <a href="mailto:bigmahler@users.sourceforge.net">Jong-Uk Jeong</a>
* @version $Id: HumanApprovalActivity.java,v 1.2 2010/08/19 07:24:49 erim79 Exp $
* @version $Revision: 1.2 $
*/
public class HumanApprovalActivity extends HumanActivity {
 
  private static final long serialVersionUID = GlobalContext.SERIALIZATION_UID;
 
  public final static String KEY_APPR_STATUS = "KEY_APPR_STATUS";
  public final static String SIGN_DRAFT = "SIGN_DRAFT";
  public final static String SIGN_APPROVED = "SIGN_APPROVED";
  public final static String SIGN_ARBITRARY_APPROVED = "SIGN_ARBITRARY_APPROVED";
  public final static String SIGN_REJECT = "SIGN_REJECT";
 
  public final static String APPROVALTYPE_POST_APPROVAL = "POST_APPROVAL";
  public final static String APPROVALTYPE_ARBITRARY_APPROVAL = "ARBITRARY_APPROVAL";
  public final static String APPROVALTYPE_APPROVAL = "APPROVAL";
  public final static String APPROVALTYPE_CONSENT = "CONSENT";
 
  public HumanApprovalActivity(){
    setName("HumanApproval");
    setTool("approvalHandlers/humanApprovalHandler");
  }
 
  public String getTool() {
    return super.getTool();
    }

  public Map createParameter(ProcessInstance instance) throws Exception {
    // TODO Auto-generated method stub
    Map parameterMap = super.createParameter(instance);
    String trcTag="";
    Activity parent = getParentActivity();
   
    while(true){
      if(parent instanceof HumanApprovalLineActivity ){
        trcTag = parent.getTracingTag();
        break;
      }else{
        parent = parent.getParentActivity();
        if(parent == null) break;
      }
    }

   
    parameterMap.put("approvalLineActivityTT",trcTag );
       
    return parameterMap;
  }

  protected RoleMapping getActualMapping(ProcessInstance instance) throws Exception {
    // TODO Auto-generated method stub
    if(getApprover(instance)==null) return super.getActualMapping(instance);
   
    return getApprover(instance);
  }
 
  protected String createApproverRoleName(){
    if(role!=null) return role.getName();
    return "approver_"+getApprovalLineActivity().getTracingTag()+"_"+getTracingTag();
  }
 
  RoleMapping approver;
    public RoleMapping getApprover(ProcessInstance instance) {
      RoleMapping rm;
      try {
        rm = instance.getRoleMapping(createApproverRoleName());
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
     
      if(rm != null)
        return rm;
      else
        return approver;
    }
    public void setApprover(ProcessInstance instance, RoleMapping approver) {
      this.approver = approver;
      try {
        instance.putRoleMapping(createApproverRoleName(), approver);
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }

  public Role getRole() {
    return approver==null ? super.getRole() : new Role(){
     
      public TextContext getDisplayName() {
        TextContext tc = TextContext.createInstance();
       
        tc.setText(createApproverRoleName());
        return tc;
      }

      public RoleMapping getMapping(ProcessInstance inst, String tracingTag) throws Exception {
       
        return getApprover(inst);
      }
     
    };
  }
  boolean isViewMode=false;
    public boolean isViewMode() {
      return isViewMode;
    }
 
    public void setViewMode(boolean isViewMode) {
      this.isViewMode = isViewMode;
    }

  public void arbitraryApprove(ProcessInstance instance) throws Exception{
    setApprovalStatus(instance, SIGN_ARBITRARY_APPROVED);
   
    String taskId = getTaskIds(instance)[0];   
    KeyedParameter[] parameters = new KeyedParameter[]{};   
    instance.getWorkList().completeWorkItem(taskId, parameters, instance.getProcessTransactionContext());
    setEndTime(instance, GlobalContext.getNow(instance.getProcessTransactionContext()));
   
    getApprovalLineActivity().fireComplete(instance);
   
    EventMessagePayload emp = new EventMessagePayload();
    emp.setTriggerTracingTag(getTracingTag());
    getApprovalLineActivity().fireEventHandlers(instance, EventHandler.TRIGGERING_BY_ARBITRARYFINISHED, emp);
  }
 
  public void rejectApprove(ProcessInstance instance) throws Exception{
    setApprovalStatus(instance, SIGN_REJECT);
   
    int loopingOption = getApprovalLineActivity().getLoopingOption();
   
    String taskId = getTaskIds(instance)[0];   
    KeyedParameter[] parameters = new KeyedParameter[]{};   
    instance.getWorkList().completeWorkItem(taskId, parameters, instance.getProcessTransactionContext());

    if(loopingOption == HumanApprovalLineActivity.LOOPINGOPTION_AUTO || loopingOption == HumanApprovalLineActivity.LOOPINGOPTION_REPEATONREJECT){
      getApprovalLineActivity().getDraftActivity().compensateToThis(instance);
    }else {
      setEndTime(instance, GlobalContext.getNow(instance.getProcessTransactionContext()));
     
//      동의시 상태 관리를 위하여 추가된 소스
      if (this.getParentActivity().getClass() == AllActivity.class) {
        Vector<HumanApprovalActivity> faActs = ((AllActivity)this.getParentActivity()).getChildActivities();
        for (HumanApprovalActivity faAct : faActs) {
          if (Activity.STATUS_RUNNING.equals(faAct.getStatus(instance)) && !this.getTracingTag().equals(faAct.getTracingTag())) {
            faAct.cancelWorkItem(instance, Activity.STATUS_CANCELLED);
            faAct.setStatus(instance, Activity.STATUS_CANCELLED);
          }
        }
        this.getParentActivity().fireComplete(instance);
      } else {
        getApprovalLineActivity().fireComplete(instance);
      }
     
//      원본 소스
//      getApprovalLineActivity().fireComplete(instance);     
    }

    EventMessagePayload emp = new EventMessagePayload();
    emp.setTriggerTracingTag(getTracingTag());
    getApprovalLineActivity().fireEventHandlers(instance, EventHandler.TRIGGERING_BY_REJECTED, emp);
  }
 
  public void setApprovalStatus(ProcessInstance instance, String status) throws Exception{
    instance.setProperty(getTracingTag(), KEY_APPR_STATUS, status);
    getApprovalLineActivity().setApprovalLineStatus(instance, status);
  }
 
  public String getApprovalStatus(ProcessInstance instance) throws Exception{
    if(instance==null) return null;
   
    return (String)instance.getProperty(getTracingTag(), KEY_APPR_STATUS);
  }
 
  HumanApprovalLineActivity humanApprovalLineActivity;
  public HumanApprovalLineActivity getApprovalLineActivity() {
    if (humanApprovalLineActivity != null) {
      //return humanApprovalLineActivity;
    }

    Activity tracing = this;

    do {
      if (HumanApprovalLineActivity.class.isAssignableFrom(tracing.getClass())) {
        humanApprovalLineActivity = (HumanApprovalLineActivity) tracing;

        return humanApprovalLineActivity;
      }

      tracing = tracing.getParentActivity();
    } while (tracing != null);

    return null;
  }

  protected void afterComplete(ProcessInstance instance) throws Exception {
    //is Draft
    if(this == getApprovalLineActivity().getDraftActivity()){
      setApprovalStatus(instance, SIGN_DRAFT);
    //is approve
    }else{
      if(!isNotificationWorkitem())
        setApprovalStatus(instance, SIGN_APPROVED);
    }
    super.afterComplete(instance);
   
    EventMessagePayload emp = new EventMessagePayload();
    emp.setTriggerTracingTag(getTracingTag());

    if(this == getApprovalLineActivity().getDraftActivity()){
      getApprovalLineActivity().fireEventHandlers(instance, EventHandler.TRIGGERING_BY_DRAFTED, emp);
    }else{
      getApprovalLineActivity().fireEventHandlers(instance, EventHandler.TRIGGERING_BY_APPROVED, emp);
    }
  }

  boolean isArbitraryApprovable;
    public boolean isArbitraryApprovable() {
      return isArbitraryApprovable;
    }
    public void setArbitraryApprovable(boolean isArbitraryApprovable) {
      this.isArbitraryApprovable = isArbitraryApprovable;
    }

}
TOP

Related Classes of org.uengine.kernel.HumanApprovalActivity

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.