Package com.google.code.lightssh.project.workflow.service

Source Code of com.google.code.lightssh.project.workflow.service.BusinessHookHandler

package com.google.code.lightssh.project.workflow.service;

import java.util.Map;

import javax.annotation.Resource;

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.repository.ProcessDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.google.code.lightssh.project.util.constant.WorkflowConstant;
import com.google.code.lightssh.project.workflow.model.ExecutionType;

/**
*
* @author Aspen
* @date 2013-8-28
*
*/
@Component("businessHookHandler")
public class BusinessHookHandler implements ExecutionListener{

  private static final long serialVersionUID = -600379525468276973L;
 
  private static Logger log = LoggerFactory.getLogger(BusinessHookHandler.class);
 
  @Resource(name="workflowManager")
  private WorkflowManager workflowManager;
 
  /**
   * 工作流业务实现Map
   */
  @Resource(name="workflowBizHookMap")
  private Map<String,BusinessManager> workflowBizHookMap;
 
  /**
   * 获取业务处理类
   */
  protected BusinessManager getBizManager( String procDefKey ){
    if( workflowBizHookMap == null ){
      log.warn("工作流业务处理类为空!");
      return null;
    }
   
    BusinessManager mgr = workflowBizHookMap.get(procDefKey);
    if( mgr == null )
      log.warn("工作流[{}]业务处理类未定义!",procDefKey);
   
    return mgr;
  }
 
  @Override
  public void notify(DelegateExecution execution) throws Exception {
    String procDefId = execution.getProcessDefinitionId();
    String procInstId = execution.getProcessInstanceId();
    String bizKey = execution.getProcessBusinessKey();
   
    log.debug("流程挂钩业务处理,流程定义Id[{}],业务关联Key[{}]",procDefId,bizKey);
   
    ProcessDefinition procDef = workflowManager.getProcessDefinition(procDefId);
    if( procDef == null ){
      log.error("工作流定义[{}]不存在!",procDefId);
      return;
    }
   
    String procDefKey = procDef.getKey(); //流程定义Key
    BusinessManager bizMgr = getBizManager( procDefKey );
   
    Object motion = execution.getVariable(
        WorkflowConstant.TASK_ACTIOIN_VARIABLE_NAME );
   
    log.debug("流程挂钩业务处理,流程实例Id[{}],业务Key[{}],Activity名称[{}],参数[{}]=[{}]",
        new Object[]{procInstId,bizKey,execution.getCurrentActivityName()
            ,WorkflowConstant.TASK_ACTIOIN_VARIABLE_NAME,motion});
   
    ExecutionType type = null;
    if( motion != null )
      type = ExecutionType.valueOf(motion.toString());
   
    if( bizMgr != null )
      bizMgr.process(type,procDefKey,procInstId,bizKey);
  }

}
TOP

Related Classes of com.google.code.lightssh.project.workflow.service.BusinessHookHandler

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.