[jboss-svn-commits] JBL Code SVN: r8292 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository test/java/org/drools/repository
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Dec 13 12:26:57 EST 2006
Author: michael.neale at jboss.com
Date: 2006-12-13 12:26:43 -0500 (Wed, 13 Dec 2006)
New Revision: 8292
Added:
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java
Removed:
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java
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/RulesRepository.java
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java
Log:
JBRULES-587 + refactoring, improving javadocs
Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -0,0 +1,51 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+
+/**
+ * This iterates over nodes and produces RuleItem's.
+ * Also allows "skipping" of results to jump to certain items,
+ * as per JCRs "skip".
+ *
+ * JCR iterators are/can be lazy, so this makes the most of it for large
+ * numbers of assets.
+ *
+ * @author Michael Neale
+ */
+public class AssetItemIterator
+ implements
+ Iterator {
+
+ private NodeIterator it;
+ private RulesRepository rulesRepository;
+
+ public AssetItemIterator(NodeIterator nodes,
+ RulesRepository repo) {
+ this.it = nodes;
+ this.rulesRepository = repo;
+ }
+
+ public boolean hasNext() {
+ return it.hasNext();
+ }
+
+ public Object next() {
+ return new AssetItem( rulesRepository,
+ (Node) it.next() );
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException( "You can't remove a rule this way." );
+ }
+
+ /**
+ * @param i The number of rules to skip.
+ */
+ public void skip(int i) {
+ it.skip( i );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
___________________________________________________________________
Name: svn:eol-style
+ native
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 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -4,6 +4,7 @@
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
+import java.util.Properties;
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
@@ -13,6 +14,9 @@
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
+import javax.jcr.query.InvalidQueryException;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
import org.apache.log4j.Logger;
@@ -92,6 +96,11 @@
return addAsset(assetName, description, null);
}
+
+// public void searchAssets() {
+// this.node.getPath();
+// Query = this.node.getSession().getWorkspace().getQueryManager().createQuery( arg0, arg1 );
+// }
/**
* This adds a rule to the current physical package (you can move it later).
@@ -145,8 +154,12 @@
}
- /** Remove a rule by name */
- public void removeRule(String name) {
+ /**
+ * Remove an asset by name
+ * After doing this, you will need to check in the package
+ * as removing an item effects the parent package.
+ */
+ public void removeAsset(String name) {
try {
this.node.getNode( RULES_FOLDER_NAME + "/" + name ).remove();
} catch ( RepositoryException e ) {
@@ -305,10 +318,10 @@
// }
/** Return an iterator for the rules in this package */
- public Iterator getRules() {
+ public Iterator getAssets() {
try {
Node content = getVersionContentNode();
- RuleItemIterator it = new RuleItemIterator( content.getNode( RULES_FOLDER_NAME ).getNodes(),
+ AssetItemIterator it = new AssetItemIterator( content.getNode( RULES_FOLDER_NAME ).getNodes(),
this.rulesRepository );
return it;
} catch ( PathNotFoundException e ) {
@@ -320,9 +333,35 @@
}
/**
+ * This will query any assets stored under this package.
+ * For example, you can pass in <code>"drools:format = 'drl'"</code> to get a list of
+ * only a certain type of asset.
+ *
+ * @param fieldPredicates A predicate string (SQL style).
+ * @return A list of matches.
+ */
+ public AssetItemIterator queryAssets(String fieldPredicates) {
+ try {
+
+ //String sql = "SELECT * FROM drools:ruleNodeType WHERE jcr:path LIKE '/drools:repository/drools:rulepackage_area/searchByFormat/rules[%]/%'";
+ String sql = "SELECT * FROM " + AssetItem.RULE_NODE_TYPE_NAME;
+ sql += " WHERE jcr:path LIKE '" + getVersionContentNode().getPath() + "/" + RULES_FOLDER_NAME + "[%]/%'";
+
+ sql += " and " + fieldPredicates;
+
+ Query q = node.getSession().getWorkspace().getQueryManager().createQuery( sql, Query.SQL );
+ QueryResult res = q.execute();
+ return new AssetItemIterator(res.getNodes(), this.rulesRepository);
+ } catch ( RepositoryException e ) {
+ throw new RulesRepositoryException(e);
+ }
+
+ }
+
+ /**
* Load a specific rule asset by name.
*/
- public AssetItem loadRule(String name) {
+ public AssetItem loadAsset(String name) {
try {
Node content = getVersionContentNode();
@@ -388,66 +427,38 @@
}
}
- /**
- * This iterates over nodes and produces RuleItem's.
- * Also allows "skipping" of results to jump to certain items,
- * as per JCRs "skip".
- */
- static class RuleItemIterator
- implements
- Iterator {
- private NodeIterator it;
- private RulesRepository rulesRepository;
- public RuleItemIterator(NodeIterator nodes,
- RulesRepository repo) {
- this.it = nodes;
- this.rulesRepository = repo;
- }
-
- public boolean hasNext() {
- return it.hasNext();
- }
-
- public Object next() {
- return new AssetItem( rulesRepository,
- (Node) it.next() );
- }
-
- public void remove() {
- throw new UnsupportedOperationException( "You can't remove a rule this way." );
- }
-
- /**
- * @param i The number of rules to skip.
- */
- public void skip(int i) {
- it.skip( i );
- }
-
- }
-
/**
- * This will return a list of rules for a given state.
- * It works through the rules that belong to this package, and
+ * This will return a list of assets for a given state.
+ * It works through the assets that belong to this package, and
* if they are not in the correct state, walks backwards until it finds one
* in the correct state.
*
* If it walks all the way back up the versions looking for the "latest"
* version with the appropriate state, and can't find one,
* that asset is not included in the result.
+ *
+ * This will exclude any items that have the "ignoreState" set
+ * (so for example, retired items, invalid items etc).
+ *
+ * @param state The state of assets to retrieve.
+ * @param ignoreState The statuses to not include in the results (it will look
+ * at the status of the latest one).
*/
- public Iterator getRules(final StateItem state) {
- final Iterator rules = getRules();
+ public Iterator getAssetsWithStatus(final StateItem state, final StateItem ignoreState) {
+ final Iterator rules = getAssets();
List result = new ArrayList();
while(rules.hasNext()) {
AssetItem head = (AssetItem) rules.next();
if (head.sameState( state )) {
result.add( head );
- } else {
+ } else if (head.sameState( ignoreState )) {
+ //ignore this one
+ }
+ else {
Iterator prev = head.getPredecessorVersionsIterator();
while (prev.hasNext()) {
AssetItem prevRule = (AssetItem) prev.next();
@@ -460,15 +471,29 @@
}
return result.iterator();
}
-
+
/**
+ * This will return a list of assets for a given state.
+ * It works through the assets that belong to this package, and
+ * if they are not in the correct state, walks backwards until it finds one
+ * in the correct state.
+ *
+ * If it walks all the way back up the versions looking for the "latest"
+ * version with the appropriate state, and can't find one,
+ * that asset is not included in the result.
+ */
+ public Iterator getAssetsWithStatus(final StateItem state) {
+ return getAssetsWithStatus( state, null );
+ }
+
+ /**
* 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.
*/
public void createBaseline(String comment,
StateItem state) {
- Iterator rules = getRules();
+ Iterator rules = getAssets();
while(rules.hasNext()) {
AssetItem rule = (AssetItem) rules.next();
rule.updateState( state );
Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -0,0 +1,35 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+
+/**
+ * This wraps a node iterator, and provides PackageItems when requested.
+ * This supports lazy loading if needed.
+ */
+public class PackageIterator
+ implements
+ Iterator {
+
+ private NodeIterator packageNodeIterator;
+ private RulesRepository repository;
+
+ public PackageIterator(RulesRepository repository, NodeIterator packageNodes) {
+ this.packageNodeIterator = packageNodes;
+ }
+
+ public boolean hasNext() {
+ return this.packageNodeIterator.hasNext();
+ }
+
+ public Object next() {
+ return new PackageItem(this.repository, (Node) this.packageNodeIterator.next());
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("You can not remove items this way.");
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
___________________________________________________________________
Name: svn:eol-style
+ native
Deleted: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageIterator.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -1,37 +0,0 @@
-package org.drools.repository;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-
-/**
- * This wraps a node iterator, and provides RulePackageItems when requested.
- * This supports lazy loading if needed.
- */
-public class RulePackageIterator
- implements
- Iterator {
-
-
-
- private NodeIterator packageNodeIterator;
- private RulesRepository repository;
-
- public RulePackageIterator(RulesRepository repository, NodeIterator packageNodes) {
- this.packageNodeIterator = packageNodes;
- }
-
- public boolean hasNext() {
- return this.packageNodeIterator.hasNext();
- }
-
- public Object next() {
- return new PackageItem(this.repository, (Node) this.packageNodeIterator.next());
- }
-
- public void remove() {
- this.packageNodeIterator.remove();
- }
-
-}
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-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -604,7 +604,7 @@
createPackage( DEFAULT_PACKAGE, "" );
folderNode = this.getAreaNode( RULE_PACKAGE_AREA );
}
- return new RulePackageIterator(this, folderNode.getNodes());
+ return new PackageIterator(this, folderNode.getNodes());
} catch ( RepositoryException e ) {
throw new RulesRepositoryException(e);
}
Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -10,6 +10,7 @@
* @author btruitt
*/
public class StateItem extends Item {
+
private Logger log = Logger.getLogger(StateItem.class);
/**
@@ -54,7 +55,11 @@
}
}
+ public String toString() {
+ return "Current status: [" + getName() + "] (" + super.toString() + ")";
+ }
+
public int hashCode() {
- return 42;
+ return getName().hashCode();
}
}
\ 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-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -385,6 +385,11 @@
}
/**
+ * This returns the format of an item.
+ * This is analagous to a file extension
+ * if the resource was a file (it may contain more information
+ * then a pure file extension could, however).
+ *
* See the Dublin Core documentation for more
* explanation: http://dublincore.org/documents/dces/
*
@@ -404,6 +409,13 @@
}
}
+ /**
+ * This sets the format (or "file extension" of the resource).
+ * In some cases this is critical, and generally should not be changed
+ * after the initial version is checked in.
+ *
+ * @param newFormat
+ */
public void updateFormat(String newFormat) {
this.updateStringProperty( newFormat,
FORMAT_PROPERTY_NAME );
Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTestCase.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -508,7 +508,7 @@
ruleItem.checkin( "woo" );
pkg = getRepo().loadPackage( "testDublinCore" );
- ruleItem = (AssetItem) pkg.getRules().next();
+ ruleItem = (AssetItem) pkg.getAssets().next();
assertEquals("b", ruleItem.getCoverage());
assertEquals("me", ruleItem.getLastContributor());
Added: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -0,0 +1,423 @@
+package org.drools.repository;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class PackageItemTestCase extends TestCase {
+
+ public void testListPackages() throws Exception {
+ RulesRepository repo = getRepo();
+ repo.createPackage( "testListPackages1", "lalalala" );
+
+ List list = iteratorToList( repo.listPackages() );
+ int prevSize = list.size();
+ repo.createPackage( "testListPackages2", "abc" );
+
+ list = iteratorToList( repo.listPackages() );
+
+ assertEquals(prevSize + 1, list.size());
+ }
+
+ public void testRulePackageItem() throws Exception {
+ RulesRepository repo = getRepo();
+ try {
+
+ //calls constructor
+ PackageItem rulePackageItem1 = repo.createPackage("testRulePackage", "desc");
+ assertNotNull(rulePackageItem1);
+ assertEquals("testRulePackage", rulePackageItem1.getName());
+
+ Iterator it = getRepo().listPackages();
+ assertTrue(it.hasNext());
+
+ while (it.hasNext()) {
+ PackageItem pack = (PackageItem) it.next();
+ if (pack.getName().equals( "testRulePackage" )) {
+ return;
+ }
+ }
+ fail("should have picked up the testRulePackage but didnt.");
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ fail("Caught unexpected exception: " + e);
+ }
+
+ }
+
+ /**
+ * This tests creating a "baseline" of a RulePackage,
+ * basically updating all the resources, and checking it in as a version.
+ * This is showing off "multi dimensional versioning".
+ */
+ public void testBaselinePackage() throws Exception {
+ RulesRepository repo = getRepo();
+
+ PackageItem pack = repo.createPackage( "testBaselinePackage", "for testing baselines" );
+
+ AssetItem rule1 = pack.addAsset( "rule 1", "yeah" );
+ AssetItem rule2 = pack.addAsset( "rule 2", "foobar" );
+
+ StateItem state = repo.getState( "deployed" );
+
+ repo.save();
+
+ assertNull(pack.getPrecedingVersion());
+
+ //the first version, frozen with 2 rules
+ pack.createBaseline("commit comment", state);
+
+ //check head
+ pack = repo.loadPackage( "testBaselinePackage" );
+ assertEquals(2, iteratorToList(pack.getAssets()).size());
+
+ //now remove a rule from head
+ pack.removeAsset( "rule 1" );
+ repo.save();
+ assertEquals(1, iteratorToList( pack.getAssets() ).size());
+
+ pack.createBaseline( "another", state );
+
+ PackageItem prev = (PackageItem) pack.getPrecedingVersion();
+ assertEquals(2, iteratorToList( prev.getAssets() ).size());
+
+ }
+
+ /** Continues to show how multi dimensional versioning works */
+ public void testPackageBaselineWithRuleChanges() throws Exception {
+ String packName = StackUtil.getCurrentMethodName();
+ PackageItem pack = getRepo().createPackage( packName, "yeah" );
+
+ AssetItem rule = pack.addAsset( "foobar", "waah" );
+ rule.updateContent( "this is something" );
+ rule.checkin( "something" );
+
+ StateItem state = getRepo().getState( "something" );
+
+ pack.createBaseline( "another one", state );
+
+ pack = getRepo().loadPackage( packName );
+
+ rule = (AssetItem) pack.getAssets().next();
+ rule.updateContent( "blah" );
+ rule.checkin( "woot" );
+
+ pack.createBaseline( "yeah", state );
+
+ pack = getRepo().loadPackage( packName );
+ rule = (AssetItem) pack.getAssets().next();
+ assertEquals("blah", rule.getContent());
+
+ PackageItem prev = (PackageItem) pack.getPrecedingVersion();
+ rule = (AssetItem) prev.getAssets().next();
+ assertEquals("this is something", rule.getContent());
+
+ }
+
+ private RulesRepository getRepo() {
+ return RepositorySession.getRepository();
+ }
+
+ public void testLoadRulePackageItem() {
+
+ PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItem", "desc");
+
+ rulePackageItem = getRepo().loadPackage("testLoadRuleRuleItem");
+ assertNotNull(rulePackageItem);
+ assertEquals("testLoadRuleRuleItem", rulePackageItem.getName());
+
+ assertEquals("desc", rulePackageItem.getDescription());
+ // try loading rule package that was not created
+ try {
+ rulePackageItem = getRepo().loadPackage("anotherRuleRuleItem");
+ fail("Exception not thrown loading rule package that was not created.");
+ } catch (RulesRepositoryException e) {
+ // that is OK!
+ assertNotNull(e.getMessage());
+ }
+ }
+
+ /**
+ * This will test getting rules of specific versions out of a package.
+ */
+ public void testPackageRuleVersionExtraction() throws Exception {
+ PackageItem pack = getRepo().createPackage( "package extractor", "foo" );
+
+
+ AssetItem rule1 = pack.addAsset( "rule number 1", "yeah man" );
+ rule1.checkin( "version0" );
+
+ AssetItem rule2 = pack.addAsset( "rule number 2", "no way" );
+ rule2.checkin( "version0" );
+
+ AssetItem rule3 = pack.addAsset( "rule number 3", "yes way" );
+ rule3.checkin( "version0" );
+
+ getRepo().save();
+
+ pack = getRepo().loadPackage( "package extractor" );
+ List rules = iteratorToList( pack.getAssets() );
+ assertEquals(3, rules.size());
+
+ StateItem state = getRepo().getState( "foobar" );
+
+ rule1.updateState( "foobar" );
+ rule1.checkin( "yeah" );
+
+ pack = getRepo().loadPackage( "package extractor" );
+
+ rules = iteratorToList( pack.getAssetsWithStatus(state) );
+
+ assertEquals(1, rules.size());
+
+ //now lets try an invalid state tag
+ rules = iteratorToList( pack.getAssetsWithStatus( getRepo().getState( "whee" ) ) );
+ assertEquals(0, rules.size());
+
+ //and null, as we start with null, should be able to get all three back
+ //although an older version of one of them
+ rules = iteratorToList( pack.getAssetsWithStatus(null) );
+ assertEquals(3, rules.size());
+
+ //now do an update, and pull it out via state
+ rule1.updateContent( "new content" );
+ rule1.updateState( "draft" );
+ rule1.checkin( "latest" );
+
+ rules = iteratorToList( pack.getAssetsWithStatus(getRepo().getState( "draft" )) );
+ assertEquals(1, rules.size());
+ AssetItem rule = (AssetItem) rules.get( 0 );
+ assertEquals("new content", rule.getContent());
+
+ //get the previous one via state
+
+ rules = iteratorToList( pack.getAssetsWithStatus(getRepo().getState( "foobar" )) );
+ assertEquals(1, rules.size());
+ AssetItem prior = (AssetItem) rules.get( 0 );
+
+ assertFalse("new content".equals( prior.getContent() ));
+
+ }
+
+ public void testIgnoreState() throws Exception {
+ PackageItem pack = getRepo().createPackage( "package testIgnoreState", "foo" );
+
+
+ AssetItem rule1 = pack.addAsset( "rule number 1", "yeah man" );
+ rule1.updateState( "x" );
+ rule1.checkin( "version0" );
+
+
+ AssetItem rule2 = pack.addAsset( "rule number 2", "no way" );
+ rule2.updateState( "x" );
+ rule2.checkin( "version0" );
+
+ AssetItem rule3 = pack.addAsset( "rule number 3", "yes way" );
+ rule3.updateState( "disabled" );
+ rule3.checkin( "version0" );
+
+ getRepo().save();
+
+
+ Iterator result = pack.getAssetsWithStatus( getRepo().getState( "x" ), getRepo().getState( "disabled" ) );
+ List l = iteratorToList( result );
+ assertEquals(2, l.size());
+ }
+
+ public void testDuplicatePackageName() throws Exception {
+ PackageItem pack = getRepo().createPackage( "dupePackageTest", "testing for dupe" );
+ assertNotNull(pack.getName());
+
+ try {
+ getRepo().createPackage( "dupePackageTest", "this should fail" );
+ fail("Should not be able to add a package of the same name.");
+ } catch (RulesRepositoryException e) {
+ assertNotNull(e.getMessage());
+ }
+
+ }
+
+ public void testLoadRulePackageItemByUUID() throws Exception {
+
+ PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItemByUUID", "desc");
+
+ String uuid = null;
+ uuid = rulePackageItem.getNode().getUUID();
+
+
+ rulePackageItem = getRepo().loadPackageByUUID(uuid);
+ assertNotNull(rulePackageItem);
+ assertEquals("testLoadRuleRuleItemByUUID", rulePackageItem.getName());
+
+ // try loading rule package that was not created
+ try {
+ rulePackageItem = getRepo().loadPackageByUUID("01010101-0101-0101-0101-010101010101");
+ fail("Exception not thrown loading rule package that was not created.");
+ } catch (RulesRepositoryException e) {
+ // that is OK!
+ assertNotNull(e.getMessage());
+ }
+ }
+
+ public void testAddRuleRuleItem() {
+ PackageItem rulePackageItem1 = getRepo().createPackage("testAddRuleRuleItem","desc");
+
+
+ AssetItem ruleItem1 = rulePackageItem1.addAsset("testAddRuleRuleItem", "test description");
+ ruleItem1.updateContent( "test content" );
+ ruleItem1.checkin( "updated the rule content" );
+
+ Iterator rulesIt = rulePackageItem1.getAssets();
+ assertNotNull(rulesIt);
+ AssetItem first = (AssetItem) rulesIt.next();
+ assertFalse(rulesIt.hasNext());
+ assertEquals("testAddRuleRuleItem", first.getName());
+
+ //test that it is following the head revision
+ ruleItem1.updateContent("new lhs");
+ ruleItem1.checkin( "updated again" );
+ rulesIt = rulePackageItem1.getAssets();
+ assertNotNull(rulesIt);
+
+ List rules = iteratorToList( rulesIt );
+ assertEquals(1, rules.size());
+ assertEquals("testAddRuleRuleItem", ((AssetItem)rules.get(0)).getName());
+ assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
+
+ AssetItem ruleItem2 = rulePackageItem1.addAsset("testAddRuleRuleItem2", "test content");
+
+ rules = iteratorToList(rulePackageItem1.getAssets());
+ assertNotNull(rules);
+ assertEquals(2, rules.size());
+
+ }
+
+
+ List iteratorToList(Iterator it) {
+ List list = new ArrayList();
+ while(it.hasNext()) {
+ list.add( it.next() );
+ }
+ return list;
+ }
+
+
+
+
+
+
+
+ public void testGetRules() {
+ PackageItem rulePackageItem1 = getRepo().createPackage("testGetRules", "desc");
+
+ AssetItem ruleItem1 = rulePackageItem1.addAsset("testGetRules", "desc" );
+ ruleItem1.updateContent( "test lhs content" );
+
+
+ List rules = iteratorToList(rulePackageItem1.getAssets());
+ assertNotNull(rules);
+ assertEquals(1, rules.size());
+ assertEquals("testGetRules", ((AssetItem)rules.get(0)).getName());
+
+ AssetItem ruleItem2 = rulePackageItem1.addAsset("testGetRules2", "desc" );
+ ruleItem2.updateContent( "test lhs content" );
+
+ rules = iteratorToList(rulePackageItem1.getAssets());
+ assertNotNull(rules);
+ assertEquals(2, rules.size());
+
+ //now lets test loading rule
+ AssetItem loaded = rulePackageItem1.loadAsset( "testGetRules" );
+ assertNotNull(loaded);
+ assertEquals("testGetRules", loaded.getName());
+ assertEquals("desc", loaded.getDescription());
+
+
+ }
+
+ public void testToString() {
+ PackageItem rulePackageItem1 = getRepo().createPackage("testToStringPackage", "desc");
+
+ AssetItem ruleItem1 = rulePackageItem1.addAsset("testToStringPackage", "test lhs content" );
+ ruleItem1.updateContent( "test lhs content" );
+
+ assertNotNull(rulePackageItem1.toString());
+
+ }
+
+ public void testRemoveRule() {
+ PackageItem rulePackageItem1 = getRepo().createPackage("testRemoveRule", "desc");
+
+ AssetItem ruleItem1 = rulePackageItem1.addAsset("testRemoveRule", "test lhs content" );
+ ruleItem1.updateContent( "test lhs content" );
+
+
+
+ Iterator rulesIt = rulePackageItem1.getAssets();
+ AssetItem next = (AssetItem) rulesIt.next();
+
+ assertFalse(rulesIt.hasNext());
+ assertEquals("testRemoveRule", next.getName());
+
+
+
+ ruleItem1.updateContent("new lhs");
+ List rules = iteratorToList(rulePackageItem1.getAssets());
+ assertNotNull(rules);
+ assertEquals(1, rules.size());
+ assertEquals("testRemoveRule", ((AssetItem)rules.get(0)).getName());
+ assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
+
+ AssetItem ruleItem2 = rulePackageItem1.addAsset("testRemoveRule2", "test lhs content");
+
+ //remove the rule, make sure the other rule in the pacakge stays around
+ rulePackageItem1.removeAsset(ruleItem1.getName());
+ rulePackageItem1.rulesRepository.save();
+ rules = iteratorToList(rulePackageItem1.getAssets());
+ assertEquals(1, rules.size());
+ assertEquals("testRemoveRule2", ((AssetItem)rules.get(0)).getName());
+
+ //remove the rule that is following the head revision, make sure the pacakge is now empty
+ rulePackageItem1.removeAsset(ruleItem2.getName());
+ rules = iteratorToList(rulePackageItem1.getAssets());
+ assertNotNull(rules);
+ assertEquals(0, rules.size());
+
+ }
+
+ public void testSearchByFormat() throws Exception {
+ PackageItem pkg = getRepo().createPackage( "searchByFormat", "" );
+ getRepo().save();
+
+
+ AssetItem item = pkg.addAsset( "searchByFormatAsset1", "" );
+ item.updateFormat( "xyz" );
+ item.checkin( "la" );
+
+ item = pkg.addAsset( "searchByFormatAsset2", "wee" );
+ item.updateFormat( "xyz" );
+ item.checkin( "la" );
+
+ item = pkg.addAsset( "searchByFormatAsset3", "wee" );
+ item.updateFormat( "ABC" );
+ item.checkin( "la" );
+
+ AssetItemIterator it = pkg.queryAssets( "drools:format='xyz'" );
+ List list = iteratorToList( it );
+ assertEquals(2, list.size());
+
+
+ }
+
+
+
+ public void testGetFormat() {
+ PackageItem rulePackageItem1 = getRepo().createPackage("testGetFormat", "woot");
+ assertNotNull(rulePackageItem1);
+ assertEquals("Rule Package", rulePackageItem1.getFormat());
+
+ }
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTestCase.java
___________________________________________________________________
Name: svn:eol-style
+ native
Deleted: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -1,374 +0,0 @@
-package org.drools.repository;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-public class RulePackageItemTestCase extends TestCase {
-
- public void testListPackages() throws Exception {
- RulesRepository repo = getRepo();
- repo.createPackage( "testListPackages1", "lalalala" );
-
- List list = iteratorToList( repo.listPackages() );
- int prevSize = list.size();
- repo.createPackage( "testListPackages2", "abc" );
-
- list = iteratorToList( repo.listPackages() );
-
- assertEquals(prevSize + 1, list.size());
- }
-
- public void testRulePackageItem() throws Exception {
- RulesRepository repo = getRepo();
- try {
-
- //calls constructor
- PackageItem rulePackageItem1 = repo.createPackage("testRulePackage", "desc");
- assertNotNull(rulePackageItem1);
- assertEquals("testRulePackage", rulePackageItem1.getName());
-
- Iterator it = getRepo().listPackages();
- assertTrue(it.hasNext());
-
- while (it.hasNext()) {
- PackageItem pack = (PackageItem) it.next();
- if (pack.getName().equals( "testRulePackage" )) {
- return;
- }
- }
- fail("should have picked up the testRulePackage but didnt.");
- }
- catch(Exception e) {
- e.printStackTrace();
- fail("Caught unexpected exception: " + e);
- }
-
- }
-
- /**
- * This tests creating a "baseline" of a RulePackage,
- * basically updating all the resources, and checking it in as a version.
- * This is showing off "multi dimensional versioning".
- */
- public void testBaselinePackage() throws Exception {
- RulesRepository repo = getRepo();
-
- PackageItem pack = repo.createPackage( "testBaselinePackage", "for testing baselines" );
-
- AssetItem rule1 = pack.addAsset( "rule 1", "yeah" );
- AssetItem rule2 = pack.addAsset( "rule 2", "foobar" );
-
- StateItem state = repo.getState( "deployed" );
-
- repo.save();
-
- assertNull(pack.getPrecedingVersion());
-
- //the first version, frozen with 2 rules
- pack.createBaseline("commit comment", state);
-
- //check head
- pack = repo.loadPackage( "testBaselinePackage" );
- assertEquals(2, iteratorToList(pack.getRules()).size());
-
- //now remove a rule from head
- pack.removeRule( "rule 1" );
- repo.save();
- assertEquals(1, iteratorToList( pack.getRules() ).size());
-
- pack.createBaseline( "another", state );
-
- PackageItem prev = (PackageItem) pack.getPrecedingVersion();
- assertEquals(2, iteratorToList( prev.getRules() ).size());
-
- }
-
- /** Continues to show how multi dimensional versioning works */
- public void testPackageBaselineWithRuleChanges() throws Exception {
- String packName = StackUtil.getCurrentMethodName();
- PackageItem pack = getRepo().createPackage( packName, "yeah" );
-
- AssetItem rule = pack.addAsset( "foobar", "waah" );
- rule.updateContent( "this is something" );
- rule.checkin( "something" );
-
- StateItem state = getRepo().getState( "something" );
-
- pack.createBaseline( "another one", state );
-
- pack = getRepo().loadPackage( packName );
-
- rule = (AssetItem) pack.getRules().next();
- rule.updateContent( "blah" );
- rule.checkin( "woot" );
-
- pack.createBaseline( "yeah", state );
-
- pack = getRepo().loadPackage( packName );
- rule = (AssetItem) pack.getRules().next();
- assertEquals("blah", rule.getContent());
-
- PackageItem prev = (PackageItem) pack.getPrecedingVersion();
- rule = (AssetItem) prev.getRules().next();
- assertEquals("this is something", rule.getContent());
-
- }
-
- private RulesRepository getRepo() {
- return RepositorySession.getRepository();
- }
-
- public void testLoadRulePackageItem() {
-
- PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItem", "desc");
-
- rulePackageItem = getRepo().loadPackage("testLoadRuleRuleItem");
- assertNotNull(rulePackageItem);
- assertEquals("testLoadRuleRuleItem", rulePackageItem.getName());
-
- assertEquals("desc", rulePackageItem.getDescription());
- // try loading rule package that was not created
- try {
- rulePackageItem = getRepo().loadPackage("anotherRuleRuleItem");
- fail("Exception not thrown loading rule package that was not created.");
- } catch (RulesRepositoryException e) {
- // that is OK!
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- * This will test getting rules of specific versions out of a package.
- */
- public void testPackageRuleVersionExtraction() throws Exception {
- PackageItem pack = getRepo().createPackage( "package extractor", "foo" );
-
-
- AssetItem rule1 = pack.addAsset( "rule number 1", "yeah man" );
- rule1.checkin( "version0" );
-
- AssetItem rule2 = pack.addAsset( "rule number 2", "no way" );
- rule2.checkin( "version0" );
-
- AssetItem rule3 = pack.addAsset( "rule number 3", "yes way" );
- rule3.checkin( "version0" );
-
- getRepo().save();
-
- pack = getRepo().loadPackage( "package extractor" );
- List rules = iteratorToList( pack.getRules() );
- assertEquals(3, rules.size());
-
- StateItem state = getRepo().getState( "foobar" );
-
- rule1.updateState( "foobar" );
- rule1.checkin( "yeah" );
-
- pack = getRepo().loadPackage( "package extractor" );
-
- rules = iteratorToList( pack.getRules(state) );
-
- assertEquals(1, rules.size());
-
- //now lets try an invalid state tag
- rules = iteratorToList( pack.getRules( getRepo().getState( "whee" ) ) );
- assertEquals(0, rules.size());
-
- //and null, as we start with null, should be able to get all three back
- //although an older version of one of them
- rules = iteratorToList( pack.getRules(null) );
- assertEquals(3, rules.size());
-
- //now do an update, and pull it out via state
- rule1.updateContent( "new content" );
- rule1.updateState( "draft" );
- rule1.checkin( "latest" );
-
- rules = iteratorToList( pack.getRules(getRepo().getState( "draft" )) );
- assertEquals(1, rules.size());
- AssetItem rule = (AssetItem) rules.get( 0 );
- assertEquals("new content", rule.getContent());
-
- //get the previous one via state
-
- rules = iteratorToList( pack.getRules(getRepo().getState( "foobar" )) );
- assertEquals(1, rules.size());
- AssetItem prior = (AssetItem) rules.get( 0 );
-
- assertFalse("new content".equals( prior.getContent() ));
-
- }
-
- public void testDuplicatePackageName() throws Exception {
- PackageItem pack = getRepo().createPackage( "dupePackageTest", "testing for dupe" );
- assertNotNull(pack.getName());
-
- try {
- getRepo().createPackage( "dupePackageTest", "this should fail" );
- fail("Should not be able to add a package of the same name.");
- } catch (RulesRepositoryException e) {
- assertNotNull(e.getMessage());
- }
-
- }
-
- public void testLoadRulePackageItemByUUID() throws Exception {
-
- PackageItem rulePackageItem = getRepo().createPackage("testLoadRuleRuleItemByUUID", "desc");
-
- String uuid = null;
- uuid = rulePackageItem.getNode().getUUID();
-
-
- rulePackageItem = getRepo().loadPackageByUUID(uuid);
- assertNotNull(rulePackageItem);
- assertEquals("testLoadRuleRuleItemByUUID", rulePackageItem.getName());
-
- // try loading rule package that was not created
- try {
- rulePackageItem = getRepo().loadPackageByUUID("01010101-0101-0101-0101-010101010101");
- fail("Exception not thrown loading rule package that was not created.");
- } catch (RulesRepositoryException e) {
- // that is OK!
- assertNotNull(e.getMessage());
- }
- }
-
- public void testAddRuleRuleItem() {
- PackageItem rulePackageItem1 = getRepo().createPackage("testAddRuleRuleItem","desc");
-
-
- AssetItem ruleItem1 = rulePackageItem1.addAsset("testAddRuleRuleItem", "test description");
- ruleItem1.updateContent( "test content" );
- ruleItem1.checkin( "updated the rule content" );
-
- Iterator rulesIt = rulePackageItem1.getRules();
- assertNotNull(rulesIt);
- AssetItem first = (AssetItem) rulesIt.next();
- assertFalse(rulesIt.hasNext());
- assertEquals("testAddRuleRuleItem", first.getName());
-
- //test that it is following the head revision
- ruleItem1.updateContent("new lhs");
- ruleItem1.checkin( "updated again" );
- rulesIt = rulePackageItem1.getRules();
- assertNotNull(rulesIt);
-
- List rules = iteratorToList( rulesIt );
- assertEquals(1, rules.size());
- assertEquals("testAddRuleRuleItem", ((AssetItem)rules.get(0)).getName());
- assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
-
- AssetItem ruleItem2 = rulePackageItem1.addAsset("testAddRuleRuleItem2", "test content");
-
- rules = iteratorToList(rulePackageItem1.getRules());
- assertNotNull(rules);
- assertEquals(2, rules.size());
-
- }
-
-
- List iteratorToList(Iterator it) {
- List list = new ArrayList();
- while(it.hasNext()) {
- list.add( it.next() );
- }
- return list;
- }
-
-
-
-
-
-
-
- public void testGetRules() {
- PackageItem rulePackageItem1 = getRepo().createPackage("testGetRules", "desc");
-
- AssetItem ruleItem1 = rulePackageItem1.addAsset("testGetRules", "desc" );
- ruleItem1.updateContent( "test lhs content" );
-
-
- List rules = iteratorToList(rulePackageItem1.getRules());
- assertNotNull(rules);
- assertEquals(1, rules.size());
- assertEquals("testGetRules", ((AssetItem)rules.get(0)).getName());
-
- AssetItem ruleItem2 = rulePackageItem1.addAsset("testGetRules2", "desc" );
- ruleItem2.updateContent( "test lhs content" );
-
- rules = iteratorToList(rulePackageItem1.getRules());
- assertNotNull(rules);
- assertEquals(2, rules.size());
-
- //now lets test loading rule
- AssetItem loaded = rulePackageItem1.loadRule( "testGetRules" );
- assertNotNull(loaded);
- assertEquals("testGetRules", loaded.getName());
- assertEquals("desc", loaded.getDescription());
-
-
- }
-
- public void testToString() {
- PackageItem rulePackageItem1 = getRepo().createPackage("testToStringPackage", "desc");
-
- AssetItem ruleItem1 = rulePackageItem1.addAsset("testToStringPackage", "test lhs content" );
- ruleItem1.updateContent( "test lhs content" );
-
- assertNotNull(rulePackageItem1.toString());
-
- }
-
- public void testRemoveRule() {
- PackageItem rulePackageItem1 = getRepo().createPackage("testRemoveRule", "desc");
-
- AssetItem ruleItem1 = rulePackageItem1.addAsset("testRemoveRule", "test lhs content" );
- ruleItem1.updateContent( "test lhs content" );
-
-
-
- Iterator rulesIt = rulePackageItem1.getRules();
- AssetItem next = (AssetItem) rulesIt.next();
-
- assertFalse(rulesIt.hasNext());
- assertEquals("testRemoveRule", next.getName());
-
-
-
- ruleItem1.updateContent("new lhs");
- List rules = iteratorToList(rulePackageItem1.getRules());
- assertNotNull(rules);
- assertEquals(1, rules.size());
- assertEquals("testRemoveRule", ((AssetItem)rules.get(0)).getName());
- assertEquals("new lhs", ((AssetItem)rules.get(0)).getContent());
-
- AssetItem ruleItem2 = rulePackageItem1.addAsset("testRemoveRule2", "test lhs content");
-
- //remove the rule, make sure the other rule in the pacakge stays around
- rulePackageItem1.removeRule(ruleItem1.getName());
- rulePackageItem1.rulesRepository.save();
- rules = iteratorToList(rulePackageItem1.getRules());
- assertEquals(1, rules.size());
- assertEquals("testRemoveRule2", ((AssetItem)rules.get(0)).getName());
-
- //remove the rule that is following the head revision, make sure the pacakge is now empty
- rulePackageItem1.removeRule(ruleItem2.getName());
- rules = iteratorToList(rulePackageItem1.getRules());
- assertNotNull(rules);
- assertEquals(0, rules.size());
-
- }
-
-
-
- public void testGetFormat() {
- PackageItem rulePackageItem1 = getRepo().createPackage("testGetFormat", "woot");
- assertNotNull(rulePackageItem1);
- assertEquals("Rule Package", rulePackageItem1.getFormat());
-
- }
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java 2006-12-13 16:18:13 UTC (rev 8291)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java 2006-12-13 17:26:43 UTC (rev 8292)
@@ -57,7 +57,7 @@
PackageItem pack2 = repo.loadPackage( "testAddVersionARule" );
- Iterator it = pack2.getRules();
+ Iterator it = pack2.getAssets();
it.next();
it.next();
@@ -203,18 +203,18 @@
repo.save();
- assertEquals(1, iteratorToList( pkg.getRules()).size());
+ assertEquals(1, iteratorToList( pkg.getAssets()).size());
repo.createPackage( "testMove2", "description" );
repo.moveRuleItemPackage( "testMove2", r.node.getUUID(), "explanation" );
pkg = repo.loadPackage( "testMove" );
- assertEquals(0, iteratorToList( pkg.getRules() ).size());
+ assertEquals(0, iteratorToList( pkg.getAssets() ).size());
pkg = repo.loadPackage( "testMove2" );
- assertEquals(1, iteratorToList( pkg.getRules() ).size());
+ assertEquals(1, iteratorToList( pkg.getAssets() ).size());
- r = (AssetItem) pkg.getRules().next();
+ r = (AssetItem) pkg.getAssets().next();
assertEquals("testMove", r.getName());
assertEquals("testMove2", r.getPackageName());
assertEquals("explanation", r.getCheckinComment());
More information about the jboss-svn-commits
mailing list