[jboss-svn-commits] JBL Code SVN: r31973 - in labs/jbossrules/branches/factsConstraints_baunax_esteban: drools-repository/src/main/java/org/drools/repository and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 5 16:12:37 EST 2010


Author: baunax
Date: 2010-03-05 16:12:36 -0500 (Fri, 05 Mar 2010)
New Revision: 31973

Added:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItem.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItemIterator.java
Modified:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/PackageConfigData.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/WorkingSetConfigData.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageItem.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
Log:
added WorkingSetItem

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/PackageConfigData.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/PackageConfigData.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/PackageConfigData.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-
-
 import java.util.Date;
 import java.util.HashMap;
 
@@ -27,11 +25,10 @@
  * @author Michael Neale
  *
  */
-public class PackageConfigData
-    implements
-    IsSerializable {
+public class PackageConfigData implements IsSerializable {
 
 	public PackageConfigData() {}
+	
 	public PackageConfigData(String name) {
 		this.name = name;
 	}
@@ -50,4 +47,7 @@
     public Date dateCreated;
     public String checkinComment;
     public HashMap<String,String> catRules;
+    
+    public PackageConfigData[] subPackages;
+    public WorkingSetConfigData[] workingsets;
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/WorkingSetConfigData.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/WorkingSetConfigData.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/WorkingSetConfigData.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -2,11 +2,14 @@
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+/**
+ * 
+ * @author bauna
+ */
 public class WorkingSetConfigData implements IsSerializable {
 	public String name;
 	public String description;
 	
 	public String[] validFacts;
-	public WorkingSetConfigData[] workingSets;
-	
+	public WorkingSetConfigData[] workingSets;	
 }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageItem.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -14,6 +14,7 @@
 import javax.jcr.ItemExistsException;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
+import javax.jcr.PathNotFoundException;
 import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -43,6 +44,12 @@
      * for this package.
      */
     public static final String ASSET_FOLDER_NAME                = "assets";
+    
+    /**
+     * This is the name of the rules "working sets" where rules are kept
+     * for this package.
+     */
+    public static final String WORKINGSETS_FOLDER_NAME                = "workingsets";
 
     /**
      * The dublin core format attribute.
@@ -169,6 +176,28 @@
         return addAsset(assetName, description, null, null);
     }
 
+    public Node getWorkingSetFolderNode() throws RepositoryException {
+       	try {
+			return getNode().getNode(WORKINGSETS_FOLDER_NAME);
+		} catch (PathNotFoundException e) {
+			return getNode().addNode(WORKINGSETS_FOLDER_NAME, "nt:folder");
+		}
+    	
+    }
+    
+    public WorkingSetItem addWorkingSet(String name, String description) throws RepositoryException {
+    	return new WorkingSetItem(name, description, getName(), rulesRepository, getWorkingSetFolderNode());
+    }
+    
+    public Iterator<WorkingSetItem> listWorkingSets()  {
+    	try {
+			return new WorkingSetItemIterator(getRulesRepository(), getNode().getNode(WORKINGSETS_FOLDER_NAME).getNodes());
+		} catch (PathNotFoundException e) {
+			return Collections.<WorkingSetItem>emptyList().iterator();
+		} catch (RepositoryException e) {
+			throw new RulesRepositoryException(e);
+		}
+    }
 
     /**
      * This adds a rule to the current physical package (you can move it later).
@@ -523,15 +552,17 @@
     /**
      * This will load an iterator for assets of the given format type.
      */
-    public AssetItemIterator listAssetsByFormat(String[] formats) {
+    public AssetItemIterator listAssetsByFormat(String... formats) {
 
         if (formats.length == 1) {
-            return queryAssets( "drools:format='" + formats[0] + "'" );
+            return queryAssets( FORMAT_PROPERTY_NAME + "='" + formats[0] + "'" );
         } else {
             String predicate = " ( ";
             for ( int i = 0; i < formats.length; i++ ) {
-                predicate = predicate + "drools:format='" + formats[i] + "'";
-                if (!(i == formats.length -1 )) { predicate =  predicate + " OR "; }
+                predicate = predicate + FORMAT_PROPERTY_NAME + "='" + formats[i] + "'";
+                if (i != formats.length -1) { 
+                	predicate =  predicate + " OR "; 
+                }
             }
             predicate = predicate + " ) ";
             return queryAssets( predicate );
@@ -604,23 +635,23 @@
         }
     }
 
-    public VersionableItem getPrecedingVersion() throws RulesRepositoryException {
-        try {
-            Node precedingVersionNode = this.getPrecedingVersionNode();
-            if ( precedingVersionNode != null ) {
-                return new PackageItem( this.rulesRepository,
-                                            precedingVersionNode );
-            } else {
-                return null;
-            }
-        } catch ( Exception e ) {
-            log.error( "Caught exception",
-                       e );
-            throw new RulesRepositoryException( e );
-        }
-    }
+	@Override
+	public PackageItem getPrecedingVersion() throws RulesRepositoryException {
+		try {
+			Node precedingVersionNode = this.getPrecedingVersionNode();
+			if (precedingVersionNode != null) {
+				return new PackageItem(this.rulesRepository, precedingVersionNode);
+			} else {
+				return null;
+			}
+		} catch (Exception e) {
+			log.error("Caught exception", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
 
-    public VersionableItem getSucceedingVersion() throws RulesRepositoryException {
+    @Override
+    public PackageItem getSucceedingVersion() throws RulesRepositoryException {
         try {
             Node succeedingVersionNode = this.getSucceedingVersionNode();
             if ( succeedingVersionNode != null ) {
@@ -863,27 +894,47 @@
     /**
      * Creates a nested package.
      */
-	public PackageItem createPackage(String subPackageName) throws RepositoryException {
+	public PackageItem createSubPackage(String subPackageName) throws RepositoryException {
 
 		node.checkout();
         log.info( "USER: {} CREATEING subpackage [{}] under [{}]", new Object[] {getCurrentUserName(), subPackageName, getName() });
-		
-        Node rulePackageNode = node.addNode( subPackageName, PackageItem.RULE_PACKAGE_TYPE_NAME );
+		Node subPkgsNode;
+        try {
+			subPkgsNode = node.getNode(RulesRepository.RULE_PACKAGE_AREA);
+		} catch (PathNotFoundException e) {
+			subPkgsNode = node.addNode(RulesRepository.RULE_PACKAGE_AREA, "nt:folder");
+		}
+//		subPkgsNode.checkout();
+        Node ruleSubPackageNode = subPkgsNode.addNode( subPackageName, PackageItem.RULE_PACKAGE_TYPE_NAME );
 
-        rulePackageNode.addNode( PackageItem.ASSET_FOLDER_NAME, "drools:versionableAssetFolder" );
+        ruleSubPackageNode.addNode( PackageItem.ASSET_FOLDER_NAME, "drools:versionableAssetFolder" );
 
-        rulePackageNode.setProperty( PackageItem.TITLE_PROPERTY_NAME, subPackageName );
+        ruleSubPackageNode.setProperty( PackageItem.TITLE_PROPERTY_NAME, subPackageName );
 
-        rulePackageNode.setProperty( AssetItem.DESCRIPTION_PROPERTY_NAME, "" );
-        rulePackageNode.setProperty( AssetItem.FORMAT_PROPERTY_NAME, PackageItem.PACKAGE_FORMAT );
-        rulePackageNode.setProperty( PackageItem.CREATOR_PROPERTY_NAME, this.rulesRepository.getSession().getUserID() );
+        ruleSubPackageNode.setProperty( AssetItem.DESCRIPTION_PROPERTY_NAME, "" );
+        ruleSubPackageNode.setProperty( AssetItem.FORMAT_PROPERTY_NAME, PackageItem.PACKAGE_FORMAT );
+        ruleSubPackageNode.setProperty( PackageItem.CREATOR_PROPERTY_NAME, this.rulesRepository.getSession().getUserID() );
         Calendar lastModified = Calendar.getInstance();
-        rulePackageNode.setProperty( PackageItem.LAST_MODIFIED_PROPERTY_NAME, lastModified );
+        ruleSubPackageNode.setProperty( PackageItem.LAST_MODIFIED_PROPERTY_NAME, lastModified );
+        ruleSubPackageNode.setProperty( PackageItem.CONTENT_PROPERTY_ARCHIVE_FLAG, false );
 
+		return new PackageItem(this.rulesRepository, ruleSubPackageNode);
+	}
 
-		return new PackageItem(this.rulesRepository, rulePackageNode);
+	/**
+	 * Returns a {@link PackageIterator} of its children
+	 * @return a {@link PackageIterator} of its children
+	 */
+	public PackageIterator listSubPackages() {
+		try {
+			return new PackageIterator(getRulesRepository(), node.getNode(RulesRepository.RULE_PACKAGE_AREA).getNodes());
+		} catch (PathNotFoundException e) {
+			return new PackageIterator();
+		} catch (RepositoryException e) {
+			throw new RulesRepositoryException(e);
+		}
 	}
-
+	
     private String getCurrentUserName() {
         return this.rulesRepository.getSession().getUserID();
     }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageIterator.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageIterator.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/PackageIterator.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -18,19 +18,26 @@
 	private Node current = null;
 	private Node next = null;
 
+	public PackageIterator() {
+		this(null, null);
+	}
+	
 	public PackageIterator(RulesRepository repository, NodeIterator packageNodes) {
 		this.packageNodeIterator = packageNodes;
 		this.repository = repository;
 	}
 
 	public boolean hasNext() {
+		if (packageNodeIterator == null) {
+			return false;
+		}
 		boolean hasnext = false;
 		if (this.next == null) {
 			while (this.packageNodeIterator.hasNext()) {
 				Node element = (Node) this.packageNodeIterator.next();
 				try {
 					//Do not return Global Area
-					if ((searchArchived || !element.getProperty("drools:archive").getBoolean()) && !RulesRepository.RULE_GLOBAL_AREA.equals(element.getName())) {
+					if ((searchArchived || !element.getProperty(VersionableItem.CONTENT_PROPERTY_ARCHIVE_FLAG).getBoolean()) && !RulesRepository.RULE_GLOBAL_AREA.equals(element.getName())) {
 						hasnext = true;
 						this.next = element;
 						break;

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -732,7 +732,7 @@
 
 		try {
 			PackageItem pkg = loadPackage(parentPackage);
-			PackageItem subPkg = pkg.createPackage(name);
+			PackageItem subPkg = pkg.createSubPackage(name);
 
 			// create the node - see section 6.7.22.6 of the spec
 //			Node rulePackageNode = subPkg.node; // folderNode.addNode( name,

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -1,12 +1,8 @@
 package org.drools.repository;
 
-import org.drools.repository.events.StorageEventManager;
-
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import javax.jcr.InvalidItemStateException;
 import javax.jcr.Node;
@@ -15,7 +11,10 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
+import javax.jcr.lock.LockException;
 
+import org.drools.repository.events.StorageEventManager;
+
 /**
  * This is the parent class for versionable assets.
  * Contains standard fields based on Dublin Core, and
@@ -39,7 +38,6 @@
     public static final String VERSION_NUMBER_PROPERTY_NAME   = "drools:versionNumber";
     public static final String CONTENT_PROPERTY_ARCHIVE_FLAG  = "drools:archive";
 
-
     /** Dublin core based fields. */
     public static final String LAST_CONTRIBUTOR_PROPERTY_NAME = "drools:lastContributor";
     public static final String CREATOR_PROPERTY_NAME          = "drools:creator";
@@ -51,8 +49,6 @@
     public static final String COVERAGE_PROPERTY_NAME         = "drools:coverage";
     public static final String PUBLISHER_PROPERTY_NAME        = "drools:publisher";
 
-
-
     /**
      * The name of the state property on the rule node type
      */
@@ -63,7 +59,6 @@
      */
     public static final String CATEGORY_PROPERTY_NAME         = "drools:categoryReference";
 
-
     /**
      * The possible formats for the format property of the node
      */
@@ -109,40 +104,40 @@
 
 
     /**
-     * @return the predessor node of this node in the version history, or null if no predecessor version exists
+     * @return the predecessor node of this node in the version history, or null if no predecessor version exists
      * @throws RulesRepositoryException
      */
-    protected Node getPrecedingVersionNode() throws RulesRepositoryException {
-        try {
-            Node versionNode;
-            if ( this.node.getPrimaryNodeType().getName().equals( "nt:version" ) ) {
-                versionNode = this.node;
-            } else {
-                versionNode = this.node.getBaseVersion();
-            }
+	protected Node getPrecedingVersionNode() throws RulesRepositoryException {
+		try {
+			Node versionNode;
+			if (this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+				versionNode = this.node;
+			} else {
+				versionNode = this.node.getBaseVersion();
+			}
 
-            Property predecessorsProperty = versionNode.getProperty( "jcr:predecessors" );
-            Value[] predecessorValues = predecessorsProperty.getValues();
+			Property predecessorsProperty = versionNode.getProperty("jcr:predecessors");
+			Value[] predecessorValues = predecessorsProperty.getValues();
 
-            if ( predecessorValues.length > 0 ) {
-                Node predecessorNode = this.node.getSession().getNodeByUUID( predecessorValues[0].getString() );
+			if (predecessorValues.length > 0) {
+				Node predecessorNode = this.node.getSession().getNodeByUUID(predecessorValues[0].getString());
 
-                //we don't want to return the root node - it isn't a true predecessor
-                if ( predecessorNode.getName().equals( "jcr:rootVersion" ) ) {
-                    return null;
-                }
+				// we don't want to return the root node - it isn't a true
+				// predecessor
+				if (predecessorNode.getName().equals("jcr:rootVersion")) {
+					return null;
+				}
 
-                return predecessorNode;
-            }
-        } catch ( PathNotFoundException e ) {
-            //do nothing - this will happen if no predecessors exits
-        } catch ( Exception e ) {
-            log.error( "Caught exception",
-                       e );
-            throw new RulesRepositoryException( e );
-        }
-        return null;
-    }
+				return predecessorNode;
+			}
+		} catch (PathNotFoundException e) {
+			// do nothing - this will happen if no predecessors exits
+		} catch (Exception e) {
+			log.error("Caught exception", e);
+			throw new RulesRepositoryException(e);
+		}
+		return null;
+	}
 
     /**
      * @return the successor node of this node in the version history
@@ -327,9 +322,36 @@
         }
     }
 
+	/**
+	 * optionally update last updated...
+	 */
+	public void updateStringArrayProperty(String[] value, String prop, boolean setLastUpdated) {
+		try {
+			checkIsUpdateable();
 
+			if (value == null) {
+				return;
+			}
 
+			node.checkout();
+			node.setProperty(prop, value);
+			if (setLastUpdated) {
+				Calendar lastModified = Calendar.getInstance();
+				this.node.setProperty(LAST_MODIFIED_PROPERTY_NAME, lastModified);
+				this.node.setProperty(LAST_CONTRIBUTOR_PROPERTY_NAME, node.getSession().getUserID());
+			}
 
+		} catch (RulesRepositoryException e) {
+			throw new RulesRepositoryException(e);
+		} catch (UnsupportedRepositoryOperationException e) {
+			throw new RulesRepositoryException(e);
+		} catch (LockException e) {
+			throw new RulesRepositoryException(e);
+		} catch (RepositoryException e) {
+			throw new RulesRepositoryException(e);
+		}
+	}
+
     /**
      * See the Dublin Core documentation for more
      * explanation: http://dublincore.org/documents/dces/
@@ -417,7 +439,7 @@
     
     /**
      * This returns the format of an item.
-     * This is analagous to a file extension
+     * This is analogous to a file extension
      * if the resource was a file (it may contain more information
      * then a pure file extension could, however).
      *
@@ -427,18 +449,17 @@
      * @return the format of this object's node
      * @throws RulesRepositoryException
      */
-    public String getFormat() throws RulesRepositoryException {
-        try {
-            Node theNode = getVersionContentNode();
+	public String getFormat() throws RulesRepositoryException {
+		try {
+			Node theNode = getVersionContentNode();
 
-            Property data = theNode.getProperty( FORMAT_PROPERTY_NAME );
-            return data.getValue().getString();
-        } catch ( Exception e ) {
-            log.error( "Caught Exception",
-                       e );
-            throw new RulesRepositoryException( e );
-        }
-    }
+			Property data = theNode.getProperty(FORMAT_PROPERTY_NAME);
+			return data.getValue().getString();
+		} catch (Exception e) {
+			log.error("Caught Exception", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
 
     /**
      * This sets the format (or "file extension" of the resource).
@@ -468,26 +489,25 @@
     /**
      * This deals with a node which *may* be a version, if it is, it grabs the frozen copy.
      */
-    protected Node getRealContentFromVersion(Node node) throws RepositoryException,
-                                            PathNotFoundException {
-        if ( node.getPrimaryNodeType().getName().equals( "nt:version" ) ) {
-            return node.getNode( "jcr:frozenNode" );
-        } else {
-            return node;
-        }
-    }
+	protected Node getRealContentFromVersion(Node node) throws RepositoryException, PathNotFoundException {
+		if (node.getPrimaryNodeType().getName().equals("nt:version")) {
+			return node.getNode("jcr:frozenNode");
+		} else {
+			return node;
+		}
+	}
 
     /**
      * Need to get the name from the content node, not the version node
      * if it is in fact a version !
      */
-    public String getName() {
-        try {
-                return getVersionContentNode().getName();
-        } catch ( RepositoryException e ) {
-            throw new RulesRepositoryException( e );
-        }
-    }
+	public String getName() {
+		try {
+			return getVersionContentNode().getName();
+		} catch (RepositoryException e) {
+			throw new RulesRepositoryException(e);
+		}
+	}
 
     /**
      * This will check out the node prior to editing.

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItem.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItem.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItem.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -0,0 +1,111 @@
+package org.drools.repository;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+
+public class WorkingSetItem extends VersionableItem {
+
+	/**
+     * The Dublin Core format attribute.
+     */
+    public static final String WORKINGSET_FORMAT = "pkgWorkingSet";
+
+    /**
+     * The name of the rule package node type
+     */
+    public static final String WORKINGSET_PACKAGE_TYPE_NAME  = "drools:packageWorkingSet";
+    
+    public static final String PACKAGE_NAME_PROPERTY = AssetItem.PACKAGE_NAME_PROPERTY;
+
+	public static final String WORKINGSETS_FOLDER_NAME = PackageItem.WORKINGSETS_FOLDER_NAME;
+
+	private static final String VALID_FACTS_PROPERTY = "drools:validFacts";
+    
+    
+    /**
+     * Creates new {@link WorkingSetItem} under the provided {@link PackageItem}
+     * 
+     * @param name working set name
+     * @param rulesRepository the ruleRepository
+     * @param pkgItem under this package the WorkingSet will be created
+     * @throws RepositoryException 
+     */
+	public WorkingSetItem(String name, String description, String packageName, RulesRepository rulesRepository, Node workingSetParentNode) throws RepositoryException {
+		this(rulesRepository, createWorkingSet(name, description, packageName, rulesRepository, workingSetParentNode));
+	}
+
+	private static Node createWorkingSet(String name, String description, String pkgName, RulesRepository rulesRepository, Node wsFolderNode)
+			throws RepositoryException {
+		Node wsNode = wsFolderNode.addNode(name.trim(), WorkingSetItem.WORKINGSET_PACKAGE_TYPE_NAME);
+		wsNode.setProperty(WorkingSetItem.TITLE_PROPERTY_NAME, name);
+		wsNode.setProperty(WorkingSetItem.DESCRIPTION_PROPERTY_NAME, description);
+		wsNode.setProperty(WorkingSetItem.FORMAT_PROPERTY_NAME, WorkingSetItem.WORKINGSET_FORMAT);
+		wsNode.setProperty(WorkingSetItem.CHECKIN_COMMENT, "Initial");
+		wsNode.setProperty(WorkingSetItem.LAST_MODIFIED_PROPERTY_NAME, Calendar.getInstance());
+		wsNode.setProperty(WorkingSetItem.PACKAGE_NAME_PROPERTY, pkgName);
+		wsNode.setProperty(WorkingSetItem.CREATOR_PROPERTY_NAME, rulesRepository.getSession().getUserID());
+		return wsNode;
+	}
+	
+	public WorkingSetItem(RulesRepository rulesRepository, Node node) {
+		super(rulesRepository, node);
+	}
+
+	@Override
+	public WorkingSetItem getPrecedingVersion() throws RulesRepositoryException {
+		Node prev = getPrecedingVersionNode();
+		if (prev != null) {
+			return new WorkingSetItem(rulesRepository, prev);
+		}
+		return null;
+	}
+
+	@Override
+	public WorkingSetItem getSucceedingVersion() throws RulesRepositoryException {
+		Node next = getSucceedingVersionNode();
+		if (next != null) {
+			return new WorkingSetItem(rulesRepository, next);
+		}
+		return null;
+	}
+	
+    public Node getWorkingSetFolderNode() throws RepositoryException {
+       	try {
+			return getNode().getNode(WORKINGSETS_FOLDER_NAME);
+		} catch (PathNotFoundException e) {
+			return getNode().addNode(WORKINGSETS_FOLDER_NAME, "nt:folder");
+		}
+    	
+    }
+	
+	public WorkingSetItem addWorkingSet(String name, String description) throws RepositoryException {
+    	return new WorkingSetItem(name, description, getPackageName(), getRulesRepository(), getWorkingSetFolderNode());
+    }
+	
+	public String getPackageName() {
+		return getStringProperty(PACKAGE_NAME_PROPERTY);
+	}
+	
+	public String[] getValidFacts() {
+		return getStringPropertyArray(VALID_FACTS_PROPERTY);
+	}
+
+	public void updateValidFacts(String[] validFacts) {
+		updateStringArrayProperty(validFacts, VALID_FACTS_PROPERTY, true);
+	}
+	
+	public Iterator<WorkingSetItem> listChildren() {
+		try {
+			return new WorkingSetItemIterator(getRulesRepository(), getNode().getNode(WORKINGSETS_FOLDER_NAME).getNodes());
+		} catch (PathNotFoundException e) {
+			return Collections.<WorkingSetItem>emptyList().iterator();
+		} catch (RepositoryException e) {
+			throw new RulesRepositoryException(e);
+		}
+	}
+}


Property changes on: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItem.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItemIterator.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItemIterator.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItemIterator.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -0,0 +1,29 @@
+package org.drools.repository;
+
+import java.util.Iterator;
+
+import javax.jcr.NodeIterator;
+
+public class WorkingSetItemIterator implements Iterator<WorkingSetItem> {
+
+	private RulesRepository rulesRepository; 
+	private NodeIterator wsIterator;
+	
+	public WorkingSetItemIterator(RulesRepository rulesRepository, NodeIterator wsIterator) {
+		this.rulesRepository = rulesRepository;
+		this.wsIterator = wsIterator;
+	}
+	
+	public boolean hasNext() {
+		return wsIterator.hasNext();
+	}
+
+	public WorkingSetItem next() {
+		return new WorkingSetItem(rulesRepository, wsIterator.nextNode());
+	}
+
+	public void remove() {
+		wsIterator.remove();
+	}
+
+}


Property changes on: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/main/java/org/drools/repository/WorkingSetItemIterator.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2010-03-05 21:08:30 UTC (rev 31972)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2010-03-05 21:12:36 UTC (rev 31973)
@@ -74,7 +74,7 @@
         repo.save();
 
 
-        PackageItem pkgNested = p.createPackage("NestedGoodness");
+        PackageItem pkgNested = p.createSubPackage("NestedGoodness");
         assertNotNull(pkgNested);
 
         int n = iteratorToList(repo.listPackages()).size();



More information about the jboss-svn-commits mailing list