Package com.starflow.wf.engine.model.elements

Examples of com.starflow.wf.engine.model.elements.ActivityElement


   * @param event
   * @return
   */
  public static boolean isStartActivity(AbstractFlowEvent event, ActivityInst activityInst) {
    boolean isStart = true;
    ActivityElement activityXml = event.getProcessXml().getActivitys().get(activityInst.getActivityDefId());
   
    if(logger.isDebugEnabled()) {
      logger.debug("环节【{}】启动规则:{}", activityXml.getName(), activityXml.getActivateRuleType());
    }
   
    if(Constants.ACT_ACTIVATE_RULE_WAIT.equalsIgnoreCase(activityXml.getActivateRuleType()))
      isStart = false;
    else if(Constants.ACT_ACTIVATE_RULE_LOGIC.equalsIgnoreCase(activityXml.getActivateRuleType())) {
      String beanName = activityXml.getStartStrategybyAppAction();
     
      try {
        ProcessInstance cloneProcessInstance = new ProcessInstance();
        BeanUtils.copyProperties(event.getProcessInstance(), cloneProcessInstance);
        ActivityInst cloneActivityInst = new ActivityInst();
View Full Code Here


    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);
    }
   
    TriggerActivityEventUtil.afterComplete(processEngine, activityXml, activityInst, activityXml.getEvents());
   
    publishEvent(event, processEngine, actType);
  }
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

   
    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);
    }
   
    //查找当前环节的分支策略
    SplitMode split = SplitModeFactory.buildSplitStrategy(mode);
View Full Code Here

      TransitionElement defaultTransition = findTransitonsForJexl(event, processXml,
          transitions, nextNodes, true);
     
      if(nextNodes.size() ==0 ) {
        String _to = defaultTransition.getTo();
        ActivityElement _e = processXml.getActivitys().get(_to);
        nextNodes.add(_e);
      }
    } else if(Constants.SPLIT_MULTI.equalsIgnoreCase(mode)) {//多路分支
      // (1) 如果连接线上取“默认值”,那么由此连接线所指的后继活动会被触发;
      // (2) 如果连接线上的条件满足,那么由此连接线所指的后继活动会被触发。
      TransitionElement defaultTransition = findTransitonsForJexl(event, processXml,
          transitions, nextNodes, false);
     
      if(defaultTransition != null) {
        String _to = defaultTransition.getTo();
        ActivityElement _e = processXml.getActivitys().get(_to);
        nextNodes.add(_e);
      }
    } else if(Constants.SPLIT_ALL.equalsIgnoreCase(mode)) {//全部分支
      //表示该活动结束后它的所有后继活动将同时被触发。
      for(TransitionElement tranEl : transitions) {
        String _to = tranEl.getTo();
        ActivityElement _e = processXml.getActivitys().get(_to);
        nextNodes.add(_e);
      }
    }
    return nextNodes;
  }
View Full Code Here

      });
    }
   
    for(TransitionElement tranEl : tranEls) {
      String _to = tranEl.getTo();
      ActivityElement _e = processXml.getActivitys().get(_to);
      nextNodes.add(_e);
    }
    return defaultTransition;
  }
View Full Code Here

    long processInstId = event.getProcessInstance().getProcessInstId();
    String activityDefId = event.getPreActivityXml().getId();
    List<String> actDefIds =  (List<String>)relaDataManager.getNextFreeActs(processInstId, activityDefId);
    List<ActivityElement> nextNodes = new ArrayList<ActivityElement>();
    for(String actDefId : actDefIds) {
      ActivityElement _e = processXml.getActivitys().get(actDefId);
      nextNodes.add(_e);
    }
   
    return nextNodes;
  }
View Full Code Here

* @version 1.0
*/
public class ToolAppHandle extends BaseHandle {

  public void action(final ActivityStartEvent event, final ActivityInst activityInst) {
    ActivityElement activityXml = event.getProcessXml().getActivitys().get(activityInst.getActivityDefId());
    String beanName = activityXml.getExecuteAction();
    if(StringUtils.hasText(beanName)) {
      IAction action = new Action(beanName);
      action(event, activityInst, activityXml, action);
    } else {
      logger.warn("自动环节【{}】没有设置执行逻辑", activityXml.getName());
    }
  }
View Full Code Here

   
    if(activityXmls.size()<1)
      throw new ProcessEngineException("没有满足条件的分支节点,无法创建下一环节");
   
    //单一分支,只取第一个满足条件的分支环节
    ActivityElement activityXml = activityXmls.get(0);
    String actType = activityXml.getType();
    ActivityType type = ActivityTypeFactory.buildActivityType(actType);
   
