[jboss-svn-commits] JBL Code SVN: r9116 - in labs/jbossrules/trunk/drools-repository/src: test/java/org/drools/repository and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jan 29 22:55:14 EST 2007


Author: michael.neale at jboss.com
Date: 2007-01-29 22:55:14 -0500 (Mon, 29 Jan 2007)
New Revision: 9116

Added:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java
Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItem.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/ItemVersionIterator.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.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/AssetItemTest.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
Log:
JBRULES-628 Versioning nightmare nearly finished

Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -0,0 +1,64 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
+
+/**
+ * A lazy iterator for walking back through history.
+ * Wraps the version iterator from JCR and allows skipping.
+ * 
+ * @author Michael Neale
+ *
+ */
+public class AssetHistoryIterator
+    implements
+    Iterator {
+
+    private Node head;
+    private VersionIterator versionIterator;
+    private RulesRepository repo;
+
+    public AssetHistoryIterator(RulesRepository repo, Node head) {
+        this.head = head;
+        this.repo = repo;      
+        try {
+            this.versionIterator =  this.head.getVersionHistory().getAllVersions();
+        } catch ( RepositoryException e ) {
+            throw new RulesRepositoryException( e );
+        }
+    }
+    
+    public boolean hasNext() {        
+        return versionIterator.hasNext();
+    }
+
+    public Object next() {
+        return new AssetItem(this.repo, (Version) versionIterator.next());
+        
+    }
+
+    /**
+     * You can't do this with this sort of iterator.
+     * It makes no sense to remove a history item.
+     * Removing history is a administrative function only (and in 
+     * any case, it may have to be archived for legal reasons).
+     * 
+     * @throws UnsupportedOperationException when called.
+     */
+    public void remove() {
+       throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * Skip the specified number of items. As this is a lazy iterator this 
+     * means less work in pulling it from the database etc.
+     */
+    public void skip(int i) {
+        this.versionIterator.skip( i );
+    }
+
+}


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

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItem.java	2007-01-30 03:51:13 UTC (rev 9115)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItem.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -73,6 +73,10 @@
             throw new RulesRepositoryException( e );
         }
     }
+    
+    public AssetItem() {
+        super(null, null);
+    }
 
     /**
      * returns the contents of the rule node.
@@ -312,6 +316,14 @@
             throw new RulesRepositoryException( e );
         }
     }
+    
+    /**
+     * 
+     * @return An iterator over the nodes history.
+     */
+    public AssetHistoryIterator getHistory() {
+        return new AssetHistoryIterator(this.rulesRepository, this.node);
+    }
 
 
 

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/ItemVersionIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/ItemVersionIterator.java	2007-01-30 03:51:13 UTC (rev 9115)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/ItemVersionIterator.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -11,7 +11,7 @@
  * 
  * @author btruitt
  */
-public class ItemVersionIterator implements Iterator {
+class ItemVersionIterator implements Iterator {
     private static final Logger log = Logger.getLogger(ItemVersionIterator.class);
     
     private VersionableItem currentVersionableItem;

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	2007-01-30 03:51:13 UTC (rev 9115)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -2,6 +2,8 @@
 
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
@@ -78,6 +80,10 @@
             throw new RulesRepositoryException( e );
         }
     }
+    
+    PackageItem() {
+        super(null, null);
+    }
 
 
     /**
@@ -453,7 +459,20 @@
                 //ignore this one
             } 
             else {
-                Iterator prev = head.getPredecessorVersionsIterator();
+                
+                
+                List fullHistory = new ArrayList();
+                for ( Iterator iter = head.getHistory(); iter.hasNext(); ) {
+                    AssetItem element = (AssetItem) iter.next();
+                    if (!element.getVersionNumber().equals( "" )) {
+                        fullHistory.add( element );
+                    }
+                }
+                
+                sortHistoryByVersionNumber( fullHistory );
+                
+                
+                Iterator prev = fullHistory.iterator();
                 while (prev.hasNext()) {
                     AssetItem prevRule = (AssetItem) prev.next();
                     if (prevRule.sameState( state )) {
@@ -465,6 +484,20 @@
         }
         return result.iterator();
     }
+
+
+    void sortHistoryByVersionNumber(List fullHistory) {
+        Collections.sort( fullHistory, new Comparator() {
+
+            public int compare(Object o1,
+                               Object o2) {
+                AssetItem a1 = (AssetItem) o1;
+                AssetItem a2 = (AssetItem) o2;
+                return a2.getVersionNumber().compareTo( a1.getVersionNumber() );
+            }
+            
+        });
+    }
     
     /**
      * This will return a list of assets for a given state.

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	2007-01-30 03:51:13 UTC (rev 9115)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -160,8 +160,9 @@
      * @return an Iterator over VersionableItem objects encapsulating each successor node of this 
      *         Item's node
      * @throws RulesRepositoryException
+     * @Deprecated Until I can work out why it isn't quite kosher.
      */
