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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 16 12:37:33 EDT 2006


Author: bentruitt
Date: 2006-08-16 12:37:30 -0400 (Wed, 16 Aug 2006)
New Revision: 5918

Added:
   labs/jbossrules/trunk/drools-repository/log4j.xml
Removed:
   labs/jbossrules/trunk/drools-repository/log4j.properties
Modified:
   labs/jbossrules/trunk/drools-repository/build.xml
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/CategoryItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java
   labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulesRepositoryTestCase.java
   labs/jbossrules/trunk/drools-repository/src/node_type_definitions/rule_node_type.cnd
Log:
Updated the rule node definition. This is some of the work for JBRULES-420.

Modified: labs/jbossrules/trunk/drools-repository/build.xml
===================================================================
--- labs/jbossrules/trunk/drools-repository/build.xml	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/build.xml	2006-08-16 16:37:30 UTC (rev 5918)
@@ -1,4 +1,4 @@
-<project name="repository" default="main" basedir=".">        
+<project name="drools-repository" default="main" basedir=".">        
     <property file="build.properties"/>        
     
     <!-- default jdk location -->

Deleted: labs/jbossrules/trunk/drools-repository/log4j.properties
===================================================================
--- labs/jbossrules/trunk/drools-repository/log4j.properties	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/log4j.properties	2006-08-16 16:37:30 UTC (rev 5918)
@@ -1,6 +0,0 @@
-log4j.logger.org.apache.jackrabbit=WARN,stdout
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
-
-org.drools.repository=DEBUG,stdout
-org.apache.jackrabbit=INFO,stdout
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-repository/log4j.xml
===================================================================
--- labs/jbossrules/trunk/drools-repository/log4j.xml	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/log4j.xml	2006-08-16 16:37:30 UTC (rev 5918)
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+   <!-- ================================= -->
+   <!-- Preserve messages in a local file -->
+   <!-- ================================= -->
+
+   <!-- ============================== -->
+   <!-- Append messages to the console -->
+   <!-- ============================== -->
+
+   <appender name="REPOSITORY_CONSOLE" class="org.apache.log4j.ConsoleAppender">
+      <param name="Target" value="System.out"/>
+      <param name="Threshold" value="DEBUG"/>
+
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+      </layout>
+   </appender>
+
+   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+      <param name="Target" value="System.out"/>
+      <param name="Threshold" value="INFO"/>
+
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+      </layout>
+   </appender>
+
+   <!-- ====================== -->
+   <!-- More Appender examples -->
+   <!-- ====================== -->
+
+   <!-- Buffer events and log them asynchronously
+   <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
+     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+     <appender-ref ref="FILE"/>
+     <appender-ref ref="CONSOLE"/>
+     <appender-ref ref="SMTP"/>
+   </appender>
+   -->
+
+   <!-- EMail events to an administrator
+   <appender name="SMTP" class="org.apache.log4j.net.SMTPAppender">
+     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+     <param name="Threshold" value="ERROR"/>
+     <param name="To" value="admin at myhost.domain.com"/>
+     <param name="From" value="nobody at myhost.domain.com"/>
+     <param name="Subject" value="JBoss Sever Errors"/>
+     <param name="SMTPHost" value="localhost"/>
+     <param name="BufferSize" value="10"/>
+     <layout class="org.apache.log4j.PatternLayout">
+       <param name="ConversionPattern" value="[%d{ABSOLUTE},%c{1}] %m%n"/>
+     </layout>
+   </appender>
+   -->
+
+   <!-- Syslog events
+   <appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
+     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+     <param name="Facility" value="LOCAL7"/>
+     <param name="FacilityPrinting" value="true"/>
+     <param name="SyslogHost" value="localhost"/>
+     <layout class="org.apache.log4j.PatternLayout">
+       <param name="ConversionPattern" value="[%d{ABSOLUTE},%c{1}] %m%n"/>
+     </layout>
+   </appender>
+   -->
+
+   <!-- Log events to JMS (requires a topic to be created)
+   <appender name="JMS" class="org.apache.log4j.net.JMSAppender">
+     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+     <param name="Threshold" value="ERROR"/>
+     <param name="TopicConnectionFactoryBindingName" value="java:/ConnectionFactory"/>
+     <param name="TopicBindingName" value="topic/MyErrorsTopic"/>
+   </appender>
+   -->
+
+   <!-- Log events through SNMP
+   <appender name="TRAP_LOG" class="org.apache.log4j.ext.SNMPTrapAppender">
+     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+     <param name="ImplementationClassName" value="org.apache.log4j.ext.JoeSNMPTrapSender"/>
+     <param name="ManagementHost" value="127.0.0.1"/>
+     <param name="ManagementHostTrapListenPort" value="162"/>
+     <param name="EnterpriseOID" value="1.3.6.1.4.1.24.0"/>
+     <param name="LocalIPAddress" value="127.0.0.1"/>
+     <param name="LocalTrapSendPort" value="161"/>
+     <param name="GenericTrapType" value="6"/>
+     <param name="SpecificTrapType" value="12345678"/>
+     <param name="CommunityString" value="public"/>
+     <param name="ForwardStackTraceWithTrap" value="true"/>
+     <param name="Threshold" value="DEBUG"/>
+     <param name="ApplicationTrapOID" value="1.3.6.1.4.1.24.12.10.22.64"/>
+     <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d,%p,[%t],[%c],%m%n"/>
+     </layout>
+   </appender>
+   -->
+
+   <!--  Emit events as JMX notifications
+   <appender name="JMX" class="org.jboss.monitor.services.JMXNotificationAppender">
+      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+      
+      <param name="Threshold" value="WARN"/>
+      <param name="ObjectName" value="jboss.system:service=Logging,type=JMXNotificationAppender"/>
+      
+      <layout class="org.apache.log4j.PatternLayout">
+         <param name="ConversionPattern" value="%d %-5p [%c] %m"/>
+      </layout>
+   </appender>
+   -->
+   
+   <!-- ================ -->
+   <!-- Limit categories -->
+   <!-- ================ -->
+
+   <!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
+   <category name="org.apache">
+      <priority value="INFO"/>
+   </category>
+
+   <!-- ======================= -->
+   <!-- Drools Repository       -->
+   <!-- ======================= -->
+   <category name="org.drools.repository">
+     <priority value="DEBUG" />
+     <appender-ref ref="REPOSITORY_CONSOLE"/>
+   </category>
+
+   <!-- ======================= -->
+   <!-- Setup the Root category -->
+   <!-- ======================= -->
+
+   <root>
+      <appender-ref ref="CONSOLE"/>
+   </root>
+</log4j:configuration>

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RuleItem.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -46,6 +46,36 @@
     public static final String STATE_PROPERTY_NAME = "drools:state_reference";
     
     /**
+     * The name of the last modified property on the rule node type
+     */
+    public static final String LAST_MODIFIED_PROPERTY_NAME = "drools:last_modified"; 
+    
+    /**
+     * The name of the name property on the rule node type
+     */
+    public static final String NAME_PROPERTY_NAME = "drools:name";
+    
+    /**
+     * The name of the lhs property on the rule node type
+     */
+    public static final String LHS_PROPERTY_NAME = "drools:lhs";
+    
+    /**
+     * The name of the lhs property on the rule node type
+     */
+    public static final String RHS_PROPERTY_NAME = "drools:rhs";
+    
+    /**
+     * The name of the date effective property on the rule node type
+     */
+    public static final String DATE_EFFECTIVE_PROPERTY_NAME = "drools:date_effective";
+    
+    /**
+     * The name of the date expired property on the rule node type
+     */
+    public static final String DATE_EXPIRED_PROPERTY_NAME = "drools:date_expired";
+    
+    /**
      * Constructs a RuleItem object, setting its node attribute to the specified node.
      * 
      * @param rulesRepository the rulesRepository that instantiated this object
@@ -71,12 +101,12 @@
     }
     
     /**
-     * returns the content of this object's rule node
+     * returns the lhs of this object's rule node
      * 
-     * @return the content of this object's rule node
+     * @return the lhs of this object's rule node
      * @throws RulesRepositoryException
      */
