[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