-    public ItemVersionIterator getSuccessorVersionsIterator() throws RulesRepositoryException {
+    ItemVersionIterator getSuccessorVersionsIterator() throws RulesRepositoryException {
         return new ItemVersionIterator( this,
                                         ItemVersionIterator.ITERATION_TYPE_SUCCESSOR );
     }
@@ -170,8 +171,9 @@
      * @return an Iterator over VersionableItem objects encapsulating each predecessor node of this 
      *         Item's node
      * @throws RulesRepositoryException
+     * @Deprecated Until I can work out why it isn't quite kosher.
      */
-    public ItemVersionIterator getPredecessorVersionsIterator() throws RulesRepositoryException {
+    ItemVersionIterator getPredecessorVersionsIterator() throws RulesRepositoryException {
         return new ItemVersionIterator( this,
                                         ItemVersionIterator.ITERATION_TYPE_PREDECESSOR );
     }

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java	2007-01-30 03:51:13 UTC (rev 9115)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -82,7 +82,7 @@
             
             assertEquals("yeah !", ruleItem1.getCheckinComment());
             
-            AssetItem prev = (AssetItem) ruleItem1.getPredecessorVersionsIterator().next();
+            AssetItem prev = (AssetItem) ruleItem1.getPrecedingVersion();
             assertEquals("test content", prev.getContent());
             assertFalse("yeah !".equals(prev.getCheckinComment()));
             
@@ -546,6 +546,26 @@
 
     }
     
+    public void testHistoryIterator() throws Exception {
+        AssetItem ruleItem1 = getRepo().loadDefaultPackage().addAsset("testHistoryIterator", "test description");
+        ruleItem1.checkin( "version0" );
+        
+        ruleItem1 = getRepo().loadAssetByUUID( ruleItem1.getUUID() );
+        ruleItem1.updateContent( "wo" );
+        ruleItem1.checkin( "version1" );
+        
+        ruleItem1 = getRepo().loadAssetByUUID( ruleItem1.getUUID() );
+        ruleItem1.updateContent( "ya" );
+        ruleItem1.checkin( "version2" );
+
+        Iterator it = ruleItem1.getHistory();
+        for ( int i = 0; i < 2; i++ ) {
+            assertTrue(it.hasNext());
+            it.next();
+        }        
+        
+    }
+    
     public void testGetTitle() {    
             AssetItem ruleItem1 = getRepo().loadDefaultPackage().addAsset("testGetTitle", "test content");            
                         

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2007-01-30 03:51:13 UTC (rev 9115)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2007-01-30 03:55:14 UTC (rev 9116)
@@ -422,12 +422,31 @@
         item.updateFormat( "ABC" );
         item.checkin( "la" );
         
+        Thread.sleep( 150 );
+        
         AssetItemIterator it = pkg.queryAssets( "drools:format='xyz'" );        
         List list = iteratorToList( it );
         assertEquals(2, list.size());
         
         
     }
+    
+    public void testSortHistoryByVersionNumber() {
+        PackageItem item = new PackageItem();
+        List l = new ArrayList();
+        
+        AssetItem i1 = new MockAssetItem(42);
+        AssetItem i2 = new MockAssetItem(1);
+        
+        l.add( i2 );
+        l.add( i1 );
+        
+        assertEquals(i2, l.iterator().next());
+        
+        item.sortHistoryByVersionNumber( l );
+        
+        assertEquals(i1, l.iterator().next());
+    }
 
     
     
@@ -437,4 +456,24 @@
             assertEquals(PackageItem.PACKAGE_FORMAT, rulePackageItem1.getFormat());    
 
     }        
+    
+    static class MockAssetItem extends AssetItem {
+        private String version;
+
+        MockAssetItem(int ver) {
+            this.version = Integer.toString( ver ); 
+        }
+        
+        public String getVersionNumber() {
+            return this.version;
+        }
+        
+        public boolean equals(Object in) {
+            return in == this;        
+        }
+        
+        public String toString() {
+            return this.version;
+        }
+    }
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list