[jboss-svn-commits] JBL Code SVN: r6636 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository main/java/org/drools/repository/util main/resources/node_type_definitions test/java/org/drools/repository test/java/org/drools/repository/util
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 6 04:30:15 EDT 2006
Author: michael.neale at jboss.com
Date: 2006-10-06 04:30:07 -0400 (Fri, 06 Oct 2006)
New Revision: 6636
Added:
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/DefaultVersionNumberGenerator.java
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/VersionNumberGenerator.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/util/
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/util/DefaultVersionNumberGeneratorTest.java
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/VersionableItem.java
labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/versionable_node_type.cnd
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java
Log:
JBRULES-512 Incremental default (and pluggable) version numbering
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-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2006-10-06 08:30:07 UTC (rev 6636)
@@ -26,6 +26,8 @@
import javax.jcr.version.VersionException;
import org.apache.log4j.Logger;
+import org.drools.repository.util.DefaultVersionNumberGenerator;
+import org.drools.repository.util.VersionNumberGenerator;
/**
@@ -65,7 +67,12 @@
public static final String DROOLS_URI = "http://www.jboss.org/drools-repository/1.0";
private static final Logger log = Logger.getLogger(RulesRepository.class);
+
+ private Map areaNodeCache = new HashMap();
+
+ protected VersionNumberGenerator versionNumberGenerator = new DefaultVersionNumberGenerator();
+
/**
* The name of the rulepackage area of the repository
*/
@@ -214,7 +221,6 @@
}
}
- private Map areaNodeCache = new HashMap();
private Node getAreaNode(String areaName) throws RulesRepositoryException {
if (areaNodeCache.containsKey( areaName )) {
@@ -339,6 +345,15 @@
}
/**
+ * Optionally override the default version number generator with a custom
+ * number generator.
+ * The default one is incremental.
+ */
+ public void setVersionNumberGenerator(VersionNumberGenerator gen) {
+ this.versionNumberGenerator = gen;
+ }
+
+ /**
* Adds a Function node in the repository using the content specified.
*
* @param functionName the name of the function
@@ -722,4 +737,7 @@
+
+
+
}
\ 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-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java 2006-10-06 08:30:07 UTC (rev 6636)
@@ -8,8 +8,10 @@
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
import org.drools.repository.Item;
+import org.drools.repository.util.VersionNumberGenerator;
public abstract class VersionableItem extends Item {
@@ -37,6 +39,8 @@
/** The name of the checkin/change comment for change tracking */
public static final String CHECKIN_COMMENT = "drools:checkinComment";
+ public static final String VERSION_NUMBER_PROPERTY_NAME = "drools:versionNumber";
+
/**
* The possible formats for the format property of the node
*/
@@ -243,6 +247,22 @@
throw new RulesRepositoryException( e );
}
}
+
+ /**
+ * get this version number (default is incrementing integer, but you
+ * can provide an implementation of VersionNumberGenerator if needed).
+ */
+ public String getVersionNumber() {
+ try {
+ if (getVersionContentNode().hasProperty( VERSION_NUMBER_PROPERTY_NAME )) {
+ return getVersionContentNode().getProperty( VERSION_NUMBER_PROPERTY_NAME ).getString();
+ } else {
+ return null;
+ }
+ } catch ( RepositoryException e ) {
+ throw new RulesRepositoryException(e);
+ }
+ }
/**
* This will return the checkin comment for the latest revision.
@@ -388,8 +408,11 @@
*/
public void checkin(String comment) {
try {
- this.node.setProperty( VersionableItem.LAST_MODIFIED_PROPERTY_NAME, Calendar.getInstance() );
- this.node.setProperty( VersionableItem.CHECKIN_COMMENT, comment);
+ this.node.setProperty( LAST_MODIFIED_PROPERTY_NAME, Calendar.getInstance() );
+ this.node.setProperty( CHECKIN_COMMENT, comment);
+ VersionNumberGenerator gen = rulesRepository.versionNumberGenerator;
+ String nextVersion = gen.calculateNextVersion( getVersionNumber(), this);
+ this.node.setProperty( VERSION_NUMBER_PROPERTY_NAME, nextVersion );
this.node.getSession().save();
this.node.checkin();
} catch (RepositoryException e) {
Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/DefaultVersionNumberGenerator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/DefaultVersionNumberGenerator.java 2006-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/DefaultVersionNumberGenerator.java 2006-10-06 08:30:07 UTC (rev 6636)
@@ -0,0 +1,21 @@
+package org.drools.repository.util;
+
+import org.drools.repository.VersionableItem;
+
+public class DefaultVersionNumberGenerator
+ implements
+ VersionNumberGenerator {
+
+ public String calculateNextVersion(String currentVersionLabel, VersionableItem asset) {
+ if (currentVersionLabel == null || currentVersionLabel.trim().equals( "" )) {
+ return "1";
+ }
+ try {
+ int current = Integer.parseInt( currentVersionLabel );
+ return Integer.toString( ++current );
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Unable to calculate next version number for version: " + currentVersionLabel);
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/DefaultVersionNumberGenerator.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/VersionNumberGenerator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/VersionNumberGenerator.java 2006-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/VersionNumberGenerator.java 2006-10-06 08:30:07 UTC (rev 6636)
@@ -0,0 +1,22 @@
+package org.drools.repository.util;
+
+import org.drools.repository.VersionableItem;
+
+/**
+ * This is a pluggable version label generator, people can override it
+ * if needed.
+ * Version labels are really "version numbers".
+ *
+ * This will be consulted when an asset is checked in.
+ *
+ */
+public interface VersionNumberGenerator {
+
+ /**
+ * @param currentVersionNumber The current version number.
+ * @param asset The current asset that is being checked in.
+ * @return The version label for the thing being checked in.
+ */
+ public String calculateNextVersion(String currentVersionNumber, VersionableItem asset);
+
+}
Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/util/VersionNumberGenerator.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/versionable_node_type.cnd
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/versionable_node_type.cnd 2006-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/versionable_node_type.cnd 2006-10-06 08:30:07 UTC (rev 6636)
@@ -21,6 +21,9 @@
- drools:lastModified (date)
mandatory
+
+//for incrementing (or user defined) unique version numbers
+- drools:versionNumber (string)
- drools:description (string)
mandatory
@@ -28,4 +31,6 @@
- drools:format (string)
mandatory
- - drools:checkinComment (string)
\ No newline at end of file
+ - drools:checkinComment (string)
+
+
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java 2006-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java 2006-10-06 08:30:07 UTC (rev 6636)
@@ -317,6 +317,7 @@
ruleItem1.updateRuleContent( "test content" );
ruleItem1.checkin( "boo" );
+
RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
assertNotNull(predecessorRuleItem);
@@ -344,8 +345,9 @@
}
public void testGetSucceedingVersion() {
- try {
RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetSucceedingVersion", "test description");
+
+ assertEquals("1", ruleItem1.getVersionNumber());
RuleItem succeedingRuleItem = (RuleItem) ruleItem1.getSucceedingVersion();
assertTrue(succeedingRuleItem == null);
@@ -353,16 +355,13 @@
ruleItem1.updateRuleContent("new content");
ruleItem1.checkin( "la" );
+ assertEquals("2", ruleItem1.getVersionNumber());
RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
assertEquals(null, predecessorRuleItem.getRuleContent());
succeedingRuleItem = (RuleItem) predecessorRuleItem.getSucceedingVersion();
assertNotNull(succeedingRuleItem);
assertEquals(ruleItem1.getRuleContent(), succeedingRuleItem.getRuleContent());
- }
- catch(Exception e) {
- fail("Caught unexpected exception: " + e);
- }
}
public void testGetSuccessorVersionsIterator() {
Added: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/util/DefaultVersionNumberGeneratorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/util/DefaultVersionNumberGeneratorTest.java 2006-10-06 08:17:05 UTC (rev 6635)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/util/DefaultVersionNumberGeneratorTest.java 2006-10-06 08:30:07 UTC (rev 6636)
@@ -0,0 +1,26 @@
+package org.drools.repository.util;
+
+import junit.framework.TestCase;
+
+public class DefaultVersionNumberGeneratorTest extends TestCase {
+
+ public void testGenerator() {
+ DefaultVersionNumberGenerator gen = new DefaultVersionNumberGenerator();
+
+ assertEquals("1", gen.calculateNextVersion( null, null ));
+ assertEquals("1", gen.calculateNextVersion( "0", null ));
+ assertEquals("1", gen.calculateNextVersion( "", null ));
+
+ assertEquals("42", gen.calculateNextVersion( "41", null ));
+
+ assertEquals("1000", gen.calculateNextVersion( "999", null ));
+
+ try {
+ gen.calculateNextVersion( "a", null );
+ fail("should not be able to take a letter for default.");
+ } catch (IllegalArgumentException e) {
+ assertNotNull(e.getMessage());
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/util/DefaultVersionNumberGeneratorTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list