@Override public Object execute(Context context) { KieSession kieSession = ((KnowledgeCommandContext) context).getKieSession(); TimerManager tm = getTimerManager(kieSession); RuleFlowProcessInstance wfp = (RuleFlowProcessInstance) kieSession.getProcessInstance(processInstanceId); for (NodeInstance nodeInstance : wfp.getNodeInstances()) { if (nodeInstance instanceof TimerNodeInstance) { TimerNodeInstance tni = (TimerNodeInstance) nodeInstance; if (tni.getNodeName().equals(timerName)) { TimerInstance timer = tm.getTimerMap().get(tni.getTimerId()); tm.cancelTimer(timer.getTimerId()); TimerInstance newTimer = new TimerInstance(); if (delay != 0) { long diff = System.currentTimeMillis() - timer.getActivated().getTime(); newTimer.setDelay(delay * 1000 - diff); } newTimer.setPeriod(period); newTimer.setRepeatLimit(repeatLimit); newTimer.setTimerId(timer.getTimerId()); tm.registerTimer(newTimer, wfp); tni.internalSetTimerId(newTimer.getId()); break; } } } return null; }
protected NodeInstanceImpl readNodeInstanceContent( JBPMMessages.ProcessInstance.NodeInstance _node, MarshallerReaderContext context, WorkflowProcessInstance processInstance) throws IOException { NodeInstanceImpl nodeInstance = null; NodeInstanceContent _content = _node.getContent(); switch (_content.getType()) { case RULE_SET_NODE: nodeInstance = new RuleSetNodeInstance(); ((RuleSetNodeInstance) nodeInstance) .setRuleFlowGroup(_content.getRuleSet().getRuleFlowGroup()); if (_content.getRuleSet().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getRuleSet().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((RuleSetNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } if (_content.getRuleSet().getMapEntryCount() > 0) { Map<String, FactHandle> factInfo = new HashMap<String, FactHandle>(); for (TextMapEntry entry : _content.getRuleSet().getMapEntryList()) { factInfo.put(entry.getName(), new DefaultFactHandle(entry.getValue())); } ((RuleSetNodeInstance) nodeInstance).setFactHandles(factInfo); } break; case HUMAN_TASK_NODE: nodeInstance = new HumanTaskNodeInstance(); ((HumanTaskNodeInstance) nodeInstance) .internalSetWorkItemId(_content.getHumanTask().getWorkItemId()); if (_content.getHumanTask().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getHumanTask().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((HumanTaskNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case WORK_ITEM_NODE: nodeInstance = new WorkItemNodeInstance(); ((WorkItemNodeInstance) nodeInstance) .internalSetWorkItemId(_content.getWorkItem().getWorkItemId()); if (_content.getWorkItem().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getWorkItem().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((WorkItemNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case SUBPROCESS_NODE: nodeInstance = new SubProcessNodeInstance(); ((SubProcessNodeInstance) nodeInstance) .internalSetProcessInstanceId(_content.getSubProcess().getProcessInstanceId()); if (_content.getSubProcess().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getSubProcess().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((SubProcessNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case MILESTONE_NODE: nodeInstance = new MilestoneNodeInstance(); if (_content.getMilestone().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getMilestone().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((MilestoneNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case TIMER_NODE: nodeInstance = new TimerNodeInstance(); ((TimerNodeInstance) nodeInstance).internalSetTimerId(_content.getTimer().getTimerId()); break; case EVENT_NODE: nodeInstance = new EventNodeInstance(); break; case JOIN_NODE: nodeInstance = new JoinInstance(); if (_content.getJoin().getTriggerCount() > 0) { Map<Long, Integer> triggers = new HashMap<Long, Integer>(); for (JBPMMessages.ProcessInstance.NodeInstanceContent.JoinNode.JoinTrigger _join : _content.getJoin().getTriggerList()) { triggers.put(_join.getNodeId(), _join.getCounter()); } ((JoinInstance) nodeInstance).internalSetTriggers(triggers); } break; case COMPOSITE_CONTEXT_NODE: nodeInstance = new CompositeContextNodeInstance(); if (_content.getComposite().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getComposite().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((CompositeContextNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case FOR_EACH_NODE: nodeInstance = new ForEachNodeInstance(); break; case DYNAMIC_NODE: nodeInstance = new DynamicNodeInstance(); if (_content.getComposite().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getComposite().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((CompositeContextNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case STATE_NODE: nodeInstance = new StateNodeInstance(); if (_content.getState().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getState().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((CompositeContextNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; case EVENT_SUBPROCESS_NODE: nodeInstance = new EventSubProcessNodeInstance(); if (_content.getComposite().getTimerInstanceIdCount() > 0) { List<Long> timerInstances = new ArrayList<Long>(); for (Long _timerId : _content.getComposite().getTimerInstanceIdList()) { timerInstances.add(_timerId); } ((CompositeContextNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances); } break; default: throw new IllegalArgumentException("Unknown node type: " + _content.getType()); } return nodeInstance; }