[jboss-svn-commits] JBL Code SVN: r9315 - 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
Sat Feb 3 18:09:33 EST 2007


Author: michael.neale at jboss.com
Date: 2007-02-03 18:09:33 -0500 (Sat, 03 Feb 2007)
New Revision: 9315

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/RepositoryConfigurator.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
Log:
JBRULES-643 Package snapshot for deployment

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-02-03 22:35:00 UTC (rev 9314)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2007-02-03 23:09:33 UTC (rev 9315)
@@ -544,6 +544,7 @@
      * This will create a new version of a package, effectively freezing the state.
      * This means in the "head" version of the package, rules can be added
      * removed, without effecting the baseline that was created.
+     * @deprecated Use snapshot instead.
      */
     public void createBaseline(String comment,
                                StateItem state) {
@@ -565,15 +566,16 @@
     
     /**
      * Create a new version of the package, but leave statuses the same.
+     * @deprecated Use snapshot instead.
      */
-    public void createBaseline(String comment) {
-        
+    public void createBaseline(String comment) {        
         checkin( comment );
         try {
             this.node.checkout();
         } catch ( RepositoryException e ) {
             throw new RulesRepositoryException("Unable to check out package node after creating a new baseline.", e);
-        }        
-        
+        }               
     }
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java	2007-02-03 22:35:00 UTC (rev 9314)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java	2007-02-03 23:09:33 UTC (rev 9315)
@@ -131,10 +131,10 @@
             // Setup the RulePackageItem area        
             RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.RULE_PACKAGE_AREA, "nt:folder");
             
-            // Setup the DSL area                
-            RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.DSL_AREA, "nt:folder");
-            
-            //Setup the DSL area                
+            // Setup the Snapshot area        
+            RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.PACKAGE_SNAPSHOT_AREA, "nt:folder");
+                        
+            //Setup the Cateogry area                
             RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.TAG_AREA, "nt:folder");
             
             //Setup the State area                

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	2007-02-03 22:35:00 UTC (rev 9314)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2007-02-03 23:09:33 UTC (rev 9315)
@@ -2,6 +2,8 @@
 
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -82,6 +84,11 @@
     public final static String RULE_PACKAGE_AREA = "drools:rulepackage_area";
     
     /**
+     * The name of the rulepackage area of the repository
+     */
+    public final static String PACKAGE_SNAPSHOT_AREA = "drools:packagesnapshot_area";    
+    
+    /**
      * The name of the rule area of the repository
      */
     public final static String RULE_AREA = "drools:rule_area";
@@ -405,6 +412,46 @@
             }
         }
     }    
+    
+    public PackageItem loadPackageSnapshot(String packageName, String snapshotName) {
+        try {
+            Node n = this.getAreaNode( PACKAGE_SNAPSHOT_AREA ).getNode( packageName ).getNode( snapshotName );
+            return new PackageItem(this, n);
+        } catch (  RepositoryException e ) {
+            log.error( e );
+            throw new RulesRepositoryException( e );
+        }
+    }
+    
+    /**
+     * This will copy the package to the snapshot area.
+     * Creating a copy for deployment, etc.
+     */
+    public void createPackageSnapshot(String packageName, String snapshotName) {
+        log.info( "Creating snapshot for [" + packageName + "] called [" + snapshotName + "]");
+        try {
+            Node snaps = this.getAreaNode( PACKAGE_SNAPSHOT_AREA );
+            
+            if (!snaps.hasNode( packageName )) {
+                snaps.addNode( packageName, "nt:folder" );
+                save();
+            }
+            
+            Node pkgSnaps = snaps.getNode( packageName ); 
+            
+            String newName = pkgSnaps.getPath() + "/" +  snapshotName; 
+            
+            Node folderNode = this.getAreaNode(RULE_PACKAGE_AREA);
+            Node rulePackageNode = folderNode.getNode(packageName);
+            
+            String source = rulePackageNode.getPath();
+            
+            this.session.getWorkspace().copy( source, newName );
+        } catch (RepositoryException e) {
+            log.error( "Unable to create snapshot", e );
+            throw new RulesRepositoryException(e);
+        }
+    }
 
     /**
      * This will return or create the default package for rules that have no home yet.
@@ -694,9 +741,33 @@
 
 
 
+    /**
+     * Return a list of the snapshots available for the given package name.
+     */
+    public String[] listPackageSnapshots(String packageName) {
+        Node snaps = this.getAreaNode( PACKAGE_SNAPSHOT_AREA );
+        try {
+            if (!snaps.hasNode( packageName )) {
+                return new String[0];
+            } else {
+                List result = new ArrayList();
+                NodeIterator it = snaps.getNode( packageName ).getNodes();
+                while ( it.hasNext() ) {
+                    Node element = (Node) it.next();
+                    result.add( element.getName() );
+                }
+                return (String[]) result.toArray( new String[result.size()] );
+            }
+        } catch (RepositoryException e) {
+            throw new RulesRepositoryException( e );
+        }
+    }
 
 
 
 
 
