for( KnowledgePackage kpkg : kbuilder.getKnowledgePackages() ) { // need to clone the rule references for iteration Collection<Rule> rules = new ArrayList<Rule>( kpkg.getRules() ); for( Rule rule : rules ) { if( ! RULE_YOU_WANT.equals( rule.getName() ) ) { // NOT recommended as you are using internal APIs ((KnowledgePackageImp)kpkg).removeRule( rule ); } } }
public Collection<Rule> getRules() { return adaptRules(delegate.getRules()); }
/** * 打印规则 */ public void printRules() { logger.info("print rule: -----------------------"); kbase.getKnowledgePackages().forEach(knowledgePackage -> knowledgePackage.getRules().forEach(rule -> logger.info("print rule: " + knowledgePackage.getName() + "." + rule.getName()))); logger.info("print rule: -----------------------"); }
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(knowledgeBuilderConfig); knowledgeBuilder.add(ResourceFactory.newClassPathResource(ruleFile), ResourceType.DRL); Collection<KnowledgePackage> packages = knowledgeBuilder .getKnowledgePackages(); for (KnowledgePackage knowledgePackage : packages) { for (Rule rule : knowledgePackage.getRules()) { System.out.println(rule.getName()); } }
/** * Get a String showing all packages and rules in a knowledge base. */ public String kbString(KnowledgeBase kbase) { StringBuilder sb = new StringBuilder(); for (KnowledgePackage p : kbase.getKnowledgePackages()) { sb.append("\n Package : " + p.getName()); for (Rule r : p.getRules()) { sb.append("\n Rule: " + r.getName()); } } return "Knowledge base built with packages: " + sb.toString(); } /** * Get a String showing the facts currently in working memory, * and their details. * * @param session The session to search for facts. */ public String sessionFactsString(StatefulKnowledgeSession session) { StringBuilder sb = new StringBuilder(); sb.append("\nThe following facts are currently in the system..."); for (Object fact : session.getObjects()) { sb.append("\n\nFact: " + DroolsUtil.objectDetails(fact)); } return sb.toString(); }
@Test public void testRemoveRuleWithFromNode() throws Exception { // JBRULES-3631 String str = "package org.drools.compiler;\n" + "import org.drools.compiler.*;\n" + "rule R1 when\n" + " not( Person( name == \"Mark\" ));\n" + "then\n" + "end\n" + "rule R2 when\n" + " $p: Person( name == \"Mark\" );\n" + " not( Address() from $p.getAddresses() );\n" + "then\n" + "end\n"; KnowledgeBase kbase = loadKnowledgeBaseFromString( str ); assertEquals( 2, kbase.getKnowledgePackage( "org.drools.compiler" ).getRules().size() ); kbase.removeRule("org.drools.compiler", "R2"); assertEquals( 1, kbase.getKnowledgePackage( "org.drools.compiler" ).getRules().size() ); }
@Test public void testMergingDifferentPackages() throws Exception { // using the same builder try { Collection<KnowledgePackage> kpkgs = loadKnowledgePackages( "test_RuleNameClashes1.drl", "test_RuleNameClashes2.drl" ); assertEquals( 3, kpkgs.size() ); for ( KnowledgePackage kpkg : kpkgs ) { if (kpkg.getName().equals("org.drools.package1")) { assertEquals( "rule 1", kpkg.getRules().iterator().next().getName() ); } } } catch ( KnowledgeBuilderImpl.PackageMergeException e ) { fail( "unexpected exception: " + e.getMessage() ); } catch ( RuntimeException e ) { e.printStackTrace(); fail( "unexpected exception: " + e.getMessage() ); } }
@Test(timeout=10000) public void testDynamicRuleRemovalsUnusedWorkingMemory() throws Exception { KnowledgeBase kbase = SerializationHelper.serializeObject( loadKnowledgeBase( "test_Dynamic1.drl", "test_Dynamic2.drl", "test_Dynamic3.drl", "test_Dynamic4.drl" ) ); StatefulKnowledgeSession workingMemory = createKnowledgeSession( kbase ); assertEquals( 2, kbase.getKnowledgePackages().size() ); KnowledgePackage knowledgePackage = null; for (KnowledgePackage pkg : kbase.getKnowledgePackages()) { if ( pkg.getName().equals( "org.drools.compiler.test" ) ) { knowledgePackage = pkg; break; } } assertEquals( 5, knowledgePackage.getRules().size() ); kbase.removeRule( "org.drools.compiler.test", "Who likes Stilton" ); assertEquals( 4, knowledgePackage.getRules().size() ); kbase.removeRule( "org.drools.compiler.test", "like cheese" ); assertEquals( 3, knowledgePackage.getRules().size() ); kbase.removeKnowledgePackage( "org.drools.compiler.test" ); assertEquals( 1, kbase.getKnowledgePackages().size() ); }
@Test public void testQueryRemoval() throws Exception { KnowledgeBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("simple_query_test.drl")); StatefulKnowledgeSession session = createKnowledgeSession( kbase ); final Cheese stilton = new Cheese( "stinky", 5 ); session.insert( stilton ); session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, true); org.kie.api.runtime.rule.QueryResults results = session.getQueryResults( "simple query" ); assertEquals( 1, results.size() ); Rule rule = kbase.getKnowledgePackage( "org.drools.compiler.test" ).getRules().iterator().next(); assertEquals( "simple query", rule.getName()); kbase.removeQuery( "org.drools.compiler.test", "simple query" ); assertTrue( kbase.getKnowledgePackage( "org.drools.compiler.test" ).getRules().isEmpty() ); try { results = session.getQueryResults( "simple query" ); } catch ( Exception e ) { assertTrue( e.getMessage().endsWith( "does not exist") ); } }
assertEquals( 1, kpkg.getRules().size() ); break;
kbase = map.get( "x" ); final org.kie.api.definition.rule.Rule[] rules = kbase.getKnowledgePackages().iterator().next().getRules().toArray( new org.kie.api.definition.rule.Rule[0] ); assertEquals( 4, rules.length );
map = SerializationHelper.serializeObject( map ); kBase = (KnowledgeBase) map.get( "x" ); org.kie.api.definition.rule.Rule[] rules = (org.kie.api.definition.rule.Rule[]) kBase.getKnowledgePackage("org.drools.compiler").getRules().toArray(new org.kie.api.definition.rule.Rule[0] ); assertEquals( 3, rules.length );
org.kie.api.definition.rule.Rule[] rules = (org.kie.api.definition.rule.Rule[]) kBase.getKnowledgePackage("org.drools.compiler.test").getRules().toArray(new org.kie.api.definition.rule.Rule[0] );
session.insert( bob ); org.kie.api.definition.rule.Rule[] rules = (org.kie.api.definition.rule.Rule[]) kBase.getKnowledgePackage("org.drools.compiler.test").getRules().toArray(new org.kie.api.definition.rule.Rule[0] );
session.insert( bob ); org.kie.api.definition.rule.Rule[] rules = (org.kie.api.definition.rule.Rule[]) kBase.getKnowledgePackage("org.drools.compiler.test").getRules().toArray(new org.kie.api.definition.rule.Rule[0] );