Package org.fireflow.kernel

Examples of org.fireflow.kernel.IToken


            int stepNumber = 0;

            List<IToken> tokensList_0 = persistenceService.findTokensForProcessInstance(this.getId(), synchInst.getSynchronizer().getId());
            Map<String,IToken> tokensMap = new HashMap<String,IToken>();
            for (int i = 0; i < tokensList_0.size(); i++) {
                IToken tmpToken =   tokensList_0.get(i);
                String tmpFromActivityId = tmpToken.getFromActivityId();
                if (!tokensMap.containsKey(tmpFromActivityId)) {
                    tokensMap.put(tmpFromActivityId, tmpToken);
                } else {
                  //TODO  ====下面的代码有意义吗?===start===wmj2003
                    IToken tmpToken2 = tokensMap.get(tmpFromActivityId);
                    if (tmpToken2.getStepNumber() > tmpToken.getStepNumber()) {
                        tokensMap.put(tmpFromActivityId, tmpToken2);
                    }
                   //TODO  ====下面的代码有意义吗?===end===wmj2003
                }
            }

            List<IToken> tokensList = new ArrayList<IToken>(tokensMap.values());

            for (int i = 0; i < tokensList.size(); i++) {
                IToken _token = tokensList.get(i);
                resultJoinPoint.addValue(_token.getValue());
                if (_token.isAlive()) {//如果token的状态是alive
                    resultJoinPoint.setAlive(true);
                    String oldFromActivityId = resultJoinPoint.getFromActivityId();
                    if (oldFromActivityId == null || oldFromActivityId.trim().equals("")) {
                        resultJoinPoint.setFromActivityId(_token.getFromActivityId());
                    } else {
                        resultJoinPoint.setFromActivityId(oldFromActivityId + IToken.FROM_ACTIVITY_ID_SEPARATOR + _token.getFromActivityId());
                    }

                }
                if (token.getStepNumber() > stepNumber) {
                    stepNumber = token.getStepNumber();
View Full Code Here


     */
    public void complete() throws EngineException, KernelException {
        List<IToken> tokens = rtCtx.getPersistenceService().findTokensForProcessInstance(this.getId(), null);
        boolean canBeCompleted = true;
        for (int i = 0; tokens != null && i < tokens.size(); i++) {
            IToken token = tokens.get(i);
            if (token.isAlive()) {
                canBeCompleted = false;
                break;
            }
        }
        if (!canBeCompleted) {
            return;
        }

        this.setState(IProcessInstance.COMPLETED);
        //记录结束时间
        this.setEndTime(rtCtx.getCalendarService().getSysDate());
        rtCtx.getPersistenceService().saveOrUpdateProcessInstance(this);
       
        //删除所有的token
        for (int i = 0; tokens != null && i < tokens.size(); i++) {
            IToken token = tokens.get(i);
            rtCtx.getPersistenceService().deleteToken(token);
        }

        //触发事件
        ProcessInstanceEvent event = new ProcessInstanceEvent();
View Full Code Here

    this.em.lock(taskInstance, LockModeType.READ);
  }

  public IToken findTokenById(String id)
  {
    IToken token = this.em.find(Token.class, id);

    if (token == null)
      return null;
    return token;
  }
View Full Code Here

       
        //首先必须检查是否有满足条件的循环
        boolean doLoop = false;//表示是否有满足条件的循环,false表示没有,true表示有。

        if (joinPoint.getAlive()) {
            IToken tokenForLoop = null;

                tokenForLoop = new Token(); // 产生新的token
                tokenForLoop.setAlive(joinPoint.getAlive());
                tokenForLoop.setProcessInstance(processInstance);
                tokenForLoop.setStepNumber(joinPoint.getStepNumber()-1);
                tokenForLoop.setFromActivityId(joinPoint.getFromActivityId());

            for (int i = 0; i < this.leavingLoopInstances.size(); i++) {
             
                ILoopInstance loopInstance = this.leavingLoopInstances.get(i);
View Full Code Here

    /* (non-Javadoc)
     * @see org.fireflow.kernel.INodeInstance#fire(org.fireflow.kernel.IToken)
     */
    public void fire(IToken tk) throws KernelException {
        log.debug("The weight of the Entering TransitionInstance is " + tk.getValue());
        IToken token = tk;
        token.setNodeId(this.getActivity().getId());

        //触发TokenEntered事件
        NodeInstanceEvent event1 = new NodeInstanceEvent(this);
        event1.setToken(tk);
        event1.setEventType(NodeInstanceEvent.NODEINSTANCE_TOKEN_ENTERED);//token 来了
        fireNodeEvent(event1);
        if (token.isAlive()) {//如果token是活动的,那么就保存token,并创建taskinstance
            NodeInstanceEvent event = new NodeInstanceEvent(this);
            event.setToken(token);
            event.setEventType(NodeInstanceEvent.NODEINSTANCE_FIRED);//token 被触发,创建taskinstance,等待
            fireNodeEvent(event);
        } else {//如果token是dead状态,那么就直接结束当前节点。
View Full Code Here

   */
  public void onEdgeInstanceEventFired(EdgeInstanceEvent e)
      throws KernelException {

    if (e.getEventType() == EdgeInstanceEvent.ON_TAKING_THE_TOKEN) {
      IToken token = e.getToken();
      // 计算token的alive值
      ILoopInstance transInst = (ILoopInstance) e.getSource();
      String condition = transInst.getLoop().getCondition();

      calculateTheAliveValue(token, condition);

      if (rtCtx.isEnableTrace() && token.isAlive()) {
        ProcessInstanceTrace trace = new ProcessInstanceTrace();
        trace.setProcessInstanceId(e.getToken().getProcessInstanceId());
        trace.setStepNumber(e.getToken().getStepNumber() + 1);
        trace.setType(ProcessInstanceTrace.LOOP_TYPE);
        trace.setFromNodeId(transInst.getLoop().getFromNode().getId());
View Full Code Here

        }     
      //如果节点实例结束,就触发
        if (e.getEventType() == NodeInstanceEvent.NODEINSTANCE_COMPLETED) {
            // 执行ProcessInstance的complete操作

            IToken tk = e.getToken();
           
            ProcessInstance currentProcessInstance = (ProcessInstance) tk.getProcessInstance();
            currentProcessInstance.complete();
        }
    }
View Full Code Here

    /* (non-Javadoc)
     * @see org.fireflow.kernel.event.IEdgeInstanceEventListener#onEdgeInstanceEventFired(org.fireflow.kernel.event.EdgeInstanceEvent)
     */
    public void onEdgeInstanceEventFired(EdgeInstanceEvent e) throws KernelException {
        if (e.getEventType() == EdgeInstanceEvent.ON_TAKING_THE_TOKEN) {
            IToken token = e.getToken();
            ITransitionInstance transInst = (ITransitionInstance) e.getSource();
            String condition = transInst.getTransition().getCondition();
           
            calculateTheAliveValue(token, condition);

            if (rtCtx.isEnableTrace() && token.isAlive()) {
                Transition transition = transInst.getTransition();
                IWFElement fromNode = transition.getFromNode();
                int minorNumber = 1;
                if (fromNode instanceof Activity){
                    minorNumber=2;
View Full Code Here

      throw new EngineException(taskInstance.getProcessInstanceId(),
          process, taskInstance.getTaskId(), "与activityId="
              + taskInstance.getActivityId() + "对应的token数量(="
              + tokens.size() + ")不正确,正确只能为1,因此无法完成complete操作");
    }
    IToken token = tokens.get(0);
    // stepNumber不相等,不允许执行结束操作。
    if (token.getStepNumber().intValue() != taskInstance.getStepNumber()
        .intValue()) {
      return;
    }
    if (token.isAlive() == false) {
      WorkflowProcess process = taskInstance.getWorkflowProcess();
      throw new EngineException(taskInstance.getProcessInstanceId(),
          process, taskInstance.getTaskId(), "与activityId="
              + taskInstance.getActivityId()
              + "对应的token.alive=false,因此无法完成complete操作");
    }

    INetInstance netInstance = rtCtx.getKernelManager().getNetInstance(
        taskInstance.getProcessId(), taskInstance.getVersion());
    Object obj = netInstance.getWFElementInstance(taskInstance
        .getActivityId());
    if (obj == null) {
      WorkflowProcess process = taskInstance.getWorkflowProcess();
      throw new EngineException(taskInstance.getProcessInstanceId(),
          process, taskInstance.getTaskId(), "系统没有找到与activityId="
              + taskInstance.getActivityId()
              + "对应activityInstance,无法执行complete操作。");
    }

    token.setProcessInstance(processInstance);

    ((IActivityInstance) obj).complete(token, targetActivityInstance);

  }
View Full Code Here

      throw new EngineException(taskInstance.getProcessInstanceId(),
          process, taskInstance.getTaskId(), "与activityId="
              + taskInstance.getActivityId() + "对应的token数量(="
              + tokens.size() + ")不正确,正确只能为1,因此无法完成complete操作");
    }
    IToken token = tokens.get(0);
    // stepNumber不相等,不允许执行结束操作。
    if (token.getStepNumber().intValue() != taskInstance.getStepNumber()
        .intValue()) {
      return;
    }
    if (token.isAlive() == false) {
      WorkflowProcess process = taskInstance.getWorkflowProcess();
      throw new EngineException(taskInstance.getProcessInstanceId(),
          process, taskInstance.getTaskId(), "与activityId="
              + taskInstance.getActivityId()
              + "对应的token.alive=false,因此无法完成complete操作");
    }

    token.setProcessInstance(processInstance);

    thisActivityInstance.complete(token, targetActivityInstance);

  }
View Full Code Here

TOP

Related Classes of org.fireflow.kernel.IToken

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.