public KieSession genSession(String[] sources, int numerrors) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); for (String source : sources) kbuilder.add( ResourceFactory.newClassPathResource(source, getClass()), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( kbuilder.getErrors().size() > 0 ) { for ( KnowledgeBuilderError error : kbuilder.getErrors() ) { System.err.println( error ); } } assertEquals(numerrors, errors.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); return createKnowledgeSession(kbase); } }
private KieBase createKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("memory/BPMN2-RuleTaskWithInsertProcessInstance.bpmn2"), ResourceType.BPMN2); kbuilder.add(ResourceFactory.newClassPathResource("memory/ProcessInstanceRule.drl"), ResourceType.DRL); if (!kbuilder.getErrors().isEmpty()) { Iterator<KnowledgeBuilderError> errIter = kbuilder.getErrors().iterator(); while( errIter.hasNext() ) { KnowledgeBuilderError err = errIter.next(); StringBuilder lines = new StringBuilder(""); if( err.getLines().length > 0 ) { lines.append(err.getLines()[0]); for( int i = 1; i < err.getLines().length; ++i ) { lines.append(", " + err.getLines()[i]); } } logger.warn( err.getMessage() + " (" + lines.toString() + ")" ); } throw new IllegalArgumentException("Errors while parsing knowledge base"); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); return kbase; }
private KieBase readKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newInputStreamResource(getClass().getResourceAsStream("strevaluator_test.drl")), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { System.err.println(error); } throw new IllegalArgumentException("Could not parse knowledge." + errors.toArray()); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); return kbase; }
public void loadPackages( Resource res, ResourceType type ) { kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( res, type ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) { System.err.println( error ); } throw new IllegalArgumentException( "Could not parse knowledge." ); } }
@Test public void testRuleExtendsNonexistingRule() { // DROOLS-100 String str = "package org.drools.test;\n" + "\n" + "global java.util.List list;\n" + "\n" + "rule \"Base\"\n" + "when\n" + " String( this == \"go\" )\n" + "then\n" + "end\n" + "\n" + "rule \"ExtYes\" extends \"Bas\"\n" + "when\n" + "then\n" + " list.add( 1 );\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL ); assertTrue( kbuilder.hasErrors() ); kbuilder.getErrors().iterator().next().toString().contains("Base"); }
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("errors_in_rule.drl", getClass()), ResourceType.DRL); final KnowledgeBuilderError[] errors = kbuilder.getErrors().toArray(new KnowledgeBuilderError[0]); assertEquals(3, errors.length);
@Test public void testAccumulateWithPR() { String drl = "declare A end\n" + " " + "declare B\n" + " value : String\n" + "end\n" + " " + "rule Foo when\n" + " $s : A()\n" + " accumulate( String()\n" + " and\n" + " B( $val : value ),\n" + " $set : collectSet( $val )\n" + " )\n" + "then end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( drl.getBytes() ), ResourceType.DRL ); kbuilder.newKieBase().newKieSession(); assertTrue( kbuilder.getErrors().isEmpty() ); }
"end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); CompositeKnowledgeBuilder ckb = kbuilder.batch(); ckb.add( ResourceFactory.newByteArrayResource( str3.getBytes() ), ResourceType.DRL ) .add( ResourceFactory.newByteArrayResource( str1.getBytes() ), ResourceType.DRL ) .add( ResourceFactory.newByteArrayResource( str2.getBytes() ), ResourceType.DRL ) .build(); assertTrue( kbuilder.hasErrors() ); assertEquals( 1, kbuilder.getErrors().size() ); assertTrue( kbuilder.getErrors().iterator().next().toString().contains("Circular") );
private void checkDSLExpanderTest(KnowledgeBuilder kbuilder) throws IOException, ClassNotFoundException { assertFalse( kbuilder.hasErrors() ); final String err = kbuilder.getErrors().toString(); assertEquals( "", err ); assertEquals( 0, kbuilder.getErrors().size() ); // the compiled package final Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages(); assertEquals( 2, pkgs.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( pkgs ); kbase = SerializationHelper.serializeObject(kbase); KieSession session = createKnowledgeSession(kbase); session.insert( new Person( "Bob", "http://foo.bar" ) ); session.insert( new Cheese( "stilton", 42 ) ); final List messages = new ArrayList(); session.setGlobal( "messages", messages ); session.fireAllRules(); assertEquals( 1, messages.size() ); }
PackageBuilderConfiguration kconf = (PackageBuilderConfiguration) KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(); if ( this.accumulateFunctions != null && !this.accumulateFunctions.isEmpty() ) { for ( Entry<String, AccumulateFunction> entry : this.accumulateFunctions.entrySet() ) { kbuilder.add( res.getDroolsResource(), res.getResourceType() ); } else { kbuilder.add( res.getDroolsResource(), res.getResourceType(), res.getResourceConfiguration() ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( !errors.isEmpty() ) { throw new RuntimeException( errors.toString() );
public KnowledgeBase newKBase(URLClassLoader loader) { KnowledgeBuilderConfiguration kbuilderConfig = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, loader); // Create the agent using the builder configuration KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration(); KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, loader); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig); KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(knowledgeAgentName, kbase, aconf, kbuilderConfig); kbase = kagent.getKnowledgeBase(); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbuilderConfig); addRules(kbuilder); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) System.err.println(error); throw new IllegalArgumentException("Could not parse knowledge."); } kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; }
@Test public void testDuplicatePropertyNamesInWatchAnnotation() throws Exception { String rule = "package org.drools.compiler.integrationtests\n" + "dialect \"mvel\"\n" + "declare A\n" + " s : String\n" + "end\n" + "declare B\n" + " @propertyReactive\n" + " on : boolean\n" + " s : String\n" + "end\n" + "rule R1\n" + "when\n" + " A($s : s)\n" + " $b : B(s != $s) @watch( s, !s )\n" + "then\n" + " modify($b) { setS($s) }\n" + "end\n" + "rule R2\n" + "when\n" + " $b : B(on == false)\n" + "then\n" + " modify($b) { setOn(true) }\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL ); assertEquals(1, kbuilder.getErrors().size()); }
@Test public void testJBRULES2872() { final String str = "package org.drools.compiler.test\n" + "import org.drools.compiler.FactA\n" + "rule X\n" + "when\n" + " FactA( enumVal == TestEnum.ONE || == TestEnum.TWO )\n" + "then\n" + "end\n"; final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL); assertTrue(kbuilder.hasErrors()); final KnowledgeBuilderErrors errors = kbuilder.getErrors(); assertEquals(1, errors.size()); final KnowledgeBuilderError error = errors.iterator().next(); assertEquals(5, error.getLines()[0]); }
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "errors_in_rule.drl", getClass() ), ResourceType.DRL ); KnowledgeBuilderError[] errors = kbuilder.getErrors().toArray( new KnowledgeBuilderError[0] ); assertEquals( 3, errors.length );
@Test @Ignore("antlr cannot parse correctly if the file ends with a comment without a further line break") public void testEmptyDSL() throws Exception { // FIXME etirelli / mic_hat not sure what to do with this? final String DSL = "# This is an empty dsl file."; // gives antlr <EOF> error KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "test_expander.dsl", getClass() ), ResourceType.DSL ); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( DSL) ) , ResourceType.DSLR ); assertFalse( kbuilder.hasErrors() ); // trying to expand Cheese() pattern // Check errors final String err = kbuilder.getErrors().toString(); assertEquals( "", err ); assertEquals( 0, kbuilder.getErrors().size() ); // the compiled package Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages(); assertEquals( 0, pkgs.size() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( pkgs ); kbase = SerializationHelper.serializeObject(kbase); KieSession session = createKnowledgeSession(kbase); pkgs = SerializationHelper.serializeObject(pkgs); assertNull( pkgs ); }
@Test public void testCallActivity() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.bpmn2"), ResourceType.BPMN2); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.bpmn2"), ResourceType.BPMN2); if (!kbuilder.getErrors().isEmpty()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { logger.error("{}", error); } throw new IllegalArgumentException("Errors while parsing knowledge base"); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); KieSession ksession = createKnowledgeSession(kbase); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", "oldValue"); ProcessInstance processInstance = ksession.startProcess("ParentProcess", params); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_COMPLETED); assertThat(((WorkflowProcessInstance) processInstance).getVariable("y")).isEqualTo("new value"); }
@Test public void testWrongPropertyNameInWatchAnnotation() throws Exception { String rule = "package org.drools.compiler.integrationtests\n" + "dialect \"mvel\"\n" + "declare A\n" + " s : String\n" + "end\n" + "declare B\n" + " @propertyReactive\n" + " on : boolean\n" + " s : String\n" + "end\n" + "rule R1\n" + "when\n" + " A($s : s)\n" + " $b : B(s != $s) @watch( !s1, on )\n" + "then\n" + " modify($b) { setS($s) }\n" + "end\n" + "rule R2\n" + "when\n" + " $b : B(on == false)\n" + "then\n" + " modify($b) { setOn(true) }\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL ); assertEquals(1, kbuilder.getErrors().size()); }
@Test public void testJBRULES2872() { String str = "package org.drools.compiler.test\n" + "import org.drools.compiler.FactA\n" + "rule X\n" + "when\n" + " FactA( enumVal == TestEnum.ONE || == TestEnum.TWO )\n" + "then\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); assertTrue( kbuilder.hasErrors() ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); logger.info( errors.toString() ); assertEquals( 1, errors.size() ); KnowledgeBuilderError error = errors.iterator().next(); assertEquals( 5, error.getLines()[0] ); }
@Test public void testDSLWithIndividualConstraintMappings() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "test_dslWithIndividualConstraints.dsl", getClass() ), ResourceType.DSL ); kbuilder.add( ResourceFactory.newClassPathResource( "test_dslWithIndividualConstraints.dslr", getClass() ) , ResourceType.DSLR ); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); err ); assertEquals(0, kbuilder.getErrors().size()); assertEquals(1, pkgs.size()); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(pkgs); kbase = SerializationHelper.serializeObject(kbase);