    if(isStartAct(event, activityXml)) {
      ActivityInst activityInst = type.createActivity(event, activityXml);
      if(ActivityStartRuleUtil.isStartActivity(event, activityInst))
View Full Code Here

    List<Element> actEls = null;
    String _xpath = "/ProcessDefine/Activitys/Activity";
    actEls = document.selectNodes(_xpath);
   
    for(Element actEl : actEls) {
      ActivityElement activityXml = new ActivityElement();
      String id = NodeUtil.getNodeAttrValue(actEl, StarFlowNames.ACT_ATTR_ID);
      activityXml.setId(id);
      String type = NodeUtil.getNodeAttrValue(actEl, StarFlowNames.ACT_ATTR_TYPE);
      activityXml.setType(type);
      activityXml.setName(NodeUtil.getNodeAttrValue(actEl, StarFlowNames.ACT_ATTR_NAME));
      activityXml.setDescription(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_DESC));
     
      if(Constants.ACT_TYPE_START.equalsIgnoreCase(type)) {//开始
        activityXml.setSplitMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_SPLIT));
      } else if(Constants.ACT_TYPE_END.equalsIgnoreCase(type)) {//结束
        activityXml.setJoinMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_JOIN));
        activityXml.setActivateRuleType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_ACTIVATE_RULE_TYPE));
        activityXml.setStartStrategybyAppAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_STARTSTRATEGYBYAPPACTION));
      } else if(Constants.ACT_TYPE_TOOLAPP.equalsIgnoreCase(type)) {//自动
        activityXml.setFinishType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_AUTO_FINSISH_TYPE));
        activityXml.setInvokePattern(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_AUTO_INVOKE_PATTERN));
        activityXml.setTransactionType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_AUTO_TRANSACTION_TYPE));
        activityXml.setExceptionStrategy(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_EXCEPTION_STRATEGY));
        activityXml.setExceptionAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_EXCEPTION_ACTION));
        activityXml.setExecuteAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_AUTO_EXEC_ACTION));
        activityXml.setJoinMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_JOIN));
        activityXml.setSplitMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_SPLIT));
        activityXml.setActivateRuleType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_ACTIVATE_RULE_TYPE));
        activityXml.setStartStrategybyAppAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_STARTSTRATEGYBYAPPACTION));
        activityXml.setEvents(NodeUtil.getTriggerEvents(actEl));
        activityXml.setProperties(NodeUtil.getExtProperties(actEl));
      } else if(Constants.ACT_TYPE_SUBPROCESS.equalsIgnoreCase(type)) {//子流程
        activityXml.setSubProcess(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_SUBPROCESS));
        activityXml.setSpInvokePattern(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_SP_INVOKE_PATTERN));
        activityXml.setJoinMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_JOIN));
        activityXml.setSplitMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_SPLIT));
        activityXml.setActivateRuleType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_ACTIVATE_RULE_TYPE));
        activityXml.setStartStrategybyAppAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_STARTSTRATEGYBYAPPACTION));
        activityXml.setEvents(NodeUtil.getTriggerEvents(actEl));
      } else if(Constants.ACT_TYPE_MANUL.equalsIgnoreCase(type)) {//人工环节
        activityXml.setParticipantType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_PARTICI_MODE));
        activityXml.setIsAllowAppointParticipants(NodeUtil.getNodeBooleanValue(actEl, StarFlowNames.ACT_CHILD_PARTICI_IS_ALLOW_APPOINT));
        activityXml.setParticiLogic(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_PARTICI_LOGIC));
        activityXml.setParticiSpecActID(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_PARTICI_ACTID));
        activityXml.setIsFreeActivity(NodeUtil.getNodeBooleanValue(actEl, StarFlowNames.ACT_FREE_ISFREEACT));
        activityXml.setFreeRangeStrategy(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_FREE_RANGESTRATEGY));
        activityXml.setIsOnlyLimitedManualActivity(NodeUtil.getNodeBooleanValue(actEl, StarFlowNames.ACT_FREE_ISONLYLIMITEDMANUALACT));
        activityXml.setWiMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_WI_MODE));
        activityXml.setIsSequentialExecute(NodeUtil.getNodeBooleanValue(actEl, StarFlowNames.ACT_CHILD_WI_IS_SEQ_EXEC));
        activityXml.setWorkitemNumStrategy(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_WI_WORKITEMNUMSTRATEGY));
        activityXml.setFinishRule(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_WI_FINISHRULE));
        activityXml.setFinishRequiredPercent(NodeUtil.getNodeDoubleValue(actEl, StarFlowNames.ACT_CHILD_WI_FINISHREQUIREDPERCENT));
        activityXml.setFinishRquiredNum(NodeUtil.getNodeIntValue(actEl, StarFlowNames.ACT_CHILD_WI_FINISHRQUIREDNUM));
        activityXml.setIsAutoCancel(NodeUtil.getNodeBooleanValue(actEl, StarFlowNames.ACT_CHILD_WI_IS_AUTO_CANCEL));
        activityXml.setJoinMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_JOIN));
        activityXml.setSplitMode(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_SPLIT));
        activityXml.setLimitTime(NodeUtil.getNodeLongValue(actEl, StarFlowNames.ACT_CHILD_LIMITTIME));
        activityXml.setActivateRuleType(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_ACTIVATE_RULE_TYPE));
        activityXml.setStartStrategybyAppAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_STARTSTRATEGYBYAPPACTION));
        activityXml.setResetParticipant(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_RESET_PARTICIPANT));
       
        activityXml.setAction(NodeUtil.getNodeStringValue(actEl, StarFlowNames.ACT_CHILD_ACTION));
        activityXml.setOperations(NodeUtil.getOperations(actEl));
       
        activityXml.setEvents(NodeUtil.getTriggerEvents(actEl));
        activityXml.setProperties(NodeUtil.getExtProperties(actEl));
        activityXml.setParticipants(NodeUtil.getActParticipants(actEl));
        activityXml.setFreeActs(NodeUtil.getActFreeActs(actEl));
       
      }
     
      for(TransitionElement transitionXml : processXml.getTransitions()) {
        if(transitionXml.getTo().equalsIgnoreCase(id))
          activityXml.getBeforeTrans().add(transitionXml);
        if(transitionXml.getFrom().equalsIgnoreCase(id))
          activityXml.getAfterTrans().add(transitionXml);
      }
     
      activityXml.setLeft(NodeUtil.getElementLeft(actEl));
      activityXml.setTop(NodeUtil.getElementTop(actEl));
      aMap.put(id, activityXml);
    }
   
    return aMap;
  }
View Full Code Here

TOP

Related Classes of com.starflow.wf.engine.model.elements.ActivityElement

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.