[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