@Test public void testGeneratedBeansMVEL() throws IllegalAccessException, InstantiationException { final KieBase kbase = loadKnowledgeBase("test_GeneratedBeansMVEL.drl"); // Retrieve the generated fact type final FactType pf = kbase.getFactType("mortgages", "Applicant"); final FactType af = kbase.getFactType("mortgages", "LoanApplication"); final Object person = pf.newInstance(); pf.set(person, "creditRating", "OK"); final Object application = af.newInstance(); final KieSession ksession = createKnowledgeSession(kbase); ksession.insert(person); ksession.insert(application); ksession.fireAllRules(); }
@Test public void testGeneratedBeans2() throws Exception { final KieBase kbase = loadKnowledgeBase("test_GeneratedBeans2.drl"); final FactType cheeseFact = kbase.getFactType("org.drools.generatedbeans", "Cheese"); final Object cheese = cheeseFact.newInstance(); cheeseFact.set(cheese, "type", "stilton"); assertEquals("stilton", cheeseFact.get(cheese, "type")); final Object cheese2 = cheeseFact.newInstance(); cheeseFact.set(cheese2, "type", "stilton"); assertEquals(cheese, cheese2); final FactType personType = kbase.getFactType("org.drools.generatedbeans", "Person"); final Object ps = personType.newInstance(); personType.set(ps, "name", "mark"); personType.set(ps, "last", "proctor"); personType.set(ps, "age", 42); final Object ps2 = personType.newInstance(); personType.set(ps2, "name", "mark"); personType.set(ps2, "last", "proctor"); personType.set(ps2, "age", 30); assertEquals(ps, ps2); personType.set(ps2, "last", "little"); assertFalse(ps.equals(ps2)); final Object cg = cheeseFact.newInstance(); wm.setGlobal("cg", cg); final List result = new ArrayList();
@Test public void testExtends() throws Exception { //Test Base Fact Type KieSession ksession = genSession("test_Extends.drl"); FactType person = ksession.getKieBase().getFactType("defaultpkg","Person"); FactType eqPair = ksession.getKieBase().getFactType("defaultpkg","EqualityPair"); Object p = person.newInstance(); assertNotNull(p); ksession.insert("Populate"); ksession.fireAllRules(); // A Rule will generate 3 Persons, one with default constructor, two with field constructor // and 3 Students, which extends Person. One with default, one with field constructor assertEquals(6, ksession.getObjects(new ClassObjectFilter(person.getFactClass())).size()); assertEquals(1+4+1+4,ksession.getObjects(new ClassObjectFilter(eqPair.getFactClass())).size()); ksession.dispose(); }
private Object newCancelFact(KieSession ksession, boolean cancel) { FactType type = ksession.getKieBase().getFactType("org.jboss.qa.brms.agendafilter", "CancelFact"); Object instance = null; try { instance = type.newInstance(); type.set(instance, "cancel", cancel); } catch (IllegalAccessException ex) { ex.printStackTrace(); } catch (InstantiationException ex) { ex.printStackTrace(); } return instance; }
private Object createDRLStock(final String name, final Double value) throws IllegalAccessException, InstantiationException { final FactType stockType = kbase.getFactType(DRL_PACKAGE_NAME, DRL_FACT_NAME); final Object stock = stockType.newInstance(); stockType.set(stock, "name", name); stockType.set(stock, "value", value); return stock; } }
@Test public void testCompositeBuilding() throws Exception { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( ResourceFactory.newClassPathResource( source1 ).setResourceType( ResourceType.PMML ) ); kfs.write( ResourceFactory.newClassPathResource( source2 ).setResourceType( ResourceType.PMML ) ); KieBuilder kb = ks.newKieBuilder( kfs ); kb.buildAll(); KieSession kSession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); setKbase( kSession.getKieBase() ); kSession.fireAllRules(); assertEquals( 2, kSession.getObjects( new ClassObjectFilter( ModelMarker.class ) ).size() ); assertEquals( 11, kSession.getObjects( new ClassObjectFilter( kSession.getKieBase().getFactType( packageName, "Synapse" ).getFactClass() ) ).size() ); kSession.dispose(); checkGeneratedRules(); }
"end\n"; kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( declarationA.getBytes() ), ResourceType.DRL ); kbuilder.add( ResourceFactory.newByteArrayResource( declarationB.getBytes() ), ResourceType.DRL ); assertTrue( kbuilder.hasErrors() ); KnowledgeBuilder kbuilder2 = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder2.batch() .add( ResourceFactory.newByteArrayResource( rule.getBytes() ), ResourceType.DRL ) FactType aType = kbase.getFactType( "org.drools.compiler.test", "FactA" ); Object a = aType.newInstance(); FactType bType = kbase.getFactType( "org.drools.compiler.test", "FactB" ); Object b = bType.newInstance(); aType.set( a, "fieldB", b ); bType.set( b, "fieldA", a ); b.toString(); ksession.insert( a ); ksession.insert( b ); int rules = ksession.fireAllRules(); assertEquals( 1, rules );
@Test public void testHelloWorld() throws Exception { // DROOLS-145 String drl = "package org.drools.test\n" + "declare Message\n" + " message : String\n" + "end\n" + "rule R1 when\n" + " $m : Message( message == \"Hello World\" )\n" + "then\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); KieBuilder builder = ks.newKieBuilder( kfs ).buildAll(); assertEquals( 0, builder.getResults().getMessages().size() ); ks.getRepository().addKieModule( builder.getKieModule() ); KieSession ksession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); FactType messageType = ksession.getKieBase().getFactType( "org.drools.test", "Message" ); Object message = messageType.newInstance(); messageType.set( message, "message", "Hello World" ); ksession.insert( message ); assertEquals( 1, ksession.fireAllRules() ); KieSession ksession2 = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession(); FactType messageType2 = ksession2.getKieBase().getFactType( "org.drools.test", "Message" ); Object message2 = messageType2.newInstance(); messageType2.set( message2, "message", "Hello World" ); ksession2.insert( message2 ); assertEquals( 1, ksession2.fireAllRules() ); }
@Test(timeout = 10000 ) public void testDefeasibleEntailmentWithStrictOverride() { KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/strictOverride.drl" ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Ctype = kSession.getKieBase().getFactType( "org.drools.defeasible", "C" ); FactType Xtype = kSession.getKieBase().getFactType( "org.drools.defeasible", "X" ); ObjectHashMap keys = tms.getEqualityKeyMap(); Iterator iter = keys.iterator(); ObjectHashMap.ObjectEntry entry; while ( ( entry = ( ObjectHashMap.ObjectEntry) iter.next() ) != null ) { EqualityKey key = (EqualityKey) entry.getValue(); Class factClass = key.getFactHandle().getObject().getClass(); if ( factClass == Ctype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFINITELY ); } else if ( factClass == Xtype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFINITELY ); } else { fail( "Unrecognized object has been logically justified : " + factClass ); } } assertEquals( 5, kSession.getObjects().size() ); }
""; KnowledgeBuilder kbuilderImpl = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilderImpl.add( ResourceFactory.newByteArrayResource( drl.getBytes() ), ResourceType.DRL ); if ( kbuilderImpl.hasErrors() ) { fail( kbuilderImpl.getErrors().toString() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilderImpl.getKnowledgePackages() ); KieSession ks = kbase.newKieSession(); ArrayList list = new ArrayList(); ks.setGlobal( "list", list ); FactHandle handle = ks.insert( "go" ); ks.fireAllRules(); assertEquals( Arrays.asList( 1, 2 ), list ); ks.fireAllRules(); for ( Object o : ks.getObjects( new ClassObjectFilter( ks.getKieBase().getFactType( "org.drools.test", "Y" ).getFactClass() ) ) ) { assertTrue( o instanceof TraitableBean );
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Resource res = ResourceFactory.newClassPathResource( source ); assertNotNull(res); kbuilder.add(res, ResourceType.DRL); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); InternalKnowledgeBase kb = KnowledgeBaseFactory.newKnowledgeBase(); kb.addPackages(kbuilder.getKnowledgePackages()); TraitFactory traitBuilder = ((KnowledgeBaseImpl) kb).getConfiguration().getComponentFactory().getTraitFactory(); TraitFactory.setMode( mode, kb ); FactType impClass = kb.getFactType("org.drools.compiler.trait.test","Imp"); TraitableBean imp = (TraitableBean) impClass.newInstance(); impClass.set(imp, "name", "aaabcd"); Class trait = kb.getFactType("org.drools.compiler.trait.test","Student").getFactClass(); Class trait2 = kb.getFactType("org.drools.compiler.trait.test","Role").getFactClass();
@Test public void testPositionalArguments() throws InstantiationException, IllegalAccessException { String drl = "package org.test;\n" + "global java.util.List names;\n" + "declare Person\n" + " name : String\n" + " age : int\n" + "end\n" + "rule R when \n" + " $p : Person( \"Mark\", 37; )\n" + "then\n" + " names.add( $p.getName() );\n" + "end\n"; KieBuilder kieBuilder = build(drl); assertFalse(kieBuilder.getResults().hasMessages(Message.Level.ERROR)); KieBase kieBase = KieServices.Factory.get().newKieContainer( kieBuilder.getKieModule().getReleaseId() ).getKieBase(); FactType factType = kieBase.getFactType( "org.test", "Person" ); Object instance = factType.newInstance(); factType.set(instance, "name", "Mark"); factType.set(instance, "age", 37); List<String> names = new ArrayList<String>(); KieSession ksession = kieBase.newKieSession(); ksession.setGlobal("names", names); ksession.insert(instance); ksession.fireAllRules(); assertEquals( 1, names.size() ); assertEquals( "Mark", names.get( 0 ) ); }
"end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); ks.newKieBuilder( kfs ).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); InternalKieModule kieModule = (InternalKieModule) ks.getRepository().getKieModule( releaseId ); byte[] jar = kieModule.getBytes(); FactType type = kbase.getFactType( "org.drools.compiler", "X" ); FactField foo = type.getField( "foo" ); Object x = type.newInstance(); foo.set( x, "Hello World" ); ksession.insert(x); int count = ksession.fireAllRules(); assertEquals( 1, count );
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ByteArrayResource(drl.getBytes()), ResourceType.DRL); if (kbuilder.hasErrors()) { fail(kbuilder.getErrors().toString()); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); KieSession ksession = createKnowledgeSession(kbase); ksession.setGlobal("ans",out); ksession.fireAllRules(); Object x = out.get(0); FactType type = kbase.getFactType("test.beans","Bean2"); assertEquals(4, type.get( x, "fld") ); assertEquals("xxx", type.get( x, "myField") ); assertEquals(0.0, type.get( x, "moref") );
@Test public void testCustomInputAdapter() { String source = PMML4Helper.pmmlDefaultPackageName().replace( ".", "/" ) + "/" + "mock_cold_adapter.xml"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( ResourceFactory.newClassPathResource( source ).setResourceType( ResourceType.PMML ) ); Results res = ks.newKieBuilder( kfs ).buildAll().getResults(); if ( res.hasMessages( Message.Level.ERROR ) ) { System.out.println( res.getMessages( Message.Level.ERROR ) ); } assertEquals( 0, res.getMessages( Message.Level.ERROR ).size() ); KieBase kieBase = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).getKieBase(); FactType ft = kieBase.getFactType( "test", "MyAdapter" ); assertTrue( ft != null ); assertTrue( ft.getFactClass().isInterface() ); FactType fto = kieBase.getFactType( "test", "MyOutAdapter" ); assertTrue( fto != null ); assertTrue( fto.getFactClass().isInterface() ); }
KieSession kSession = getSession( "org/drools/compiler/beliefsystem/defeasible/strictRetract.drl" ); FactHandle h = kSession.insert( "go" ); kSession.fireAllRules(); TruthMaintenanceSystem tms = ((NamedEntryPoint) kSession.getEntryPoint( "DEFAULT" )).getTruthMaintenanceSystem(); FactType Ctype = kSession.getKieBase().getFactType( "org.drools.defeasible", "C" ); FactType Atype = kSession.getKieBase().getFactType( "org.drools.defeasible", "A" ); if ( factClass == Ctype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFINITELY ); } else if ( factClass == Atype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFINITELY ); } else { if ( factClass == Ctype.getFactClass() ) { checkStatus( key, 1, DefeasibilityStatus.DEFEASIBLY ); } else {
KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.generateAndWritePomXML( ks.newReleaseId( "test", "foo", "1.0" ) ); KieModuleModel km = ks.newKieModuleModel(); km.newKieBaseModel( "rules" ) .addPackage( "org.drools.compiler.test2" ) KieContainer kc = ks.newKieContainer(builder.getKieModule().getReleaseId()); FactType ft = kc.getKieBase( "rules" ).getFactType( "org.drools.compiler.test2", "Child" ); assertNotNull( ft.getFactClass() ); assertEquals( "org.drools.compiler.test1.Parent", ft.getFactClass().getSuperclass().getName() );
session.setGlobal( "map", map ); session.insert( 3 ); session.insert( 42 ); session.insert( 11 ); assertTrue( map.keySet().containsAll( Arrays.asList( 3, 42, 11 ) ) ); FactType foo = session.getKieBase().getFactType( "org.drools.abductive.test", "Foo" ); for ( Object k : map.keySet() ) { Object val = map.get( k ); assertSame( foo.getFactClass(), val.getClass() ); assertEquals( k, foo.get( val, "id" ) );
@Test public void testGeneratedBeansSerializable() throws Exception { final KieBase kbase = loadKnowledgeBase("test_GeneratedBeansSerializable.drl"); final FactType cheeseFact = kbase.getFactType("org.drools.generatedbeans", "Cheese"); assertTrue("Generated beans must be serializable", Serializable.class.isAssignableFrom(cheeseFact.getFactClass())); final Object cheese = cheeseFact.newInstance(); cheeseFact.set(cheese, "type", "stilton"); final Object cheese2 = cheeseFact.newInstance(); cheeseFact.set(cheese2, "type", "brie"); final KieSession ksession = createKnowledgeSession(kbase); final List<Number> results = new ArrayList<>(); ksession.setGlobal("results", results); ksession.insert(cheese); ksession.insert(cheese2); ksession.fireAllRules(); assertEquals(1, results.size()); assertEquals(2, results.get(0).intValue()); } }
@Test public void testExtendsLegacy() throws Exception { KieSession ksession = genSession("test_ExtLegacy.drl",0); FactType leg = ksession.getKieBase().getFactType("org.drools.compiler","BetterLegacy"); assertNotNull(leg); Object b = leg.newInstance(); assertEquals(3.3,leg.get(b,"doubleField")); assertNull(leg.get(b,"objField")); assertEquals(245,leg.get(b,"intField")); assertEquals("XX",leg.get(b,"strField")); assertEquals(true,leg.get(b,"prop")); assertEquals("Hello",leg.get(b,"oneMoreField")); System.out.println(b); }