[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