[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