Author: tirelli Date: 2006-05-14 17:25:10 -0400 (Sun, 14 May 2006) New Revision: 4216 Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkList.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleBaseImplTest.java Log: Fixing JBRULES-256: package management problems Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -218,7 +218,7 @@ assertEquals( bill, list.get( 0 ) ); } - + public void testPropertyChangeSupport() throws Exception { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "Test_PropertyChange.drl" ) ) ); @@ -232,24 +232,28 @@ workingMemory.setGlobal( "list", list ); - State state = new State("initial"); - workingMemory.assertObject( state, true ); + State state = new State( "initial" ); + workingMemory.assertObject( state, + true ); workingMemory.fireAllRules(); - - assertEquals(1, list.size()); - + assertEquals( 1, + list.size() ); + state.setFlag( true ); - assertEquals(1, list.size()); - + assertEquals( 1, + list.size() ); + workingMemory.fireAllRules(); - assertEquals(2, list.size()); - + assertEquals( 2, + list.size() ); + state.setState( "finished" ); workingMemory.fireAllRules(); - assertEquals(3, list.size()); + assertEquals( 3, + list.size() ); - } + } public void testBigDecimal() throws Exception { @@ -1452,8 +1456,17 @@ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic4.drl" ) ) ); Package pkg = builder.getPackage(); - org.drools.reteoo.RuleBaseImpl ruleBase = new org.drools.reteoo.RuleBaseImpl(); + org.drools.reteoo.RuleBaseImpl reteooRuleBase = null; + org.drools.leaps.RuleBaseImpl leapsRuleBase = null; + RuleBase ruleBase = getRuleBase(); + //org.drools.reteoo.RuleBaseImpl ruleBase = new org.drools.reteoo.RuleBaseImpl(); + if ( ruleBase instanceof org.drools.reteoo.RuleBaseImpl ) { + reteooRuleBase = (org.drools.reteoo.RuleBaseImpl) ruleBase; + } else if ( ruleBase instanceof org.drools.leaps.RuleBaseImpl ) { + leapsRuleBase = (org.drools.leaps.RuleBaseImpl) ruleBase; + } ruleBase.addPackage( pkg ); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); List list = new ArrayList(); @@ -1488,29 +1501,113 @@ assertEquals( 11, workingMemory.getAgenda().getActivations().length ); - ruleBase.removeRule( "org.drools.test", - "Who likes Stilton" ); + if ( reteooRuleBase != null ) { + reteooRuleBase.removeRule( "org.drools.test", + "Who likes Stilton" ); + assertEquals( 8, + workingMemory.getAgenda().getActivations().length ); - assertEquals( 8, - workingMemory.getAgenda().getActivations().length ); + reteooRuleBase.removeRule( "org.drools.test", + "like cheese" ); - ruleBase.removeRule( "org.drools.test", - "like cheese" ); + Cheese muzzarela = new Cheese( "muzzarela", + 5 ); + workingMemory.assertObject( muzzarela ); - Cheese muzzarela = new Cheese( "muzzarela", - 5 ); - workingMemory.assertObject( muzzarela ); + assertEquals( 4, + workingMemory.getAgenda().getActivations().length ); - assertEquals( 4, - workingMemory.getAgenda().getActivations().length ); + reteooRuleBase.removePackage( "org.drools.test" ); - ruleBase.removePackage( "org.drools.test" ); + assertEquals( 0, + workingMemory.getAgenda().getActivations().length ); + } else if ( leapsRuleBase != null ) { + leapsRuleBase.removeRule( "org.drools.test", + "Who likes Stilton" ); + assertEquals( 8, + workingMemory.getAgenda().getActivations().length ); - assertEquals( 0, - workingMemory.getAgenda().getActivations().length ); + leapsRuleBase.removeRule( "org.drools.test", + "like cheese" ); + Cheese muzzarela = new Cheese( "muzzarela", + 5 ); + workingMemory.assertObject( muzzarela ); + + assertEquals( 4, + workingMemory.getAgenda().getActivations().length ); + + leapsRuleBase.removePackage( "org.drools.test" ); + + assertEquals( 0, + workingMemory.getAgenda().getActivations().length ); + + } } + public void testDynamicRuleRemovalsUnusedWorkingMemory() throws Exception { + + PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) ); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic2.drl" ) ) ); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) ) ); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic4.drl" ) ) ); + Package pkg = builder.getPackage(); + + org.drools.reteoo.RuleBaseImpl reteooRuleBase = null; + org.drools.leaps.RuleBaseImpl leapsRuleBase = null; + RuleBase ruleBase = getRuleBase(); + //org.drools.reteoo.RuleBaseImpl ruleBase = new org.drools.reteoo.RuleBaseImpl(); + if ( ruleBase instanceof org.drools.reteoo.RuleBaseImpl ) { + reteooRuleBase = (org.drools.reteoo.RuleBaseImpl) ruleBase; + } else if ( ruleBase instanceof org.drools.leaps.RuleBaseImpl ) { + leapsRuleBase = (org.drools.leaps.RuleBaseImpl) ruleBase; + } + ruleBase.addPackage( pkg ); + + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + + if ( reteooRuleBase != null ) { + assertEquals( 1, + reteooRuleBase.getPackages().length ); + assertEquals( 4, + reteooRuleBase.getPackages()[0].getRules().length ); + + reteooRuleBase.removeRule( "org.drools.test", + "Who likes Stilton" ); + assertEquals( 3, + reteooRuleBase.getPackages()[0].getRules().length ); + + reteooRuleBase.removeRule( "org.drools.test", + "like cheese" ); + assertEquals( 2, + reteooRuleBase.getPackages()[0].getRules().length ); + + reteooRuleBase.removePackage( "org.drools.test" ); + assertEquals( 0, + reteooRuleBase.getPackages().length ); + } else if ( leapsRuleBase != null ) { + assertEquals( 1, + leapsRuleBase.getPackages().length ); + assertEquals( 4, + leapsRuleBase.getPackages()[0].getRules().length ); + + leapsRuleBase.removeRule( "org.drools.test", + "Who likes Stilton" ); + assertEquals( 3, + leapsRuleBase.getPackages()[0].getRules().length ); + + leapsRuleBase.removeRule( "org.drools.test", + "like cheese" ); + assertEquals( 2, + leapsRuleBase.getPackages()[0].getRules().length ); + + leapsRuleBase.removePackage( "org.drools.test" ); + assertEquals( 0, + leapsRuleBase.getPackages().length ); + } + } + public void testNullValuesIndexing() throws Exception { Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_NullValuesIndexing.drl" ) ); Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -162,4 +162,13 @@ assertTrue( "rule2", list.contains( "rule2" ) ); } + + public void testDynamicRuleRemovals() throws Exception { + // TODO FIXME + } + + public void testDynamicRuleRemovalsUnusedWorkingMemory() throws Exception { + // TODO FIXME + } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -18,6 +18,7 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -262,6 +263,7 @@ * * This method is not efficient and shall be used only for debugging and * test purposes. + * Also, the list returned is an unmodifiable list to prevent misusage of it. */ public List getObjectsAsList() { List list = new ArrayList(); @@ -270,7 +272,11 @@ list.addAll( wrapper.getAllNodes() ); } list.addAll( this.otherSinks ); - return list; + return Collections.unmodifiableList( list ); } + public int size() { + return this.hashedSinks.size()+this.otherSinks.size(); + } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkList.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkList.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkList.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -51,6 +51,12 @@ * @return */ public boolean remove(ObjectSink objectSink); + + /** + * Returns the number of ObjectSinks in this list + * @return + */ + public int size(); /** * Returns the last added object sink. @@ -80,6 +86,7 @@ * Returns a list with all object sinks * This may be an inneficient method to call, so we recomend using it only for * tests and debug purposes + * Also, it returns an unmodifiable list to prevent misuse * * @return */ Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -148,7 +148,15 @@ * @return The <code>ObjectsSinks</code> that receive propagated * <code>FactHandles</code>. */ - public List getObjectSinks() { + public ObjectSinkList getObjectSinks() { + return this.objectSinks; + } + + /** + * Returns the object sinks as an unmodifiable list + * @return + */ + public List getObjectSinksAsList() { return this.objectSinks.getObjectsAsList(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -125,7 +125,7 @@ List list = null; if ( node instanceof ObjectSource ) { - list = ((ObjectSource) node).getObjectSinks(); + list = ((ObjectSource) node).getObjectSinksAsList(); } else if ( node instanceof TupleSource ) { list = ((TupleSource) node).getTupleSinks(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -121,7 +121,7 @@ public void remove(BaseNode node, WorkingMemoryImpl[] workingMemories) { - getObjectSinks().remove( node ); + getObjectSinks().remove( (ObjectSink) node ); removeShare(); if ( this.sharedCount < 0 ) { this.tupleSource.remove( this, Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -25,6 +25,7 @@ import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -382,7 +383,7 @@ compilationData.putAllInvokers( newCompilationData.getInvokers() ); // Add globals - for ( Iterator it = globals.keySet().iterator(); it.hasNext(); ) { + for ( Iterator it = newPkg.getGlobals().keySet().iterator(); it.hasNext(); ) { String identifier = (String) it.next(); Class type = (Class) globals.get( identifier ); if ( globals.containsKey( identifier ) && !globals.get( identifier ).equals( type ) ) { @@ -390,6 +391,7 @@ newPkg ); } } + globals.putAll( newPkg.getGlobals() ); } private void addRule(Rule rule) throws InvalidPatternException { @@ -420,6 +422,24 @@ pkg.clear(); + // getting the list of referenced globals + Set referencedGlobals = new HashSet(); + for( Iterator it = this.pkgs.values().iterator(); it.hasNext(); ) { + org.drools.rule.Package pkgref = (org.drools.rule.Package) it.next(); + if(pkgref != pkg) { + referencedGlobals.addAll( pkgref.getGlobals().keySet() ); + } + } + // removing globals declared inside the package that are not shared + for( Iterator it = pkg.getGlobals().keySet().iterator(); it.hasNext(); ) { + String globalName = (String) it.next(); + if( !referencedGlobals.contains( globalName ) ) { + this.globals.remove( globalName ); + } + } + // removing the package itself from the list + this.pkgs.remove( pkg.getName() ); + // Iterate and unlock for ( Iterator it = this.workingMemories.keySet().iterator(); it.hasNext(); ) { WorkingMemoryImpl workingMemory = (WorkingMemoryImpl) it.next(); Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -46,12 +46,12 @@ assertEquals( 2, alphaNode.getId() ); assertLength( 0, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); alphaNode.attach(); assertLength( 1, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); assertSame( alphaNode, - source.getObjectSinks().get( 0 ) ); + source.getObjectSinks().getLastObjectSink() ); } public void testMemory() { Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/JoinNodeTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -77,7 +77,7 @@ this.node.getId() ); assertLength( 0, - this.objectSource.getObjectSinks() ); + this.objectSource.getObjectSinksAsList() ); assertLength( 0, this.tupleSource.getTupleSinks() ); @@ -85,13 +85,13 @@ this.node.attach(); assertLength( 1, - this.objectSource.getObjectSinks() ); + this.objectSource.getObjectSinksAsList() ); assertLength( 1, this.tupleSource.getTupleSinks() ); assertSame( this.node, - this.objectSource.getObjectSinks().get( 0 ) ); + this.objectSource.getObjectSinks().getLastObjectSink() ); assertSame( this.node, this.tupleSource.getTupleSinks().get( 0 ) ); Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -56,15 +56,15 @@ liaNode.getId() ); assertLength( 0, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); liaNode.attach(); assertLength( 1, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); assertSame( liaNode, - source.getObjectSinks().get( 0 ) ); + source.getObjectSinks().getLastObjectSink() ); } /** Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectSourceTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -40,15 +40,15 @@ public void testAddObjectSink() { MockObjectSource source = new MockObjectSource( 15 ); assertLength( 0, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); source.addObjectSink( new MockObjectSink() ); assertLength( 1, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); source.addObjectSink( new MockObjectSink() ); assertLength( 2, - source.getObjectSinks() ); + source.getObjectSinksAsList() ); } public void testPropagateAssertObject() throws Exception { Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -140,7 +140,7 @@ null, workingMemory ); - MockObjectSink sink1 = (MockObjectSink) objectTypeNode.getObjectSinks().get( 0 ); + MockObjectSink sink1 = (MockObjectSink) objectTypeNode.getObjectSinksAsList().get( 0 ); assertLength( 0, sink1.getAsserted() ); @@ -187,7 +187,7 @@ null, workingMemory ); - MockObjectSink sink1 = (MockObjectSink) objectTypeNode.getObjectSinks().get( 0 ); + MockObjectSink sink1 = (MockObjectSink) objectTypeNode.getObjectSinksAsList().get( 0 ); assertLength( 0, sink1.getRetracted() ); Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleBaseImplTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleBaseImplTest.java 2006-05-13 23:22:04 UTC (rev 4215) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleBaseImplTest.java 2006-05-14 21:25:10 UTC (rev 4216) @@ -17,7 +17,10 @@ +import junit.framework.Assert; + import org.drools.DroolsTestCase; +import org.drools.RuleBase; import org.drools.WorkingMemory; public class RuleBaseImplTest extends DroolsTestCase { @@ -89,5 +92,77 @@ assertFalse( this.ruleBase.getWorkingMemories().contains( wm5 ) ); assertFalse( this.ruleBase.getWorkingMemories().contains( wm6 ) ); } + + public void testAddPackage() throws Exception { + org.drools.rule.Package pkg1 = new org.drools.rule.Package("org.droos.test"); + pkg1.addGlobal( "global1", Object.class ); + pkg1.addGlobal( "global2", Object.class ); + + org.drools.rule.Package pkg2 = new org.drools.rule.Package("org.droos.test"); + pkg2.addGlobal( "global1", Object.class ); + pkg2.addGlobal( "global3", Object.class ); + + org.drools.rule.Package pkg3 = new org.drools.rule.Package("org.droos.test2"); + pkg3.addGlobal( "global3", Object.class ); + pkg3.addGlobal( "global4", Object.class ); + + this.ruleBase.addPackage( pkg1 ); + // one package + assertLength( 1, this.ruleBase.getPackages() ); + // two globals + assertLength( 2, this.ruleBase.getGlobals().values() ); + // two globals in the package also + assertLength( 2, this.ruleBase.getPackages()[0].getGlobals().values() ); + + this.ruleBase.addPackage( pkg2 ); + // packages merged, so still 1 package + assertLength( 1, this.ruleBase.getPackages() ); + // globals merged, so 3 globals total + assertLength( 3, this.ruleBase.getGlobals().values() ); + // three globals in the package also + assertLength( 3, this.ruleBase.getPackages()[0].getGlobals().values() ); + this.ruleBase.addPackage( pkg3 ); + // new package, so now we have 2 package + assertLength( 2, this.ruleBase.getPackages() ); + // globals partially merged, so 4 globals total + assertLength( 4, this.ruleBase.getGlobals().values() ); + // two globals in the package + org.drools.rule.Package[] pkgs = this.ruleBase.getPackages(); + for(int i = 0; i < pkgs.length; i++) { + if(pkgs[i].getName().equals( pkg3.getName() )) { + assertLength( 2, pkgs[i].getGlobals().values() ); + } + } + } + + public void testRemovePackage() throws Exception { + org.drools.rule.Package pkg1 = new org.drools.rule.Package("org.droos.test"); + pkg1.addGlobal( "global1", Object.class ); + pkg1.addGlobal( "global2", Object.class ); + + org.drools.rule.Package pkg2 = new org.drools.rule.Package("org.droos.test"); + pkg2.addGlobal( "global1", Object.class ); + pkg2.addGlobal( "global3", Object.class ); + + org.drools.rule.Package pkg3 = new org.drools.rule.Package("org.droos.test2"); + pkg3.addGlobal( "global3", Object.class ); + pkg3.addGlobal( "global4", Object.class ); + + this.ruleBase.addPackage( pkg1 ); + this.ruleBase.addPackage( pkg2 ); + this.ruleBase.addPackage( pkg3 ); + + this.ruleBase.removePackage( pkg1.getName() ); + // packages were partially merged when adding, so removal + // shall left only package 3 behind + assertLength( 1, this.ruleBase.getPackages() ); + assertLength( 2, this.ruleBase.getGlobals().values() ); + + this.ruleBase.removePackage( pkg3.getName() ); + assertLength( 0, this.ruleBase.getPackages() ); + assertLength( 0, this.ruleBase.getGlobals().values() ); + + } + } \ No newline at end of file |