[jboss-svn-commits] JBL Code SVN: r8292 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository test/java/org/drools/repository

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Dec 13 12:26:57 EST 2006


Author: michael.neale at jboss.com
Date: 2006-12-13 12:26:43 -0500 (Wed, 13 Dec 2006)
New Revision: 8292

Added:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java
Removed:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java
Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java
Log:
JBRULES-587 + refactoring, improving javadocs

Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -0,0 +1,51 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+
+/**
+ * This iterates over nodes and produces RuleItem's.
+ * Also allows "skipping" of results to jump to certain items,
+ * as per JCRs "skip".
+ * 
+ * JCR iterators are/can be lazy, so this makes the most of it for large
+ * numbers of assets.
+ * 
+ * @author Michael Neale
+ */
+public class AssetItemIterator
+    implements
+    Iterator {
+
+    private NodeIterator    it;
+    private RulesRepository rulesRepository;
+
+    public AssetItemIterator(NodeIterator nodes,
+                            RulesRepository repo) {
+        this.it = nodes;
+        this.rulesRepository = repo;
+    }
+
+    public boolean hasNext() {
+        return it.hasNext();
+    }
+
+    public Object next() {
+        return new AssetItem( rulesRepository,
+                             (Node) it.next() );
+    }
+
+    public void remove() {
+        throw new UnsupportedOperationException( "You can't remove a rule this way." );
+    }
+
+    /**
+     * @param i The number of rules to skip.
+     */
+    public void skip(int i) {
+        it.skip( i );
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -4,6 +4,7 @@
 import java.util.Calendar;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 
 import javax.jcr.ItemExistsException;
 import javax.jcr.Node;
@@ -13,6 +14,9 @@
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
+import javax.jcr.query.InvalidQueryException;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
 
 import org.apache.log4j.Logger;
 
@@ -92,6 +96,11 @@
         return addAsset(assetName, description, null);
     }
     
+    
+//    public void searchAssets() {
+//        this.node.getPath();
+//        Query = this.node.getSession().getWorkspace().getQueryManager().createQuery( arg0, arg1 );
+//    }
 
     /**
      * This adds a rule to the current physical package (you can move it later).
@@ -145,8 +154,12 @@
 
     }
 
-    /** Remove a rule by name */
-    public void removeRule(String name) {
+    /** 
+     * Remove an asset by name 
+     * After doing this, you will need to check in the package 
+     * as removing an item effects the parent package.
+     */
+    public void removeAsset(String name) {
         try {
             this.node.getNode( RULES_FOLDER_NAME + "/" + name ).remove();
         } catch ( RepositoryException e ) {
@@ -305,10 +318,10 @@
     //    }   
 
     /** Return an iterator for the rules in this package */
-    public Iterator getRules() {
+    public Iterator getAssets() {
         try {
             Node content = getVersionContentNode();
-            RuleItemIterator it = new RuleItemIterator( content.getNode( RULES_FOLDER_NAME ).getNodes(),
+            AssetItemIterator it = new AssetItemIterator( content.getNode( RULES_FOLDER_NAME ).getNodes(),
                                                         this.rulesRepository );
             return it;
         } catch ( PathNotFoundException e ) {
@@ -320,9 +333,35 @@
     }
     
     /**
+     * This will query any assets stored under this package.
+     * For example, you can pass in <code>"drools:format = 'drl'"</code> to get a list of 
+     * only a certain type of asset.
+     * 
+     * @param fieldPredicates A predicate string (SQL style).
+     * @return A list of matches. 
+     */
+    public AssetItemIterator queryAssets(String fieldPredicates) {
+        try {
+            
+            //String sql = "SELECT * FROM drools:ruleNodeType WHERE jcr:path LIKE '/drools:repository/drools:rulepackage_area/searchByFormat/rules[%]/%'";
+            String sql = "SELECT * FROM " + AssetItem.RULE_NODE_TYPE_NAME;
+            sql += " WHERE jcr:path LIKE '" + getVersionContentNode().getPath() + "/" + RULES_FOLDER_NAME + "[%]/%'";
+            
+            sql += " and " + fieldPredicates;
+            
+            Query q = node.getSession().getWorkspace().getQueryManager().createQuery( sql, Query.SQL );
+            QueryResult res = q.execute();            
+            return new AssetItemIterator(res.getNodes(), this.rulesRepository);        
+        } catch ( RepositoryException e ) {
+            throw new RulesRepositoryException(e);
+        }
+        
+    }
+    
+    /**
      * Load a specific rule asset by name.
      */
-    public AssetItem loadRule(String name) {
+    public AssetItem loadAsset(String name) {
 
         try {
             Node content = getVersionContentNode();
@@ -388,66 +427,38 @@
         }
     }
 
-    /**
-     * This iterates over nodes and produces RuleItem's.
-     * Also allows "skipping" of results to jump to certain items,
-     * as per JCRs "skip".
-     */
-    static class RuleItemIterator
-        implements
-        Iterator {
 
-        private NodeIterator    it;
-        private RulesRepository rulesRepository;
 
-        public RuleItemIterator(NodeIterator nodes,
-                                RulesRepository repo) {
-            this.it = nodes;
-            this.rulesRepository = repo;
-        }
-
-        public boolean hasNext() {
-            return it.hasNext();
-        }
-
-        public Object next() {
-            return new AssetItem( rulesRepository,
-                                 (Node) it.next() );
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException( "You can't remove a rule this way." );
-        }
-
-        /**
-         * @param i The number of rules to skip.
-         */
-        public void skip(int i) {
-            it.skip( i );
-        }
-
-    }
-
     
     /**
-     * This will return a list of rules for a given state.
-     * It works through the rules that belong to this package, and 
+     * This will return a list of assets for a given state.
+     * It works through the assets that belong to this package, and 
      * if they are not in the correct state, walks backwards until it finds one
      * in the correct state. 
      * 
      * If it walks all the way back up the versions looking for the "latest" 
      * version with the appropriate state, and can't find one, 
      * that asset is not included in the result.
+     * 
+     * This will exclude any items that have the "ignoreState" set
+     * (so for example, retired items, invalid items etc).
+     * 
+     *  @param state The state of assets to retrieve.
+     *  @param ignoreState The statuses to not include in the results (it will look
+     *  at the status of the latest one).
      */
-    public Iterator getRules(final StateItem state) {
-        final Iterator rules = getRules();
+    public Iterator getAssetsWithStatus(final StateItem state, final StateItem ignoreState) {
+        final Iterator rules = getAssets();
         
         List result = new ArrayList();
         while(rules.hasNext()) {
             AssetItem head = (AssetItem) rules.next();
             if (head.sameState( state )) {
                 result.add( head );
-            } else {
+            } else if (head.sameState( ignoreState )) { 
+                //ignore this one
+            } 
+            else {
                 Iterator prev = head.getPredecessorVersionsIterator();
                 while (prev.hasNext()) {
                     AssetItem prevRule = (AssetItem) prev.next();
@@ -460,15 +471,29 @@
         }
         return result.iterator();
     }
-
+    
     /**
+     * This will return a list of assets for a given state.
+     * It works through the assets that belong to this package, and 
+     * if they are not in the correct state, walks backwards until it finds one
+     * in the correct state. 
+     * 
+     * If it walks all the way back up the versions looking for the "latest" 
+     * version with the appropriate state, and can't find one, 
+     * that asset is not included in the result.
+     */    
+    public Iterator getAssetsWithStatus(final StateItem state) {
+        return getAssetsWithStatus( state, null );
+    }
+    
+    /**
      * This will create a new version of a package, effectively freezing the state.
      * This means in the "head" version of the package, rules can be added
      * removed, without effecting the baseline that was created.
      */
     public void createBaseline(String comment,
                                StateItem state) {
-        Iterator rules = getRules();
+        Iterator rules = getAssets();
         while(rules.hasNext()) {
             AssetItem rule = (AssetItem) rules.next();
             rule.updateState( state );

Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -0,0 +1,35 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+
+/**
+ * This wraps a node iterator, and provides PackageItems when requested.
+ * This supports lazy loading if needed.
+ */
+public class PackageIterator
+    implements
+    Iterator {
+    
+    private NodeIterator packageNodeIterator;
+    private RulesRepository repository;
+
+    public PackageIterator(RulesRepository repository, NodeIterator packageNodes) {
+        this.packageNodeIterator = packageNodes;
+    }
+
+    public boolean hasNext() {
+        return this.packageNodeIterator.hasNext();
+    }
+
+    public Object next() {        
+        return new PackageItem(this.repository, (Node) this.packageNodeIterator.next());
+    }
+
+    public void remove() {
+        throw new UnsupportedOperationException("You can not remove items this way.");
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Deleted: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -1,37 +0,0 @@
-package org.drools.repository;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-
-/**
- * This wraps a node iterator, and provides RulePackageItems when requested.
- * This supports lazy loading if needed.
- */
-public class RulePackageIterator
-    implements
-    Iterator {
-    
-    
-    
-    private NodeIterator packageNodeIterator;
-    private RulesRepository repository;
-
-    public RulePackageIterator(RulesRepository repository, NodeIterator packageNodes) {
-        this.packageNodeIterator = packageNodes;
-    }
-
-    public boolean hasNext() {
-        return this.packageNodeIterator.hasNext();
-    }
-
-    public Object next() {        
-        return new PackageItem(this.repository, (Node) this.packageNodeIterator.next());
-    }
-
-    public void remove() {
-        this.packageNodeIterator.remove();
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -604,7 +604,7 @@
                 createPackage( DEFAULT_PACKAGE, "" );
                 folderNode = this.getAreaNode( RULE_PACKAGE_AREA );
             }            
-            return new RulePackageIterator(this, folderNode.getNodes());
+            return new PackageIterator(this, folderNode.getNodes());
         } catch ( RepositoryException e ) {
             throw new RulesRepositoryException(e);
         }

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -10,6 +10,7 @@
  * @author btruitt
  */
 public class StateItem extends Item {
+
     private Logger log = Logger.getLogger(StateItem.class);
 
     /**
@@ -54,7 +55,11 @@
         }
     }
     
+    public String toString() {
+        return "Current status: [" + getName() + "]  (" + super.toString() + ")";
+    }
+    
     public int hashCode() {
-        return 42;
+        return getName().hashCode();
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -385,6 +385,11 @@
     }
 
     /**
+     * This returns the format of an item.
+     * This is analagous to a file extension 
+     * if the resource was a file (it may contain more information 
+     * then a pure file extension could, however). 
+     * 
      * See the Dublin Core documentation for more
      * explanation: http://dublincore.org/documents/dces/
      * 
@@ -404,6 +409,13 @@
         }
     }
 
+    /**
+     * This sets the format (or "file extension" of the resource). 
+     * In some cases this is critical, and generally should not be changed
+     * after the initial version is checked in.
+     * 
+     * @param newFormat
+     */
     public void updateFormat(String newFormat) {
         this.updateStringProperty( newFormat,
                                    FORMAT_PROPERTY_NAME );

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -508,7 +508,7 @@
         ruleItem.checkin( "woo" );
         
         pkg = getRepo().loadPackage( "testDublinCore" );
-        ruleItem = (AssetItem) pkg.getRules().next();
+        ruleItem = (AssetItem) pkg.getAssets().next();
         
         assertEquals("b", ruleItem.getCoverage());
         assertEquals("me", ruleItem.getLastContributor());

Added: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -0,0 +1,423 @@
+package org.drools.repository;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class PackageItemTestCase extends TestCase {
+
+    public void testListPackages() throws Exception {
+        RulesRepository repo = getRepo();
+        repo.createPackage( "testListPackages1", "lalalala" );
+        
+        List list = iteratorToList( repo.listPackages() );
+        int prevSize = list.size();
+        repo.createPackage( "testListPackages2", "abc" );
+        
+        list = iteratorToList( repo.listPackages() );
+        
+        assertEquals(prevSize + 1, list.size());
+    }
+    
+    public void testRulePackageItem() throws Exception {
+        RulesRepository repo = getRepo();
+        try {
+            
+            //calls constructor
+            PackageItem rulePackageItem1 = repo.createPackage("testRulePackage", "desc");
+            assertNotNull(rulePackageItem1);
+            assertEquals("testRulePackage", rulePackageItem1.getName());
+            
+            Iterator it = getRepo().listPackages();
+            assertTrue(it.hasNext());
+
+            while (it.hasNext()) {
+                PackageItem pack = (PackageItem) it.next();
+                if (pack.getName().equals( "testRulePackage" )) {
+                    return;
+                }
+            }
+            fail("should have picked up the testRulePackage but didnt.");
+        }
+        catch(Exception e) {
+            e.printStackTrace();
+            fail("Caught unexpected exception: " + e);
+        }
+        
+    }
+    
+    /**
+     * This tests creating a "baseline" of a RulePackage,
+     * basically updating all the resources, and checking it in as a version.
+     * This is showing off "multi dimensional versioning".
+     */
+    public void testBaselinePackage() throws Exception {
+        RulesRepository repo = getRepo();
+        
+        PackageItem pack = repo.createPackage( "testBaselinePackage", "for testing baselines" );
+        
+        AssetItem rule1 = pack.addAsset( "rule 1", "yeah" );
+        AssetItem rule2 = pack.addAsset( "rule 2", "foobar" );
+        
+        StateItem state = repo.getState( "deployed" );
+        
+        repo.save();
+        
+        assertNull(pack.getPrecedingVersion());
+        
+        //the first version, frozen with 2 rules
+        pack.createBaseline("commit comment", state);
+        
+        //check head
+        pack = repo.loadPackage( "testBaselinePackage" );
+        assertEquals(2, iteratorToList(pack.getAssets()).size());
+        
+        //now remove a rule from head
+        pack.removeAsset( "rule 1" );
+        repo.save();
+        assertEquals(1, iteratorToList( pack.getAssets() ).size());
+        
+        pack.createBaseline( "another", state );
+        
+        PackageItem prev = (PackageItem) pack.getPrecedingVersion();
+        assertEquals(2, iteratorToList( prev.getAssets() ).size());
+        
+    }
+
+    /** Continues to show how multi dimensional versioning works */
+    public void testPackageBaselineWithRuleChanges() throws Exception {
+        String packName = StackUtil.getCurrentMethodName();
+        PackageItem pack = getRepo().createPackage( packName, "yeah" );
+        
+        AssetItem rule = pack.addAsset( "foobar", "waah" );        
+        rule.updateContent( "this is something" );        
+        rule.checkin( "something" );
+        
+        StateItem state = getRepo().getState( "something" );
+        
+        pack.createBaseline( "another one", state );
+        
+        pack = getRepo().loadPackage( packName );
+        
+        rule = (AssetItem) pack.getAssets().next();
+        rule.updateContent( "blah" );
+        rule.checkin( "woot" );
+        
+        pack.createBaseline( "yeah", state );
+        
+        pack = getRepo().loadPackage( packName );
+        rule = (AssetItem) pack.getAssets().next();
+        assertEquals("blah", rule.getContent());
+        
+        PackageItem prev = (PackageItem) pack.getPrecedingVersion();
+        rule = (AssetItem) prev.getAssets().next();
+        assertEquals("this is something", rule.getContent());
+        
+    }
+
+    private RulesRepository getRepo() {
+        return RepositorySession.getRepository();
+    }
+
+    public void testLoadRulePackageItem() {
+
+        PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItem", "desc");
+
+        rulePackageItem = getRepo().loadPackage("testLoadRuleRuleItem");
+        assertNotNull(rulePackageItem);
+        assertEquals("testLoadRuleRuleItem", rulePackageItem.getName());
+        
+        assertEquals("desc", rulePackageItem.getDescription());
+        // try loading rule package that was not created 
+        try {
+            rulePackageItem = getRepo().loadPackage("anotherRuleRuleItem");
+            fail("Exception not thrown loading rule package that was not created.");
+        } catch (RulesRepositoryException e) {
+            // that is OK!
+            assertNotNull(e.getMessage());
+        }
+    }    
+    
+    /**
+     * This will test getting rules of specific versions out of a package.
+     */
+    public void testPackageRuleVersionExtraction() throws Exception {
+        PackageItem pack = getRepo().createPackage( "package extractor", "foo" );
+        
+        
+        AssetItem rule1 = pack.addAsset( "rule number 1", "yeah man" );
+        rule1.checkin( "version0" );
+        
+        AssetItem rule2 = pack.addAsset( "rule number 2", "no way" );
+        rule2.checkin( "version0" );
+        
+        AssetItem rule3 = pack.addAsset( "rule number 3", "yes way" );
+        rule3.checkin( "version0" );
+        
+        getRepo().save();
+        
+        pack = getRepo().loadPackage( "package extractor" );
+        List rules = iteratorToList( pack.getAssets() );
+        assertEquals(3, rules.size());
+        
+        StateItem state = getRepo().getState( "foobar" );
+        
+        rule1.updateState( "foobar" );
+        rule1.checkin( "yeah" );
+        
+        pack = getRepo().loadPackage( "package extractor" );
+        
+        rules = iteratorToList( pack.getAssetsWithStatus(state) );
+        
+        assertEquals(1, rules.size());
+        
+        //now lets try an invalid state tag
+        rules = iteratorToList( pack.getAssetsWithStatus( getRepo().getState( "whee" ) ) );
+        assertEquals(0, rules.size());
+        
+        //and null, as we start with null, should be able to get all three back
+        //although an older version of one of them
+        rules = iteratorToList( pack.getAssetsWithStatus(null) );
+        assertEquals(3, rules.size());
+        
+        //now do an update, and pull it out via state
+        rule1.updateContent( "new content" );
+        rule1.updateState( "draft" );
+        rule1.checkin( "latest" );
+        
+        rules = iteratorToList( pack.getAssetsWithStatus(getRepo().getState( "draft" )) );
+        assertEquals(1, rules.size());
+        AssetItem rule = (AssetItem) rules.get( 0 );
+        assertEquals("new content", rule.getContent());
+        
+        //get the previous one via state
+        
+        rules = iteratorToList( pack.getAssetsWithStatus(getRepo().getState( "foobar" )) );
+        assertEquals(1, rules.size());
+        AssetItem prior = (AssetItem) rules.get( 0 );
+        
+        assertFalse("new content".equals( prior.getContent() ));
+        
+    }
+    
+    public void testIgnoreState() throws Exception {
+        PackageItem pack = getRepo().createPackage( "package testIgnoreState", "foo" );
+        
+        
+        AssetItem rule1 = pack.addAsset( "rule number 1", "yeah man" );
+        rule1.updateState( "x" );
+        rule1.checkin( "version0" );
+        
+        
+        AssetItem rule2 = pack.addAsset( "rule number 2", "no way" );
+        rule2.updateState( "x" );
+        rule2.checkin( "version0" );
+        
+        AssetItem rule3 = pack.addAsset( "rule number 3", "yes way" );
+        rule3.updateState( "disabled" );
+        rule3.checkin( "version0" );
+        
+        getRepo().save();
+        
+        
+        Iterator result = pack.getAssetsWithStatus( getRepo().getState( "x" ), getRepo().getState( "disabled" ) );
+        List l = iteratorToList( result );
+        assertEquals(2, l.size());
+    }
+    
+    public void testDuplicatePackageName() throws Exception {
+        PackageItem pack = getRepo().createPackage( "dupePackageTest", "testing for dupe" );        
+        assertNotNull(pack.getName());
+        
+        try {
+            getRepo().createPackage( "dupePackageTest", "this should fail" );
+            fail("Should not be able to add a package of the same name.");
+        } catch (RulesRepositoryException e) {
+            assertNotNull(e.getMessage());
+        }
+        
+    }
+    
+    public void testLoadRulePackageItemByUUID() throws Exception {
+
+        PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItemByUUID", "desc");
+
+        String uuid = null;
+            uuid = rulePackageItem.getNode().getUUID();
+
+
+        rulePackageItem = getRepo().loadPackageByUUID(uuid);
+        assertNotNull(rulePackageItem);
+        assertEquals("testLoadRuleRuleItemByUUID", rulePackageItem.getName());
+        
+        // try loading rule package that was not created 
+        try {
+            rulePackageItem = getRepo().loadPackageByUUID("01010101-0101-0101-0101-010101010101");
+            fail("Exception not thrown loading rule package that was not created.");
+        } catch (RulesRepositoryException e) {
+            // that is OK!
+            assertNotNull(e.getMessage());
+        }
+    }    
+    
+    public void testAddRuleRuleItem() {
+            PackageItem rulePackageItem1 = getRepo().createPackage("testAddRuleRuleItem","desc");
+
+            
+            AssetItem ruleItem1 = rulePackageItem1.addAsset("testAddRuleRuleItem", "test description");
+            ruleItem1.updateContent( "test content" );
+            ruleItem1.checkin( "updated the rule content" );
+            
+            Iterator rulesIt = rulePackageItem1.getAssets();
+            assertNotNull(rulesIt);
+            AssetItem first = (AssetItem) rulesIt.next();
+            assertFalse(rulesIt.hasNext());
+            assertEquals("testAddRuleRuleItem", first.getName());
+            
+            //test that it is following the head revision                        
+            ruleItem1.updateContent("new lhs");
+            ruleItem1.checkin( "updated again" );
+            rulesIt = rulePackageItem1.getAssets();
+            assertNotNull(rulesIt);
+            
+            List rules = iteratorToList( rulesIt );
+            assertEquals(1, rules.size());
+            assertEquals("testAddRuleRuleItem", ((AssetItem)rules.get(0)).getName());
+            assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
+                        
+            AssetItem ruleItem2 = rulePackageItem1.addAsset("testAddRuleRuleItem2", "test content");
+            
+            rules = iteratorToList(rulePackageItem1.getAssets());
+            assertNotNull(rules);
+            assertEquals(2, rules.size());  
+
+    }
+
+    
+    List iteratorToList(Iterator it) {
+        List list = new ArrayList();
+        while(it.hasNext()) {
+            list.add( it.next() );
+        }
+        return list;
+    }
+
+
+
+
+
+
+    
+    public void testGetRules() {
+            PackageItem rulePackageItem1 = getRepo().createPackage("testGetRules", "desc");
+                        
+            AssetItem ruleItem1 = rulePackageItem1.addAsset("testGetRules", "desc" );
+            ruleItem1.updateContent( "test lhs content" );
+
+            
+            List rules = iteratorToList(rulePackageItem1.getAssets());
+            assertNotNull(rules);
+            assertEquals(1, rules.size());
+            assertEquals("testGetRules", ((AssetItem)rules.get(0)).getName());
+                                  
+            AssetItem ruleItem2 = rulePackageItem1.addAsset("testGetRules2", "desc" );
+            ruleItem2.updateContent( "test lhs content" );
+            
+            rules = iteratorToList(rulePackageItem1.getAssets());
+            assertNotNull(rules);
+            assertEquals(2, rules.size());            
+
+            //now lets test loading rule
+            AssetItem loaded = rulePackageItem1.loadAsset( "testGetRules" );
+            assertNotNull(loaded);
+            assertEquals("testGetRules", loaded.getName());
+            assertEquals("desc", loaded.getDescription());
+           
+            
+    }
+
+    public void testToString() {
+            PackageItem rulePackageItem1 = getRepo().createPackage("testToStringPackage", "desc");
+            
+            AssetItem ruleItem1 = rulePackageItem1.addAsset("testToStringPackage", "test lhs content" );
+            ruleItem1.updateContent( "test lhs content" );
+            
+            assertNotNull(rulePackageItem1.toString());                        
+
+    }
+    
+    public void testRemoveRule() {
+            PackageItem rulePackageItem1 = getRepo().createPackage("testRemoveRule", "desc");
+            
+            AssetItem ruleItem1 = rulePackageItem1.addAsset("testRemoveRule", "test lhs content" );
+            ruleItem1.updateContent( "test lhs content" ); 
+            
+            
+            
+            Iterator rulesIt = rulePackageItem1.getAssets();
+            AssetItem next = (AssetItem) rulesIt.next();
+            
+            assertFalse(rulesIt.hasNext());
+            assertEquals("testRemoveRule", next.getName());
+                               
+            
+            
+            ruleItem1.updateContent("new lhs");
+            List rules = iteratorToList(rulePackageItem1.getAssets());
+            assertNotNull(rules);
+            assertEquals(1, rules.size());
+            assertEquals("testRemoveRule", ((AssetItem)rules.get(0)).getName());
+            assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
+                        
+            AssetItem ruleItem2 = rulePackageItem1.addAsset("testRemoveRule2", "test lhs content");
+            
+            //remove the rule, make sure the other rule in the pacakge stays around
+            rulePackageItem1.removeAsset(ruleItem1.getName());
+            rulePackageItem1.rulesRepository.save();
+            rules = iteratorToList(rulePackageItem1.getAssets());
+            assertEquals(1, rules.size());
+            assertEquals("testRemoveRule2", ((AssetItem)rules.get(0)).getName());
+            
+            //remove the rule that is following the head revision, make sure the pacakge is now empty
+            rulePackageItem1.removeAsset(ruleItem2.getName());
+            rules = iteratorToList(rulePackageItem1.getAssets());
+            assertNotNull(rules);
+            assertEquals(0, rules.size());
+
+    }
+        
+    public void testSearchByFormat() throws Exception {
+        PackageItem pkg = getRepo().createPackage( "searchByFormat", "" );
+        getRepo().save();
+        
+        
+        AssetItem item = pkg.addAsset( "searchByFormatAsset1", "" );
+        item.updateFormat( "xyz" );
+        item.checkin( "la" );
+        
+        item = pkg.addAsset( "searchByFormatAsset2", "wee" );
+        item.updateFormat( "xyz" );
+        item.checkin( "la" );
+        
+        item = pkg.addAsset( "searchByFormatAsset3", "wee" );
+        item.updateFormat( "ABC" );
+        item.checkin( "la" );
+        
+        AssetItemIterator it = pkg.queryAssets( "drools:format='xyz'" );        
+        List list = iteratorToList( it );
+        assertEquals(2, list.size());
+        
+        
+    }
+
+    
+    
+    public void testGetFormat() {        
+            PackageItem rulePackageItem1 = getRepo().createPackage("testGetFormat", "woot");
+            assertNotNull(rulePackageItem1);
+            assertEquals("Rule Package", rulePackageItem1.getFormat());    
+
+    }        
+}
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java
___________________________________________________________________
Name: svn:eol-style
   + native

Deleted: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -1,374 +0,0 @@
-package org.drools.repository;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-public class RulePackageItemTestCase extends TestCase {
-
-    public void testListPackages() throws Exception {
-        RulesRepository repo = getRepo();
-        repo.createPackage( "testListPackages1", "lalalala" );
-        
-        List list = iteratorToList( repo.listPackages() );
-        int prevSize = list.size();
-        repo.createPackage( "testListPackages2", "abc" );
-        
-        list = iteratorToList( repo.listPackages() );
-        
-        assertEquals(prevSize + 1, list.size());
-    }
-    
-    public void testRulePackageItem() throws Exception {
-        RulesRepository repo = getRepo();
-        try {
-            
-            //calls constructor
-            PackageItem rulePackageItem1 = repo.createPackage("testRulePackage", "desc");
-            assertNotNull(rulePackageItem1);
-            assertEquals("testRulePackage", rulePackageItem1.getName());
-            
-            Iterator it = getRepo().listPackages();
-            assertTrue(it.hasNext());
-
-            while (it.hasNext()) {
-                PackageItem pack = (PackageItem) it.next();
-                if (pack.getName().equals( "testRulePackage" )) {
-                    return;
-                }
-            }
-            fail("should have picked up the testRulePackage but didnt.");
-        }
-        catch(Exception e) {
-            e.printStackTrace();
-            fail("Caught unexpected exception: " + e);
-        }
-        
-    }
-    
-    /**
-     * This tests creating a "baseline" of a RulePackage,
-     * basically updating all the resources, and checking it in as a version.
-     * This is showing off "multi dimensional versioning".
-     */
-    public void testBaselinePackage() throws Exception {
-        RulesRepository repo = getRepo();
-        
-        PackageItem pack = repo.createPackage( "testBaselinePackage", "for testing baselines" );
-        
-        AssetItem rule1 = pack.addAsset( "rule 1", "yeah" );
-        AssetItem rule2 = pack.addAsset( "rule 2", "foobar" );
-        
-        StateItem state = repo.getState( "deployed" );
-        
-        repo.save();
-        
-        assertNull(pack.getPrecedingVersion());
-        
-        //the first version, frozen with 2 rules
-        pack.createBaseline("commit comment", state);
-        
-        //check head
-        pack = repo.loadPackage( "testBaselinePackage" );
-        assertEquals(2, iteratorToList(pack.getRules()).size());
-        
-        //now remove a rule from head
-        pack.removeRule( "rule 1" );
-        repo.save();
-        assertEquals(1, iteratorToList( pack.getRules() ).size());
-        
-        pack.createBaseline( "another", state );
-        
-        PackageItem prev = (PackageItem) pack.getPrecedingVersion();
-        assertEquals(2, iteratorToList( prev.getRules() ).size());
-        
-    }
-
-    /** Continues to show how multi dimensional versioning works */
-    public void testPackageBaselineWithRuleChanges() throws Exception {
-        String packName = StackUtil.getCurrentMethodName();
-        PackageItem pack = getRepo().createPackage( packName, "yeah" );
-        
-        AssetItem rule = pack.addAsset( "foobar", "waah" );        
-        rule.updateContent( "this is something" );        
-        rule.checkin( "something" );
-        
-        StateItem state = getRepo().getState( "something" );
-        
-        pack.createBaseline( "another one", state );
-        
-        pack = getRepo().loadPackage( packName );
-        
-        rule = (AssetItem) pack.getRules().next();
-        rule.updateContent( "blah" );
-        rule.checkin( "woot" );
-        
-        pack.createBaseline( "yeah", state );
-        
-        pack = getRepo().loadPackage( packName );
-        rule = (AssetItem) pack.getRules().next();
-        assertEquals("blah", rule.getContent());
-        
-        PackageItem prev = (PackageItem) pack.getPrecedingVersion();
-        rule = (AssetItem) prev.getRules().next();
-        assertEquals("this is something", rule.getContent());
-        
-    }
-
-    private RulesRepository getRepo() {
-        return RepositorySession.getRepository();
-    }
-
-    public void testLoadRulePackageItem() {
-
-        PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItem", "desc");
-
-        rulePackageItem = getRepo().loadPackage("testLoadRuleRuleItem");
-        assertNotNull(rulePackageItem);
-        assertEquals("testLoadRuleRuleItem", rulePackageItem.getName());
-        
-        assertEquals("desc", rulePackageItem.getDescription());
-        // try loading rule package that was not created 
-        try {
-            rulePackageItem = getRepo().loadPackage("anotherRuleRuleItem");
-            fail("Exception not thrown loading rule package that was not created.");
-        } catch (RulesRepositoryException e) {
-            // that is OK!
-            assertNotNull(e.getMessage());
-        }
-    }    
-    
-    /**
-     * This will test getting rules of specific versions out of a package.
-     */
-    public void testPackageRuleVersionExtraction() throws Exception {
-        PackageItem pack = getRepo().createPackage( "package extractor", "foo" );
-        
-        
-        AssetItem rule1 = pack.addAsset( "rule number 1", "yeah man" );
-        rule1.checkin( "version0" );
-        
-        AssetItem rule2 = pack.addAsset( "rule number 2", "no way" );
-        rule2.checkin( "version0" );
-        
-        AssetItem rule3 = pack.addAsset( "rule number 3", "yes way" );
-        rule3.checkin( "version0" );
-        
-        getRepo().save();
-        
-        pack = getRepo().loadPackage( "package extractor" );
-        List rules = iteratorToList( pack.getRules() );
-        assertEquals(3, rules.size());
-        
-        StateItem state = getRepo().getState( "foobar" );
-        
-        rule1.updateState( "foobar" );
-        rule1.checkin( "yeah" );
-        
-        pack = getRepo().loadPackage( "package extractor" );
-        
-        rules = iteratorToList( pack.getRules(state) );
-        
-        assertEquals(1, rules.size());
-        
-        //now lets try an invalid state tag
-        rules = iteratorToList( pack.getRules( getRepo().getState( "whee" ) ) );
-        assertEquals(0, rules.size());
-        
-        //and null, as we start with null, should be able to get all three back
-        //although an older version of one of them
-        rules = iteratorToList( pack.getRules(null) );
-        assertEquals(3, rules.size());
-        
-        //now do an update, and pull it out via state
-        rule1.updateContent( "new content" );
-        rule1.updateState( "draft" );
-        rule1.checkin( "latest" );
-        
-        rules = iteratorToList( pack.getRules(getRepo().getState( "draft" )) );
-        assertEquals(1, rules.size());
-        AssetItem rule = (AssetItem) rules.get( 0 );
-        assertEquals("new content", rule.getContent());
-        
-        //get the previous one via state
-        
-        rules = iteratorToList( pack.getRules(getRepo().getState( "foobar" )) );
-        assertEquals(1, rules.size());
-        AssetItem prior = (AssetItem) rules.get( 0 );
-        
-        assertFalse("new content".equals( prior.getContent() ));
-        
-    }
-    
-    public void testDuplicatePackageName() throws Exception {
-        PackageItem pack = getRepo().createPackage( "dupePackageTest", "testing for dupe" );        
-        assertNotNull(pack.getName());
-        
-        try {
-            getRepo().createPackage( "dupePackageTest", "this should fail" );
-            fail("Should not be able to add a package of the same name.");
-        } catch (RulesRepositoryException e) {
-            assertNotNull(e.getMessage());
-        }
-        
-    }
-    
-    public void testLoadRulePackageItemByUUID() throws Exception {
-
-        PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItemByUUID", "desc");
-
-        String uuid = null;
-            uuid = rulePackageItem.getNode().getUUID();
-
-
-        rulePackageItem = getRepo().loadPackageByUUID(uuid);
-        assertNotNull(rulePackageItem);
-        assertEquals("testLoadRuleRuleItemByUUID", rulePackageItem.getName());
-        
-        // try loading rule package that was not created 
-        try {
-            rulePackageItem = getRepo().loadPackageByUUID("01010101-0101-0101-0101-010101010101");
-            fail("Exception not thrown loading rule package that was not created.");
-        } catch (RulesRepositoryException e) {
-            // that is OK!
-            assertNotNull(e.getMessage());
-        }
-    }    
-    
-    public void testAddRuleRuleItem() {
-            PackageItem rulePackageItem1 = getRepo().createPackage("testAddRuleRuleItem","desc");
-
-            
-            AssetItem ruleItem1 = rulePackageItem1.addAsset("testAddRuleRuleItem", "test description");
-            ruleItem1.updateContent( "test content" );
-            ruleItem1.checkin( "updated the rule content" );
-            
-            Iterator rulesIt = rulePackageItem1.getRules();
-            assertNotNull(rulesIt);
-            AssetItem first = (AssetItem) rulesIt.next();
-            assertFalse(rulesIt.hasNext());
-            assertEquals("testAddRuleRuleItem", first.getName());
-            
-            //test that it is following the head revision                        
-            ruleItem1.updateContent("new lhs");
-            ruleItem1.checkin( "updated again" );
-            rulesIt = rulePackageItem1.getRules();
-            assertNotNull(rulesIt);
-            
-            List rules = iteratorToList( rulesIt );
-            assertEquals(1, rules.size());
-            assertEquals("testAddRuleRuleItem", ((AssetItem)rules.get(0)).getName());
-            assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
-                        
-            AssetItem ruleItem2 = rulePackageItem1.addAsset("testAddRuleRuleItem2", "test content");
-            
-            rules = iteratorToList(rulePackageItem1.getRules());
-            assertNotNull(rules);
-            assertEquals(2, rules.size());  
-
-    }
-
-    
-    List iteratorToList(Iterator it) {
-        List list = new ArrayList();
-        while(it.hasNext()) {
-            list.add( it.next() );
-        }
-        return list;
-    }
-
-
-
-
-
-
-    
-    public void testGetRules() {
-            PackageItem rulePackageItem1 = getRepo().createPackage("testGetRules", "desc");
-                        
-            AssetItem ruleItem1 = rulePackageItem1.addAsset("testGetRules", "desc" );
-            ruleItem1.updateContent( "test lhs content" );
-
-            
-            List rules = iteratorToList(rulePackageItem1.getRules());
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testGetRules", ((AssetItem)rules.get(0)).getName());
-                                  
-            AssetItem ruleItem2 = rulePackageItem1.addAsset("testGetRules2", "desc" );
-            ruleItem2.updateContent( "test lhs content" );
-            
-            rules = iteratorToList(rulePackageItem1.getRules());
-            assertNotNull(rules);
-            assertEquals(2, rules.size());            
-
-            //now lets test loading rule
-            AssetItem loaded = rulePackageItem1.loadRule( "testGetRules" );
-            assertNotNull(loaded);
-            assertEquals("testGetRules", loaded.getName());
-            assertEquals("desc", loaded.getDescription());
-           
-            
-    }
-
-    public void testToString() {
-            PackageItem rulePackageItem1 = getRepo().createPackage("testToStringPackage", "desc");
-            
-            AssetItem ruleItem1 = rulePackageItem1.addAsset("testToStringPackage", "test lhs content" );
-            ruleItem1.updateContent( "test lhs content" );
-            
-            assertNotNull(rulePackageItem1.toString());                        
-
-    }
-    
-    public void testRemoveRule() {
-            PackageItem rulePackageItem1 = getRepo().createPackage("testRemoveRule", "desc");
-            
-            AssetItem ruleItem1 = rulePackageItem1.addAsset("testRemoveRule", "test lhs content" );
-            ruleItem1.updateContent( "test lhs content" ); 
-            
-            
-            
-            Iterator rulesIt = rulePackageItem1.getRules();
-            AssetItem next = (AssetItem) rulesIt.next();
-            
-            assertFalse(rulesIt.hasNext());
-            assertEquals("testRemoveRule", next.getName());
-                               
-            
-            
-            ruleItem1.updateContent("new lhs");
-            List rules = iteratorToList(rulePackageItem1.getRules());
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testRemoveRule", ((AssetItem)rules.get(0)).getName());
-            assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
-                        
-            AssetItem ruleItem2 = rulePackageItem1.addAsset("testRemoveRule2", "test lhs content");
-            
-            //remove the rule, make sure the other rule in the pacakge stays around
-            rulePackageItem1.removeRule(ruleItem1.getName());
-            rulePackageItem1.rulesRepository.save();
-            rules = iteratorToList(rulePackageItem1.getRules());
-            assertEquals(1, rules.size());
-            assertEquals("testRemoveRule2", ((AssetItem)rules.get(0)).getName());
-            
-            //remove the rule that is following the head revision, make sure the pacakge is now empty
-            rulePackageItem1.removeRule(ruleItem2.getName());
-            rules = iteratorToList(rulePackageItem1.getRules());
-            assertNotNull(rules);
-            assertEquals(0, rules.size());
-
-    }
-
-    
-    
-    public void testGetFormat() {        
-            PackageItem rulePackageItem1 = getRepo().createPackage("testGetFormat", "woot");
-            assertNotNull(rulePackageItem1);
-            assertEquals("Rule Package", rulePackageItem1.getFormat());    
-
-    }        
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java	2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java	2006-12-13 17:26:43 UTC (rev 8292)
@@ -57,7 +57,7 @@
         
         PackageItem pack2 =  repo.loadPackage( "testAddVersionARule" );
         
-        Iterator it =  pack2.getRules();
+        Iterator it =  pack2.getAssets();
         
         it.next();
         it.next();
@@ -203,18 +203,18 @@
         
         repo.save();
         
-        assertEquals(1, iteratorToList( pkg.getRules()).size());
+        assertEquals(1, iteratorToList( pkg.getAssets()).size());
         
         repo.createPackage( "testMove2", "description" );
         repo.moveRuleItemPackage( "testMove2", r.node.getUUID(), "explanation" );
         
         pkg = repo.loadPackage( "testMove" );
-        assertEquals(0, iteratorToList( pkg.getRules() ).size());
+        assertEquals(0, iteratorToList( pkg.getAssets() ).size());
         
         pkg = repo.loadPackage( "testMove2" );
-        assertEquals(1, iteratorToList( pkg.getRules() ).size());
+        assertEquals(1, iteratorToList( pkg.getAssets() ).size());
         
-        r = (AssetItem) pkg.getRules().next();
+        r = (AssetItem) pkg.getAssets().next();
         assertEquals("testMove", r.getName());
         assertEquals("testMove2", r.getPackageName());
         assertEquals("explanation", r.getCheckinComment());




More information about the jboss-svn-commits mailing list