+
+
+
 }
\ No newline at end of file

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-02-03 22:35:00 UTC (rev 9314)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2007-02-03 23:09:33 UTC (rev 9315)
@@ -97,7 +97,13 @@
         AssetItem rule = pack.addAsset( "foobar", "waah" );        
         rule.updateContent( "this is something" );        
         rule.checkin( "something" );
+        rule.updateCoverage( "cov" );
+        rule.checkin( "woo" );
+        rule.updateCoverage( "cov" );
+        rule.checkin( "la" );
         
+        List hist = iteratorToList( rule.getHistory() );
+        
         StateItem state = getRepo().getState( "something" );
         
         pack.createBaseline( "another one", state );
@@ -118,8 +124,78 @@
         rule = (AssetItem) prev.getAssets().next();
         assertEquals("this is something", rule.getContent());
         
+
     }
+    
+    /**
+     * This is showing how to copy a package with standard JCR
+     */
+    public void testPackageCopy() throws Exception {
+        RulesRepository repo = getRepo();
+        
+        PackageItem pkg = repo.createPackage( "testPackageCopy", "this is something" );
+        
+        AssetItem it1 = pkg.addAsset( "testPackageCopy1", "la" );
+        AssetItem it2 = pkg.addAsset( "testPackageCopy2", "la" );
+        
+        it1.updateContent( "new content" );
+        it2.updateContent( "more content" );
+        it1.checkin( "c" );
+        it2.checkin( "c" );
+        
+        it1 = pkg.loadAsset( "testPackageCopy1" );
+        List hist1 = iteratorToList( it1.getHistory() );
+        System.out.println(hist1.size());
+        
+        
+        repo.getSession().getWorkspace().copy( pkg.getNode().getPath(), pkg.getNode().getPath() + "_");
+        
+        PackageItem pkg2 = repo.loadPackage( "testPackageCopy_" );
+        assertNotNull(pkg2);
+        
+        assertEquals(2, iteratorToList( pkg2.getAssets() ).size() );
+        AssetItem it1_ = pkg2.loadAsset( "testPackageCopy1" );
 
+        it1.updateContent( "new content2" );
+        it1.checkin( "la" );
+        it1_ = pkg2.loadAsset( "testPackageCopy1" );
+        assertEquals("new content", it1_.getContent());
+
+    }
+    
+    public void testPackageSnapshot() throws Exception {
+        RulesRepository repo = getRepo();
+        
+        PackageItem pkg = repo.createPackage( "testPackageSnapshot", "this is something" );
+        
+        AssetItem it1 = pkg.addAsset( "testPackageCopy1", "la" );
+        AssetItem it2 = pkg.addAsset( "testPackageCopy2", "la" );
+        
+        it1.updateContent( "new content" );
+        it2.updateContent( "more content" );
+        it1.checkin( "c" );
+        it2.checkin( "c" );
+        
+        repo.createPackageSnapshot( "testPackageSnapshot", "PROD 2.0" );
+        
+        
+        PackageItem pkg2 = repo.loadPackageSnapshot( "testPackageSnapshot", "PROD 2.0" );
+        assertNotNull(pkg2);
+        
+        assertEquals(2, iteratorToList( pkg2.getAssets() ).size());
+        assertFalse(pkg2.getUUID().equals( pkg.getUUID() ));
+        
+        //now check we can list the snappies
+        String[] res = repo.listPackageSnapshots("testPackageSnapshot");
+        
+        assertEquals(1, res.length);
+        assertEquals("PROD 2.0", res[0]);
+        
+        res = repo.listPackageSnapshots( "does not exist" );
+        assertEquals(0, res.length);
+        
+    }
+
     private RulesRepository getRepo() {
         return RepositorySessionUtil.getRepository();
     }




More information about the jboss-svn-commits mailing list