Package com.starflow.wf.engine.model

Examples of com.starflow.wf.engine.model.ActivityInst


      String beanName = activityXml.getStartStrategybyAppAction();
     
      try {
        ProcessInstance cloneProcessInstance = new ProcessInstance();
        BeanUtils.copyProperties(event.getProcessInstance(), cloneProcessInstance);
        ActivityInst cloneActivityInst = new ActivityInst();
        BeanUtils.copyProperties(activityInst, cloneActivityInst);
        isStart = executeActivateRule(beanName, cloneProcessInstance, cloneActivityInst);
      } catch (Exception e) {
        throw new ProcessEngineException("环节激活规则逻辑失败", e);
      }
View Full Code Here


   
    //当前流程实例是否为子流程
    long actInstId = processInstance.getActivityInstId();
    if(actInstId != 0) {
      ProcessInstance mainProcess = event.getProcInstFacade().findProcessInstance(processInstance.getParentProcInstId());
      ActivityInst activityInst = event.getActInstRep().findActivityInst(actInstId);
      //异步子流程,不再需要发布结束事件
      if(StarFlowState.ACT_INST_RUNING == activityInst.getCurrentState()) {
        ActivityFinishEvent endEvent = new ActivityFinishEvent(event.getProcessEngine());
        endEvent.setProcessInstance(mainProcess);
        endEvent.setActivityInst(activityInst);
        event.getProcessEngine().getApplicationContext().publishEvent(endEvent);
      }
View Full Code Here

*/
public class ActivityFinishListener extends AbstractProcessListener {
 
  @Override
  public void activityEnd(ActivityFinishEvent event) {
    ActivityInst activityInst = event.getActivityInst();
    //判断环节是否处于运行状态,才可结束该工作项
    if(StarFlowState.ACT_INST_RUNING != activityInst.getCurrentState())
      throw new ProcessEngineException("当前环节(activityInstId="+activityInst.getActivityInstId()+")不处于状态,"+
          "无法完成环节的运行!");
   
    Date nowDate = new Date();
    ProcessEngine processEngine = event.getProcessEngine();
    activityInst.setCurrentState(StarFlowState.ACT_INST_COMPLETED);
    activityInst.setEndTime(nowDate);
   
    ProcessElement processXml = event.getProcessXml();
    ActivityElement activityXml = processXml.getActivitys().get(activityInst.getActivityDefId());
    String actType = activityXml.getType();
   
    //判断当前环节是否可以结束
    boolean completeFlag = isCompleteActivity(activityXml, event);
    if(!completeFlag)
      return ;
   
    TriggerActivityEventUtil.beforeComplete(processEngine, activityXml, activityInst, activityXml.getEvents());
   
    //结束当前环节
    event.getActInstRep().updateActivityStateAndEndTime(activityInst.getActivityInstId(),
        activityInst.getCurrentState(), activityInst.getEndTime());
   
    //未完成工作项自动终止
    if(Constants.ACT_TYPE_MANUL.equalsIgnoreCase(actType) && activityXml.getIsAutoCancel())
      event.getWorkItemRep().updateActWorkItemStateAndFinalTime(activityInst.getActivityInstId(), StarFlowState.WORKITEM_STOPPED, nowDate);
   
    //执行环节结束filter
    for(ProcessFilter filter : processEngine.getProcessFilters()) {
      filter.activityComplete(event);
    }
View Full Code Here

    TriggerProcessEventUtil.afterStart(processEngine, null, processInstance,
        processXml.getEvents());
   
    StartActivityType type = (StartActivityType)ActivityTypeFactory.buildActivityType(Constants.ACT_TYPE_START);
    ActivityElement activityXml = processXml.getActivitys().get(StarFlowNames.ACT_START_ID);
    ActivityInst activityInst = type.createActivity(event, activityXml);
   
    EventUtil.publishActivityStartEvent(event, activityInst, activityXml);
  }
View Full Code Here

public class ActivityCreateListener extends AbstractProcessListener {
  //private static final Log logger = LogFactory.getLog(ActivityStartListener.class);
 
  @Override
  public void activityCreate(ActivityCreateEvent event) {
    ActivityInst activityInst = event.getActivityInst();
   
    String mode = Constants.SPLIT_SINGLE;
   
    List<ActivityElement> nextNodes = new ArrayList<ActivityElement>();

    ActivityElement activityXml = event.getProcessXml().getActivitys().get(activityInst.getActivityDefId());
    mode = activityXml.getSplitMode();;
    nextNodes = findFreeActs(event, event.getProcessXml(), activityXml); //自由流已经指定要启动的环节
    if(nextNodes == null || nextNodes.size() == 0) {
      List<TransitionElement> transitions = activityXml.getAfterTrans();
      nextNodes = findNextActs(event, event.getProcessXml(), transitions, activityXml, mode);
View Full Code Here

   * @param event
   * @param document
   * @return
   */
  private List<ActivityElement> findFreeActs(ActivityCreateEvent event, ProcessElement processXml, ActivityElement activityXml) {
    ActivityInst activityInst = ((ActivityCreateEvent)event).getActivityInst();
    if(!Constants.ACT_TYPE_MANUL.equalsIgnoreCase(activityInst.getActivityType()))
      return null;
   
    boolean isFreeActivity = activityXml.getIsFreeActivity();
    if(!isFreeActivity)
      return null;
View Full Code Here

  @Override
  public void activityRollback(ActivityRollBackEvent event) {
    List<String> actDefIds = event.getActDefIds();
    Date nowDate = new Date();
    for(String actDefId : actDefIds) {
      ActivityInst activityInst = event.getActInstRep().findActivityInstByActDefId(actDefId);
      if(activityInst.getCurrentState() == StarFlowState.ACT_INST_RUNING)
        throw new RollbackEngineException("环节【"+actDefId+"】处于运行状态,无法重启");
     
      event.getActInstRep().updateActivityStateToRunning(activityInst.getActivityInstId(),
          StarFlowState.ACT_INST_RUNING, nowDate);
     
      event.getWorkItemRep().updateActWorkItemStateAndStartTime(activityInst.getActivityInstId(),
          StarFlowState.WORKITEM_RUNNING, nowDate);
    }
  }
View Full Code Here

public class ActivityTerminalListener extends AbstractProcessListener {
 
  @Override
  public void activityTerminal(ActivityTerminalEvent event) {
    ProcessEngine processEngine = event.getProcessEngine();
    ActivityInst activityInst = ((ActivityTerminalEvent)event).getActivityInst();
   
    Date finalTime = new Date();
    event.getWorkItemRep().updateActWorkItemStateAndFinalTime(activityInst.getActivityInstId(), StarFlowState.WORKITEM_STOPPED, finalTime);
    event.getActInstRep().updateActivityStateAndFinalTime(activityInst.getActivityInstId(), StarFlowState.ACT_INST_STOPPED, finalTime);
   
    //执行环节终止filter
    for(ProcessFilter filter : processEngine.getProcessFilters()) {
      filter.activityTerminal(event);
    }
View Full Code Here

public class ActivityStartListener extends AbstractProcessListener {
  private static Logger logger = LoggerFactory.getLogger(ActivityStartListener.class);

  @Override
  public void activityStart(ActivityStartEvent event) {
    ActivityInst activityInst = event.getActivityInst();
    activityInst.setCurrentState(StarFlowState.ACT_INST_RUNING);
    event.getActInstRep().updateActivityStateToRunning(activityInst.getActivityInstId(),
        StarFlowState.ACT_INST_RUNING, new Date());
   
    //进入异常状态,等待人工干预,不继续往下运行
    IHandle handle = ActivityHandlerFactory.buildHandler(activityInst.getActivityType());
    try {
      handle.action(event, activityInst);
    } catch (InterruptStrategyException e) {
      logger.error("非人工环节执行逻辑失败", e);
      return;
    } finally {
      triggerFilterExecuter(event, activityInst);
    }
   
    //流程启动后触发事件
    TriggerActivityEventUtil.afterStart(event.getProcessEngine(), event.getActivityXml(),
        activityInst, event.getActivityXml().getEvents());
   
    if(Constants.ACT_TYPE_SUBPROCESS.equalsIgnoreCase(event.getActivityXml().getType()))
      //TODO 子流程,流程启动者的问题。
      startSubProcess(event, event.getActivityXml().getSubProcess(),
          event.getProcessInstance().getCreator(), activityInst.getActivityInstId());
   
    updateTransCtrlIsUse(event, event.getActivityXml());
    innerFinishAct(event, activityInst);
  }
View Full Code Here

      ProcessInstance processInstance = event.getProcessInstance();
      EventUtil.publishActivityFinishEvent(event, processInstance, activityInst);
     
      //如果是子流程的,且响应父流程的子流程环节是同步执行,需要发布父流程的子流程环节的结束
      if(Constants.FLOW_IS_SUBFLOW.equals(processInstance.getSubFlow())) {
        ActivityInst pActivityInst = event.getActInstRep().findActivityInst(processInstance.getActivityInstId());
        if(pActivityInst.getCurrentState() == StarFlowState.ACT_INST_RUNING) {
          ProcessInstance pProcessInstance = event.getProcInstFacade().findProcessInstance(processInstance.getParentProcInstId());
          EventUtil.publishActivityFinishEvent(event, pProcessInstance, pActivityInst);
        }
      }
    } else if(Constants.ACT_TYPE_TOOLAPP.equalsIgnoreCase(type)) {
View Full Code Here

TOP

Related Classes of com.starflow.wf.engine.model.ActivityInst

Copyright © 2018 www.massapicom. 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.