Search in sources :

Example 1 with Timer

use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.

the class AbstractNodeHandler method writeTimers.

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);
    }
}
Also used : Timer(org.jbpm.process.core.timer.Timer) ArrayList(java.util.ArrayList)

Example 2 with Timer

use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.

the class TimerNodeHandler method writeNode.

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);
    }
}
Also used : Timer(org.jbpm.process.core.timer.Timer) TimerNode(org.jbpm.workflow.core.node.TimerNode)

Example 3 with Timer

use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.

the class SingleSessionCommandServiceTest method getProcessTimer.

private List<KiePackage> getProcessTimer() {
    RuleFlowProcess process = new RuleFlowProcess();
    process.setId("org.drools.test.TestProcess");
    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");
    timerNode.setTimer(timer);
    process.addNode(timerNode);
    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\");");
    actionNode.setAction(action);
    process.addNode(actionNode);
    new ConnectionImpl(timerNode, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
    EndNode end = new EndNode();
    end.setId(6);
    end.setName("End");
    process.addNode(end);
    new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
    KnowledgeBuilderImpl packageBuilder = new KnowledgeBuilderImpl();
    ProcessBuilderImpl processBuilder = new ProcessBuilderImpl(packageBuilder);
    processBuilder.buildProcess(process, null);
    return Arrays.asList(packageBuilder.getPackages());
}
Also used : RuleFlowProcess(org.jbpm.ruleflow.core.RuleFlowProcess) StartNode(org.jbpm.workflow.core.node.StartNode) Timer(org.jbpm.process.core.timer.Timer) DroolsConsequenceAction(org.jbpm.workflow.core.impl.DroolsConsequenceAction) EndNode(org.jbpm.workflow.core.node.EndNode) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) ActionNode(org.jbpm.workflow.core.node.ActionNode) ConnectionImpl(org.jbpm.workflow.core.impl.ConnectionImpl) TimerNode(org.jbpm.workflow.core.node.TimerNode) ProcessBuilderImpl(org.jbpm.compiler.ProcessBuilderImpl)

Example 4 with Timer

use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.

the class StartEventHandler method writeNode.

public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) {
    StartNode startNode = (StartNode) node;
    writeNode("startEvent", startNode, xmlDump, metaDataType);
    xmlDump.append(" isInterrupting=\"");
    if (startNode.isInterrupting()) {
        xmlDump.append("true");
    } else {
        xmlDump.append("false");
    }
    xmlDump.append("\">" + EOL);
    writeExtensionElements(startNode, xmlDump);
    List<Trigger> triggers = startNode.getTriggers();
    if (triggers != null) {
        if (triggers.size() > 1) {
            throw new IllegalArgumentException("Multiple start triggers not supported");
        }
        Trigger trigger = triggers.get(0);
        if (trigger instanceof ConstraintTrigger) {
            ConstraintTrigger constraintTrigger = (ConstraintTrigger) trigger;
            if (constraintTrigger.getHeader() == null) {
                xmlDump.append("      <conditionalEventDefinition>" + EOL);
                xmlDump.append("        <condition xsi:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + constraintTrigger.getConstraint() + "</condition>" + EOL);
                xmlDump.append("      </conditionalEventDefinition>" + EOL);
            }
        } else if (trigger instanceof EventTrigger) {
            EventTrigger eventTrigger = (EventTrigger) trigger;
            String mapping = null;
            String nameMapping = "event";
            if (!trigger.getInMappings().isEmpty()) {
                mapping = eventTrigger.getInMappings().keySet().iterator().next();
                nameMapping = eventTrigger.getInMappings().values().iterator().next();
            } else {
                mapping = (String) startNode.getMetaData("TriggerMapping");
            }
            if (mapping != null) {
                xmlDump.append("      <dataOutput id=\"_" + startNode.getId() + "_Output\" name=\"" + nameMapping + "\" />" + EOL + "      <dataOutputAssociation>" + EOL + "        <sourceRef>_" + startNode.getId() + "_Output</sourceRef>" + EOL + "        <targetRef>" + mapping + "</targetRef>" + EOL + "      </dataOutputAssociation>" + EOL);
            }
            String type = ((EventTypeFilter) eventTrigger.getEventFilters().get(0)).getType();
            if (type.startsWith("Message-")) {
                type = type.substring(8);
                xmlDump.append("      <messageEventDefinition messageRef=\"" + type + "\"/>" + EOL);
            } else if (type.startsWith("Error-")) {
                type = type.substring(6);
                String errorId = getErrorIdForErrorCode(type, startNode);
                xmlDump.append("      <errorEventDefinition errorRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(errorId) + "\"/>" + EOL);
            } else if (type.startsWith("Escalation-")) {
                type = type.substring(11);
                xmlDump.append("      <escalationEventDefinition escalationRef=\"" + type + "\"/>" + EOL);
            } else if (type.equals("Compensation")) {
                xmlDump.append("      <compensateEventDefinition/>" + EOL);
            } else {
                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\" />" + EOL);
            }
        } else {
            throw new IllegalArgumentException("Unsupported trigger type " + trigger);
        }
        if (startNode.getTimer() != null) {
            Timer timer = startNode.getTimer();
            xmlDump.append("      <timerEventDefinition>" + 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);
                }
            }
            xmlDump.append("      </timerEventDefinition>" + EOL);
        }
    } else if (startNode.getTimer() != null) {
        Timer timer = startNode.getTimer();
        xmlDump.append("      <timerEventDefinition>" + 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);
            }
        }
        xmlDump.append("      </timerEventDefinition>" + EOL);
    }
    endNode("startEvent", xmlDump);
}
Also used : ConstraintTrigger(org.jbpm.workflow.core.node.ConstraintTrigger) StartNode(org.jbpm.workflow.core.node.StartNode) ConstraintTrigger(org.jbpm.workflow.core.node.ConstraintTrigger) EventTrigger(org.jbpm.workflow.core.node.EventTrigger) Trigger(org.jbpm.workflow.core.node.Trigger) Timer(org.jbpm.process.core.timer.Timer) EventTrigger(org.jbpm.workflow.core.node.EventTrigger)

