[jboss-svn-commits] JBL Code SVN: r6540 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository main/resources/node_type_definitions test/java/org/drools/repository

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 3 04:08:00 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-10-03 04:07:46 -0400 (Tue, 03 Oct 2006)
New Revision: 6540

Added:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/MyAccessManager.java
Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RuleItem.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageItem.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rule_node_type.cnd
   labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rulepackage_node_type.cnd
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/DslItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java
Log:
big refactor

Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/MyAccessManager.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/MyAccessManager.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/MyAccessManager.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -0,0 +1,64 @@
+package org.drools.repository;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.apache.jackrabbit.core.ItemId;
+import org.apache.jackrabbit.core.NodeId;
+import org.apache.jackrabbit.core.security.AMContext;
+import org.apache.jackrabbit.core.security.AccessManager;
+
+public class MyAccessManager
+    implements
+    AccessManager {
+
+    private AMContext amContext;
+
+    public boolean canAccess(String arg0) throws NoSuchWorkspaceException,
+                                         RepositoryException {
+        System.out.println("can access " + arg0);
+        return true;
+    }
+
+    public void checkPermission(ItemId arg0,
+                                int arg1) throws AccessDeniedException,
+                                         ItemNotFoundException,
+                                         RepositoryException {
+        System.out.println("check permission: " + arg0);
+
+    }
+
+    public void close() throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void init(AMContext arg0) throws AccessDeniedException,
+                                    Exception {
+        
+        this.amContext = arg0;        
+
+    }
+
+    public boolean isGranted(ItemId arg0,
+                             int arg1) throws ItemNotFoundException,
+                                      RepositoryException {
+        if (arg0.denotesNode()) {
+            NodeId id = (NodeId) arg0;
+            System.out.println(arg0);
+            
+//            try {
+//            Node n = RepositorySession.getRepository().getSession().getNodeByUUID( id.getUUID().toString() );
+//            System.out.println(n.getName());
+//            } catch (Exception e) {
+//                System.out.println(e);
+//            }
+        }
+        //System.out.println("is granted: " + arg0);
+        return true;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/MyAccessManager.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RuleItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RuleItem.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RuleItem.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -92,8 +92,13 @@
     public String getRuleContent() throws RulesRepositoryException {
         try {                        
             Node ruleNode = getVersionContentNode();
-            Property data = ruleNode.getProperty(RULE_CONTENT_PROPERTY_NAME);
-            return data.getValue().getString();
+            if (ruleNode.hasProperty( RULE_CONTENT_PROPERTY_NAME ) ) {
+                Property data = ruleNode.getProperty(RULE_CONTENT_PROPERTY_NAME);
+                return data.getValue().getString();
+                
+            } else {
+                return null;
+            }
         }
         catch(Exception e) {
             log.error("Caught Exception", e);

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageItem.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulePackageItem.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -1,17 +1,24 @@
 package org.drools.repository;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Iterator;
 import java.util.List;
 
+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.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.version.Version;
+import javax.jcr.version.VersionException;
 import javax.jcr.version.VersionIterator;
 
 import org.apache.log4j.Logger;
@@ -74,83 +81,123 @@
     }    
     
     /**
-     * Adds a rule to the rule package node this object represents.  The reference to the rule 
-     * will follow the head version of the specified rule's node.
-     * 
-     * @param ruleItem the ruleItem corresponding to the node to add to the rule package this
-     *                 object represents
-     * @throws RulesRepositoryException
+     * This adds a rule to the current physical package (you can move it later).
      */
-    public void addRule(RuleItem ruleItem) throws RulesRepositoryException {
-        this.addRule(ruleItem, true);        
+    public RuleItem addRule(String ruleName, String description) {
+        Node ruleNode;
+        try {
+            
+            Node rulesFolder = this.node.getNode( "rules" );
+            ruleNode = rulesFolder.addNode( ruleName, RuleItem.RULE_NODE_TYPE_NAME);
+            ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, ruleName);
+            
+            
+            ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, description);
+            ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
+            //ruleNode.setProperty(RuleItem.RULE_CONTENT_PROPERTY_NAME, "");
+                                    
+            ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT, "Initial" );
+            
+            Calendar lastModified = Calendar.getInstance();
+            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+            
+            this.rulesRepository.save();
+            
+            RuleItem rule = new RuleItem(this.rulesRepository, ruleNode);
+            rule.checkin( "Initial" );
+            return rule;
+            
+        } catch ( Exception e ) {
+            if (e instanceof RuntimeException) {
+                throw (RuntimeException) e;
+            } else if (e instanceof ItemExistsException ) {
+                throw new RulesRepositoryException("A rule of that name already exists in that package.", e);
+            } else {
+                throw new RulesRepositoryException(e);
+            }
+        } 
+        
+        
     }
     
-    /**
-     * Adds a rule to the rule package node this object represents.  The reference to the rule
-     * will optionally follow the head version of the specified rule's node or the specific 
-     * current version.
-     * 
-     * @param ruleItem the ruleItem corresponding to the node to add to the rule package this 
-     *                 object represents
-     * @param followRuleHead if true, the reference to the rule node will follow the head version 
-     *                       of the node, even if new versions are added. If false, will refer 
-     *                       specifically to the current version.
-     * @throws RulesRepositoryException
-     */
-    public void addRule(RuleItem ruleItem, boolean followRuleHead) throws RulesRepositoryException {        
+    /** Remove a rule by name */
+    public void removeRule(String name) {
         try {
-            ValueFactory factory = this.node.getSession().getValueFactory();
-            int i = 0;
-            Value[] newValueArray = null;
-            
-            try {
-                Value[] oldValueArray = this.node.getProperty(RULE_REFERENCE_PROPERTY_NAME).getValues();
-                newValueArray = new Value[oldValueArray.length + 1];                
-                
-                for(i=0; i<oldValueArray.length; i++) {
-                    newValueArray[i] = oldValueArray[i];
-                }
-            }
-            catch(PathNotFoundException e) {
-                //the property has not been created yet. do so now
-                newValueArray = new Value[1];
-            }
-            finally {
-                if(newValueArray != null) { //just here to make the compiler happy
-                    if(followRuleHead) {                    
-                        newValueArray[i] = factory.createValue(ruleItem.getNode());
-                    }
-                    else {
-                        newValueArray[i] = factory.createValue(ruleItem.getNode().getBaseVersion());
-                    }
-                    this.node.checkout();
-                    this.node.setProperty(RULE_REFERENCE_PROPERTY_NAME, newValueArray);                
-                    this.node.getSession().save();
-                    this.node.checkin();
-                }
-                else {
-                    throw new RulesRepositoryException("Unexpected null pointer for newValueArray");
-                }
-            }                    
-        }
-        catch(UnsupportedRepositoryOperationException e) {
-            String message = "";
-            try {
-                message = "Error: Caught UnsupportedRepositoryOperationException when attempting to get base version for rule: " + ruleItem.getNode().getName() + ". Are you sure your JCR repository supports versioning? ";
-                log.error(message + e);
-            }
-            catch (RepositoryException e1) {
-                log.error("Caught exception: " + e1);
-                throw new RulesRepositoryException(message, e1);
-            }
-            log.error("Caught exception: " + e);
+            this.node.getNode( "rules/" + name ).remove();
+        } catch ( RepositoryException e) {
             throw new RulesRepositoryException(e);
         }
-        catch(Exception e) {
-            log.error("Caught exception: " + e);
-            throw new RulesRepositoryException(e);
-        }
     }
+    
+//The following should be kept for reference on how to add a reference that 
+//is either locked to a version or follows head
+//    /**
+//     * Adds a rule to the rule package node this object represents.  The reference to the rule
+//     * will optionally follow the head version of the specified rule's node or the specific 
+//     * current version.
+//     * 
+//     * @param ruleItem the ruleItem corresponding to the node to add to the rule package this 
+//     *                 object represents
+//     * @param followRuleHead if true, the reference to the rule node will follow the head version 
+//     *                       of the node, even if new versions are added. If false, will refer 
+//     *                       specifically to the current version.
+//     * @throws RulesRepositoryException
+//     */
+//    public void addRuleReference(RuleItem ruleItem, boolean followRuleHead) throws RulesRepositoryException {        
+//        try {
+//            ValueFactory factory = this.node.getSession().getValueFactory();
+//            int i = 0;
+//            Value[] newValueArray = null;
+//            
+//            try {
+//                Value[] oldValueArray = this.node.getProperty(RULE_REFERENCE_PROPERTY_NAME).getValues();
+//                newValueArray = new Value[oldValueArray.length + 1];                
+//                
+//                for(i=0; i<oldValueArray.length; i++) {
+//                    newValueArray[i] = oldValueArray[i];
+//                }
+//            }
+//            catch(PathNotFoundException e) {
+//                //the property has not been created yet. do so now
+//                newValueArray = new Value[1];
+//            }
+//            finally {
+//                if(newValueArray != null) { //just here to make the compiler happy
+//                    if(followRuleHead) {                    
+//                        newValueArray[i] = factory.createValue(ruleItem.getNode());
+//                    }
+//                    else {
+//                        //this is the magic that ties it to a specific version
+//                        newValueArray[i] = factory.createValue(ruleItem.getNode().getBaseVersion());
+//                    }
+//                    this.node.checkout();
+//                    this.node.setProperty(RULE_REFERENCE_PROPERTY_NAME, newValueArray);                
+//                    this.node.getSession().save();
+//                    this.node.checkin();
+//                }
+//                else {
+//                    throw new RulesRepositoryException("Unexpected null pointer for newValueArray");
+//                }
+//            }                    
+//        }
+//        catch(UnsupportedRepositoryOperationException e) {
+//            String message = "";
+//            try {
+//                message = "Error: Caught UnsupportedRepositoryOperationException when attempting to get base version for rule: " + ruleItem.getNode().getName() + ". Are you sure your JCR repository supports versioning? ";
+//                log.error(message + e);
+//            }
+//            catch (RepositoryException e1) {
+//                log.error("Caught exception: " + e1);
+//                throw new RulesRepositoryException(message, e1);
+//            }
+//            log.error("Caught exception: " + e);
+//            throw new RulesRepositoryException(e);
+//        }
+//        catch(Exception e) {
+//            log.error("Caught exception: " + e);
+//            throw new RulesRepositoryException(e);
+//        }
+//    }
 
     /**
      * Adds a function to the rule package node this object represents.  The reference to the 
@@ -237,7 +284,7 @@
      *                 this object represents
      * @throws RulesRepositoryException
      */
-    public void removeRule(RuleItem ruleItem) throws RulesRepositoryException {                
+    public void removeRuleReference(RuleItem ruleItem) throws RulesRepositoryException {                
         try {
             Value[] oldValueArray = this.node.getProperty(RULE_REFERENCE_PROPERTY_NAME).getValues();
             Value[] newValueArray = new Value[oldValueArray.length - 1];
@@ -351,79 +398,61 @@
         }
     }
     
-    /**
-     * Gets a list of RuleItem objects for each rule node in this rule package
-     * 
-     * @return the List object holding the RuleItem objects in this rule package
-     * @throws RulesRepositoryException 
-     */
-    public List getRules() throws RulesRepositoryException {
-        try {                       
-            Value[] valueArray = this.node.getProperty(RULE_REFERENCE_PROPERTY_NAME).getValues();
-            List returnList = new ArrayList();
-           
-            for(int i=0; i<valueArray.length; i++) {
-                Node ruleNode = this.node.getSession().getNodeByUUID(valueArray[i].getString());
-                returnList.add(new RuleItem(this.rulesRepository, ruleNode));
-            }
-            return returnList;
-        }
-        catch(PathNotFoundException e) {
-            //the property has not been created yet. 
-            return new ArrayList();
-        }                                       
-        catch(Exception e) {
-            log.error("Caught exception: " + e);
-            throw new RulesRepositoryException(e);
-        }
-    }    
+//    /**
+//     * Gets a list of RuleItem objects for each rule node in this rule package
+//     * 
+//     * @return the List object holding the RuleItem objects in this rule package
+//     * @throws RulesRepositoryException 
+//     */
+//    public List getRules() throws RulesRepositoryException {
+//        try {                       
+//            Value[] valueArray = this.node.getProperty(RULE_REFERENCE_PROPERTY_NAME).getValues();
+//            List returnList = new ArrayList();
+//           
+//            for(int i=0; i<valueArray.length; i++) {
+//                Node ruleNode = this.node.getSession().getNodeByUUID(valueArray[i].getString());
+//                returnList.add(new RuleItem(this.rulesRepository, ruleNode));
+//            }
+//            return returnList;
+//        }
+//        catch(PathNotFoundException e) {
+//            //the property has not been created yet. 
+//            return new ArrayList();
+//        }                                       
+//        catch(Exception e) {
+//            log.error("Caught exception: " + e);
+//            throw new RulesRepositoryException(e);
+//        }
+//    }   
     
-    /**
-     * Removes all functions from the rule package
-     * 
-     * @throws RulesRepositoryException
-     */
-    public void removeAllFunctions() throws RulesRepositoryException {
-        try {
-            Property functionsProperty = this.node.getProperty(FUNCTION_REFERENCE_PROPERTY_NAME);
-            this.node.checkout();
-            functionsProperty.remove();
-            this.node.save();
-            this.node.checkin();
-        }
-        catch(PathNotFoundException e) {
-            //the property has not been created yet. 
-            return;
-        }                                       
-        catch(Exception e) {
-            log.error("Caught exception: " + e);
-            throw new RulesRepositoryException(e);
-        }
-    }
     
-    /**
-     * Removes all rules from the rule package
-     * 
-     * @throws RulesRepositoryException
-     */
-    public void removeAllRules() throws RulesRepositoryException {
+    /** Return an iterator for the rules in this package */
+    public Iterator getRules() {
+        
         try {
-            Property rulesProperty = this.node.getProperty(RULE_REFERENCE_PROPERTY_NAME);
-            this.node.checkout();
-            rulesProperty.remove();
-            this.node.save();
-            this.node.checkin();
-        }
-        catch(PathNotFoundException e) {
-            //the property has not been created yet. 
-            return;
-        }                                       
-        catch(Exception e) {
-            log.error("Caught exception: " + e);
+            final NodeIterator it = this.node.getNode( "rules" ).getNodes();
+            return new Iterator() {
+                public boolean hasNext() {
+                    return it.hasNext();
+                }
+                public Object next() {               
+                    return new RuleItem(rulesRepository, (Node) it.next());
+                }
+                public void remove() {
+                    throw new UnsupportedOperationException("You can't remove a rule this way.");                
+                }
+            };
+            
+        } catch ( PathNotFoundException e ) {
             throw new RulesRepositoryException(e);
+        } catch ( RepositoryException e ) {
+            throw new RulesRepositoryException(e);
         }
+        
     }
     
+
+    
     /**
      * Nicely formats the information contained by the node that this object encapsulates    
      */
@@ -438,26 +467,7 @@
             returnString.append("Version Name: " + this.getVersionName() + "\n");
             returnString.append("----\n");
             
-            //iterate over the rules in this rule package and dump them
-            returnString.append("Rules in rule package: \n");
-            List ruleItems = this.getRules();
-            Iterator it = ruleItems.iterator();
-            while(it.hasNext()) {
-                RuleItem currentRuleItem = (RuleItem)it.next();
-                returnString.append(currentRuleItem.toString() + "\n");
-            }
-            returnString.append("----\n");
             
-            //iterate over the functions in this rule package and dump them
-            returnString.append("Functions in rule package: \n");
-            List functionItems = this.getFunctions();
-            it = functionItems.iterator();
-            while(it.hasNext()) {
-                FunctionItem currentFunctionItem = (FunctionItem)it.next();
-                returnString.append(currentFunctionItem.toString() + "\n");
-            }
-            returnString.append("--------\n");
-            
             return returnString.toString();
         }
         catch(Exception e) {

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -8,6 +8,9 @@
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import javax.jcr.AccessDeniedException;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.ItemExistsException;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.PathNotFoundException;
@@ -17,6 +20,10 @@
 import javax.jcr.Session;
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.version.VersionException;
 
 import org.apache.log4j.Logger;
 
@@ -374,146 +381,112 @@
         }
     }
     
-    /**
-     * Adds a Rule node in the repository using the content specified, associating it with
-     * the specified DSL node
-     * 
-     * @param ruleName the name of the rule
-     * @param lhsContent the lhs of the rule
-     * @param rhsContent the rhs of the rule
-     * @param dslItem the dslItem encapsulting the dsl node to associate this rule node with
-     * @paaram followDslHead whether or not to follow the head revision of the dsl node
-     * @return a RuleItem object encapsulating the node that gets added
-     * @throws RulesRepositoryException
-     */
-    public RuleItem addRule(String ruleName, String ruleContent, DslItem dslItem, boolean followDslHead) throws RulesRepositoryException {
-        Node folderNode = this.getAreaNode(RULE_AREA);        
-        
-        try {        
-            //create the node - see section 6.7.22.6 of the spec
-            Node ruleNode = folderNode.addNode(ruleName, RuleItem.RULE_NODE_TYPE_NAME);
-                        
-            ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, ruleName);
-            ruleNode.setProperty(RuleItem.RULE_CONTENT_PROPERTY_NAME, ruleContent);
-            ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
-            ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
-            
-            
-            if(followDslHead) {
-                ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode());
-            }
-            else {
-                //tie the ruleNode to specifically the current version of the dslNode
-                ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode().getBaseVersion());
-            }
-            
-            Calendar lastModified = Calendar.getInstance();
-            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
-            
-            session.save();
-            
-            try {
-                ruleNode.checkin();
-            }
-            catch(UnsupportedRepositoryOperationException e) {
-                String message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkin rule: " + ruleNode.getName() + ". Are you sure your JCR repository supports versioning? ";
-                log.error(message + e);
-                throw new RulesRepositoryException(message, e);
-            }
-            
-            return new RuleItem(this, ruleNode);
-        }
-        catch(Exception e) {
-            log.error("Caught Exception", e);
-            throw new RulesRepositoryException(e);
-        }
-    }
+//    /**
+//     * Adds a Rule node in the repository using the content specified, associating it with
+//     * the specified DSL node
+//     * 
+//     * @param ruleName the name of the rule
+//     * @param lhsContent the lhs of the rule
+//     * @param rhsContent the rhs of the rule
+//     * @param dslItem the dslItem encapsulting the dsl node to associate this rule node with
+//     * @paaram followDslHead whether or not to follow the head revision of the dsl node
+//     * @return a RuleItem object encapsulating the node that gets added
+//     * @throws RulesRepositoryException
+//     */
+//    public RuleItem addRule(String ruleName, String ruleContent, DslItem dslItem, boolean followDslHead) throws RulesRepositoryException {
+//        Node folderNode = this.getAreaNode(RULE_AREA);        
+//        
+//        try {        
+//            //create the node - see section 6.7.22.6 of the spec
+//            Node ruleNode = folderNode.addNode(ruleName, RuleItem.RULE_NODE_TYPE_NAME);
+//                        
+//            ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, ruleName);
+//            ruleNode.setProperty(RuleItem.RULE_CONTENT_PROPERTY_NAME, ruleContent);
+//            ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
+//            ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
+//            
+//            
+//            if(followDslHead) {
+//                ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode());
+//            }
+//            else {
+//                //tie the ruleNode to specifically the current version of the dslNode
+//                ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode().getBaseVersion());
+//            }
+//            
+//            Calendar lastModified = Calendar.getInstance();
+//            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+//            
+//            session.save();
+//            
+//            try {
+//                ruleNode.checkin();
+//            }
+//            catch(UnsupportedRepositoryOperationException e) {
+//                String message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkin rule: " + ruleNode.getName() + ". Are you sure your JCR repository supports versioning? ";
+//                log.error(message + e);
+//                throw new RulesRepositoryException(message, e);
+//            }
+//            
+//            return new RuleItem(this, ruleNode);
+//        }
+//        catch(Exception e) {
+//            log.error("Caught Exception", e);
+//            throw new RulesRepositoryException(e);
+//        }
+//    }
+//    
+//    
+//    /**
+//     * Adds a Rule node in the repository using the content specified
+//     * 
+//     * @param ruleName the name of the rule
+//     * @param lhsContent the lhs of the rule
+//     * @param rhsContent the rhs of the rule
+//     * @return a RuleItem object encapsulating the node that gets added
+//     * @throws RulesRepositoryException
+//     */
+//    public RuleItem addRule(String ruleName, String ruleContent) throws RulesRepositoryException {
+//        Node folderNode = this.getAreaNode(RULE_AREA);        
+//        
+//        try {        
+//            //create the node - see section 6.7.22.6 of the spec
+//            Node ruleNode = folderNode.addNode(ruleName, RuleItem.RULE_NODE_TYPE_NAME);
+//                        
+//            ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, ruleName);
+//            
+//                        
+//            ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
+//            ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
+//            ruleNode.setProperty(RuleItem.RULE_CONTENT_PROPERTY_NAME, ruleContent);
+//                                    
+//            ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT, "Initial" );
+//            
+//            
+//            Calendar lastModified = Calendar.getInstance();
+//            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+//            
+//            session.save();
+//            
+//            try {
+//                ruleNode.checkin();
+//            }
+//            catch(UnsupportedRepositoryOperationException e) {
+//                String message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkin rule: " + ruleNode.getName() + ". Are you sure your JCR repository supports versioning? ";
+//                log.error(message + e);
+//                throw new RulesRepositoryException(message, e);
+//            }
+//            
+//            return new RuleItem(this, ruleNode);
+//        }
+//        catch(Exception e) {
+//            log.error("Caught Exception", e);
+//            throw new RulesRepositoryException(e);
+//        }
+//    }
+
     
