@Before public void setUp() { this.kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(); pkg = new KnowledgePackageImpl("org.droos.test"); pkg.setClassFieldAccessorCache(new ClassFieldAccessorCache(Thread.currentThread().getContextClassLoader())); JavaDialectRuntimeData data = new JavaDialectRuntimeData(); data.onAdd(pkg.getDialectRuntimeRegistry(), kBase.getRootClassLoader()); pkg.getDialectRuntimeRegistry().setDialectData("java", data); // we need to add one rule to the package because the previous deadlock was encountered // while removing rules from a package when said package is removed from the rulebase rule = new RuleImpl("Test"); rule.setDialect("java"); rule.setConsequence(new Consequence() { public void evaluate(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory) throws Exception { } public String getName() { return "default"; } }); pkg.addRule(rule); kBase.addPackage(pkg); }
@Test public void testDefaultConsequenceWithSingleNamedConsequenceCompilation() { String defaultCon = " System.out.println(\"this is a test\" + $cheese);\n "; Map<String, Object> namedConsequences = new HashMap<String, Object>(); String name1 = " System.out.println(\"this is a test name1\" + $cheese);\n "; namedConsequences.put( "name1", name1 ); setupTest( defaultCon, namedConsequences); assertEquals( 1, context.getRule().getNamedConsequences().size() ); assertTrue( context.getRule().getConsequence() instanceof MVELConsequence ); assertTrue( context.getRule().getNamedConsequences().get( "name1" ) instanceof MVELConsequence ); assertNotSame( context.getRule().getConsequence(), context.getRule().getNamedConsequences().get( "name1" ) ); }
public static void addRule(String ruleName, RuleImpl firingRule) throws Exception { String rule = rules.get(ruleName); CommonTestMethodBase testBaseMethod = new CommonTestMethodBase(); kbase.addPackages(testBaseMethod.loadKnowledgePackagesFromString( rule )); if (firingRule != null) { kbase.removeRule("defaultpkg", firingRule.getName()); } }
public boolean accept(Match activation) { RuleImpl rule = (RuleImpl)activation.getRule(); if (currentSalience == null){ currentSalience = rule.getSalience() != null ? Integer.valueOf(rule.getSalience().toString()) : 0; } boolean nocancel = currentSalience >= Integer.valueOf(rule.getSalience().toString()); if(!nocancel){ logger.info("cancelling -> {}", rule.getName()); } return nocancel; } }
@Test public void testGetSalienceValue() { final RuleImpl rule = new RuleImpl( "myrule" ); final int salienceValue = 100; Salience salience = new SalienceInteger(salienceValue); rule.setSalience(salience); assertEquals(salienceValue, rule.getSalienceValue()); assertFalse(rule.isSalienceDynamic()); }
@Test public void testIsSalienceDynamic() { final RuleImpl rule = new RuleImpl( "myrule" ); Salience salience = new MVELSalienceExpression(); rule.setSalience(salience); assertTrue(rule.isSalienceDynamic()); }
"\n"; KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL) .build() .newKieSession(); ksession.insert( new Integer( 1 ) ); ksession.insert( new Integer( 2 ) ); ksession.insert( new Integer( 3 ) ); ksession.fireAllRules(); list = new ArrayList(); for ( AgendaItem act = (AgendaItem) it.next(); act != null; act = (AgendaItem) it.next() ) { list.add( act.getRule().getName() + ":" + act.getDeclarationValue( "$s1" ) + ":" + act.isQueued() );
((ClassObjectType) ((ObjectTypeNode) nodes.get( 3 )).getObjectType()).getClassType().getSimpleName() ); assertEquals( "Rule 1", ((RuleTerminalNode) nodes.get( 5 )).getRule().getName() ); KieSession session = kBase.newKieSession(); session.setGlobal( "list", list ); session.insert( p ); session.fireAllRules();
""; KieHelper helper = new KieHelper(); helper.addContent( drl, ResourceType.DRL ); KieSession session = helper.build().newKieSession(); session.setGlobal( "list", list ); for ( Rule r : session.getKieBase().getKiePackage( "org.drools.test" ).getRules() ) { ( (RuleImpl) r ).setSalience( new Salience() { @Override public int getValue( KnowledgeHelper khelper, Rule rule, WorkingMemory workingMemory ) { session.insert( new Person( "a", 1 ) ); session.insert( new Person( "a", 5 ) ); session.insert( new Person( "a", 3 ) );
KieSession ksession = kbase.newKieSession(); List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.insert( new Entity() ); ksession.fireAllRules(); for ( final Object o : ksession.getObjects( new ObjectFilter() { LeftTuple first = handle.getFirstLeftTuple(); assertTrue( first instanceof RuleTerminalNodeLeftTuple ); assertEquals( "Check", ((RuleTerminalNodeLeftTuple) first).getRule().getName() );
@Test @Ignore public void testAgendaEventListener() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); final RuleImpl rule = new RuleImpl( "test1" ); rule.setEager(true); rule.setAgendaGroup( "test group" ); final ClassObjectType cheeseObjectType = new ClassObjectType( Cheese.class ); final Pattern pattern = new Pattern( 0, cheeseObjectType ); rule.addPattern( pattern ); rule.setConsequence( new Consequence() { public void evaluate(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory) throws Exception { pkg.addRule( rule ); kbase.addPackages( Collections.singleton(pkg) ); ksession.addEventListener( agendaEventListener ); assertEquals( 1, ksession.getAgendaEventListeners().size() ); FactHandle cheddarHandle = ksession.insert( cheddar ); InternalAgenda agenda = (InternalAgenda) ksession.getAgenda();
RuleImpl rule; InternalKnowledgePackage pkg; kBase = KnowledgeBaseFactory.newKnowledgeBase(); pkg.setClassFieldAccessorCache(new ClassFieldAccessorCache(Thread.currentThread().getContextClassLoader())); data.onAdd(pkg.getDialectRuntimeRegistry(), kBase.getRootClassLoader()); pkg.getDialectRuntimeRegistry().setDialectData("java", data); rule = new RuleImpl("Test"); rule.setDialect("java"); rule.setConsequence(new Consequence() { public void evaluate(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory) throws Exception { pkg.addRule(rule); kBase.addPackage(pkg); KieSession session = kBase.newKieSession(); Command dispose = KieServices.Factory.get().getCommands().newDispose(); session.insert("whatever"); session.fireAllRules(); session.execute(dispose); try { session.insert("whatever");
"\n"; KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL) .build() .newKieSession(); list.add( "2" ); ksession.setGlobal( "list", list ); ksession.fireAllRules(); list.add( act.getRule().getName() + ":" + act.getDeclarationValue( "$s1" ) + ":" + act.isQueued() );
back.getName() ); final RuleImpl newRule = newPkg.getRule( "rule-1" ); InternalKnowledgeBase kBase = (InternalKnowledgeBase)KnowledgeBaseFactory.newKnowledgeBase(); newPkg.getDialectRuntimeRegistry().onAdd( kBase.getRootClassLoader() ); newPkg.getDialectRuntimeRegistry().onBeforeExecute(); kBase.getGlobals().put( "map", Map.class ); final KieSession workingMemory = kBase.newKieSession(); workingMemory.setGlobal( "map", map ); tuple.setLeftTupleSink( new RuleTerminalNode(1, new CompositeObjectSinkAdapterTest.MockBetaNode(), newRule,newRule.getLhs(), 0, new BuildContext(kBase) ) ); final Activation activation = new MockActivation( newRule, 0, newRule.getLhs(), tuple ); knowledgeHelper.setActivation( activation ); newRule.getConsequence().evaluate( knowledgeHelper, ((StatefulKnowledgeSessionImpl)workingMemory) ); assertEquals( new Integer( 1 ),
builder.addPackage( packageDescr ); builder.getErrors().getErrors() ); tuple.setLeftTupleSink( new RuleTerminalNode(1, new CompositeObjectSinkAdapterTest.MockBetaNode(), rule,rule.getLhs(), 0,new BuildContext(kBase) ) ); final Activation activation = new MockActivation( rule, 0, rule.getLhs(), tuple ); knowledgeHelper.setActivation( activation ); rule.getConsequence().evaluate( knowledgeHelper, ((StatefulKnowledgeSessionImpl)workingMemory) ); assertEquals( new Integer( 1 ), pkg.removeRule( rule ); ((JavaDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData( "java" )).getStore().size() ); builder.addPackage( packageDescr ); knowledgeHelper.setActivation( activation ); rule.getConsequence().evaluate( knowledgeHelper, ((StatefulKnowledgeSessionImpl)workingMemory) ); assertEquals( new Integer( 2 ),
@Test @Ignore("This test is suspicious to say the least...") public void testScheduledActivation() { KnowledgeBaseImpl knowledgeBase = (KnowledgeBaseImpl) KnowledgeBaseFactory.newKnowledgeBase(); KnowledgePackageImpl impl = new KnowledgePackageImpl( "test" ); final RuleImpl rule = new RuleImpl( "test-rule" ); new RuleTerminalNode( 1, new MockTupleSource( 2 ), rule, rule.getLhs(), 0, buildContext ); rule.setConsequence( new Consequence() { public void evaluate(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory) throws Exception { rule.setTimer( new DurationTimer( 10000 ) ); rule.setPackage( "test" ); impl.addRule( rule ); config.setClockType( ClockType.PSEUDO_CLOCK ); KieSession ksession = knowledgeBase.newKieSession( config, KieServices.get().newEnvironment() ); PseudoClockScheduler scheduler = (PseudoClockScheduler) ksession.<SessionClock> getSessionClock(); Marshaller marshaller = MarshallerFactory.newMarshaller( knowledgeBase ); ksession.insert( "cheese" ); assertTrue( fired.isEmpty() );
InternalKnowledgePackage pkg = pkgBuilder.getPackageRegistry( "pkg1" ).getPackage(); final RuleDescr ruleDescr = new RuleDescr( "rule 1" ); ruleDescr.setNamespace( "pkg1" ); ruleDescr.setConsequence( "modify (cheese) {price = 5 };\nretract (cheese)" ); DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry(); "cheese" ); final GroupElement subrule = new GroupElement( GroupElement.AND ); subrule.addChild( pattern ); final Map<String, Declaration> map = new HashMap<String, Declaration>(); map.put( "cheese", builder.build( context, RuleImpl.DEFAULT_CONSEQUENCE_NAME ); InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(); PropagationContextFactory pctxFactory = kBase.getConfiguration().getComponentFactory().getPropagationContextFactory(); kBase.addPackage(pkg); StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession(); final DefaultKnowledgeHelper kbHelper = new DefaultKnowledgeHelper( ksession ); kbHelper.setActivation( item ); ((MVELConsequence) context.getRule().getConsequence()).compile( (MVELDialectRuntimeData) pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectRuntimeRegistry().getDialectData( "mvel" )); context.getRule().getConsequence().evaluate( kbHelper, ksession );
System.out.println( drl ); KnowledgeBuilderImpl knowledgeBuilder = (KnowledgeBuilderImpl)KnowledgeBuilderFactory.newKnowledgeBuilder(); knowledgeBuilder.add( new ByteArrayResource( drl.getBytes() ), ResourceType.DRL ); System.err.println( knowledgeBuilder.getErrors() ); assertFalse( knowledgeBuilder.getErrors().toString(), knowledgeBuilder.hasErrors() ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( knowledgeBuilder.getKnowledgePackages() ); KieSession knowledgeSession = kbase.newKieSession(); KiePackage rebuiltPkg = knowledgeBuilder.getPackage( "org.test" ); RuleImpl r = ((RuleImpl) rule); assertEquals( 2, r.getLhs().getChildren().size() ); Iterator<RuleConditionElement> iter = r.getLhs().getChildren().iterator(); assertTrue( arg1 instanceof GroupElement && ((GroupElement) arg1).getType() == GroupElement.Type.OR ); assertEquals( 2, ((GroupElement) arg1).getChildren().size() );
"end \n"; InternalKnowledgeBase kbase = (InternalKnowledgeBase) new KieHelper().addContent( str, ResourceType.DRL ).build(); EntryPointNode epn = kbase.getRete().getEntryPointNode( EntryPointId.DEFAULT ); ObjectTypeNode otn = epn.getObjectTypeNodes().get( new ClassObjectType( Long.class) ); BetaNode beta1 = (BetaNode) otn.getObjectSinkPropagator().getSinks()[0]; assertTrue( asList(rian.getPathEndNodes()).containsAll( asList(rtn1, rtn2, rian) ) ); kbase.removeRule( "org.test", "xxx" ); RuleTerminalNode remainingRTN = rtn1.getRule().getName().equals( "yyy" ) ? rtn1 : rtn2; assertTrue( asList(rian.getPathEndNodes()).containsAll( asList(remainingRTN, rian) ) );
KnowledgeBuilderConfigurationImpl cfg1 = new KnowledgeBuilderConfigurationImpl( properties ); KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl( pkg, cfg1 ); PackageRegistry pkgRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ); DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry(); MVELDialect mvelDialect = (MVELDialect) dialectRegistry.getDialect( pkgRegistry.getDialect() ); builder.build( context, RuleImpl.DEFAULT_CONSEQUENCE_NAME ); InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(); StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession(); kbHelper.setActivation( item ); try { ((MVELConsequence) context.getRule().getConsequence()).compile( (MVELDialectRuntimeData) pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectRuntimeRegistry().getDialectData( "mvel" ) ); context.getRule().getConsequence().evaluate( kbHelper, ksession ); fail( "should throw an exception, as 'if' is not allowed" );