Example 5 with Timer

use of org.jbpm.process.core.timer.Timer in project jbpm by kiegroup.

the class StartEventHandler method handleTimerNode.

protected void handleTimerNode(final Node node, final Element element, final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
    super.handleNode(node, element, uri, localName, parser);
    StartNode startNode = (StartNode) node;
    org.w3c.dom.Node xmlNode = element.getFirstChild();
    while (xmlNode != null) {
        String nodeName = xmlNode.getNodeName();
        if ("timerEventDefinition".equals(nodeName)) {
            Timer timer = new Timer();
            org.w3c.dom.Node subNode = xmlNode.getFirstChild();
            while (subNode instanceof Element) {
                String subNodeName = subNode.getNodeName();
                if ("timeCycle".equals(subNodeName)) {
                    String delay = subNode.getTextContent();
                    int index = delay.indexOf("###");
                    if (index != -1) {
                        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;
                }
                subNode = subNode.getNextSibling();
            }
            startNode.setTimer(timer);
            if (parser.getParent() instanceof EventSubProcessNode) {
                // handle timer on start events like normal (non rule) timers for event sub process
                EventTrigger trigger = new EventTrigger();
                EventTypeFilter eventFilter = new EventTypeFilter();
                eventFilter.setType("Timer-" + ((EventSubProcessNode) parser.getParent()).getId());
                trigger.addEventFilter(eventFilter);
                String mapping = (String) startNode.getMetaData("TriggerMapping");
                if (mapping != null) {
                    trigger.addInMapping(mapping, "event");
                }
                startNode.addTrigger(trigger);
                ((EventSubProcessNode) parser.getParent()).addTimer(timer, new DroolsConsequenceAction("java", ""));
            }
        }
        xmlNode = xmlNode.getNextSibling();
    }
}
Also used : StartNode(org.jbpm.workflow.core.node.StartNode) NonAcceptingEventTypeFilter(org.jbpm.process.core.event.NonAcceptingEventTypeFilter) EventTypeFilter(org.jbpm.process.core.event.EventTypeFilter) Timer(org.jbpm.process.core.timer.Timer) DroolsConsequenceAction(org.jbpm.workflow.core.impl.DroolsConsequenceAction) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) Element(org.w3c.dom.Element) EventTrigger(org.jbpm.workflow.core.node.EventTrigger)

Aggregations

Timer (org.jbpm.process.core.timer.Timer)25 DroolsConsequenceAction (org.jbpm.workflow.core.impl.DroolsConsequenceAction)11 TimerNode (org.jbpm.workflow.core.node.TimerNode)8 DroolsAction (org.jbpm.workflow.core.DroolsAction)7 StartNode (org.jbpm.workflow.core.node.StartNode)6 ActionNode (org.jbpm.workflow.core.node.ActionNode)5 EndNode (org.jbpm.workflow.core.node.EndNode)5 EventNode (org.jbpm.workflow.core.node.EventNode)4 StateBasedNode (org.jbpm.workflow.core.node.StateBasedNode)4 ArrayList (java.util.ArrayList)3 EventTypeFilter (org.jbpm.process.core.event.EventTypeFilter)3 RuleFlowProcess (org.jbpm.ruleflow.core.RuleFlowProcess)3 ConnectionImpl (org.jbpm.workflow.core.impl.ConnectionImpl)3 DynamicNode (org.jbpm.workflow.core.node.DynamicNode)3 EventSubProcessNode (org.jbpm.workflow.core.node.EventSubProcessNode)3 EventTrigger (org.jbpm.workflow.core.node.EventTrigger)3 HashMap (java.util.HashMap)2 KnowledgeBuilderImpl (org.drools.compiler.builder.impl.KnowledgeBuilderImpl)2 Work (org.jbpm.process.core.Work)2 TimerInstance (org.jbpm.process.instance.timer.TimerInstance)2