[jboss-svn-commits] JBL Code SVN: r5961 - in labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository: . test
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Aug 23 00:45:20 EDT 2006
Author: bentruitt
Date: 2006-08-23 00:45:14 -0400 (Wed, 23 Aug 2006)
New Revision: 5961
Added:
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/ItemVersionIterator.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/VersionableItem.java
Modified:
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/CategoryItem.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/DslItem.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/Item.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulePackageItem.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java
labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java
Log:
Added some version operations, and abstracted them out to the type hierarchy inheriting from Item.
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/CategoryItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/CategoryItem.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/CategoryItem.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -6,6 +6,8 @@
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
import org.apache.log4j.Logger;
@@ -106,5 +108,5 @@
log.error("Caught Exception: " + e);
throw new RulesRepositoryException(e);
}
- }
+ }
}
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/DslItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/DslItem.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/DslItem.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -2,12 +2,16 @@
import java.io.File;
import java.io.FileInputStream;
+import java.util.ArrayList;
import java.util.Calendar;
+import java.util.List;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
import org.apache.log4j.Logger;
@@ -16,7 +20,7 @@
*
* @author btruitt
*/
-public class DslItem extends Item {
+public class DslItem extends VersionableItem {
private Logger log = Logger.getLogger(DslItem.class);
/**
@@ -148,4 +152,58 @@
return null;
}
}
+
+ /**
+ * @return a List of DslItem objects encapsulating each Version node in the VersionHistory
+ * of this Item's node
+ * @throws RulesRepositoryException
+ */
+ public List getHistory() throws RulesRepositoryException {
+ List returnList = new ArrayList();
+ try {
+ VersionIterator it = this.node.getVersionHistory().getAllVersions();
+ while(it.hasNext()) {
+ Version currentVersion = it.nextVersion();
+ DslItem item = new DslItem(this.rulesRepository, currentVersion);
+ returnList.add(item);
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception: " + e);
+ throw new RulesRepositoryException(e);
+ }
+ return returnList;
+ }
+
+ public VersionableItem getPrecedingVersion() throws RulesRepositoryException {
+ try {
+ Node precedingVersionNode = this.getPrecedingVersionNode();
+ if(precedingVersionNode != null) {
+ return new DslItem(this.rulesRepository, precedingVersionNode);
+ }
+ else {
+ return null;
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
+
+ public VersionableItem getSucceedingVersion() throws RulesRepositoryException {
+ try {
+ Node succeedingVersionNode = this.getSucceedingVersionNode();
+ if(succeedingVersionNode != null) {
+ return new DslItem(this.rulesRepository, succeedingVersionNode);
+ }
+ else {
+ return null;
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/Item.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/Item.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/Item.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -1,13 +1,13 @@
package org.drools.repository;
+import java.util.List;
+
import javax.jcr.Node;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
import org.apache.log4j.Logger;
-//TODO: may need to change this so that it has the path as its attribute rather than the
-// node reference itself. Then add a getNode() convenience function for getting a reference
-// to the node from the rulesRepository attribute. This is potentially a better design
-// for passing this object around.
/**
* The item class is used to abstract away the underlying details of the JCR repository.
@@ -48,7 +48,8 @@
}
/**
- * gets the name of the node that this item encapsulates
+ * gets the name of this item (unless overridden in a subclass, this just returns the
+ * name of the node that this Item encapsulates.
*
* @return the name of the node that this item encapsultes
* @throws RulesRepositoryException
@@ -82,5 +83,24 @@
public int hashCode() {
return this.node.hashCode();
+ }
+
+ /**
+ * @return the name of the version for this node in the version history
+ * @throws RulesRepositoryException
+ */
+ public String getVersionName() throws RulesRepositoryException {
+ try {
+ if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+ return this.node.getName();
+ }
+ else {
+ return this.node.getBaseVersion().getName();
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
}
}
Added: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/ItemVersionIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/ItemVersionIterator.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/ItemVersionIterator.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -0,0 +1,68 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Implements the Iterator interface, allowing iteration over the version history of versionableItem
+ * nodes
+ *
+ * @author btruitt
+ */
+public class ItemVersionIterator implements Iterator {
+ private static final Logger log = Logger.getLogger(ItemVersionIterator.class);
+
+ private VersionableItem currentVersionableItem;
+ private int iterationType;
+
+ public static final int ITERATION_TYPE_SUCCESSOR = 1;
+ public static final int ITERATION_TYPE_PREDECESSOR = 2;
+
+ public ItemVersionIterator(VersionableItem versionableItem, int iterationType) {
+ this.currentVersionableItem = versionableItem;
+ this.iterationType = iterationType;
+ }
+
+ public boolean hasNext() {
+ if(this.currentVersionableItem == null) {
+ return false;
+ }
+
+ if(this.iterationType == ITERATION_TYPE_SUCCESSOR) {
+ return (this.currentVersionableItem.getSucceedingVersion() != null);
+ }
+ else if(this.iterationType == ITERATION_TYPE_PREDECESSOR) {
+ return (this.currentVersionableItem.getPrecedingVersion() != null);
+ }
+ else {
+ //shouldn't reach this block
+ log.error("Reached unexpected path of execution because iterationType is set to: " + this.iterationType);
+ return false;
+ }
+ }
+
+ public Object next() {
+ if(this.iterationType == ITERATION_TYPE_SUCCESSOR) {
+ this.currentVersionableItem = this.currentVersionableItem.getSucceedingVersion();
+ }
+ else if(this.iterationType == ITERATION_TYPE_PREDECESSOR) {
+ this.currentVersionableItem = this.currentVersionableItem.getPrecedingVersion();
+ }
+ else {
+ //shouldn't reach this block
+ log.error("Reached unexpected path of execution because iterationType is set to: " + this.iterationType);
+ return false;
+ }
+
+ if(this.currentVersionableItem == null) {
+ throw new NoSuchElementException();
+ }
+ return this.currentVersionableItem;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -14,6 +14,8 @@
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
import org.apache.log4j.Logger;
@@ -23,7 +25,7 @@
*
* @author btruitt
*/
-public class RuleItem extends Item {
+public class RuleItem extends VersionableItem {
private Logger log = Logger.getLogger(RuleItem.class);
/**
@@ -49,14 +51,9 @@
/**
* The name of the last modified property on the rule node type
*/
- public static final String LAST_MODIFIED_PROPERTY_NAME = "drools:last_modified";
+ public static final String LAST_MODIFIED_PROPERTY_NAME = "drools:last_modified";
/**
- * The name of the name property on the rule node type
- */
- public static final String NAME_PROPERTY_NAME = "drools:name";
-
- /**
* The name of the lhs property on the rule node type
*/
public static final String LHS_PROPERTY_NAME = "drools:lhs";
@@ -107,7 +104,7 @@
}
}
catch(Exception e) {
- log.error("Caught exception: " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -259,7 +256,7 @@
String message = "";
try {
message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
- log.error(message + e);
+ log.error(message, e);
}
catch (RepositoryException e1) {
log.error("Caught Exception", e);
@@ -330,7 +327,7 @@
String message = "";
try {
message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
- log.error(message + e);
+ log.error(message, e);
}
catch (RepositoryException e1) {
log.error("Caught Exception", e);
@@ -397,7 +394,7 @@
String message = "";
try {
message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
- log.error(message + e);
+ log.error(message, e);
}
catch (RepositoryException e1) {
log.error("Caught Exception", e);
@@ -441,7 +438,7 @@
String message = "";
try {
message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
- log.error(message + e);
+ log.error(message, e);
}
catch (RepositoryException e1) {
log.error("Caught Exception", e);
@@ -485,7 +482,7 @@
String message = "";
try {
message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
- log.error(message + e);
+ log.error(message, e);
}
catch (RepositoryException e1) {
log.error("Caught Exception", e);
@@ -569,7 +566,7 @@
}
}
catch(Exception e) {
- log.error("Caught exception " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -642,7 +639,7 @@
}
}
catch(Exception e) {
- log.error("Caught exception " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -679,7 +676,7 @@
return returnList;
}
catch(Exception e) {
- log.error("Caught exception: " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -696,7 +693,7 @@
this.setState(stateItem);
}
catch(Exception e) {
- log.error("Caught exception: " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -724,7 +721,7 @@
this.node.checkin();
}
catch(Exception e) {
- log.error("Caught exception " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -747,7 +744,7 @@
return null;
}
catch(Exception e) {
- log.error("Caught exception: " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -771,7 +768,7 @@
return null;
}
catch(Exception e) {
- log.error("Caught exception: " + e);
+ log.error("Caught exception", e);
throw new RulesRepositoryException(e);
}
}
@@ -782,7 +779,7 @@
public String toString() {
try {
StringBuffer returnString = new StringBuffer();
- returnString.append("Content of rule node named " + this.node.getName() + ":\n");
+ returnString.append("Content of rule item named '" + this.getName() + "':\n");
returnString.append("LHS: " + this.getLhs() + "\n");
returnString.append("RHS: " + this.getRhs() + "\n");
returnString.append("------\n");
@@ -790,6 +787,7 @@
returnString.append("Date Effective: " + this.getDateEffective() + "\n");
returnString.append("Date Expired: " + this.getDateExpired() + "\n");
returnString.append("Rule Language: " + this.getRuleLanguage() + "\n");
+ returnString.append("Version Name: " + this.getVersionName() + "\n");
returnString.append("------\n");
returnString.append("Rule state: ");
@@ -798,7 +796,7 @@
returnString.append(this.getState().getName() + "\n");
}
else {
- returnString.append("NO STATE SET FOR THIS NODE");
+ returnString.append("NO STATE SET FOR THIS NODE\n");
}
returnString.append("------\n");
@@ -815,4 +813,36 @@
return null;
}
}
+
+ public VersionableItem getPrecedingVersion() throws RulesRepositoryException {
+ try {
+ Node precedingVersionNode = this.getPrecedingVersionNode();
+ if(precedingVersionNode != null) {
+ return new RuleItem(this.rulesRepository, precedingVersionNode);
+ }
+ else {
+ return null;
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
+
+ public VersionableItem getSucceedingVersion() throws RulesRepositoryException {
+ try {
+ Node succeedingVersionNode = this.getSucceedingVersionNode();
+ if(succeedingVersionNode != null) {
+ return new RuleItem(this.rulesRepository, succeedingVersionNode);
+ }
+ else {
+ return null;
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulePackageItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulePackageItem.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulePackageItem.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -10,6 +10,8 @@
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
import org.apache.log4j.Logger;
@@ -27,7 +29,7 @@
*
* @author btruitt
*/
-public class RulePackageItem extends Item {
+public class RulePackageItem extends VersionableItem {
private static Logger log = Logger.getLogger(RulePackageItem.class);
/**
@@ -263,4 +265,58 @@
return null;
}
}
-}
+
+ /**
+ * @return a List of RulePackageItem objects encapsulating each Version node in the
+ * VersionHistory of this Item's node
+ * @throws RulesRepositoryException
+ */
+ public List getHistory() throws RulesRepositoryException {
+ List returnList = new ArrayList();
+ try {
+ VersionIterator it = this.node.getVersionHistory().getAllVersions();
+ while(it.hasNext()) {
+ Version currentVersion = it.nextVersion();
+ RulePackageItem item = new RulePackageItem(this.rulesRepository, currentVersion);
+ returnList.add(item);
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception: " + e);
+ throw new RulesRepositoryException(e);
+ }
+ return returnList;
+ }
+
+ public VersionableItem getPrecedingVersion() throws RulesRepositoryException {
+ try {
+ Node precedingVersionNode = this.getPrecedingVersionNode();
+ if(precedingVersionNode != null) {
+ return new RulePackageItem(this.rulesRepository, precedingVersionNode);
+ }
+ else {
+ return null;
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
+
+ public VersionableItem getSucceedingVersion() throws RulesRepositoryException {
+ try {
+ Node succeedingVersionNode = this.getSucceedingVersionNode();
+ if(succeedingVersionNode != null) {
+ return new RulePackageItem(this.rulesRepository, succeedingVersionNode);
+ }
+ else {
+ return null;
+ }
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -54,6 +54,13 @@
* Rules can be associated with 0 or 1 states. States are created in a seperate area of the
* repository. States are intended to help track the progress of a rule as it traverses its life-
* cycle. (e.g. draft, approved, deprecated, etc.)
+ * <p>
+ * The RulesRepository provides versioning of rules, rule packages, and DSLs. This versioning works
+ * in a strictly linear fashion, with one version having at most 1 predecessor version (or none, if
+ * it is the first version), and at most 1 successor version (or none, if it is the most recently
+ * checked-in version). The JCR specification supports a more complicated versioning system, and
+ * if there is sufficient demand, we can modify our versioning scheme to be better aligned with JCR's
+ * versioning abilities.
*
* @author btruitt
*/
Added: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/VersionableItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/VersionableItem.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/VersionableItem.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -0,0 +1,156 @@
+package org.drools.repository;
+
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Property;
+import javax.jcr.Value;
+
+import org.drools.repository.Item;
+
+public abstract class VersionableItem extends Item {
+
+ /**
+ * The name of the name property on the node type
+ */
+ public static final String NAME_PROPERTY_NAME = "drools:name";
+
+ /**
+ * Sets this object's node attribute to the specified node
+ *
+ * @param rulesRepository the RulesRepository object that this object is being created from
+ * @param node the node in the repository that this item corresponds to
+ */
+ public VersionableItem(RulesRepository rulesRepository, Node node) {
+ super(rulesRepository, node);
+ }
+
+ /**
+ * @return the predessor node of this node in the version history, or null if no predecessor version exists
+ * @throws RulesRepositoryException
+ */
+ protected Node getPrecedingVersionNode() throws RulesRepositoryException {
+ try {
+ Node versionNode;
+ if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+ versionNode = this.node;
+ }
+ else {
+ versionNode = this.node.getBaseVersion();
+ }
+
+ Property predecessorsProperty = versionNode.getProperty("jcr:predecessors");
+ Value [] predecessorValues = predecessorsProperty.getValues();
+
+ if(predecessorValues.length > 0) {
+ Node predecessorNode = this.node.getSession().getNodeByUUID(predecessorValues[0].getString());
+
+ //we don't want to return the root node - it isn't a true predecessor
+ if(predecessorNode.getName().equals("jcr:rootVersion")) {
+ return null;
+ }
+
+ return predecessorNode;
+ }
+ }
+ catch(PathNotFoundException e) {
+ //do nothing - this will happen if no predecessors exits
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ return null;
+ }
+
+ /**
+ * @return the successor node of this node in the version history
+ * @throws RulesRepositoryException
+ */
+ protected Node getSucceedingVersionNode() throws RulesRepositoryException {
+ try {
+ Property successorsProperty = this.node.getProperty("jcr:successors");
+ Value [] successorValues = successorsProperty.getValues();
+
+ if(successorValues.length > 0) {
+ Node successorNode = this.node.getSession().getNodeByUUID(successorValues[0].getString());
+ return successorNode;
+ }
+ }
+ catch(PathNotFoundException e) {
+ //do nothing - this will happen if no successors exist
+ }
+ catch(Exception e) {
+ log.error("Caught exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ return null;
+ }
+
+ /**
+ * @return an Iterator over VersionableItem objects encapsulating each successor node of this
+ * Item's node
+ * @throws RulesRepositoryException
+ */
+ public ItemVersionIterator getSuccessorVersionsIterator() throws RulesRepositoryException {
+ return new ItemVersionIterator(this, ItemVersionIterator.ITERATION_TYPE_SUCCESSOR);
+ }
+
+
+ /**
+ * @return an Iterator over VersionableItem objects encapsulating each predecessor node of this
+ * Item's node
+ * @throws RulesRepositoryException
+ */
+ public ItemVersionIterator getPredecessorVersionsIterator() throws RulesRepositoryException {
+ return new ItemVersionIterator(this, ItemVersionIterator.ITERATION_TYPE_PREDECESSOR);
+ }
+
+ /**
+ * Clients of this method can cast the resulting object to the type of object they are
+ * calling the method on (e.g.
+ * <pre>
+ * RuleItem item;
+ * ...
+ * RuleItem predcessor = (RuleItem) item.getPrecedingVersion();
+ * </pre>
+ * @return a VersionableItem object encapsulating the predessor node of this node in the
+ * version history, or null if no predecessor version exists
+ * @throws RulesRepositoryException
+ */
+ public abstract VersionableItem getPrecedingVersion() throws RulesRepositoryException;
+
+ /**
+ * Clients of this method can cast the resulting object to the type of object they are
+ * calling the method on (e.g.
+ * <pre>
+ * RuleItem item;
+ * ...
+ * RuleItem successor = (RuleItem) item.getSucceedingVersion();
+ * </pre>
+ *
+ * @return a VersionableItem object encapsulating the successor node of this node in the
+ * version history.
+ * @throws RulesRepositoryException
+ */
+ public abstract VersionableItem getSucceedingVersion() throws RulesRepositoryException;
+
+ @Override
+ public String getName() throws RulesRepositoryException {
+ try {
+ Node ruleNode;
+ if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+ ruleNode = this.node.getNode("jcr:frozenNode");
+ }
+ else {
+ ruleNode = this.node;
+ }
+
+ Property data = ruleNode.getProperty(NAME_PROPERTY_NAME);
+ return data.getValue().getString();
+ }
+ catch(Exception e) {
+ log.error("Caught Exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -1,6 +1,7 @@
package org.drools.repository.test;
import java.io.File;
+import java.util.Iterator;
import org.drools.repository.DslItem;
import org.drools.repository.RuleItem;
@@ -71,4 +72,22 @@
fail("Unexpected Exception caught: " + e);
}
}
+
+ public void testGetPrecedingVersion() {
+ //not bothering to implement this test since it is pretty much covered by the RuleItemTestCase
+ }
+
+ public void testGetSucceedingVersion() {
+ //not bothering to implement this test since it is pretty much covered by the RuleItemTestCase
+ }
+
+ public void testGetSuccessorVersionsIterator() {
+ //This is covered by the test in RuleItemTestCase - all functionality under test
+ // resides in the common subclass, VersionableItem
+ }
+
+ public void testGetPredecessorVersionsIterator() {
+ //This is covered by the test in RuleItemTestCase - all functionality under test
+ // resides in the common subclass, VersionableItem
+ }
}
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -3,6 +3,7 @@
import java.io.File;
import java.util.Calendar;
import java.util.Date;
+import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
@@ -320,4 +321,124 @@
fail("Caught unexpected exception: " + e);
}
}
-}
+
+ public void testGetPrecedingVersion() {
+ try {
+ RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+
+ RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
+ assertTrue(predecessorRuleItem == null);
+
+ ruleItem1.updateLhs("new lhs");
+
+ predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
+ assertNotNull(predecessorRuleItem);
+ assertEquals("test lhs content", predecessorRuleItem.getLhs());
+
+ ruleItem1.updateLhs("newer lhs");
+
+ predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
+ assertNotNull(predecessorRuleItem);
+ assertEquals("new lhs", predecessorRuleItem.getLhs());
+ predecessorRuleItem = (RuleItem) predecessorRuleItem.getPrecedingVersion();
+ assertNotNull(predecessorRuleItem);
+ assertEquals("test lhs content", predecessorRuleItem.getLhs());
+ }
+ catch(Exception e) {
+ fail("Caught unexpected exception: " + e);
+ }
+ }
+
+ public void testGetSucceedingVersion() {
+ try {
+ RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+
+ RuleItem succeedingRuleItem = (RuleItem) ruleItem1.getSucceedingVersion();
+ assertTrue(succeedingRuleItem == null);
+
+ ruleItem1.updateLhs("new lhs");
+
+ RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
+ assertEquals("test lhs content", predecessorRuleItem.getLhs());
+ succeedingRuleItem = (RuleItem) predecessorRuleItem.getSucceedingVersion();
+ assertNotNull(succeedingRuleItem);
+ assertEquals(ruleItem1.getLhs(), succeedingRuleItem.getLhs());
+ }
+ catch(Exception e) {
+ fail("Caught unexpected exception: " + e);
+ }
+ }
+
+ public void testGetSuccessorVersionsIterator() {
+ try {
+ RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+
+ Iterator iterator = ruleItem1.getSuccessorVersionsIterator();
+ assertNotNull(iterator);
+ assertFalse(iterator.hasNext());
+
+ ruleItem1.updateLhs("new lhs");
+
+ iterator = ruleItem1.getSuccessorVersionsIterator();
+ assertNotNull(iterator);
+ assertFalse(iterator.hasNext());
+
+ RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
+ iterator = predecessorRuleItem.getSuccessorVersionsIterator();
+ assertNotNull(iterator);
+ assertTrue(iterator.hasNext());
+ RuleItem nextRuleItem = (RuleItem) iterator.next();
+ assertEquals("new lhs", nextRuleItem.getLhs());
+ assertFalse(iterator.hasNext());
+
+ ruleItem1.updateLhs("newer lhs");
+
+ iterator = predecessorRuleItem.getSuccessorVersionsIterator();
+ assertNotNull(iterator);
+ assertTrue(iterator.hasNext());
+ nextRuleItem = (RuleItem) iterator.next();
+ assertEquals("new lhs", nextRuleItem.getLhs());
+ assertTrue(iterator.hasNext());
+ nextRuleItem = (RuleItem)iterator.next();
+ assertEquals("newer lhs", nextRuleItem.getLhs());
+ assertFalse(iterator.hasNext());
+ }
+ catch(Exception e) {
+ fail("Caught unexpected exception: " + e);
+ }
+ }
+
+ public void testGetPredecessorVersionsIterator() {
+ try {
+ RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+
+ Iterator iterator = ruleItem1.getPredecessorVersionsIterator();
+ assertNotNull(iterator);
+ assertFalse(iterator.hasNext());
+
+ ruleItem1.updateLhs("new lhs");
+
+ iterator = ruleItem1.getPredecessorVersionsIterator();
+ assertNotNull(iterator);
+ assertTrue(iterator.hasNext());
+ RuleItem nextRuleItem = (RuleItem) iterator.next();
+ assertFalse(iterator.hasNext());
+ assertEquals("test lhs content", nextRuleItem.getLhs());
+
+ ruleItem1.updateLhs("newer lhs");
+
+ iterator = ruleItem1.getPredecessorVersionsIterator();
+ assertNotNull(iterator);
+ assertTrue(iterator.hasNext());
+ nextRuleItem = (RuleItem) iterator.next();
+ assertTrue(iterator.hasNext());
+ assertEquals("new lhs", nextRuleItem.getLhs());
+ nextRuleItem = (RuleItem) iterator.next();
+ assertFalse(iterator.hasNext());
+ assertEquals("test lhs content", nextRuleItem.getLhs());
+ }
+ catch(Exception e) {
+ fail("Caught unexpected exception: " + e);
+ }
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java 2006-08-22 22:21:41 UTC (rev 5960)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java 2006-08-23 04:45:14 UTC (rev 5961)
@@ -247,4 +247,22 @@
fail("Caught unexpected exception: " + e);
}
}
+
+ public void testGetPrecedingVersion() {
+ //not bothering to implement this test since it is pretty much covered by the RuleItemTestCase
+ }
+
+ public void testGetSucceedingVersion() {
+ //not bothering to implement this test since it is pretty much covered by the RuleItemTestCase
+ }
+
+ public void testGetSuccessorVersionsIterator() {
+ //This is covered by the test in RuleItemTestCase - all functionality under test
+ // resides in the common subclass, VersionableItem
+ }
+
+ public void testGetPredecessorVersionsIterator() {
+ //This is covered by the test in RuleItemTestCase - all functionality under test
+ // resides in the common subclass, VersionableItem
+ }
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list