public static RuleFlowProcess newShortestProcess(String processId) { StartNode startNode = new StartNode(); startNode.setName("Start"); startNode.setId(1); EndNode endNode = new EndNode(); endNode.setName("EndNode"); endNode.setId(2); connect(startNode, endNode); RuleFlowProcess process = new RuleFlowProcess(); process.setId(processId); process.addNode(startNode); process.addNode(endNode); return process; }
@Test public void testLoadMinimalCaseWithRoles() throws Exception { KieBase kbase = createKnowledgeBase("CMMN-MinimalCaseWithRoles.cmmn"); assertThat(kbase).isNotNull(); Process process = kbase.getProcess("loan_application"); assertThat(process).isNotNull(); assertThat(process).isInstanceOf(RuleFlowProcess.class); RuleFlowProcess caseProcess = (RuleFlowProcess) process; assertThat(caseProcess.isDynamic()).isTrue(); assertThat(caseProcess.getId()).isEqualTo("loan_application"); assertThat(caseProcess.getName()).isEqualTo("Loan Application"); String roles = (String) caseProcess.getMetaData("customCaseRoles"); assertThat(roles).isNotNull(); assertThat(roles).isEqualTo("owner,participant,manager"); }
@Test public void testEmptyPackageName() throws Exception { RuleFlowProcess process = new RuleFlowProcess(); process.setId("org.drools.core.process"); process.setName("Empty Package Name Process"); process.setPackageName(""); process.setDynamic(true); ProcessValidationError[] errors = validator.validateProcess(process); assertNotNull(errors); assertEquals(0, errors.length); }
public List<Node> getEndNodes() { return getEndNodes(this.getNodes()); }
public List<Node> getStartNodes() { return getStartNodes(this.getNodes()); }
protected RuleFlowProcessFactory(String id) { RuleFlowProcess process = new RuleFlowProcess(); process.setId(id); setNodeContainer(process); }
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 ); 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,
process.setMetaData("routerLayout", 1); imports.add("org.kie.api.runtime.process.CaseAssignment"); imports.add("org.kie.api.runtime.process.CaseData"); process.setImports(imports); process.setGlobals(globals); variable.setValue(list); variables.add(variable); process.getVariableScope().setVariables(variables); process.getSwimlaneContext().addSwimlane(swimlane); swimlane = new Swimlane(); swimlane.setName("actor2"); process.getSwimlaneContext().addSwimlane(swimlane); DroolsConsequenceAction action = new DroolsConsequenceAction("dialect", "consequence"); exceptionHandler.setAction(action); process.getExceptionScope().setExceptionHandler("myFault", exceptionHandler); exceptionHandler = new ActionExceptionHandler(); exceptionHandler.setFaultVariable("faultVariable2"); action = new DroolsConsequenceAction("dialect2", "consequence2"); exceptionHandler.setAction(action); process.getExceptionScope().setExceptionHandler("myFault2", exceptionHandler); process.addNode(startNode); action = new DroolsConsequenceAction("dialect", "consequence");
private RuleFlowProcess createCompensationEventSubProcessProcess(String processId, String[] workItemNames, final List<String> eventList) throws Exception { RuleFlowProcess process = new RuleFlowProcess(); process.setAutoComplete(true); process.setId(processId); process.setName("CESP Process"); process.setMetaData("Compensation", true); actionNode.setName("Execute"); DroolsAction action = new DroolsConsequenceAction("java", null); action.setMetaData("Action", new Action() { public void execute(ProcessContext context) throws Exception { actionNode.setAction(action); connect( startNode, actionNode );
String version = attrs.getValue("http://www.jboss.org/drools", "version"); RuleFlowProcess process = new RuleFlowProcess(); process.setAutoComplete(true); process.setId(id); if (name == null) { name = id; process.setName(name); process.setType("RuleFlow"); if (packageName == null) { packageName = "org.jbpm.cmmn"; process.setPackageName(packageName); process.setDynamic(true); process.setAutoComplete(false); process.setVersion(version); process.setMetaData("Definitions", parser.getParent()); process.setMetaData("CmmnImports", typedImports); process.setMetaData("ItemDefinitions", itemDefinitions);
public Object start(final String uri, final String localName, final Attributes attrs, final ExtensibleXmlParser parser) throws SAXException { parser.startElementBuilder( localName, attrs ); final String id = attrs.getValue( "id" ); final String name = attrs.getValue( "name" ); final String version = attrs.getValue( "version" ); final String type = attrs.getValue( "type" ); final String packageName = attrs.getValue( "package-name" ); final String routerLayout = attrs.getValue( "routerLayout" ); RuleFlowProcess process = new RuleFlowProcess(); process.setId( id ); process.setName( name ); process.setVersion( version ); process.setType( type ); process.setPackageName( packageName ); if (routerLayout != null) { process.setMetaData("routerLayout", new Integer(routerLayout)); } ((ProcessBuildData)parser.getData()).addProcess( process ); return process; }
private RuleFlowProcess createCompensationBoundaryEventProcess(String processId, String[] workItemNames, final List<String> eventList) throws Exception { RuleFlowProcess process = new RuleFlowProcess(); process.setAutoComplete(true); process.setId(processId); process.setName("CESP Process"); process.setMetaData("Compensation", true); variable.setType(personDataType); variables.add(variable); process.getVariableScope().setVariables(variables);
if (nodeParent instanceof EventSubProcessNode) { boolean compensationEventSubProcess = false; List<Trigger> startTriggers = ((EventSubProcessNode) nodeParent).findStartNode().getTriggers(); CESP_CHECK: for (Trigger trigger : startTriggers) { if (trigger instanceof EventTrigger) { parentId = ((RuleFlowProcess) nodeParent).getId(); } else { parentId = (String) ((NodeImpl) nodeParent).getMetaData("UniqueId"); DroolsConsequenceAction compensationAction = new DroolsConsequenceAction("java", PROCESS_INSTANCE_SIGNAL_EVENT + "Compensation\", \"" + compensationEvent + "\");"); ((ActionNode) throwEventNode).setAction(compensationAction); } else if (throwEventNode instanceof EndNode) { List<DroolsAction> actions = new ArrayList<DroolsAction>(); actions.add(compensationAction); ((EndNode) throwEventNode).setActions(EndNode.EVENT_NODE_ENTER, actions);
NodeInstanceFactoryRegistry.getInstance(ksession.getEnvironment()).register( mockNode.getClass(), mockNodeFactory ); RuleFlowProcess process = new RuleFlowProcess(); StartNode startNode = new StartNode(); startNode.setId( 1 ); startNode.setName( "start node" ); new ConnectionImpl( startNode, org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE, mockNode, org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE); process.addNode( startNode ); process.addNode( mockNode );
@Test public void testNodeReading() { RuleFlowProcess process = new RuleFlowProcess(); process.setId("org.drools.core.process.event"); process.setName("Event Process"); variable.setType(personDataType); variables.add(variable); process.getVariableScope().setVariables(variables); process.setDynamic(true); CompositeNode compositeNode = new CompositeNode(); compositeNode.setName("CompositeNode"); new CompositeNode.NodeAndType(split, org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE)); process.addNode(forEachNode); KieSession ksession = createKieSession(process); TestProcessEventListener procEventListener = new TestProcessEventListener();
process.addNode(new StartNode()); process.addNode(new EndNode()); process.addNode(new ActionNode()); process.addNode(new Split()); process.addNode(new Join()); process.addNode(new MilestoneNode()); process.addNode(new RuleSetNode()); process.addNode(new SubProcessNode()); process.addNode(new WorkItemNode()); process.addNode(new TimerNode()); process.addNode(new HumanTaskNode()); process.addNode(new ForEachNode()); process.addNode(new CompositeContextNode()); process.addNode(new EventNode()); process.addNode(new FaultNode()); process.addNode(new StateNode()); process.addNode(new DynamicNode()); assertEquals(17, process.getNodes().length);
private static void insertNodeInBetween(RuleFlowProcess process, long startNodeId, long endNodeId, NodeImpl node) { if (process == null) { throw new IllegalArgumentException("Process may not be null"); } NodeImpl selectedNode = (NodeImpl) process.getNode(startNodeId); if (selectedNode == null) { throw new IllegalArgumentException("Node " + startNodeId + " not found in process " + process.getId()); } for (Connection connection: selectedNode.getDefaultOutgoingConnections()) { if (connection.getTo().getId() == endNodeId) { process.addNode(node); NodeImpl endNode = (NodeImpl) connection.getTo(); ((ConnectionImpl) connection).terminate(); new ConnectionImpl(selectedNode, NodeImpl.CONNECTION_DEFAULT_TYPE, node, NodeImpl.CONNECTION_DEFAULT_TYPE); new ConnectionImpl(node, NodeImpl.CONNECTION_DEFAULT_TYPE, endNode, NodeImpl.CONNECTION_DEFAULT_TYPE); return; } } throw new IllegalArgumentException("Connection to node " + endNodeId + " not found in process " + process.getId()); }
public ProcessValidationError[] validateProcess(final RuleFlowProcess process) { final List<ProcessValidationError> errors = new ArrayList<ProcessValidationError>(); if (process.getName() == null) { errors.add(new ProcessValidationErrorImpl(process, "Process has no name.")); if (process.getId() == null || "".equals(process.getId())) { errors.add(new ProcessValidationErrorImpl(process, "Process has no id.")); if (process.getStartNodes().isEmpty() && !process.isDynamic()) { errors.add(new ProcessValidationErrorImpl(process, "Process has no start node.")); if (process.getEndNodes().isEmpty() && !process.isDynamic()) { errors.add(new ProcessValidationErrorImpl(process, "Process has no end node.")); validateNodes(process.getNodes(), errors, process); process.isDynamic(), errors, process);
private static void linkBoundaryConditionEvent(NodeContainer nodeContainer, Node node, String attachedTo, Node attachedNode) { String processId = ((RuleFlowProcess) nodeContainer).getId(); String eventType = "RuleFlowStateEvent-" + processId + "-" + ((EventNode) node).getUniqueId() + "-" + attachedTo; ((EventTypeFilter) ((EventNode) node).getEventFilters().get(0)).setType(eventType); boolean cancelActivity = (Boolean) node.getMetaData().get("CancelActivity"); if (cancelActivity) { List<DroolsAction> actions = ((EventNode) node).getActions(EndNode.EVENT_NODE_EXIT); if (actions == null) { actions = new ArrayList<DroolsAction>(); } DroolsConsequenceAction action = new DroolsConsequenceAction("java", null); action.setMetaData("Action", new CancelNodeInstanceAction(attachedTo)); actions.add(action); ((EventNode) node).setActions(EndNode.EVENT_NODE_EXIT, actions); } }
@Test public void testLoadMinimalCase() throws Exception { KieBase kbase = createKnowledgeBase("CMMN-MinimalCase.cmmn"); assertThat(kbase).isNotNull(); Process process = kbase.getProcess("loan_application"); assertThat(process).isNotNull(); assertThat(process).isInstanceOf(RuleFlowProcess.class); RuleFlowProcess caseProcess = (RuleFlowProcess) process; assertThat(caseProcess.isDynamic()).isTrue(); assertThat(caseProcess.getId()).isEqualTo("loan_application"); assertThat(caseProcess.getName()).isEqualTo("Loan Application"); }