-    public String getContent() throws RulesRepositoryException {
+    public String getLhs() throws RulesRepositoryException {
         try {                        
             Node ruleNode;
             if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
@@ -86,9 +116,8 @@
                 ruleNode = this.node;
             }
             
-            //grab the content of the node and dump it into a string
-            Node contentNode = ruleNode.getNode("jcr:content");
-            Property data = contentNode.getProperty("jcr:data");
+            //grab the lhs of the node and dump it into a string            
+            Property data = ruleNode.getProperty(LHS_PROPERTY_NAME);
             return data.getValue().getString();
         }
         catch(Exception e) {
@@ -98,14 +127,89 @@
     }
     
     /**
-     * Creates a new version of this object's rule node, using the content and attributes of the
-     * specified file.
+     * returns the rhs of this object's rule node
      * 
-     * @param file the file from which to get the content and attributes for the new version of the
-     *             rule node
+     * @return the rhs of this object's rule node
      * @throws RulesRepositoryException
      */
-    public void updateContentFromFile(File file) throws RulesRepositoryException {
+    public String getRhs() throws RulesRepositoryException {
+        try {                        
+            Node ruleNode;
+            if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+                ruleNode = this.node.getNode("jcr:frozenNode");
+            }
+            else {
+                ruleNode = this.node;
+            }
+            
+            //grab the lhs of the node and dump it into a string            
+            Property data = ruleNode.getProperty(RHS_PROPERTY_NAME);
+            return data.getValue().getString();
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * @return the date the rule node (this version) was last modified
+     * @throws RulesRepositoryException
+     */
+    public Calendar getLastModified() throws RulesRepositoryException {
+        try {                        
+            Node ruleNode;
+            if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+                ruleNode = this.node.getNode("jcr:frozenNode");
+            }
+            else {
+                ruleNode = this.node;
+            }
+                        
+            Property lastModifiedProperty = ruleNode.getProperty("drools:last_modified");
+            return lastModifiedProperty.getDate();
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * @return the date the rule becomes effective
+     * @throws RulesRepositoryException
+     */
+    public Calendar getDateEffective() throws RulesRepositoryException {
+        try {                        
+            Node ruleNode;
+            if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+                ruleNode = this.node.getNode("jcr:frozenNode");
+            }
+            else {
+                ruleNode = this.node;
+            }
+                        
+            Property dateEffectiveProperty = ruleNode.getProperty(DATE_EFFECTIVE_PROPERTY_NAME);
+            return dateEffectiveProperty.getDate();
+        }
+        catch(PathNotFoundException e) {
+            // doesn't have this property
+            return null;
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * Creates a new version of this object's rule node, updating the effective date for the
+     * rule node. 
+     *  
+     * @param newDateEffective the new effective date for the rule 
+     * @throws RulesRepositoryException
+     */
+    public void updateDateEffective(Calendar newDateEffective) throws RulesRepositoryException {
         try {
             this.node.checkout();
         }
@@ -126,15 +230,82 @@
             throw new RulesRepositoryException(e);
         }
         
+        try {                                    
+            this.node.setProperty(DATE_EFFECTIVE_PROPERTY_NAME, newDateEffective);
+            
+            Calendar lastModified = Calendar.getInstance();
+            this.node.setProperty(LAST_MODIFIED_PROPERTY_NAME, lastModified);
+            
+            this.node.getSession().save();
+            
+            this.node.checkin();
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * @return the date the rule becomes expired
+     * @throws RulesRepositoryException
+     */
+    public Calendar getDateExpired() throws RulesRepositoryException {
+        try {                        
+            Node ruleNode;
+            if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+                ruleNode = this.node.getNode("jcr:frozenNode");
+            }
+            else {
+                ruleNode = this.node;
+            }
+                        
+            Property dateExpiredProperty = ruleNode.getProperty(DATE_EXPIRED_PROPERTY_NAME);
+            return dateExpiredProperty.getDate();
+        }
+        catch(PathNotFoundException e) {
+            // doesn't have this property
+            return null;
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * Creates a new version of this object's rule node, updating the expired date for the
+     * rule node. 
+     *  
+     * @param newDateExpired the new expired date for the rule 
+     * @throws RulesRepositoryException
+     */
+    public void updateDateExpired(Calendar newDateExpired) throws RulesRepositoryException {
         try {
-            //create the mandatory child node - jcr:content
-            Node resNode = this.node.getNode("jcr:content");
-            resNode.setProperty("jcr:mimeType", "text/plain");
-            resNode.setProperty("jcr:encoding", System.getProperty("file.encoding")); //TODO: is this right?
-            resNode.setProperty("jcr:data", new FileInputStream(file));
+            this.node.checkout();
+        }
+        catch(UnsupportedRepositoryOperationException e) {
+            String message = "";
+            try {
+                message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
+                log.error(message + e);
+            }
+            catch (RepositoryException e1) {
+                log.error("Caught Exception", e);
+                throw new RulesRepositoryException(e1);
+            }
+            throw new RulesRepositoryException(message, e);
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+        
+        try {                                    
+            this.node.setProperty(DATE_EXPIRED_PROPERTY_NAME, newDateExpired);
+            
             Calendar lastModified = Calendar.getInstance();
-            lastModified.setTimeInMillis(file.lastModified());
-            resNode.setProperty("jcr:lastModified", lastModified);
+            this.node.setProperty(LAST_MODIFIED_PROPERTY_NAME, lastModified);
             
             this.node.getSession().save();
             
@@ -147,6 +318,117 @@
     }
     
     /**
+     * @return the date the rule becomes expired
+     * @throws RulesRepositoryException
+     */
+    public String getRuleLanguage() throws RulesRepositoryException {
+        try {                        
+            Node ruleNode;
+            if(this.node.getPrimaryNodeType().getName().equals("nt:version")) {
+                ruleNode = this.node.getNode("jcr:frozenNode");
+            }
+            else {
+                ruleNode = this.node;
+            }
+                        
+            Property ruleLanguageProperty = ruleNode.getProperty("drools:rule_language");
+            return ruleLanguageProperty.getValue().getString();
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * Creates a new version of this object's rule node, updating the lhs content for the
+     * rule node. 
+     * 
+     * @param lhs the new lhs content for the rule
+     * @throws RulesRepositoryException
+     */
+    public void updateLhs(String newLhsContent) throws RulesRepositoryException {
+        try {
+            this.node.checkout();
+        }
+        catch(UnsupportedRepositoryOperationException e) {
+            String message = "";
+            try {
+                message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
+                log.error(message + e);
+            }
+            catch (RepositoryException e1) {
+                log.error("Caught Exception", e);
+                throw new RulesRepositoryException(e1);
+            }
+            throw new RulesRepositoryException(message, e);
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+        
+        try {                                    
+            this.node.setProperty(LHS_PROPERTY_NAME, newLhsContent);
+            
+            Calendar lastModified = Calendar.getInstance();
+            this.node.setProperty(LAST_MODIFIED_PROPERTY_NAME, lastModified);
+            
+            this.node.getSession().save();
+            
+            this.node.checkin();
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * Creates a new version of this object's rule node, updating the rhs content for the
+     * rule node. 
+     * 
+     * @param lhs the new rhs content for the rule
+     * @throws RulesRepositoryException
+     */
+    public void updateRhs(String newRhsContent) throws RulesRepositoryException {
+        try {
+            this.node.checkout();
+        }
+        catch(UnsupportedRepositoryOperationException e) {
+            String message = "";
+            try {
+                message = "Error: Caught UnsupportedRepositoryOperationException when attempting to checkout rule: " + this.node.getName() + ". Are you sure your JCR repository supports versioning? ";
+                log.error(message + e);
+            }
+            catch (RepositoryException e1) {
+                log.error("Caught Exception", e);
+                throw new RulesRepositoryException(e1);
+            }
+            throw new RulesRepositoryException(message, e);
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+        
+        try {                                    
+            this.node.setProperty(RHS_PROPERTY_NAME, newRhsContent);
+            
+            Calendar lastModified = Calendar.getInstance();
+            this.node.setProperty(LAST_MODIFIED_PROPERTY_NAME, lastModified);
+            
+            this.node.getSession().save();
+            
+            this.node.checkin();
+        }
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
      * Adds the specified tag to this object's rule node. Tags are stored as nodes in a tag area of
      * the repository. If the specified tag does not already have a corresponding node, a node is 
      * created for it.
@@ -415,9 +697,15 @@
         try {
             StringBuffer returnString = new StringBuffer();
             returnString.append("Content of rule node named " + this.node.getName() + ":\n");
-            returnString.append(this.getContent() + "\n");
+            returnString.append("LHS: " + this.getLhs() + "\n");
+            returnString.append("RHS: " + this.getRhs() + "\n");
             returnString.append("------\n");
             
+            returnString.append("Date Effective: " + this.getDateEffective() + "\n");
+            returnString.append("Date Expired: " + this.getDateExpired() + "\n");
+            returnString.append("Rule Language: " + this.getRuleLanguage() + "\n");
+            returnString.append("------\n");
+            
             returnString.append("Rule state: ");
             StateItem stateItem = this.getState();
             if(stateItem != null) {

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/RulesRepository.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -31,16 +31,6 @@
 import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
 import org.apache.log4j.Logger;
 
-//TODO: fix logging
-//TODO: make imports and globals attributes of a rulepackage
-//TODO: functions have their own area, like rules, packages also reference these
-//TODO: add support for authentication / permissions / ownership ( http://dublincore.org/documents/dces/)
-//TODO: add ability to lock a node to prevent concurrent editing
-//TODO: add support for exporting / importing
-//TODO: add support for observation
-//TODO: make the rule node have a child node of type nt:file for documentation
-//TODO: add support for searching
-//TODO: rename tag to category
 
 /**
  * RulesRepository is the class that defines the bahavior for the JBoss Rules (drools) rule repository
@@ -120,7 +110,7 @@
      * @param clearRepository whether or not to erase the contents of the rules repository
      *                        portion of the JCR repository 
      */
-    public RulesRepository(boolean clearRepository) {
+    public RulesRepository(boolean clearRepository) {       
         try {
             //TODO: probably want to do something more serious than automatic creation of a 
             //      transientRepository here.  (e.g. manual creation of the repository to be 
@@ -191,7 +181,7 @@
                 ntreg.registerNodeType(ntd);
             }
         }
-        catch(InvalidNodeTypeDefException e) {            
+        catch(InvalidNodeTypeDefException e) {
             log.warn("InvalidNodeTypeDefinitionException caught when trying to add node from CND file: " + cndFileName + ". This will happen if the node type was already registered. " + e);
             throw e;
         }
@@ -465,30 +455,41 @@
             log.error("Caught Exception", e);
             throw new RulesRepositoryException(e);
         }                
-    }
+    }    
     
     /**
-     * Adds a Rule node in the repository using the content and attributes of the specified file
+     * Adds a Rule node in the repository using the content specified, associating it with
+     * the specified DSL node
      * 
-     * @param file the file to use to import the DSL content and attributes
+     * @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 addRuleFromFile(File file) throws RulesRepositoryException {
+    public RuleItem addRule(String ruleName, String lhsContent, String rhsContent, 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(file.getName(), RuleItem.RULE_NODE_TYPE_NAME);
+            Node ruleNode = folderNode.addNode(ruleName, RuleItem.RULE_NODE_TYPE_NAME);
+                        
+            ruleNode.setProperty(RuleItem.NAME_PROPERTY_NAME, ruleName);
+            ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, lhsContent);
+            ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, rhsContent);
             
-            //create the mandatory child node - jcr:content
-            Node resNode = ruleNode.addNode("jcr:content", "nt:resource");
-            resNode.setProperty("jcr:mimeType", "text/plain");
-            resNode.setProperty("jcr:encoding", System.getProperty("file.encoding")); //TODO: is this right?
-            resNode.setProperty("jcr:data", new FileInputStream(file));
+            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();
-            lastModified.setTimeInMillis(file.lastModified());
-            resNode.setProperty("jcr:lastModified", lastModified);
+            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
             
             session.save();
             
@@ -508,71 +509,145 @@
             throw new RulesRepositoryException(e);
         }
     }
-
+    
     /**
-     * Adds a Rule node in the repository using the content and attributes of the specified file. 
-     * Links the newly created node with the specified DSL node within the repository. This link
-     * will follow the head verion of the DSL node.
+     * Adds a Rule node in the repository using the content specified, with the specified
+     * effective and expiration dates, and referencing the specified dsl node
      * 
-     * @param file the file to use to import the DSL content and attributes
-     * @param dslItem the DslItem containing the node to link the newly created rule node with
-     * @return a RuleItem object encapsulting the node that gets added
+     * @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 object encapsuling the dsl node to assocaite this node with
+     * @param followDslHead whether or not to follow the head revision of the DSL node
+     * @param effectiveDate the date the rule becomes effective
+     * @param expiredDate the date teh rule expires
+     * @return a RuleItem object encapsulating the node that gets added
      * @throws RulesRepositoryException
      */
-    public RuleItem addRuleFromFile(File file, DslItem dslItem) throws RulesRepositoryException {
-        return this.addRuleFromFile(file, dslItem, true);
+    public RuleItem addRule(String ruleName, String lhsContent, String rhsContent, DslItem dslItem, boolean followDslHead, Calendar effectiveDate, Calendar expiredDate) 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.NAME_PROPERTY_NAME, ruleName);
+            ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, lhsContent);
+            ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, rhsContent);            
+            ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode());
+            ruleNode.setProperty(RuleItem.DATE_EFFECTIVE_PROPERTY_NAME, effectiveDate);
+            ruleNode.setProperty(RuleItem.DATE_EXPIRED_PROPERTY_NAME, expiredDate);
+            
+            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 and attributes of the specified file. 
-     * Links the newly created node with the specified DSL node within the repository.
+     * Adds a Rule node in the repository using the content specified
      * 
-     * @param file the file to use to import the DSL content and attributes
-     * @param dslItem the DslItem containing the node to link the newly created rule node with
-     * @param followDslHead if true, the link to the DSL node will follow the head revision of that 
-     *                      node. if false, it will continue to refer to the specified version even
-     *                      if a new version of the DSL node is checked in
+     * @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 
+     * @throws RulesRepositoryException
      */
-    public RuleItem addRuleFromFile(File file, DslItem dslItem, boolean followDslHead) throws RulesRepositoryException {
-        RuleItem ruleItem = addRuleFromFile(file);
-        Node ruleNode = ruleItem.getNode();
+    public RuleItem addRule(String ruleName, String lhsContent, String rhsContent) throws RulesRepositoryException {
+        Node folderNode = this.getAreaNode(RULE_AREA);        
         
-        try {
-            //Now associate the dsl node with this rule
-            ruleNode.checkout();
+        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.NAME_PROPERTY_NAME, ruleName);
+            ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, lhsContent);
+            ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, rhsContent);
             
-            if(followDslHead) {
-                ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode());
+            Calendar lastModified = Calendar.getInstance();
+            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+            
+            session.save();
+            
+            try {
+                ruleNode.checkin();
             }
-            else {
-                //tie the ruleNode to specifically the current version of the dslNode
-                ruleNode.setProperty(RuleItem.DSL_PROPERTY_NAME, dslItem.getNode().getBaseVersion());                
+            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);
             }
             
-            this.session.save();
-            ruleNode.checkin();
+            return new RuleItem(this, ruleNode);
         }
-        catch(UnsupportedRepositoryOperationException e) {
-            String message = "";
+        catch(Exception e) {
+            log.error("Caught Exception", e);
+            throw new RulesRepositoryException(e);
+        }
+    }
+    
+    /**
+     * Adds a Rule node in the repository using the content specified, with the specified
+     * effective and expiration dates
+     * 
+     * @param ruleName the name of the rule
+     * @param lhsContent the lhs of the rule
+     * @param rhsContent the rhs of the rule
+     * @param effectiveDate the date the rule becomes effective
+     * @param expiredDate the date teh rule expires
+     * @return a RuleItem object encapsulating the node that gets added
+     * @throws RulesRepositoryException
+     */
+    public RuleItem addRule(String ruleName, String lhsContent, String rhsContent, Calendar effectiveDate, Calendar expiredDate) 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.NAME_PROPERTY_NAME, ruleName);
+            ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, lhsContent);
+            ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, rhsContent);            
+            ruleNode.setProperty(RuleItem.DATE_EFFECTIVE_PROPERTY_NAME, effectiveDate);
+            ruleNode.setProperty(RuleItem.DATE_EXPIRED_PROPERTY_NAME, expiredDate);
+            
+            Calendar lastModified = Calendar.getInstance();
+            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+            
+            session.save();
+            
             try {
-                message = "Error: Caught UnsupportedRepositoryOperationException for the rule: " + ruleNode.getName() + ". Are you sure your JCR repository supports versioning? ";
+                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);
             }
-            catch (RepositoryException e1) {
-                log.error("Caught Exception", e);
-                throw new RulesRepositoryException(e1);
-            }
-            throw new RulesRepositoryException(message, e);
-        }        
+            
+            return new RuleItem(this, ruleNode);
+        }
         catch(Exception e) {
             log.error("Caught Exception", e);
             throw new RulesRepositoryException(e);
         }
-        
-        return ruleItem;
-    }
+    }    
     
     /**
      * Adds a rule package node in the repository. This node has a property called 

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/CategoryItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/CategoryItemTestCase.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/CategoryItemTestCase.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -8,7 +8,7 @@
 import junit.framework.TestCase;
 
 public class CategoryItemTestCase extends TestCase {
-    private RulesRepository rulesRepository = null;
+    private RulesRepository rulesRepository = null;    
     
     protected void setUp() throws Exception {
         super.setUp();

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/DslItemTestCase.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -43,7 +43,7 @@
             File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/rule1.drl");
             
             //Get a reference to a node of the incorrect type
-            RuleItem ruleItem1 = rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             //this should fail
             DslItem dslItem2 = new DslItem(rulesRepository, ruleItem1.getNode());

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RuleItemTestCase.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -1,6 +1,8 @@
 package org.drools.repository.test;
 
 import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 import junit.framework.TestCase;
@@ -21,15 +23,13 @@
     }
 
     public void testRuleItem() {
-        try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            
+        try {            
             //calls constructor
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
-            assertEquals("drl1.drl", ruleItem1.getName());
+            assertEquals("test rule", ruleItem1.getName());
         }
         catch(Exception e) {
             fail("Caught unexpected exception: " + e);
@@ -50,31 +50,56 @@
         }
     }
 
-    public void testGetContent() {
-        try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl3.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+    public void testGetLhs() {
+        try {            
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
-            assertEquals("package org.drools.examples", ruleItem1.getContent());
+            assertEquals("test lhs content", ruleItem1.getLhs());
         }
         catch(Exception e) {
             fail("Caught unexpected exception: " + e);
         }
     }
 
-    public void testUpdateContentFromFile() {
+    public void testGetRhs() {
+        try {            
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+            
+            assertNotNull(ruleItem1);
+            assertNotNull(ruleItem1.getNode());
+            assertEquals("test rhs content", ruleItem1.getRhs());
+        }
+        catch(Exception e) {
+            fail("Caught unexpected exception: " + e);
+        }
+    }
+    
+    public void testUpdateLhs() {
         //TODO: maybe add some testing on the versioning stuff more - check the content of the
         //      previous version, etc.
-        try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+        try {                        
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+                        
+            ruleItem1.updateLhs("new lhs content");
             
-            File drlFile2 = new File("./src/java/org/drools/repository/test/test_data/drl3.drl");
-            ruleItem1.updateContentFromFile(drlFile2);
+            assertEquals("new lhs content", ruleItem1.getLhs());
+        }
+        catch(Exception e) {
+            fail("Caught unexpected exception: " + e);
+        }
+    }
+    
+    public void testUpdateRhs() {
+        //TODO: maybe add some testing on the versioning stuff more - check the content of the
+        //      previous version, etc.
+        try {                        
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+                        
+            ruleItem1.updateRhs("new rhs content");
             
-            assertEquals("package org.drools.examples", ruleItem1.getContent());
+            assertEquals("new rhs content", ruleItem1.getRhs());
         }
         catch(Exception e) {
             fail("Caught unexpected exception: " + e);
@@ -83,8 +108,7 @@
 
     public void testAddTag() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             ruleItem1.addTag("TestTag");
             List tags = ruleItem1.getTags();
@@ -100,7 +124,7 @@
             List result = this.rulesRepository.findRulesByTag("TestTag");            
             assertEquals(1, result.size());            
             RuleItem retItem = (RuleItem) result.get( 0 );
-            assertEquals("drl1.drl", retItem.getName());
+            assertEquals("test rule", retItem.getName());
             
         }
         catch(Exception e) {
@@ -110,8 +134,7 @@
 
     public void testRemoveTag() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             ruleItem1.addTag("TestTag");                                    
             ruleItem1.removeTag("TestTag");
@@ -132,8 +155,7 @@
 
     public void testGetTags() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
            
             List tags = ruleItem1.getTags();
             assertNotNull(tags);
@@ -151,8 +173,7 @@
 
     public void testSetStateString() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
            
             ruleItem1.setState("TestState1");
             assertNotNull(ruleItem1.getState());
@@ -169,8 +190,7 @@
 
     public void testSetStateStateItem() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
            
             StateItem stateItem1 = rulesRepository.getState("TestState1");
             ruleItem1.setState(stateItem1);            
@@ -189,8 +209,7 @@
 
     public void testGetState() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
            
             StateItem stateItem1 = ruleItem1.getState();
             assertNull(stateItem1);
@@ -206,14 +225,84 @@
 
     public void testToString() {
         try {
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");            
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
            
             assertNotNull(ruleItem1.toString());                        
         }
         catch(Exception e) {
             fail("Caught unexpected exception: " + e);
         }
-
     }
+    
+    public void testGetLastModified() {
+        try {
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+           
+            Calendar cal = Calendar.getInstance();
+            long before = cal.getTimeInMillis();           
+            
+            ruleItem1.updateLhs("new lhs");
+            Calendar cal2 = ruleItem1.getLastModified();
+            long lastMod = cal2.getTimeInMillis();           
+            
+            cal = Calendar.getInstance();
+            long after = cal.getTimeInMillis();
+            assertTrue(before < after);
+            assertTrue(before < lastMod);
+            assertTrue(lastMod < after);
+        }
+        catch(Exception e) {
+            fail("Caught unexpected exception: " + e);
+        }
+    }
+    
+    public void testGetDateEffective() {
+        try {
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+           
+            //it should be initialized to null
+            assertTrue(ruleItem1.getDateEffective() == null);
+            
+            //now try setting it, then retrieving it
+            Calendar cal = Calendar.getInstance();
+            ruleItem1.updateDateEffective(cal);
+            Calendar cal2 = ruleItem1.getDateEffective();
+            
+            assertEquals(cal, cal2);            
+        }
+        catch(Exception e) {
+            fail("Caught unexpected exception: " + e);
+        }
+    }
+    
+    public void testGetDateExpired() {
+        try {
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+           
+            //it should be initialized to null
+            assertTrue(ruleItem1.getDateExpired() == null);
+            
+            //now try setting it, then retrieving it
+            Calendar cal = Calendar.getInstance();
+            ruleItem1.updateDateExpired(cal);
+            Calendar cal2 = ruleItem1.getDateExpired();
+            
+            assertEquals(cal, cal2);            
+        }
+        catch(Exception e) {
+            fail("Caught unexpected exception: " + e);
+        }
+    }
+    
+    public void testGetRuleLanguage() {
+        try {
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
+           
+            //it should be initialized to 'DRL'
+            assertEquals("DRL", ruleItem1.getRuleLanguage());                        
+        }
+        catch(Exception e) {
+            fail("Caught unexpected exception: " + e);
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulePackageItemTestCase.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -53,27 +53,24 @@
         try {
             RulePackageItem rulePackageItem1 = this.rulesRepository.createRulePackage("testRulePackage");
             
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             rulePackageItem1.addRule(ruleItem1);
             
             List rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
             
             //test that it is following the head revision                        
-            File drlFile2 = new File("./src/java/org/drools/repository/test/test_data/drl3.drl");
-            ruleItem1.updateContentFromFile(drlFile2);
+            ruleItem1.updateLhs("new lhs");
             rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
-            assertEquals("package org.drools.examples", ((RuleItem)rules.get(0)).getContent());
-            
-            File drlFile3 = new File("./src/java/org/drools/repository/test/test_data/drl2.drl");
-            RuleItem ruleItem2 = this.rulesRepository.addRuleFromFile(drlFile3);
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
+            assertEquals("new lhs", ((RuleItem)rules.get(0)).getLhs());
+                        
+            RuleItem ruleItem2 = this.rulesRepository.addRule("test rule 2", "test lhs content", "test rhs content");
             rulePackageItem1.addRule(ruleItem2);
             
             rules = rulePackageItem1.getRules();
@@ -96,27 +93,24 @@
         try {
             RulePackageItem rulePackageItem1 = this.rulesRepository.createRulePackage("testRulePackage");
             
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             rulePackageItem1.addRule(ruleItem1, true);
             
             List rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
             
             //test that it is following the head revision                        
-            File drlFile2 = new File("./src/java/org/drools/repository/test/test_data/drl3.drl");
-            ruleItem1.updateContentFromFile(drlFile2);
+            ruleItem1.updateLhs("new lhs");
             rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
-            assertEquals("package org.drools.examples", ((RuleItem)rules.get(0)).getContent());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
+            assertEquals("new lhs", ((RuleItem)rules.get(0)).getLhs());
             
-            File drlFile3 = new File("./src/java/org/drools/repository/test/test_data/drl2.drl");
-            RuleItem ruleItem2 = this.rulesRepository.addRuleFromFile(drlFile3);
+            RuleItem ruleItem2 = this.rulesRepository.addRule("test rule 2", "test lhs content", "test rhs content");
             rulePackageItem1.addRule(ruleItem2);
             
             rules = rulePackageItem1.getRules();
@@ -125,20 +119,20 @@
             
             //test not following the head revision
             rulePackageItem1.removeAllRules();
-            RuleItem ruleItem3 = this.rulesRepository.addRuleFromFile(drlFile2);
+            RuleItem ruleItem3 = this.rulesRepository.addRule("test rule 3", "test lhs content", "test rhs content");
             
-            rulePackageItem1.addRule(ruleItem1, false);
+            rulePackageItem1.addRule(ruleItem3, false);
             
             rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("package org.drools.examples", ((RuleItem)rules.get(0)).getContent());
+            assertEquals("test lhs content", ((RuleItem)rules.get(0)).getLhs());
                                     
-            ruleItem1.updateContentFromFile(drlFile1);
+            ruleItem3.updateLhs("new lhs");
             rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("package org.drools.examples", ((RuleItem)rules.get(0)).getContent());
+            assertEquals("test lhs content", ((RuleItem)rules.get(0)).getLhs());
         }
         catch(Exception e) {
             e.printStackTrace();
@@ -149,19 +143,17 @@
     public void testGetRules() {
         try {
             RulePackageItem rulePackageItem1 = this.rulesRepository.createRulePackage("testRulePackage");
+                        
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
-            
             rulePackageItem1.addRule(ruleItem1);
             
             List rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
                                   
-            File drlFile3 = new File("./src/java/org/drools/repository/test/test_data/drl2.drl");
-            RuleItem ruleItem2 = this.rulesRepository.addRuleFromFile(drlFile3);
+            RuleItem ruleItem2 = this.rulesRepository.addRule("test rule 2", "test lhs content", "test rhs content");
             rulePackageItem1.addRule(ruleItem2);
             
             rules = rulePackageItem1.getRules();
@@ -178,8 +170,7 @@
         try {
             RulePackageItem rulePackageItem1 = this.rulesRepository.createRulePackage("testRulePackage");
             
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             rulePackageItem1.addRule(ruleItem1);
             assertNotNull(rulePackageItem1.toString());                        
@@ -194,33 +185,30 @@
         try {
             RulePackageItem rulePackageItem1 = this.rulesRepository.createRulePackage("testRulePackage");
             
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             rulePackageItem1.addRule(ruleItem1);
             
             List rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
                                     
-            File drlFile2 = new File("./src/java/org/drools/repository/test/test_data/drl3.drl");
-            ruleItem1.updateContentFromFile(drlFile2);
+            ruleItem1.updateLhs("new lhs");
             rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
-            assertEquals("package org.drools.examples", ((RuleItem)rules.get(0)).getContent());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
+            assertEquals("new lhs", ((RuleItem)rules.get(0)).getLhs());
             
-            File drlFile3 = new File("./src/java/org/drools/repository/test/test_data/drl2.drl");
-            RuleItem ruleItem2 = this.rulesRepository.addRuleFromFile(drlFile3);
+            RuleItem ruleItem2 = this.rulesRepository.addRule("test rule 2", "test lhs content", "test rhs content");
             rulePackageItem1.addRule(ruleItem2);
             
-            //remove the rule, make sure the other rule int the pacakge stays around
+            //remove the rule, make sure the other rule in the pacakge stays around
             rulePackageItem1.removeRule(ruleItem1);
             rules = rulePackageItem1.getRules();
             assertEquals(1, rules.size());
-            assertEquals("drl2.drl", ((RuleItem)rules.get(0)).getName());
+            assertEquals("test rule 2", ((RuleItem)rules.get(0)).getName());
             
             //remove the rule that is following the head revision, make sure the pacakge is now empty
             rulePackageItem1.removeRule(ruleItem2);
@@ -239,15 +227,14 @@
         try {
             RulePackageItem rulePackageItem1 = this.rulesRepository.createRulePackage("testRulePackage");
             
-            File drlFile1 = new File("./src/java/org/drools/repository/test/test_data/drl1.drl");
-            RuleItem ruleItem1 = this.rulesRepository.addRuleFromFile(drlFile1);
+            RuleItem ruleItem1 = this.rulesRepository.addRule("test rule", "test lhs content", "test rhs content");
             
             rulePackageItem1.addRule(ruleItem1);
             
             List rules = rulePackageItem1.getRules();
             assertNotNull(rules);
             assertEquals(1, rules.size());
-            assertEquals("drl1.drl", ((RuleItem)rules.get(0)).getName());
+            assertEquals("test rule", ((RuleItem)rules.get(0)).getName());
             
             rulePackageItem1.removeAllRules();
             
@@ -260,4 +247,4 @@
             fail("Caught unexpected exception: " + e);
         }
     }
-}
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulesRepositoryTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulesRepositoryTestCase.java	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/java/org/drools/repository/test/RulesRepositoryTestCase.java	2006-08-16 16:37:30 UTC (rev 5918)
@@ -1,6 +1,7 @@
 package org.drools.repository.test;
 
 import java.io.File;
+import java.util.Calendar;
 
 import org.drools.repository.*;
 
@@ -44,11 +45,11 @@
         //this is covered by the DslItemTestCase
     }
 
-    public void testAddRuleFromFileFile() {
+    public void testAddRule() {
         //this is covered by the RuleItemTestCase
     }
 
-    public void testAddRuleFromFileFileDslItem() {
+    public void testAddRuleDslItemBoolean() {
         RulesRepository rulesRepository = null;
         try {
             rulesRepository = new RulesRepository(true);
@@ -57,8 +58,7 @@
             DslItem dslItem1 = rulesRepository.addDslFromFile(dslFile1);
             assertNotNull(dslItem1);
             
-            File ruleFile1 = new File("./src/java/org/drools/repository/test/test_data/drl2.drl");
-            RuleItem ruleItem1 = rulesRepository.addRuleFromFile(ruleFile1, dslItem1);
+            RuleItem ruleItem1 = rulesRepository.addRule("test rule", "test lhs content", "test rhs content", dslItem1, true);
             
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
@@ -70,7 +70,22 @@
             dslItem1.updateContentFromFile(dslFile2);
             assertNotNull(ruleItem1.getNode());
             assertNotNull(ruleItem1.getDsl());
-            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());                                   
+            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());
+            
+            //now do the same thing, but test not following head:                                    
+            RuleItem ruleItem2 = rulesRepository.addRule("test rule 2", "test lhs content", "test rhs 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.updateContentFromFile(dslFile2);
+            assertNotNull(ruleItem2.getNode());
+            assertNotNull(ruleItem2.getDsl());
+            assertEquals(originalContent, ruleItem2.getDsl().getContent());
         }
         catch(Exception e) {
             fail("Unexpected Exception caught: " + e);
@@ -86,54 +101,82 @@
             }
         }
     }
-
-    public void testAddRuleFromFileFileDslItemBoolean() {
+    
+    public void testAddRuleCalendarCalendar() {
         RulesRepository rulesRepository = null;
         try {
             rulesRepository = new RulesRepository(true);
+                        
+            Calendar effectiveDate = Calendar.getInstance();
+            Calendar expiredDate = Calendar.getInstance();
+            expiredDate.setTimeInMillis(effectiveDate.getTimeInMillis() + (1000 * 60 * 60 * 24));
+            RuleItem ruleItem1 = rulesRepository.addRule("test rule", "test lhs content", "test rhs content", effectiveDate, expiredDate);
+            
+            assertNotNull(ruleItem1);
+            assertNotNull(ruleItem1.getNode());
+            assertEquals(effectiveDate, ruleItem1.getDateEffective());
+            assertEquals(expiredDate, ruleItem1.getDateExpired());                       
+        }
+        catch(Exception e) {
+            fail("Unexpected Exception caught: " + e);
+        }
+        finally {
+            if(rulesRepository != null) {
+                try {
+                    rulesRepository.logout();
+                }
+                catch(Exception e) {
+                    fail("Caught unexpected Exception: " + e);
+                }
+            }
+        }
+    }
+    
+    public void testAddRuleDslItemBooleanCalendarCalendar() {
+        RulesRepository rulesRepository = null;
+        try {
+            rulesRepository = new RulesRepository(true);
             File dslFile1 = new File("./src/java/org/drools/repository/test/test_data/dsl1.dsl");
             
             DslItem dslItem1 = rulesRepository.addDslFromFile(dslFile1);
             assertNotNull(dslItem1);
             
-            File ruleFile1 = new File("./src/java/org/drools/repository/test/test_data/drl2.drl");
-            RuleItem ruleItem1 = rulesRepository.addRuleFromFile(ruleFile1, dslItem1, true);
+            Calendar effectiveDate = Calendar.getInstance();
+            Calendar expiredDate = Calendar.getInstance();
+            expiredDate.setTimeInMillis(effectiveDate.getTimeInMillis() + (1000 * 60 * 60 * 24));
             
+            RuleItem ruleItem1 = rulesRepository.addRule("test rule", "test lhs content", "test rhs content", dslItem1, true, effectiveDate, expiredDate);
+            
             assertNotNull(ruleItem1);
             assertNotNull(ruleItem1.getNode());
             assertNotNull(ruleItem1.getDsl());
-            assertEquals(dslItem1, ruleItem1.getDsl());
+            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());
+            assertEquals(effectiveDate, ruleItem1.getDateEffective());
+            assertEquals(expiredDate, ruleItem1.getDateExpired());
             
             //test that this follows the head version
             File dslFile2 = new File("./src/java/org/drools/repository/test/test_data/dsl2.dsl");
-            
             dslItem1.updateContentFromFile(dslFile2);
-            
-            
-            
             assertNotNull(ruleItem1.getNode());
             assertNotNull(ruleItem1.getDsl());
-            assertEquals(ruleItem1.getDsl(), dslItem1);                                   
+            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());
             
-            //now test not following the head revision
-            rulesRepository.logout();
-            rulesRepository = new RulesRepository(true);
+            //now do the same thing, but test not following head:                                    
+            RuleItem ruleItem2 = rulesRepository.addRule("test rule 2", "test lhs content", "test rhs content", dslItem1, false, effectiveDate, expiredDate);
             
-            dslItem1 = rulesRepository.addDslFromFile(dslFile1);
-            assertNotNull(dslItem1);
+            assertNotNull(ruleItem2);
+            assertNotNull(ruleItem2.getNode());
+            assertNotNull(ruleItem2.getDsl());
+            assertEquals(dslItem1.getContent(), ruleItem2.getDsl().getContent());
+            assertEquals(effectiveDate, ruleItem1.getDateEffective());
+            assertEquals(expiredDate, ruleItem1.getDateExpired());
             
-            ruleItem1 = rulesRepository.addRuleFromFile(ruleFile1, dslItem1, false);
-            
-            assertNotNull(ruleItem1);
-            assertNotNull(ruleItem1.getNode());
-            assertNotNull(ruleItem1.getDsl());
-            assertEquals(dslItem1.getContent(), ruleItem1.getDsl().getContent());
-            
-            //test that this follows the head version
+            //test that this stays tied to the specific revision of the DSL node
+            String originalContent = ruleItem2.getDsl().getContent();
             dslItem1.updateContentFromFile(dslFile2);
-            assertNotNull(ruleItem1.getNode());
-            assertNotNull(ruleItem1.getDsl());
-            assertFalse(ruleItem1.getDsl().equals(dslItem1));
+            assertNotNull(ruleItem2.getNode());
+            assertNotNull(ruleItem2.getDsl());
+            assertEquals(originalContent, ruleItem2.getDsl().getContent());
         }
         catch(Exception e) {
             fail("Unexpected Exception caught: " + e);
@@ -149,7 +192,7 @@
             }
         }
     }
-
+    
     public void testCreateRulePackage() {
         //this is covered by RulePackageItemTestCase
     }

Modified: labs/jbossrules/trunk/drools-repository/src/node_type_definitions/rule_node_type.cnd
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/node_type_definitions/rule_node_type.cnd	2006-08-16 16:17:50 UTC (rev 5917)
+++ labs/jbossrules/trunk/drools-repository/src/node_type_definitions/rule_node_type.cnd	2006-08-16 16:37:30 UTC (rev 5918)
@@ -11,34 +11,38 @@
 [drools:rule_node_type]
 
 // Supertypes
-> 'nt:file','mix:versionable'
+> 'nt:hierarchyNode','mix:versionable'
 
-// Nodes of this node type have a property called 'drools:dsl_reference' of type reference
-- drools:dsl_reference (reference)
+// Properties:
+- drools:name (string)
+  mandatory
 
-// It has an on-parent-version setting of ...
-copy
+- drools:lhs (string)
+  mandatory
 
-// the reference must be of one of these types...
-< 'drools:dsl_node_type','nt:version'
+- drools:rhs (string)
+  mandatory
 
-// Nodes of this node type have a property called 'drools:tag_reference' of type reference
-- drools:tag_reference (reference)
+- drools:last_modified (date)
+  mandatory
 
-// It is a multi-value property
-multiple
+- drools:date_effective (date)
 
-// It has an on-parent-version setting of ...
-copy
+- drools:date_expired (date)
+  
+- drools:rule_language (string)
+  = 'DRL'
+  mandatory autocreated
 
-// the reference must be of one of these types...
-< 'drools:tag_node_type'
+- drools:dsl_reference (reference)
+  copy 
+  < 'drools:dsl_node_type','nt:version'
 
-// Nodes of this node type have a property called 'drools:state_reference' of type reference
+- drools:tag_reference (reference)
+  multiple 
+  copy
+  < 'drools:tag_node_type'
+
 - drools:state_reference (reference)
-
-// It has an on-parent-version setting of ...
-copy
-
-// the reference must be of one of these types...
-< 'drools:state_node_type'
\ No newline at end of file
+  copy
+  < 'drools:state_node_type'
\ No newline at end of file




More information about the jboss-svn-commits mailing list