@SuppressWarnings("unused") private static KnowledgePackage getProcessWorkItems() { 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); ActionNode actionNode = new ActionNode(); actionNode.setId(2); 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( start, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE); WorkItemNode workItemNode = new WorkItemNode(); workItemNode.setId(3); workItemNode.setName("WorkItem1"); Work work = new WorkImpl(); work.setName("MyWork"); workItemNode.setWork(work); process.addNode(workItemNode); new ConnectionImpl( actionNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode, Node.CONNECTION_DEFAULT_TYPE); WorkItemNode workItemNode2 = new WorkItemNode(); workItemNode2.setId(4); workItemNode2.setName("WorkItem2"); work = new WorkImpl(); work.setName("MyWork"); workItemNode2.setWork(work); process.addNode(workItemNode2); new ConnectionImpl( workItemNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode2, Node.CONNECTION_DEFAULT_TYPE); WorkItemNode workItemNode3 = new WorkItemNode(); workItemNode3.setId(5); workItemNode3.setName("WorkItem3"); work = new WorkImpl(); work.setName("MyWork"); workItemNode3.setWork(work); process.addNode(workItemNode3); new ConnectionImpl( workItemNode2, Node.CONNECTION_DEFAULT_TYPE, workItemNode3, Node.CONNECTION_DEFAULT_TYPE); EndNode end = new EndNode(); end.setId(6); end.setName("End"); process.addNode(end); new ConnectionImpl( workItemNode3, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE); KnowledgeBuilderImpl packageBuilder = new KnowledgeBuilderImpl(); ProcessBuilderImpl processBuilder = new ProcessBuilderImpl(packageBuilder); processBuilder.buildProcess(process, null); return packageBuilder.getPackage(); }
@Test public void testSimpleReturnValueConstraintEvaluator() throws Exception { final InternalKnowledgePackage pkg = new KnowledgePackageImpl("pkg1"); ProcessDescr processDescr = new ProcessDescr(); processDescr.setClassName("Process1"); processDescr.setName("Process1"); WorkflowProcessImpl process = new WorkflowProcessImpl(); process.setName("Process1"); process.setPackageName("pkg1"); ReturnValueDescr descr = new ReturnValueDescr(); descr.setText("return value;"); KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl(pkg); DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry(pkg.getName()).getDialectCompiletimeRegistry(); JavaDialect javaDialect = (JavaDialect) dialectRegistry.getDialect("java"); ProcessBuildContext context = new ProcessBuildContext( pkgBuilder, pkg, process, processDescr, dialectRegistry, javaDialect); pkgBuilder.addPackageFromDrl(new StringReader("package pkg1;\nglobal Boolean value;")); ReturnValueConstraintEvaluator node = new ReturnValueConstraintEvaluator(); final JavaReturnValueEvaluatorBuilder builder = new JavaReturnValueEvaluatorBuilder(); builder.build(context, node, descr, null); ProcessDialectRegistry.getDialect(JavaDialect.ID).addProcess(context); javaDialect.compileAll(); assertEquals(0, javaDialect.getResults().size()); final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); List<KnowledgePackage> packages = new ArrayList<KnowledgePackage>(); packages.add(pkgBuilder.getPackage()); kbase.addKnowledgePackages(packages); final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.setGlobal("value", true); RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance(); processInstance.setKnowledgeRuntime((InternalKnowledgeRuntime) ksession); SplitInstance splitInstance = new SplitInstance(); splitInstance.setProcessInstance(processInstance); assertTrue(node.evaluate(splitInstance, null, null)); ksession.setGlobal("value", false); assertFalse(node.evaluate(splitInstance, null, null)); }
@SuppressWarnings("unused") private static KnowledgePackage getProcessTimer2() { RuleFlowProcess process = new RuleFlowProcess(); process.setId("org.drools.test.ProcessTimer2"); process.setName("ProcessTimer2"); 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"); 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( "try { Thread.sleep(1000); } catch (Throwable t) {} 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 packageBuilder.getPackage(); }
protected static KnowledgeBase createKnowledgeBase() { // create a builder KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); // load the process Reader source = new InputStreamReader( AbstractWorkingMemoryDbLoggerTest.class.getResourceAsStream("/ruleflow.rf")); builder.addProcessFromXml(source); source = new InputStreamReader( AbstractWorkingMemoryDbLoggerTest.class.getResourceAsStream("/ruleflow2.rf")); builder.addProcessFromXml(source); source = new InputStreamReader( AbstractWorkingMemoryDbLoggerTest.class.getResourceAsStream("/ruleflow3.rf")); builder.addProcessFromXml(source); // create the knowledge base KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages((Collection) Arrays.asList(builder.getPackage())); return kbase; }
/** * 加载规则package * * @param userRule */ private void loadPackage(UserRule userRule) { if (kBase.getKiePackage("com.camel.drools.expert.sample." + userRule.getUserCode()) != null) { return; } final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); File file = new File( KieSpringBasicService.class.getResource("/").getPath().toString() + drlDirPath + userRule.getUserCode() + ".drl"); try { String drl = FileUtils.readFileToString(file); builder.addPackageFromDrl(new StringReader(drl)); if (builder.hasErrors()) { System.out.println("[ERROR: Parsing drl error: " + builder.getErrors()); } } catch (DroolsParserException | IOException e) { e.printStackTrace(); } ((InternalKnowledgeBase) kBase).addPackage(builder.getPackage()); }