public SubProcessNodeFactory timer(String delay, String period, String dialect, String action) { Timer timer = new Timer(); timer.setDelay(delay); timer.setPeriod(period); getSubProcessNode().addTimer(timer, new DroolsConsequenceAction(dialect, action)); return this; }
String timeCycle = (String) node.getMetaData().get("TimeCycle"); String timeDate = (String) node.getMetaData().get("TimeDate"); Timer timer = new Timer(); if (timeDuration != null) { timer.setDelay(timeDuration); timer.setTimeType(Timer.TIME_DURATION); compositeNode.addTimer(timer, new DroolsConsequenceAction("java", PROCESS_INSTANCE_SIGNAL_EVENT + "Timer-" + attachedTo + "-" + timeDuration + "-" + node.getId() + "\", kcontext.getNodeInstance().getId());")); } else if (timeCycle != null) { String period = timeCycle.substring(index + 3); timeCycle = timeCycle.substring(0, index); timer.setPeriod(period); timer.setDelay(timeCycle); timer.setTimeType(Timer.TIME_CYCLE); compositeNode.addTimer(timer, new DroolsConsequenceAction("java", PROCESS_INSTANCE_SIGNAL_EVENT + "Timer-" + attachedTo + "-" + timeCycle + (timer.getPeriod() == null ? "" : "###" + timer.getPeriod()) + "-" + node .getId() + "\", kcontext.getNodeInstance().getId());")); } else if (timeDate != null) { timer.setDate(timeDate); timer.setTimeType(Timer.TIME_DATE); compositeNode.addTimer(timer, new DroolsConsequenceAction("java", PROCESS_INSTANCE_SIGNAL_EVENT + "Timer-" + attachedTo + "-" + timeDate + "-" + node.getId() + "\", kcontext.getNodeInstance().getId());"));
public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { TimerNode timerNode = (TimerNode) node; writeNode("intermediateCatchEvent", timerNode, xmlDump, metaDataType); xmlDump.append(">" + EOL); writeExtensionElements(node, xmlDump); xmlDump.append(" <timerEventDefinition>" + EOL); Timer timer = timerNode.getTimer(); if (timer != null && (timer.getDelay() != null || timer.getDate() != null)) { if (timer.getTimeType() == Timer.TIME_DURATION) { xmlDump.append(" <timeDuration xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeDuration>" + EOL); } else if (timer.getTimeType() == Timer.TIME_CYCLE) { if (timer.getPeriod() != null) { xmlDump.append(" <timeCycle xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "###" + XmlDumper.replaceIllegalChars(timer.getPeriod()) + "</timeCycle>" + EOL); } else { xmlDump.append(" <timeCycle xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeCycle>" + EOL); } } else if (timer.getTimeType() == Timer.TIME_DATE) { xmlDump.append(" <timeDate xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeDate>" + EOL); } } xmlDump.append(" </timerEventDefinition>" + EOL); endNode("intermediateCatchEvent", xmlDump); }
process.setName( "TestProcess" ); process.setPackageName( "org.drools.test" ); StartNode start = new StartNode(); start.setId( 1 ); start.setName( "Start" ); process.addNode( start ); TimerNode timerNode = new TimerNode(); timerNode.setId( 2 ); timerNode.setName( "Timer" ); Timer timer = new Timer(); timer.setDelay( "2000" ); new ConnectionImpl( start, Node.CONNECTION_DEFAULT_TYPE, timerNode, Node.CONNECTION_DEFAULT_TYPE ); ActionNode actionNode = new ActionNode(); actionNode.setId( 3 ); actionNode.setName( "Action" ); DroolsConsequenceAction action = new DroolsConsequenceAction(); action.setDialect( "java" ); action.setConsequence( "System.out.println(\"Executed action\");" );
ruleSetNode.setMetaData("height", 4); ruleSetNode.setRuleFlowGroup("ruleFlowGroup"); Timer timer = new Timer(); timer.setDelay("100"); timer.setPeriod("100"); timer = new Timer(); timer.setDelay("200"); timer.setPeriod("200"); milestone.setMetaData("height", 4); milestone.setConstraint("constraint"); timer = new Timer(); timer.setDelay("100"); timer.setPeriod("100"); timer = new Timer(); timer.setDelay("200"); timer.setPeriod("200"); subProcess.addInMapping("subvar1", "var1"); subProcess.addOutMapping("subvar2", "var2"); timer = new Timer(); timer.setDelay("100"); timer.setPeriod("100"); timer = new Timer(); timer.setDelay("200"); timer.setPeriod("200");
String nodeName = xmlNode.getNodeName(); if ("timerEventDefinition".equals(nodeName)) { Timer timer = new Timer(); org.w3c.dom.Node subNode = xmlNode.getFirstChild(); while (subNode instanceof Element) { String period = delay.substring(index + 3); delay = delay.substring(0, index); timer.setPeriod(period); } else { timer.setPeriod(delay); timer.setTimeType(Timer.TIME_CYCLE); timer.setDelay(delay); break; } else if ("timeDuration".equals(subNodeName)) { String delay = subNode.getTextContent(); timer.setTimeType(Timer.TIME_DURATION); timer.setDelay(delay); break; } else if ("timeDate".equals(subNodeName)) { String date = subNode.getTextContent(); timer.setTimeType(Timer.TIME_DATE); timer.setDate(date); break; startNode.setTimer(timer); if (parser.getParent() instanceof EventSubProcessNode) {
String nodeName = xmlNode.getNodeName(); if ("timerEventDefinition".equals(nodeName)) { Timer timer = new Timer(); org.w3c.dom.Node subNode = xmlNode.getFirstChild(); while (subNode instanceof Element) { String period = delay.substring(index + 3); delay = delay.substring(0, index); timer.setPeriod(period); timer.setTimeType(Timer.TIME_CYCLE); timer.setDelay(delay); break; } else if ("timeDuration".equals(subNodeName)) { String delay = subNode.getTextContent(); timer.setTimeType(Timer.TIME_DURATION); timer.setDelay(delay); break; } else if ("timeDate".equals(subNodeName)) { String date = subNode.getTextContent(); timer.setTimeType(Timer.TIME_DATE); timer.setDate(date); break; timerNode.setTimer(timer);
if (timer != null && (timer.getDelay() != null || timer.getDate() != null)) { if (timer.getTimeType() == Timer.TIME_DATE) { xmlDump.append(" <timeDate xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDate()) + "</timeDate>" + EOL); } else if (timer.getTimeType() == Timer.TIME_DURATION) { xmlDump.append(" <timeDuration xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeDuration>" + EOL); } else if (timer.getTimeType() == Timer.TIME_CYCLE) { if (timer.getPeriod() != null) { xmlDump.append(" <timeCycle xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "###" + XmlDumper.replaceIllegalChars(timer.getPeriod()) + "</timeCycle>" + EOL); } else { xmlDump.append(" <timeCycle xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeCycle>" + EOL); } else if (timer.getTimeType() == Timer.TIME_DATE) { xmlDump.append(" <timeDate xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeDate>" + EOL); if (timer != null && (timer.getDelay() != null || timer.getDate() != null)) { if (timer.getTimeType() == Timer.TIME_DATE) { xmlDump.append(" <timeDate xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDate()) + "</timeDate>" + EOL); } else if (timer.getTimeType() == Timer.TIME_DURATION) { xmlDump.append(" <timeDuration xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeDuration>" + EOL); } else if (timer.getTimeType() == Timer.TIME_CYCLE) { if (timer.getPeriod() != null) { xmlDump.append(" <timeCycle xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "###" + XmlDumper.replaceIllegalChars(timer.getPeriod()) + "</timeCycle>" + EOL); } else { xmlDump.append(" <timeCycle xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeCycle>" + EOL); } else if (timer.getTimeType() == Timer.TIME_DATE) { xmlDump.append(" <timeDate xsi:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(timer.getDelay()) + "</timeDate>" + EOL);
public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException { Element element = parser.endElementBuilder(); StateBasedNode parent = (StateBasedNode) parser.getParent(); String id = element.getAttribute("id"); emptyAttributeCheck( localName, "id", id, parser ); String delay = element.getAttribute("delay"); String period = element.getAttribute("period"); Timer timer = new Timer(); timer.setId(new Long(id)); if (delay != null && delay.length() != 0 ) { timer.setDelay(delay); } if (period != null && period.length() != 0 ) { timer.setPeriod(period); } org.w3c.dom.Node xmlNode = element.getFirstChild(); DroolsAction action = null; if (xmlNode instanceof Element) { Element actionXml = (Element) xmlNode; action = AbstractNodeHandler.extractAction(actionXml); } parent.addTimer(timer, action); return null; }
public void writeTimers(final Map<Timer, DroolsAction> timers, final StringBuilder xmlDump) { if (timers != null && !timers.isEmpty()) { xmlDump.append(" <timers>" + EOL); List<Timer> timerList = new ArrayList<Timer>(timers.keySet()); Collections.sort(timerList, new Comparator<Timer>() { public int compare(Timer o1, Timer o2) { return (int) (o2.getId() - o1.getId()); } }); for (Timer timer: timerList) { xmlDump.append(" <timer id=\"" + timer.getId() + "\" "); if (timer.getDelay() != null) { xmlDump.append("delay=\"" + timer.getDelay() + "\" "); } if (timer.getPeriod() != null) { xmlDump.append("period=\"" + timer.getPeriod() + "\" "); } xmlDump.append(">" + EOL); writeAction(timers.get(timer), xmlDump); xmlDump.append(" </timer>" + EOL); } xmlDump.append(" </timers>" + EOL); } }
protected TimerInstance createTimerInstance(InternalKnowledgeRuntime kruntime) { Timer timer = getTimerNode().getTimer(); TimerInstance timerInstance = new TimerInstance(); if (kruntime != null && kruntime.getEnvironment().get("jbpm.business.calendar") != null){ BusinessCalendar businessCalendar = (BusinessCalendar) kruntime.getEnvironment().get("jbpm.business.calendar"); String delay = resolveVariable(timer.getDelay()); timerInstance.setDelay(businessCalendar.calculateBusinessTimeAsDuration(delay)); if (timer.getPeriod() == null) { timerInstance.setPeriod(0); } else { String period = resolveVariable(timer.getPeriod()); timerInstance.setPeriod(businessCalendar.calculateBusinessTimeAsDuration(period)); } } else { configureTimerInstance(timer, timerInstance); } timerInstance.setTimerId(timer.getId()); return timerInstance; }
BusinessCalendar businessCalendar = (BusinessCalendar) kruntime.getEnvironment().get("jbpm.business.calendar"); String delay = null; switch (timer.getTimeType()) { case Timer.TIME_CYCLE: if (CronExpression.isValidExpression(timer.getDelay())) { timerInstance.setCronExpression(timer.getDelay()); } else { String tempDelay = resolveVariable(timer.getDelay()); String tempPeriod = resolveVariable(timer.getPeriod()); if (DateTimeUtils.isRepeatable(tempDelay)) { String[] values = DateTimeUtils.parseISORepeatable(tempDelay); delay = resolveVariable(timer.getDelay()); configureTimerInstance(timer, timerInstance); timerInstance.setTimerId(timer.getId()); return timerInstance;
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) { TimerNode timerNode = (TimerNode) node; writeNode("timerNode", timerNode, xmlDump, includeMeta); Timer timer = timerNode.getTimer(); if (timer != null) { xmlDump.append("delay=\"" + timer.getDelay() + "\" "); if (timer.getPeriod() != null) { xmlDump.append(" period=\"" + timer.getPeriod() + "\" "); } } if (includeMeta && containsMetaData(timerNode)) { xmlDump.append(">" + EOL); writeMetaData(timerNode, xmlDump); endNode("timerNode", xmlDump); } else { endNode(xmlDump); } }
private void initTimer(InternalKnowledgeRuntime kruntime) { for (StartNode startNode : startNodes) { if (startNode != null && startNode.getTimer() != null) { TimerInstance timerInstance = null; if (startNode.getTimer().getDelay() != null && CronExpression.isValidExpression(startNode.getTimer().getDelay())) { timerInstance = new TimerInstance(); timerInstance.setCronExpression(startNode.getTimer().getDelay()); } else { timerInstance = createTimerInstance(startNode.getTimer(), kruntime); } timerManager.registerTimer(timerInstance, processId, null); } } }
process.setName( "TestProcess" ); process.setPackageName( "org.drools.test" ); StartNode start = new StartNode(); start.setId( 1 ); start.setName( "Start" ); process.addNode( start ); TimerNode timerNode = new TimerNode(); timerNode.setId( 2 ); timerNode.setName( "Timer" ); Timer timer = new Timer(); timer.setDelay( "0" ); new ConnectionImpl( start, Node.CONNECTION_DEFAULT_TYPE, timerNode, Node.CONNECTION_DEFAULT_TYPE ); ActionNode actionNode = new ActionNode(); actionNode.setId( 3 ); actionNode.setName( "Action" ); DroolsConsequenceAction action = new DroolsConsequenceAction(); action.setDialect( "java" ); action.setConsequence( "try { Thread.sleep(1000); } catch (Throwable t) {} System.out.println(\"Executed action\");" );
String nodeName = xmlNode.getNodeName(); if ("timerEventDefinition".equals(nodeName)) { Timer timer = new Timer(); org.w3c.dom.Node subNode = xmlNode.getFirstChild(); while (subNode instanceof Element) { String period = delay.substring(index + 3); delay = delay.substring(0, index); timer.setPeriod(period); } else { timer.setPeriod(delay); timer.setTimeType(Timer.TIME_CYCLE); timer.setDelay(delay); break; } else if ("timeDuration".equals(subNodeName)) { String delay = subNode.getTextContent(); timer.setTimeType(Timer.TIME_DURATION); timer.setDelay(delay); break; } else if ("timeDate".equals(subNodeName)) { String date = subNode.getTextContent(); timer.setTimeType(Timer.TIME_DATE); timer.setDate(date); break; startNode.setTimer(timer); if (parser.getParent() instanceof EventSubProcessNode) {