-    
     /**
-     * Adds a Rule node in the repository using the content specified
-     * 
-     * @param ruleName the name of the rule
-     * @param lhsContent the lhs of the rule
-     * @param rhsContent the rhs of the rule
-     * @return a RuleItem object encapsulating the node that gets added
-     * @throws RulesRepositoryException
-     */
-    public RuleItem addRule(String ruleName, String ruleContent) throws RulesRepositoryException {
-        Node folderNode = this.getAreaNode(RULE_AREA);        
-        
-        try {        
-            //create the node - see section 6.7.22.6 of the spec
-            Node ruleNode = folderNode.addNode(ruleName, RuleItem.RULE_NODE_TYPE_NAME);
-                        
-            ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, ruleName);
-            
-                        
-            ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
-            ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
-            ruleNode.setProperty(RuleItem.RULE_CONTENT_PROPERTY_NAME, ruleContent);
-                                    
-            ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT, "Initial" );
-            
-            
-            Calendar lastModified = Calendar.getInstance();
-            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
-            
-            session.save();
-            
-            try {
-                ruleNode.checkin();
-            }
-            catch(UnsupportedRepositoryOperationException e) {
-                String message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkin rule: " + ruleNode.getName() + ". Are you sure your JCR repository supports versioning? ";
-                log.error(message + e);
-                throw new RulesRepositoryException(message, e);
-            }
-            
-            return new RuleItem(this, ruleNode);
-        }
-        catch(Exception e) {
-            log.error("Caught Exception", e);
-            throw new RulesRepositoryException(e);
-        }
-    }
-    
-    /**
-     * Adds a rule package node in the repository. This node has a property called 
-     * drools:rule_reference that is a multi-value reference property.  It will hold an array of 
-     * references to rule nodes that are subsequently added.
-     *   
-     * @param name what to name the node added
-     * @return a RulePackageItem, encapsulating the created node
-     * @throws RulesRepositoryException
-     */
-    public RulePackageItem createRulePackage(String name) throws RulesRepositoryException {
-        Node folderNode = this.getAreaNode(RULE_PACKAGE_AREA);
-                 
-        try {
-            //create the node - see section 6.7.22.6 of the spec
-            Node rulePackageNode = folderNode.addNode(name, RulePackageItem.RULE_PACKAGE_TYPE_NAME);
-            
-            rulePackageNode.setProperty(RulePackageItem.TITLE_PROPERTY_NAME, name);
-            
-                        
-            rulePackageNode.setProperty(RulePackageItem.DESCRIPTION_PROPERTY_NAME, "");
-            rulePackageNode.setProperty(RulePackageItem.FORMAT_PROPERTY_NAME, RulePackageItem.RULE_PACKAGE_FORMAT);
-            
-            Calendar lastModified = Calendar.getInstance();
-            rulePackageNode.setProperty(RulePackageItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
-            
-            this.session.save();
-            rulePackageNode.checkin();
-            return new RulePackageItem(this, rulePackageNode);
-        }
-        catch(Exception e) {
-            log.error("Caught Exception", e);
-            throw new RulesRepositoryException(e);
-        }
-    }   
-    
-    /**
      * Loads a RulePackage for the specified package name. Will throw
      * an exception if the specified rule package does not exist.
      * @param name the name of the package to load 
@@ -535,7 +508,32 @@
             }
         }
     }    
+
+    /**
+     * This will return or create the default package for rules that have no home yet.
+     */
+    public RulePackageItem loadDefaultRulePackage() throws RulesRepositoryException {
+        Node folderNode = this.getAreaNode( RULE_PACKAGE_AREA );
+        try {
+            if (folderNode.hasNode( "default" )) {
+                return loadRulePackage( "default" );
+            } else {
+                return createRulePackage( "default", "" );
+            }
+        } catch ( RepositoryException e ) {
+            throw new RulesRepositoryException(e);
+        }
+        
+    }
     
+//    /**
+//     * This will add a rule to the default package.
+//     * Normally you should load the specific package you want to store the rule in.
+//     */
+//    public RuleItem addRule(String name, String description) {
+//        return loadDefaultRulePackage().addRule( name, description );
+//    }
+    
     /**
      * Similar to above. Loads a RulePackage for the specified uuid. 
      * @param uuid the uuid of the package to load 
@@ -574,6 +572,10 @@
             //create the node - see section 6.7.22.6 of the spec
             Node rulePackageNode = folderNode.addNode(name, RulePackageItem.RULE_PACKAGE_TYPE_NAME);
             
+            rulePackageNode.addNode( "rules", "nt:folder" );
+            rulePackageNode.addNode( "functions", "nt:folder" );
+            
+            
             rulePackageNode.setProperty(RulePackageItem.TITLE_PROPERTY_NAME, name);
             
                         
@@ -584,7 +586,7 @@
             rulePackageNode.setProperty(RulePackageItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
             
             this.session.save();
-            rulePackageNode.checkin();
+
             return new RulePackageItem(this, rulePackageNode);
         }
         catch(Exception e) {
@@ -698,5 +700,22 @@
     }
 
 
+    /**
+     * Save any pending changes.
+     */
+    public void save() {
+        try {
+            this.session.save();
+        } catch ( Exception e ) {
+            if (e instanceof RuntimeException ) {
+                throw (RuntimeException) e;
+            } else {
+                throw new RulesRepositoryException(e);
+            }
+        }
+        
+    }
 
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rule_node_type.cnd
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rule_node_type.cnd	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rule_node_type.cnd	2006-10-03 08:07:46 UTC (rev 6540)
@@ -18,6 +18,7 @@
 // Properties:
 - drools:content (string)
 - drools:contentURI (string)
+
   
 // use this to capture fields which are not known ahead of time 
 - * (undefined)

Modified: labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rulepackage_node_type.cnd
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rulepackage_node_type.cnd	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/main/resources/node_type_definitions/rulepackage_node_type.cnd	2006-10-03 08:07:46 UTC (rev 6540)
@@ -12,11 +12,23 @@
 
 // Supertypes
 > 'drools:versionableNodeType'
-  
+
+// Multiple rules etc are children of one physical package definition
+// ergo this has many rule nodes under it
+//+ * (drools:versionableNodeType)
+// 	version
+
++ * (nt:folder)
+  version
+
+
+/* MN: retiring this structure  
 - drools:ruleReference (reference)
   multiple
   copy
   < 'drools:ruleNodeType','nt:version'
+*/
+
   
 - drools:functionReference (reference)
   multiple

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/DslItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/DslItemTestCase.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/DslItemTestCase.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -32,7 +32,7 @@
         //try constructing a DslItem object with the wrong node type
         try {
             //Get a reference to a node of the incorrect type
-            RuleItem ruleItem1 = this.getRepo().addRule("test rule", "test guts");
+            RuleItem ruleItem1 = this.getRepo().loadDefaultRulePackage().addRule("test rule", "test guts");
             
             //this should fail
             DslItem dslItem2 = new DslItem(getRepo(), ruleItem1.getNode());

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RuleItemTestCase.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -14,13 +14,17 @@
 public class RuleItemTestCase extends TestCase {
 
 
-    public RulesRepository getRepo() {
+    private RulesRepository getRepo() {
         return RepositorySession.getRepository();
     }
     
+    private RulePackageItem getDefaultPackage() {
+        return getRepo().loadDefaultRulePackage();
+    }
+    
     public void testRuleItem() {
             //calls constructor
-            RuleItem ruleItem1 = getRepo().addRule("testRuleItem", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testRuleItem", "test content");
             
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
@@ -30,7 +34,7 @@
         try {
             
             DslItem dslItem = getRepo().addDsl("testRuleItem", "content here");
-            RuleItem ruleItem = new RuleItem(getRepo(), dslItem.getNode());
+            new RuleItem(getRepo(), dslItem.getNode());
             fail("Exception not thrown for node of type: " + dslItem.getNode().getPrimaryNodeType().getName());
         }
         catch(RulesRepositoryException e) {
@@ -43,7 +47,8 @@
 
     public void testGetContent() {
             
-            RuleItem ruleItem1 = getRepo().addRule("testGetContent", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetContent", "test content");
+            ruleItem1.updateRuleContent( "test content" );
             
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
@@ -51,7 +56,7 @@
     }
 
     public void testGetURI() {
-            RuleItem ruleItem1 = getRepo().addRule("testGetURI", "blah");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testGetURI", "blah");
             ruleItem1.updateRuleContentURI( "foo/bar" );
             ruleItem1.checkin( "ha !" );
             assertNotNull(ruleItem1);
@@ -60,8 +65,10 @@
     }
     
     public void testUpdateContent() {
-            RuleItem ruleItem1 = getRepo().addRule("testUpdateContent", "test content");
-                        
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testUpdateContent", "test description");
+            ruleItem1.updateRuleContent( "test content" );            
+            ruleItem1.checkin( "yeah" );
+            
             ruleItem1.updateRuleContent( "new rule content");
             
             assertEquals("new rule content", ruleItem1.getRuleContent());
@@ -81,7 +88,7 @@
     
 
     public void testCategories() {
-            RuleItem ruleItem1 = getRepo().addRule("testAddTag", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testAddTag", "test content");
             
             getRepo().loadCategory( "/" ).addCategory( "testAddTagTestTag", "description" );
             
@@ -120,7 +127,7 @@
     }
 
     public void testRemoveTag() {
-            RuleItem ruleItem1 = getRepo().addRule("testRemoveTag", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testRemoveTag", "test content");
             
             getRepo().loadCategory( "/" ).addCategory( "TestRemoveCategory", "description" );
             
@@ -143,7 +150,7 @@
     }
 
     public void testGetTags() {
-            RuleItem ruleItem1 = getRepo().addRule("testGetTags", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testGetTags", "test content");
            
             List tags = ruleItem1.getCategories();
             assertNotNull(tags);
@@ -159,7 +166,7 @@
     }
 
     public void testSetStateString() {
-            RuleItem ruleItem1 = getRepo().addRule("testSetStateString", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testSetStateString", "test content");
            
             ruleItem1.setState("TestState1");
             assertNotNull(ruleItem1.getState());
@@ -172,7 +179,7 @@
     }
 
     public void testSetStateStateItem() {
-            RuleItem ruleItem1 = getRepo().addRule("testSetStateStateItem", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("foobar", "test description");
            
             StateItem stateItem1 = getRepo().getState("TestState1");
             ruleItem1.setState(stateItem1);            
@@ -187,7 +194,7 @@
     }
 
     public void testGetState() {
-            RuleItem ruleItem1 = getRepo().addRule("testGetState", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testGetState", "test content");
            
             StateItem stateItem1 = ruleItem1.getState();
             assertNull(stateItem1);
@@ -196,16 +203,17 @@
             assertNotNull(ruleItem1.getState());
             assertEquals("TestState1", ruleItem1.getState().getName());                        
     }
+    
 
     public void testToString() {
-            RuleItem ruleItem1 = getRepo().addRule("testToString", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testToString", "test content");
            
             assertNotNull(ruleItem1.toString());                        
 
     }
     
     public void testGetLastModified() {
-            RuleItem ruleItem1 = getRepo().addRule("testGetLastModified", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testGetLastModified", "test content");
            
             Calendar cal = Calendar.getInstance();
             long before = cal.getTimeInMillis();           
@@ -225,7 +233,7 @@
     
     public void testGetDateEffective() {
 
-            RuleItem ruleItem1 = getRepo().addRule("testGetDateEffective", "test content");
+            RuleItem ruleItem1 = getDefaultPackage().addRule("testGetDateEffective", "test content");
            
             //it should be initialized to null
             assertTrue(ruleItem1.getDateEffective() == null);
@@ -240,7 +248,7 @@
     
     public void testGetDateExpired() {
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetDateExpired", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetDateExpired", "test content");
            
             //it should be initialized to null
             assertTrue(ruleItem1.getDateExpired() == null);
@@ -259,7 +267,7 @@
     
     public void testGetRuleLanguage() {
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetRuleLanguage", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetRuleLanguage", "test content");
            
             //it should be initialized to 'DRL'
             assertEquals("DRL", ruleItem1.getRuleLanguage());                        
@@ -270,7 +278,7 @@
     }
     
     public void testSaveAndCheckinDescriptionAndTitle() throws Exception {
-            RuleItem ruleItem1 = getRepo().addRule("testGetDescription", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetDescription", "");
             
             //it should be "" to begin with
             assertEquals("", ruleItem1.getDescription());
@@ -304,16 +312,18 @@
     }
     
     public void testGetPrecedingVersion() {
-            RuleItem ruleItem1 = getRepo().addRule("testGetPrecedingVersion", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetPrecedingVersion", "descr");
+            assertTrue(ruleItem1.getPrecedingVersion() == null);   
+            ruleItem1.updateRuleContent( "test content" );
+            ruleItem1.checkin( "boo" );
             
             RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
-            assertTrue(predecessorRuleItem == null);            
+            assertNotNull(predecessorRuleItem);            
             
             ruleItem1.updateRuleContent("new content");
             ruleItem1.updateRuleContentURI( "foobar" );
             ruleItem1.checkin( "two changes" );
             
-            
             predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
             assertNotNull(predecessorRuleItem);
             assertEquals("test content", predecessorRuleItem.getRuleContent());
@@ -335,7 +345,7 @@
     
     public void testGetSucceedingVersion() {
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetSucceedingVersion", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetSucceedingVersion", "test description");
             
             RuleItem succeedingRuleItem = (RuleItem) ruleItem1.getSucceedingVersion();
             assertTrue(succeedingRuleItem == null);            
@@ -345,7 +355,7 @@
             
             
             RuleItem predecessorRuleItem = (RuleItem) ruleItem1.getPrecedingVersion();
-            assertEquals("test content", predecessorRuleItem.getRuleContent());
+            assertEquals(null, predecessorRuleItem.getRuleContent());
             succeedingRuleItem = (RuleItem) predecessorRuleItem.getSucceedingVersion();
             assertNotNull(succeedingRuleItem);
             assertEquals(ruleItem1.getRuleContent(), succeedingRuleItem.getRuleContent());                       
@@ -357,7 +367,7 @@
     
     public void testGetSuccessorVersionsIterator() {
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetSuccessorVersionsIterator", "test content");                        
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetSuccessorVersionsIterator", "test content");                        
             
             Iterator iterator = ruleItem1.getSuccessorVersionsIterator();            
             assertNotNull(iterator);
@@ -398,12 +408,19 @@
     
     public void testGetPredecessorVersionsIterator() {
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetPredecessorVersionsIterator", "test content");                        
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetPredecessorVersionsIterator", "test description");
             
             Iterator iterator = ruleItem1.getPredecessorVersionsIterator();            
             assertNotNull(iterator);
-            assertFalse(iterator.hasNext());
+            assertFalse(iterator.hasNext());            
             
+            ruleItem1.updateRuleContent( "test content" );
+            ruleItem1.checkin( "lalalalala" );
+            
+            iterator = ruleItem1.getPredecessorVersionsIterator();            
+            assertNotNull(iterator);
+            assertTrue(iterator.hasNext());
+            
             ruleItem1.updateRuleContent("new content");
             ruleItem1.checkin( "boo" );
             
@@ -411,7 +428,7 @@
             assertNotNull(iterator);
             assertTrue(iterator.hasNext());
             RuleItem nextRuleItem = (RuleItem) iterator.next();
-            assertFalse(iterator.hasNext());
+            
             assertEquals("test content", nextRuleItem.getRuleContent());
             
             ruleItem1.updateRuleContent("newer content");
@@ -425,8 +442,11 @@
             assertTrue(iterator.hasNext());            
             assertEquals("new content", nextRuleItem.getRuleContent());
             nextRuleItem = (RuleItem) iterator.next();
-            assertFalse(iterator.hasNext());
+            
             assertEquals("test content", nextRuleItem.getRuleContent());
+            
+            assertEquals(null, ((RuleItem) iterator.next()).getRuleContent());
+            
         }
         catch(Exception e) {
             fail("Caught unexpected exception: " + e);
@@ -435,7 +455,7 @@
     
     public void testGetTitle() {    
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetTitle", "test content");            
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetTitle", "test content");            
                         
             assertEquals("testGetTitle", ruleItem1.getTitle());
         }
@@ -446,7 +466,7 @@
     
     public void testGetFormat() {        
         try {
-            RuleItem ruleItem1 = getRepo().addRule("testGetFormat", "test content");
+            RuleItem ruleItem1 = getRepo().loadDefaultRulePackage().addRule("testGetFormat", "test content");
             
             assertEquals("Rule", ruleItem1.getFormat());            
         }

Modified: 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-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulePackageItemTestCase.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -1,6 +1,7 @@
 package org.drools.repository;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
@@ -17,7 +18,7 @@
         try {
             
             //calls constructor
-            RulePackageItem rulePackageItem1 = repo.createRulePackage("testRulePackage");
+            RulePackageItem rulePackageItem1 = repo.createRulePackage("testRulePackage", "desc");
             assertNotNull(rulePackageItem1);
             assertEquals("testRulePackage", rulePackageItem1.getName());
             
@@ -61,12 +62,13 @@
 
     public void testLoadRulePackageItem() {
 
-        RulePackageItem rulePackageItem = getRepo().createRulePackage("testLoadRuleRuleItem");
+        RulePackageItem rulePackageItem = getRepo().createRulePackage("testLoadRuleRuleItem", "desc");
 
         rulePackageItem = getRepo().loadRulePackage("testLoadRuleRuleItem");
         assertNotNull(rulePackageItem);
         assertEquals("testLoadRuleRuleItem", rulePackageItem.getName());
         
+        assertEquals("desc", rulePackageItem.getDescription());
         // try loading rule package that was not created 
         try {
             rulePackageItem = getRepo().loadRulePackage("anotherRuleRuleItem");
@@ -79,7 +81,7 @@
     
     public void testLoadRulePackageItemByUUID() throws Exception {
 
-        RulePackageItem rulePackageItem = getRepo().createRulePackage("testLoadRuleRuleItemByUUID");
+        RulePackageItem rulePackageItem = getRepo().createRulePackage("testLoadRuleRuleItemByUUID", "desc");
 
         String uuid = null;
             uuid = rulePackageItem.getNode().getUUID();
@@ -100,82 +102,49 @@
     }    
     
     public void testAddRuleRuleItem() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddRuleRuleItem");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddRuleRuleItem","desc");
+
             
-            RuleItem ruleItem1 = getRepo().addRule("testAddRuleRuleItem", "test content");
+            RuleItem ruleItem1 = rulePackageItem1.addRule("testAddRuleRuleItem", "test description");
+            ruleItem1.updateRuleContent( "test content" );
+            ruleItem1.checkin( "updated the rule content" );
             
-            rulePackageItem1.addRule(ruleItem1);
+            Iterator rulesIt = rulePackageItem1.getRules();
+            assertNotNull(rulesIt);
+            RuleItem first = (RuleItem) rulesIt.next();
+            assertFalse(rulesIt.hasNext());
+            assertEquals("testAddRuleRuleItem", first.getName());
             
-            List rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testAddRuleRuleItem", ((RuleItem)rules.get(0)).getName());
-            
             //test that it is following the head revision                        
             ruleItem1.updateRuleContent("new lhs");
-            rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
+            ruleItem1.checkin( "updated again" );
+            rulesIt = rulePackageItem1.getRules();
+            assertNotNull(rulesIt);
+            
+            List rules = iteratorToList( rulesIt );
             assertEquals(1, rules.size());
             assertEquals("testAddRuleRuleItem", ((RuleItem)rules.get(0)).getName());
             assertEquals("new lhs", ((RuleItem)rules.get(0)).getRuleContent());
                         
-            RuleItem ruleItem2 = getRepo().addRule("testAddRuleRuleItem2", "test content");
-            rulePackageItem1.addRule(ruleItem2);
+            RuleItem ruleItem2 = rulePackageItem1.addRule("testAddRuleRuleItem2", "test content");
             
-            rules = rulePackageItem1.getRules();
+            rules = iteratorToList(rulePackageItem1.getRules());
             assertNotNull(rules);
             assertEquals(2, rules.size());  
 
     }
 
-    public void testAddRuleRuleItemBoolean() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddRuleRuleItemBoolean");
-            
-            RuleItem ruleItem1 = getRepo().addRule("testAddRuleRuleItemBoolean", "test content");
-            
-            rulePackageItem1.addRule(ruleItem1, true);
-            
-            List rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testAddRuleRuleItemBoolean", ((RuleItem)rules.get(0)).getName());
-            
-            //test that it is following the head revision                        
-            ruleItem1.updateRuleContent("new lhs");
-            rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testAddRuleRuleItemBoolean", ((RuleItem)rules.get(0)).getName());
-            assertEquals("new lhs", ((RuleItem)rules.get(0)).getRuleContent());
-            
-            RuleItem ruleItem2 = getRepo().addRule("testAddRuleRuleItemBoolean2", "test lhs content");
-            rulePackageItem1.addRule(ruleItem2);
-            
-            rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(2, rules.size());
-            
-            //test not following the head revision
-            rulePackageItem1.removeAllRules();
-            RuleItem ruleItem3 = getRepo().addRule("testAddRuleRuleItemBoolean3", "test lhs content");
-            
-            rulePackageItem1.addRule(ruleItem3, false);
-            
-            rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("test lhs content", ((RuleItem)rules.get(0)).getRuleContent());
-                                    
-            ruleItem3.updateRuleContent("new lhs");
-            rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("test lhs content", ((RuleItem)rules.get(0)).getRuleContent());
-
+    
+    private List iteratorToList(Iterator it) {
+        List list = new ArrayList();
+        while(it.hasNext()) {
+            list.add( it.next() );
+        }
+        return list;
     }
 
     public void testAddFunctionFunctionItem() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddFunctionFunctionItem");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddFunctionFunctionItem", "desc");
             
             FunctionItem functionItem1 = getRepo().addFunction("test function", "test content");
             
@@ -204,7 +173,7 @@
     }
 
     public void testAddFunctionFunctionItemBoolean() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddFunctionFunctionItemBoolean");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testAddFunctionFunctionItemBoolean", "desc");
             
             FunctionItem functionItem1 = getRepo().addFunction("testAddFunctionFunctionItemBoolean", "test content");
             
@@ -230,27 +199,11 @@
             assertNotNull(functions);
             assertEquals(2, functions.size());
             
-            //test not following the head revision
-            rulePackageItem1.removeAllFunctions();
-            FunctionItem functionItem3 = getRepo().addFunction("testAddFunctionFunctionItemBoolean3", "test content");
-            
-            rulePackageItem1.addFunction(functionItem3, false);
-            
-            functions = rulePackageItem1.getFunctions();
-            assertNotNull(functions);
-            assertEquals(1, functions.size());
-            assertEquals("test content", ((FunctionItem)functions.get(0)).getContent());
-                                    
-            functionItem3.updateContent("new content");
-            functions = rulePackageItem1.getFunctions();
-            assertNotNull(functions);
-            assertEquals(1, functions.size());
-            assertEquals("test content", ((FunctionItem)functions.get(0)).getContent());
 
     }
 
     public void testGetFunctions() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testGetFunctions");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testGetFunctions", "desc");
                         
             FunctionItem functionItem1 = getRepo().addFunction("testGetFunctions", "test content");
             
@@ -271,94 +224,80 @@
     }
     
     public void testGetRules() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testGetRules");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testGetRules", "desc");
                         
-            RuleItem ruleItem1 = getRepo().addRule("testGetRules", "test lhs content" );
+            RuleItem ruleItem1 = rulePackageItem1.addRule("testGetRules", "desc" );
+            ruleItem1.updateRuleContent( "test lhs content" );
+
             
-            rulePackageItem1.addRule(ruleItem1);
-            
-            List rules = rulePackageItem1.getRules();
+            List rules = iteratorToList(rulePackageItem1.getRules());
             assertNotNull(rules);
             assertEquals(1, rules.size());
             assertEquals("testGetRules", ((RuleItem)rules.get(0)).getName());
                                   
-            RuleItem ruleItem2 = getRepo().addRule("testGetRules2", "test lhs content" );
-            rulePackageItem1.addRule(ruleItem2);
+            RuleItem ruleItem2 = rulePackageItem1.addRule("testGetRules2", "desc" );
+            ruleItem2.updateRuleContent( "test lhs content" );
             
-            rules = rulePackageItem1.getRules();
+            rules = iteratorToList(rulePackageItem1.getRules());
             assertNotNull(rules);
             assertEquals(2, rules.size());            
 
     }
 
     public void testToString() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testToStringPackage");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testToStringPackage", "desc");
             
-            RuleItem ruleItem1 = getRepo().addRule("testToStringPackage", "test lhs content" );
+            RuleItem ruleItem1 = rulePackageItem1.addRule("testToStringPackage", "test lhs content" );
+            ruleItem1.updateRuleContent( "test lhs content" );
             
-            rulePackageItem1.addRule(ruleItem1);
             assertNotNull(rulePackageItem1.toString());                        
 
     }
     
     public void testRemoveRule() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testRemoveRule");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testRemoveRule", "desc");
             
-            RuleItem ruleItem1 = getRepo().addRule("testRemoveRule", "test lhs content" );
+            RuleItem ruleItem1 = rulePackageItem1.addRule("testRemoveRule", "test lhs content" );
+            ruleItem1.updateRuleContent( "test lhs content" ); 
             
-            rulePackageItem1.addRule(ruleItem1);
             
-            List rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testRemoveRule", ((RuleItem)rules.get(0)).getName());
-                                    
+            
+            Iterator rulesIt = rulePackageItem1.getRules();
+            RuleItem next = (RuleItem) rulesIt.next();
+            
+            assertFalse(rulesIt.hasNext());
+            assertEquals("testRemoveRule", next.getName());
+                               
+            
+            
             ruleItem1.updateRuleContent("new lhs");
-            rules = rulePackageItem1.getRules();
+            List rules = iteratorToList(rulePackageItem1.getRules());
             assertNotNull(rules);
             assertEquals(1, rules.size());
             assertEquals("testRemoveRule", ((RuleItem)rules.get(0)).getName());
             assertEquals("new lhs", ((RuleItem)rules.get(0)).getRuleContent());
+                        
+            RuleItem ruleItem2 = rulePackageItem1.addRule("testRemoveRule2", "test lhs content");
             
-            RuleItem ruleItem2 = getRepo().addRule("testRemoveRule2", "test lhs content" );
-            rulePackageItem1.addRule(ruleItem2);
-            
             //remove the rule, make sure the other rule in the pacakge stays around
-            rulePackageItem1.removeRule(ruleItem1);
-            rules = rulePackageItem1.getRules();
+            rulePackageItem1.removeRule(ruleItem1.getName());
+            rulePackageItem1.rulesRepository.save();
+            rules = iteratorToList(rulePackageItem1.getRules());
             assertEquals(1, rules.size());
             assertEquals("testRemoveRule2", ((RuleItem)rules.get(0)).getName());
             
             //remove the rule that is following the head revision, make sure the pacakge is now empty
-            rulePackageItem1.removeRule(ruleItem2);
-            rules = rulePackageItem1.getRules();
+            rulePackageItem1.removeRule(ruleItem2.getName());
+            rules = iteratorToList(rulePackageItem1.getRules());
             assertNotNull(rules);
             assertEquals(0, rules.size());
 
     }
     
-    public void testRemoveAllRules() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testRemoveAllRules");
-            
-            RuleItem ruleItem1 = getRepo().addRule("testRemoveAllRules", "test lhs content" );
-            
-            rulePackageItem1.addRule(ruleItem1);
-            
-            List rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(1, rules.size());
-            assertEquals("testRemoveAllRules", ((RuleItem)rules.get(0)).getName());
-            
-            rulePackageItem1.removeAllRules();
-            
-            rules = rulePackageItem1.getRules();
-            assertNotNull(rules);
-            assertEquals(0, rules.size());            
-
-    }    
+ 
     
     public void testRemoveFunction() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testRemoveFunction");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testRemoveFunction", "yayayaya");
             
             FunctionItem functionItem1 = getRepo().addFunction("testRemoveFunction", "test content");
             
@@ -393,56 +332,9 @@
 
     }
     
-    public void testRemoveAllFunctions() {
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testRemoveAllFunctions");
-            
-            FunctionItem functionItem1 = getRepo().addFunction("testRemoveAllFunctions", "test content");
-            
-            rulePackageItem1.addFunction(functionItem1);
-            
-            List functions = rulePackageItem1.getFunctions();
-            assertNotNull(functions);
-            assertEquals(1, functions.size());
-            assertEquals("testRemoveAllFunctions", ((FunctionItem)functions.get(0)).getName());
-            
-            rulePackageItem1.removeAllFunctions();
-            
-            functions = rulePackageItem1.getFunctions();
-            assertNotNull(functions);
-            assertEquals(0, functions.size());            
-
-    }
     
-    public void testGetPrecedingVersion() {
-        //not bothering to implement this test since it is pretty much covered by the RuleItemTestCase   
-    }
-    
-    public void testGetSucceedingVersion() {
-        //not bothering to implement this test since it is pretty much covered by the RuleItemTestCase   
-    } 
-    
-    public void testGetSuccessorVersionsIterator() {
-        //This is covered by the test in RuleItemTestCase - all functionality under test
-        // resides in the common subclass, VersionableItem
-    }
-    
-    public void testGetPredecessorVersionsIterator() {
-        //This is covered by the test in RuleItemTestCase - all functionality under test
-        // resides in the common subclass, VersionableItem
-    }
-    
-    public void testGetTitle() {
-        //This is covered by the test in RuleItemTestCase - all functionality under test
-        // resides in the common subclass, VersionableItem
-    }
-    
-    public void testGetContributor() {
-        //This is covered by the test in RuleItemTestCase - all functionality under test
-        // resides in the common subclass, VersionableItem        
-    }
-    
     public void testGetFormat() {        
-            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testGetFormat");
+            RulePackageItem rulePackageItem1 = getRepo().createRulePackage("testGetFormat", "woot");
             assertNotNull(rulePackageItem1);
             assertEquals("Rule Package", rulePackageItem1.getFormat());    
 

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-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTestCase.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -1,10 +1,9 @@
 package org.drools.repository;
 
-import java.io.File;
 import java.util.Calendar;
 import java.util.Iterator;
 
-import org.drools.repository.*;
+import javax.jcr.NodeIterator;
 
 import junit.framework.TestCase;
 
@@ -17,60 +16,62 @@
     protected void tearDown() throws Exception {
         super.tearDown();
     }
-
-    public void testAddRuleDslItemBoolean() {
-        RulesRepository rulesRepository = RepositorySession.getRepository();
-            
-            
-            
-            DslItem dslItem1 = rulesRepository.addDsl("testAddRuleDslItemBoolean", "original content");
-            assertNotNull(dslItem1);
-            
-            RuleItem ruleItem1 = rulesRepository.addRule("testAddRuleDslItemBoolean", "test lhs content", dslItem1, true);
-            
-            assertNotNull(ruleItem1);
-            assertNotNull(ruleItem1.getNode());
-            assertNotNull(ruleItem1.getDsl());
-            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());
-            
-            //test that this follows the head version
-            
-            dslItem1.updateContent("new content");
-            assertNotNull(ruleItem1.getNode());
-            assertNotNull(ruleItem1.getDsl());
-            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());
-            
-            //now do the same thing, but test not following head:                                    
-            RuleItem ruleItem2 = rulesRepository.addRule("testAddRuleDslItemBoolean2", "test lhs content", dslItem1, false);
-            
-            assertNotNull(ruleItem2);
-            assertNotNull(ruleItem2.getNode());
-            assertNotNull(ruleItem2.getDsl());
-            assertEquals(dslItem1.getContent(), ruleItem2.getDsl().getContent());
-            
-            //test that this stays tied to the specific revision of the DSL node
-            String originalContent = ruleItem2.getDsl().getContent();
-            dslItem1.updateContent("new content");
-            assertNotNull(ruleItem2.getNode());
-            assertNotNull(ruleItem2.getDsl());
-            assertEquals(originalContent, ruleItem2.getDsl().getContent());
+    
+    public void testDefaultPackage() throws Exception {
+        RulesRepository repo = RepositorySession.getRepository();
+        RulePackageItem def = repo.loadDefaultRulePackage();
+        assertNotNull(def);
+        assertEquals("default", def.getName());
     }
     
-    public void testAddRuleCalendarCalendar() {
+    public void testAddVersionARule() throws Exception {
+        RulesRepository repo = RepositorySession.getRepository();
+        RulePackageItem pack = repo.createRulePackage( "testAddVersionARule", "description" );
+        repo.save();
+        
+        RuleItem rule = pack.addRule( "my rule", "foobar" );
+        assertEquals("my rule", rule.getName());
+        
+        rule.updateRuleContent( "foo foo" );
+        rule.checkin( "foobar" );
+        
+        pack.addRule( "other rule", "description" );
+        
+        RulePackageItem pack2 =  repo.loadRulePackage( "testAddVersionARule" );
+        
+        Iterator it =  pack2.getRules();
+        
+        it.next();
+        it.next();
+        
+        assertFalse(it.hasNext());
+        
+        RuleItem prev = (RuleItem) rule.getPrecedingVersion();
+       
+        assertEquals("foo foo", rule.getRuleContent());
+        assertFalse("foo foo".equals( prev.getRuleContent() ));
+        
+        
+        
+    }
+
+    public void testAddRuleCalendarWithDates() {
         RulesRepository rulesRepository = RepositorySession.getRepository();
 
                         
             Calendar effectiveDate = Calendar.getInstance();
             Calendar expiredDate = Calendar.getInstance();
             expiredDate.setTimeInMillis(effectiveDate.getTimeInMillis() + (1000 * 60 * 60 * 24));
-            RuleItem ruleItem1 = rulesRepository.addRule("testAddRuleCalendarCalendar", "test lhs content");
+            RuleItem ruleItem1 = rulesRepository.loadDefaultRulePackage().addRule("testAddRuleCalendarCalendar", "desc");
             ruleItem1.updateDateEffective( effectiveDate );
             ruleItem1.updateDateExpired( expiredDate );
-            
+     
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
             assertEquals(effectiveDate, ruleItem1.getDateEffective());
-            assertEquals(expiredDate, ruleItem1.getDateExpired());                       
+            assertEquals(expiredDate, ruleItem1.getDateExpired());
+            
+            ruleItem1.checkin( "ho " );            
     }
 
     public void testGetState() {
@@ -135,7 +136,7 @@
         RulesRepository rulesRepository = RepositorySession.getRepository();
         
         
-            RulePackageItem rulePackageItem1 = rulesRepository.createRulePackage("testListPackages");
+            RulePackageItem rulePackageItem1 = rulesRepository.createRulePackage("testListPackages", "desc");
             
             Iterator it = rulesRepository.listPackages();
             assertTrue(it.hasNext());

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java	2006-10-02 21:48:17 UTC (rev 6539)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java	2006-10-03 08:07:46 UTC (rev 6540)
@@ -128,7 +128,7 @@
             System.out.println("ADDING rule: " + ruleName);
                         
             
-            RuleItem item = repo.addRule( ruleName, "Foo(bar == " + i + ")panic(" + i + ");" );            
+            RuleItem item = repo.loadDefaultRulePackage().addRule( ruleName, "Foo(bar == " + i + ")panic(" + i + ");" );            
             item.addCategory( cat );
             list.add( item );
             




More information about the jboss-svn-commits mailing list