[jboss-svn-commits] JBL Code SVN: r30961 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/agent and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jan 6 16:16:05 EST 2010
Author: eaa
Date: 2010-01-06 16:16:04 -0500 (Wed, 06 Jan 2010)
New Revision: 30961
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/DefaultResourceDiffProducerImpl.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/ResourceDiffProducer.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/BinaryResourceDiffProducerImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/ResourceDiffResult.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java
Log:
JBRULES-2082: support for delete/modify in changesets
- Added binary diff support to KnowledgeAgent when newInstance=false (incremental build).
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentBinaryDiffTests.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -0,0 +1,568 @@
+package org.drools.agent;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.io.ResourceChangeScannerConfiguration;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ResourceChangeNotifierImpl;
+import org.drools.io.impl.ResourceChangeScannerImpl;
+import org.drools.rule.Rule;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.util.FileManager;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.ResourceHandler;
+
+public class KnowledgeAgentBinaryDiffTests extends TestCase {
+
+ FileManager fileManager;
+ private Server server;
+
+ @Override
+ protected void setUp() throws Exception {
+ fileManager = new FileManager();
+ fileManager.setUp();
+ ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
+ ResourceFactory.getResourceChangeNotifierService().start();
+ ResourceFactory.getResourceChangeScannerService().start();
+
+ this.server = new Server(9000);
+ ResourceHandler resourceHandler = new ResourceHandler();
+ resourceHandler.setResourceBase(fileManager.getRootDirectory().getPath());
+ System.out.println("root : " + fileManager.getRootDirectory().getPath());
+
+ server.setHandler(resourceHandler);
+
+ server.start();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ fileManager.tearDown();
+ ResourceFactory.getResourceChangeNotifierService().stop();
+ ResourceFactory.getResourceChangeScannerService().stop();
+ ((ResourceChangeNotifierImpl) ResourceFactory.getResourceChangeNotifierService()).reset();
+ ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
+
+ server.stop();
+ }
+
+ public void testDifferentDateExpires() throws Exception {
+
+ final String attribute1 = "date-expires \"4-jan-2010\"";
+ final String attribute2 = "date-expires \"5-jan-2010\"";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals(2010, rule.getDateExpires().get(GregorianCalendar.YEAR));
+ assertEquals(GregorianCalendar.JANUARY, rule.getDateExpires().get(GregorianCalendar.MONTH));
+ assertEquals(4, rule.getDateExpires().get(GregorianCalendar.DAY_OF_MONTH));
+ }else if (attribute.equals(attribute2)){
+ assertEquals(2010, rule.getDateExpires().get(GregorianCalendar.YEAR));
+ assertEquals(GregorianCalendar.JANUARY, rule.getDateExpires().get(GregorianCalendar.MONTH));
+ assertEquals(5, rule.getDateExpires().get(GregorianCalendar.DAY_OF_MONTH));
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentDateEffective() throws Exception {
+
+ final String attribute1 = "date-effective \"4-jan-2010\"";
+ final String attribute2 = "date-effective \"5-jan-2010\"";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals(2010, rule.getDateEffective().get(GregorianCalendar.YEAR));
+ assertEquals(GregorianCalendar.JANUARY, rule.getDateEffective().get(GregorianCalendar.MONTH));
+ assertEquals(4, rule.getDateEffective().get(GregorianCalendar.DAY_OF_MONTH));
+ }else if (attribute.equals(attribute2)){
+ assertEquals(2010, rule.getDateEffective().get(GregorianCalendar.YEAR));
+ assertEquals(GregorianCalendar.JANUARY, rule.getDateEffective().get(GregorianCalendar.MONTH));
+ assertEquals(5, rule.getDateEffective().get(GregorianCalendar.DAY_OF_MONTH));
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+
+ public void testDifferentDialect() throws Exception {
+
+ final String attribute1 = "dialect \"java\"";
+ final String attribute2 = "dialect \"mvel\"";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals("java", rule.getDialect());
+ }else if (attribute.equals(attribute2)){
+ assertEquals("mvel", rule.getDialect());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentRuleFlowGroup() throws Exception {
+
+ final String attribute1 = "ruleflow-group \"g1\"";
+ final String attribute2 = "ruleflow-group \"g2\"";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals("g1", rule.getRuleFlowGroup());
+ }else if (attribute.equals(attribute2)){
+ assertEquals("g2", rule.getRuleFlowGroup());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentAutoFocus() throws Exception {
+
+ final String attribute1 = "auto-focus false";
+ final String attribute2 = "auto-focus true";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals(false, rule.getAutoFocus());
+ }else if (attribute.equals(attribute2)){
+ assertEquals(true, rule.getAutoFocus());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentAgendaGroup() throws Exception {
+
+ final String attribute1 = "agenda-group \"g1\"";
+ final String attribute2 = "agenda-group \"g2\"";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals("g1", rule.getAgendaGroup());
+ }else if (attribute.equals(attribute2)){
+ assertEquals("g2", rule.getAgendaGroup());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentLockOnActive() throws Exception {
+
+ final String attribute1 = "lock-on-active false";
+ final String attribute2 = "lock-on-active true";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals(false, rule.isLockOnActive());
+ }else if (attribute.equals(attribute2)){
+ assertEquals(true, rule.isLockOnActive());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentNoLoop() throws Exception {
+
+ final String attribute1 = "no-loop false";
+ final String attribute2 = "no-loop true";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals(false, rule.isNoLoop());
+ }else if (attribute.equals(attribute2)){
+ assertEquals(true, rule.isNoLoop());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentActivationGroup() throws Exception {
+
+ final String attribute1 = "activation-group \"1\"";
+ final String attribute2 = "activation-group \"2\"";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals("1", rule.getActivationGroup());
+ }else if (attribute.equals(attribute2)){
+ assertEquals("2", rule.getActivationGroup());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+
+ public void testDifferentSalience() throws Exception {
+
+ final String attribute1 = "salience 1";
+ final String attribute2 = "salience 2";
+
+ RuleAttributeAsserter asserter = new RuleAttributeAsserter() {
+
+ public void assertRuleAttribute(String attribute, Rule rule) {
+ if (attribute.equals(attribute1)){
+ assertEquals("1", rule.getSalience().toString());
+ }else if (attribute.equals(attribute2)){
+ assertEquals("2", rule.getSalience().toString());
+ }else{
+ throw new IllegalArgumentException("Unexpected attribute "+attribute);
+ }
+ }
+ };
+
+ this.differentRuleAttributeTest(attribute1, attribute2, asserter);
+
+ }
+
+ public void testDifferentLHS() throws Exception {
+
+ String header1 = "";
+ header1 += "package org.drools.test\n";
+ header1 += "global java.util.List list\n\n";
+
+ String rule1 = this.createCommonRule("rule1");
+
+
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header1);
+ output.write(rule1);
+ output.close();
+
+ String xml = "";
+ xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml += " <add> ";
+ xml += " <resource source='http://localhost:9000/rule1.drl' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
+
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals(1, list.size());
+ assertTrue(list.contains("rule1"));
+
+ list.clear();
+
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ //String rule1v3 = this.createCommonRule("rule1","3");
+ String rule1v2 = "";
+ rule1v2 += "rule rule1\n";
+ rule1v2 += "when\n";
+ rule1v2 += "\tString()\n";
+ rule1v2 += "then\n";
+ rule1v2 += "list.add( drools.getRule().getName()+\"-V2\");\n";
+ rule1v2 += "end\n";
+
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header1);
+ output.write(rule1v2);
+ output.close();
+ Thread.sleep(3000);
+
+ // Use the same session for incremental build test
+ ksession = kbase.newStatefulKnowledgeSession();
+ ksession.setGlobal("list", list);
+ ksession.insert("Some String");
+ ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals(1, list.size());
+ assertTrue(list.contains("rule1-V2"));
+
+ kagent.monitorResourceChangeEvents(false);
+ }
+
+
+ public void testDifferentConsequences() throws Exception {
+
+ String header1 = "";
+ header1 += "package org.drools.test\n";
+ header1 += "global java.util.List list\n\n";
+
+ String rule1 = this.createCommonRule("rule1");
+
+
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header1);
+ output.write(rule1);
+ output.close();
+
+ String xml = "";
+ xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml += " <add> ";
+ xml += " <resource source='http://localhost:9000/rule1.drl' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
+
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals(1, list.size());
+ assertTrue(list.contains("rule1"));
+
+ list.clear();
+
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ String rule1v2 = this.createCommonRule("rule1", "2");
+
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header1);
+ output.write(rule1v2);
+ output.close();
+ Thread.sleep(3000);
+
+ // Use the same session for incremental build test
+ ksession = kbase.newStatefulKnowledgeSession();
+ ksession.setGlobal("list", list);
+ ksession.insert("Some String");
+ ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals(1, list.size());
+ assertTrue(list.contains("rule1-V2"));
+
+ kagent.monitorResourceChangeEvents(false);
+ }
+
+
+
+
+
+
+//
+
+ private void differentRuleAttributeTest(String attribute1, String attribute2,RuleAttributeAsserter asserter) throws Exception {
+
+ String header1 = "";
+ header1 += "package org.drools.test\n";
+ header1 += "global java.util.List list\n\n";
+
+ String rule1 = "";
+ rule1 += "rule rule1\n";
+ rule1 += attribute1+"\n";
+ rule1 += "when\n";
+ rule1 += "\tString()\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName());\n";
+ rule1 += "end\n";
+
+
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header1);
+ output.write(rule1);
+ output.close();
+
+ String xml = "";
+ xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml += " <add> ";
+ xml += " <resource source='http://localhost:9000/rule1.drl' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
+
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+ org.drools.rule.Rule rule = (org.drools.rule.Rule) kagent.getKnowledgeBase().getRule("org.drools.test", "rule1");
+
+ assertNotNull(rule);
+ asserter.assertRuleAttribute(attribute1, rule);
+
+
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ String rule1v2 = "";
+ rule1v2 += "rule rule1\n";
+ rule1v2 += attribute2+"\n";
+ rule1v2 += "when\n";
+ rule1v2 += "\tString()\n";
+ rule1v2 += "then\n";
+ rule1v2 += "list.add( drools.getRule().getName());\n";
+ rule1v2 += "end\n";
+
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header1);
+ output.write(rule1v2);
+ output.close();
+ Thread.sleep(3000);
+
+ rule = (org.drools.rule.Rule) kagent.getKnowledgeBase().getRule("org.drools.test", "rule1");
+ assertNotNull(rule);
+ asserter.assertRuleAttribute(attribute2, rule);
+
+ kagent.monitorResourceChangeEvents(false);
+ }
+
+ private KnowledgeAgent createKAgent(KnowledgeBase kbase) {
+ ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
+ sconf.setProperty("drools.resource.scanner.interval", "2");
+ ResourceFactory.getResourceChangeScannerService().configure(sconf);
+
+ //System.setProperty(KnowledgeAgentFactory.PROVIDER_CLASS_NAME_PROPERTY_NAME, "org.drools.agent.impl.KnowledgeAgentProviderImpl");
+
+ KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
+ aconf.setProperty("drools.agent.scanDirectories", "true");
+ aconf.setProperty("drools.agent.scanResources", "true");
+ // Testing incremental build here
+ aconf.setProperty("drools.agent.newInstance", "false");
+
+
+
+ KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
+ "test agent", kbase, aconf);
+
+ assertEquals("test agent", kagent.getName());
+
+ return kagent;
+ }
+
+ private String createCommonRule(String ruleName) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("rule ");
+ sb.append(ruleName);
+ sb.append("\n");
+ sb.append("when\n");
+ sb.append("then\n");
+ sb.append("list.add( drools.getRule().getName() );\n");
+ sb.append("end\n");
+
+ return sb.toString();
+ }
+
+ private String createCommonRule(String ruleName, String version) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("rule ");
+ sb.append(ruleName);
+ sb.append("\n");
+ sb.append("when\n");
+ sb.append("then\n");
+ sb.append("list.add( drools.getRule().getName()+\"-V" + version + "\");\n");
+ sb.append("end\n");
+
+ return sb.toString();
+ }
+
+
+}
+
+interface RuleAttributeAsserter{
+ void assertRuleAttribute(String attribute, org.drools.rule.Rule rule);
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -8,6 +8,8 @@
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
@@ -18,12 +20,16 @@
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.definition.KnowledgePackage;
+import org.drools.definition.rule.Rule;
+import org.drools.definitions.impl.KnowledgePackageImp;
import org.drools.io.ResourceChangeScannerConfiguration;
import org.drools.io.ResourceFactory;
import org.drools.io.impl.ResourceChangeNotifierImpl;
import org.drools.io.impl.ResourceChangeScannerImpl;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.QueryResultsRow;
import org.drools.util.DroolsStreamUtils;
import org.drools.util.FileManager;
import org.mortbay.jetty.Server;
@@ -63,31 +69,25 @@
server.stop();
}
-
public void testModifyFileUrlIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
+
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+ String rule1 = this.createCommonRule("rule1");
+
File f1 = fileManager.newFile("rule1.drl");
Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
output.write(rule1);
output.close();
- String rule2 = "";
- rule2 += "package org.drools.test\n";
- rule2 += "global java.util.List list\n";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName() );\n";
- rule2 += "end\n";
+ String rule2 = this.createCommonRule("rule2");
+
File f2 = fileManager.newFile("rule2.drl");
output = new BufferedWriter(new FileWriter(f2));
+ output.write(header);
output.write(rule2);
output.close();
@@ -106,21 +106,8 @@
output.close();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
-
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- // Testing incremental build here
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
- assertEquals("test agent", kagent.getName());
-
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -139,16 +126,11 @@
// http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
Thread.sleep(2000);
- rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule3\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
+ String rule3 = this.createCommonRule("rule3");
+
output = new BufferedWriter(new FileWriter(f1));
- output.write(rule1);
+ output.write(header);
+ output.write(rule3);
output.close();
Thread.sleep(3000);
@@ -167,29 +149,24 @@
}
public void testRemoveFileUrlIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
+
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+ String rule1 = this.createCommonRule("rule1");
+
File f1 = fileManager.newFile("rule1.drl");
Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
output.write(rule1);
output.close();
- String rule2 = "";
- rule2 += "package org.drools.test\n";
- rule2 += "global java.util.List list\n";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName() );\n";
- rule2 += "end\n";
+ String rule2 = this.createCommonRule("rule2");
+
File f2 = fileManager.newFile("rule2.drl");
output = new BufferedWriter(new FileWriter(f2));
+ output.write(header);
output.write(rule2);
output.close();
@@ -209,20 +186,8 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- // Testing incremental build here
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
- assertEquals("test agent", kagent.getName());
-
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -275,38 +240,27 @@
* @throws Exception
*/
public void testModifyFileUrlOverwriteIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
- String rule2 = "";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName() );\n";
- rule2 += "end\n";
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+ String rule1 = this.createCommonRule("rule1");
+
+ String rule2 = this.createCommonRule("rule2");
+
File f1 = fileManager.newFile("rule1.drl");
Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
output.write(rule1);
output.write(rule2);
output.close();
- String rule1v2 = "";
- rule1v2 += "package org.drools.test\n";
- rule1v2 += "global java.util.List list\n";
- rule1v2 += "rule rule1\n";
- rule1v2 += "when\n";
- rule1v2 += "then\n";
- rule1v2 += "list.add( drools.getRule().getName() + \"_v2\");\n";
- rule1v2 += "end\n";
+ String rule1v2 = this.createCommonRule("rule1","2");
+
File f2 = fileManager.newFile("rule2.drl");
output = new BufferedWriter(new FileWriter(f2));
+ output.write(header);
output.write(rule1v2);
output.close();
@@ -326,20 +280,8 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
-
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- // Testing incremental build here
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
- assertEquals("test agent", kagent.getName());
-
+ KnowledgeAgent kagent = this.createKAgent(kbase);
+
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -349,7 +291,7 @@
ksession.dispose();
assertEquals(2, list.size());
- assertTrue(list.contains("rule1_v2"));
+ assertTrue(list.contains("rule1-V2"));
assertTrue(list.contains("rule2"));
list.clear();
@@ -358,15 +300,10 @@
// http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
Thread.sleep(2000);
- String rule1v3 = "";
- rule1v3 += "package org.drools.test\n";
- rule1v3 += "global java.util.List list\n";
- rule1v3 += "rule rule1\n";
- rule1v3 += "when\n";
- rule1v3 += "then\n";
- rule1v3 += "list.add( drools.getRule().getName() + \"_v3\" );\n";
- rule1v3 += "end\n";
+ String rule1v3 = this.createCommonRule("rule1","3");
+
output = new BufferedWriter(new FileWriter(f2));
+ output.write(header);
output.write(rule1v3);
output.close();
Thread.sleep(3000);
@@ -378,7 +315,7 @@
ksession.dispose();
assertEquals(2, list.size());
- assertTrue(list.contains("rule1_v3"));
+ assertTrue(list.contains("rule1-V3"));
assertTrue(list.contains("rule2"));
//Delete f2 now, rule1 should still fire if the indexing worked properly
@@ -405,25 +342,18 @@
* @throws Exception
*/
public void testMultipleRulesOnFileUrlIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n\n";
+
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+ String rule1 = this.createCommonRule("rule1");
+ String rule2 = this.createCommonRule("rule2");
- String rule2 = "";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName());\n";
- rule2 += "end\n";
-
File f1 = fileManager.newFile("rules.drl");
Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
output.write(rule1);
output.write(rule2);
output.close();
@@ -443,20 +373,8 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- // Testing incremental build here
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
- assertEquals("test agent", kagent.getName());
-
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -475,13 +393,10 @@
// http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
Thread.sleep(2000);
- String rule3 = "";
- rule3 += "rule rule3\n";
- rule3 += "when\n";
- rule3 += "then\n";
- rule3 += "list.add( drools.getRule().getName());\n";
- rule3 += "end\n";
+ String rule3 = this.createCommonRule("rule3");
+
output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
output.write(rule1);
output.write(rule3);
output.close();
@@ -655,25 +570,16 @@
public void testModifyPackageUrlIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
- String rule2 = "";
- rule2 += "package org.drools.test\n";
- rule2 += "global java.util.List list\n";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName() );\n";
- rule2 += "end\n";
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+ String rule1 = header + this.createCommonRule("rule1");
- // Do only Rule1 in the first package
+ String rule2 = header + this.createCommonRule("rule2");
+
+ // Put just Rule1 in the first package
File pkg1 = fileManager.newFile("pkg1.pkg");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
@@ -699,17 +605,8 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -727,17 +624,10 @@
// http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
Thread.sleep(2000);
- rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule3\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
+ String rule3 = header+this.createCommonRule("rule3");
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule3.getBytes()),
ResourceType.DRL);
kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
ResourceType.DRL);
@@ -763,23 +653,13 @@
}
public void testUpdatePackageUrlIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+ String rule1 = header + this.createCommonRule("rule1");
- String rule2 = "";
- rule2 += "package org.drools.test\n";
- rule2 += "global java.util.List list\n";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName() );\n";
- rule2 += "end\n";
+ String rule2 = header + this.createCommonRule("rule2");
// Add Rule1 and Rule2 in the first package
File pkg1 = fileManager.newFile("pkg1.pkg");
@@ -809,17 +689,8 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -838,14 +709,7 @@
// http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
Thread.sleep(2000);
- String rule3 = "";
- rule3 += "package org.drools.test\n";
- rule3 += "global java.util.List list\n";
- rule3 += "rule rule3\n";
- rule3 += "when\n";
- rule3 += "then\n";
- rule3 += "list.add( drools.getRule().getName() );\n";
- rule3 += "end\n";
+ String rule3 = header + this.createCommonRule("rule3");
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
@@ -875,42 +739,19 @@
public void testUpdatePackageUrlOverwriteIncremental() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test\n";
- rule1 += "global java.util.List list\n";
- rule1 += "rule rule1\n";
- rule1 += "when\n";
- rule1 += "then\n";
- rule1 += "list.add( drools.getRule().getName() );\n";
- rule1 += "end\n";
- String rule1v2 = "";
- rule1v2 += "package org.drools.test\n";
- rule1v2 += "global java.util.List list\n";
- rule1v2 += "rule rule1\n";
- rule1v2 += "when\n";
- rule1v2 += "then\n";
- rule1v2 += "list.add( drools.getRule().getName()+\"_V2\");\n";
- rule1v2 += "end\n";
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+ String rule1 = header + this.createCommonRule("rule1");
- String rule2 = "";
- rule2 += "package org.drools.test\n";
- rule2 += "global java.util.List list\n";
- rule2 += "rule rule2\n";
- rule2 += "when\n";
- rule2 += "then\n";
- rule2 += "list.add( drools.getRule().getName() );\n";
- rule2 += "end\n";
+ String rule1v2 = header + this.createCommonRule("rule1","2");
- String rule3 = "";
- rule3 += "package org.drools.test\n";
- rule3 += "global java.util.List list\n";
- rule3 += "rule rule3\n";
- rule3 += "when\n";
- rule3 += "then\n";
- rule3 += "list.add( drools.getRule().getName() );\n";
- rule3 += "end\n";
+ String rule2 = header + this.createCommonRule("rule2");
+ String rule3 = header + this.createCommonRule("rule3");
+
// Add Rule1 and Rule2 in the first package
File pkgF1 = fileManager.newFile("pkg1.pkg");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -951,17 +792,8 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.scanResources", "true");
- aconf.setProperty("drools.agent.newInstance", "false");
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
-
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -1000,13 +832,13 @@
assertEquals(2, list.size());
- assertTrue(list.contains("rule1_V2"));
+ assertTrue(list.contains("rule1-V2"));
assertTrue(list.contains("rule2"));
kagent.monitorResourceChangeEvents(false);
}
- public void completeTest() throws Exception {
+ public void testCompleteRuleScenario() throws Exception {
String header = "";
header += "package org.drools.test\n";
header += "global java.util.List list\n\n";
@@ -1204,19 +1036,224 @@
ksession.fireAllRules();
ksession.dispose();
- assertEquals(4, list.size());
+ assertEquals(3, list.size());
assertTrue(list.contains("rule1-V3"));
assertTrue(list.contains("rule2"));
- //rule3 reapears because rules2.drl was reporcessed
- assertTrue(list.contains("rule3"));
+ //rule3 doesn't reapear because it was not modified in the resource
+ //assertTrue(list.contains("rule3"));
assertTrue(list.contains("rule4"));
kagent.monitorResourceChangeEvents(false);
}
-
+
+ public void testAddModifyFunctionIncremental() throws Exception {
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("rule rule1 \n");
+ sb.append("when\n");
+ sb.append("then\n");
+ sb.append("function1 (list,\"rule1\");\n");
+ sb.append("end\n");
+
+ String rule1 = sb.toString();
+
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
+ output.write(rule1);
+ output.close();
+
+ String xml = "";
+ xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml += " <add> ";
+ xml += " <resource source='http://localhost:9000/rule1.drl' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
+
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+
+ KnowledgePackage knowledgePackage = kbase.getKnowledgePackage("org.drools.test");
+
+ //the resource didn't compile because function1 doesn't exist
+ assertNull(knowledgePackage);
+
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ //we are going to add function1 now
+ String function1 = this.createCommonFunction("function1", "function1");
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
+ output.write(function1);
+ output.write(rule1);
+ output.close();
+ Thread.sleep(3000);
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals(1, list.size());
+ assertTrue(list.contains("function1 from rule1"));
+
+ //we are going to modify the definition of function1()
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ //we are going to modify function1 now
+ String function1V2 = this.createCommonFunction("function1", "function1-V2");
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
+ output.write(function1V2);
+ output.write(rule1);
+ output.close();
+ Thread.sleep(3000);
+
+ ksession = kbase.newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals(1, list.size());
+ assertTrue(list.contains("function1-V2 from rule1"));
+
+ kagent.monitorResourceChangeEvents(false);
+ }
+
+
+ public void testAddModifyQueryIncremental() throws Exception {
+ String header = "";
+ header += "package org.drools.test\n";
+ header += "global java.util.List list\n\n";
+
+
+ String query1 = "";
+ query1 += "query \"all the Strings\"\n";
+ query1 += " $strings : String()\n";
+ query1 += "end\n";
+
+ String rule1 = this.createCommonRule("rule1");
+
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
+ output.write(rule1);
+ output.close();
+
+ String xml = "";
+ xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml += " <add> ";
+ xml += " <resource source='http://localhost:9000/rule1.drl' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
+
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+
+ KnowledgePackage knowledgePackage = kbase.getKnowledgePackage("org.drools.test");
+
+ assertNotNull(knowledgePackage);
+
+ Rule allTheStringsQuery = ((KnowledgePackageImp) knowledgePackage).getRule("all the Strings");
+
+ assertNull(allTheStringsQuery);
+
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ //we are going to add the query now
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
+ output.write(query1);
+ output.write(rule1);
+ output.close();
+ Thread.sleep(3000);
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.insert("Some String");
+ ksession.insert("Some Other String");
+
+ QueryResults queryResults = ksession.getQueryResults("all the Strings");
+
+ ksession.dispose();
+
+
+ assertEquals(2, queryResults.size());
+
+ Iterator<QueryResultsRow> iterator = queryResults.iterator();
+ while (iterator.hasNext()){
+ System.out.println("Row= "+iterator.next().get("$strings"));
+ }
+
+ //we are going to modify the query definition
+ // have to sleep here as linux lastModified does not do milliseconds
+ // http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep(2000);
+
+ //we are going to add function1 now
+ String query1V2 = "";
+ query1V2 += "query \"all the Strings\"\n";
+ query1V2 += " $strings : String(this == \"Some String\")\n";
+ query1V2 += "end\n";
+
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(header);
+ output.write(query1V2);
+ output.write(rule1);
+ output.close();
+ Thread.sleep(3000);
+
+ ksession = kbase.newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.insert("Some String");
+ ksession.insert("Some Other String");
+
+ queryResults = ksession.getQueryResults("all the Strings");
+
+ ksession.dispose();
+
+
+ assertEquals(1, queryResults.size());
+ assertEquals("Some String",queryResults.iterator().next().get("$strings"));
+
+ kagent.monitorResourceChangeEvents(false);
+ }
+
private static void writePackage(Object pkg, File p1file)
throws IOException, FileNotFoundException {
FileOutputStream out = new FileOutputStream(p1file);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/ResourceDiffProducer.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/ResourceDiffProducer.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/ResourceDiffProducer.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -27,5 +27,5 @@
* @author esteban
*/
public interface ResourceDiffProducer {
- ResourceDiffResult diff(Set<KnowledgeDefinition> originalDefinitions, KnowledgePackageImp pkg);
+ ResourceDiffResult diff(Set<KnowledgeDefinition> originalDefinitions, KnowledgePackageImp newPkg, KnowledgePackageImp currentPkg );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/BinaryResourceDiffProducerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/BinaryResourceDiffProducerImpl.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/BinaryResourceDiffProducerImpl.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -16,12 +16,21 @@
package org.drools.agent.impl;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Set;
+import org.drools.SystemEventListener;
+import org.drools.SystemEventListenerFactory;
+import org.drools.WorkingMemory;
import org.drools.definition.KnowledgeDefinition;
import org.drools.definitions.impl.KnowledgePackageImp;
import org.drools.agent.ResourceDiffProducer;
+import org.drools.rule.Function;
+import org.drools.rule.Query;
import org.drools.rule.Rule;
+import org.drools.spi.Consequence;
+import org.drools.spi.KnowledgeHelper;
import org.drools.util.ReflectiveVisitor;
/**
@@ -30,31 +39,245 @@
*/
public class BinaryResourceDiffProducerImpl extends ReflectiveVisitor implements ResourceDiffProducer {
+
+
private KnowledgePackageImp newPkg;
+ private KnowledgePackageImp currentPkg;
+ private Set<KnowledgeDefinition> unmodifiedDefinitions = new HashSet<KnowledgeDefinition>();
+ private Set<KnowledgeDefinition> removedDefinitions = new HashSet<KnowledgeDefinition>();
- public ResourceDiffResult diff(Set<KnowledgeDefinition> originalDefinitions, KnowledgePackageImp pkg) {
+ private SystemEventListener listener;
- this.newPkg = pkg;
-
- Set<KnowledgeDefinition> removed = new HashSet<KnowledgeDefinition>();
+ //attributes used during rules comparison
+ private Calendar now = new GregorianCalendar();
+ private Consequence dummyConsequence = new DummyConsequence();
+ public ResourceDiffResult diff(Set<KnowledgeDefinition> originalDefinitions, KnowledgePackageImp newPkg, KnowledgePackageImp currentPkg ) {
+ this.listener = SystemEventListenerFactory.getSystemEventListener();
+
+ this.newPkg = newPkg;
+ this.currentPkg = currentPkg;
+
for (KnowledgeDefinition knowledgeDefinition : originalDefinitions) {
this.visit(knowledgeDefinition);
}
+
//return the whole new package as new
- return new ResourceDiffResult(pkg, originalDefinitions);
+ return new ResourceDiffResult(this.newPkg, this.unmodifiedDefinitions, this.removedDefinitions);
}
- public void visitRule(final Rule rule){
- //ok, so I got an old rule: is it modified in the new pkg? is it even present on it?
- //newPkg.
+ public void visitRule(final Rule oldRule){
+
+
+ //ok, so I get an old rule: is it modified in the new pkg? is it even present on it?
+ org.drools.definition.rule.Rule newRule = newPkg.getRule(oldRule.getName());
+
+ if (newRule == null){
+ //the old rule is not present on the new package. Add it to
+ //removed rules list.
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldRule+" is not present anymore. Adding to removed list.");
+ this.removedDefinitions.add(oldRule);
+ return;
+ }
+
+ //it is possible that the old rule doesn't exist anymore in the current
+ //pkg. This is because maybe some other resouce updated its definition
+ //and after that the same resource removed it. If that is the case,
+ //this resource (the one we are processing) still contain a reference
+ //to the rule, but it is no present on kbase anymore. If this is the
+ //case, we wan't to skip this rule. Because remember that someone
+ //modified it and removed it before this resource. We don't even
+ //add it to removedDefinitions, because it is no present on kbase. What
+ //we have to do is remove it from the new pkg so it won't reapears.
+ if (currentPkg.getRule(oldRule.getName()) == null){
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldRule+" is not present on current PKG. Removing from new package.");
+ newPkg.removeRule(oldRule);
+ return;
+ }
+
+ //I hate to do this. But if it is not instance of
+ //org.drools.rule.Rule I can't get his LHS.
+ if (!(newRule instanceof org.drools.rule.Rule)){
+ listener.warning("BinaryResourceDiffProducerImpl: Rules must be subclasses of org.drools.rule.Rule.");
+ return;
+ }
+
+ //Queries are not supported yet.
+ if (newRule instanceof Query){
+ listener.debug("BinaryResourceDiffProducerImpl: Query diff is not supported yet.");
+ return;
+ }
+
+ //is newRule equal to oldRule?
+ if (this.compareRules((Rule)newRule,oldRule)){
+ //if so, we don't need the rule in the new Package.
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldRule+" didn't change. Removing from diff package and adding it to unmodified list.");
+ newPkg.removeRule((org.drools.rule.Rule)newRule);
+ this.unmodifiedDefinitions.add(oldRule);
+ }
+
}
+ public void visitFunction(final Function oldFunction){
+ //ok, so I get an old function: is it modified in the new pkg? is it even present on it?
+ Function newFunction = newPkg.getFunction(oldFunction.getName());
+ if (newFunction == null){
+ //the old function is not present on the new package. Add it to
+ //removed rules list.
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldFunction+" is not present anymore. Adding to removed list.");
+ this.removedDefinitions.add(oldFunction);
+ return;
+ }
+ //it is possible that the old function doesn't exist anymore in the current
+ //pkg. This is because maybe some other resouce updated its definition
+ //and after that the same resource removed it. If that is the case,
+ //this resource (the one we are processing) still contain a reference
+ //to the function, but it is no present on kbase anymore. If this is the
+ //case, we wan't to skip this function. Remember that someone
+ //modified it and removed it before this resource. We don't even
+ //add it to removedDefinitions, because it is no present on kbase. What
+ //we have to do is remove it from the new pkg so it won't reapears.
+ if (currentPkg.getFunction(oldFunction.getName()) == null){
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldFunction+" is not present on current PKG. Removing from new package.");
+ newPkg.removeFunction(oldFunction.getName());
+ return;
+ }
+
+ //is newFunction equal to oldFunction?
+ if (newFunction.equals(oldFunction)){
+ //if so, we don't need the function in the new Package.
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldFunction+" didn't change. Removing from diff package and adding it to unmodified list.");
+ newPkg.removeFunction(newFunction.getName());
+ this.unmodifiedDefinitions.add(oldFunction);
+ }else{
+ //it seams that the kbase doesn't overrides function's definitions.
+ //that's why we need to mark this function as removed, but don't
+ //remove it from the new pkg.
+ listener.debug("BinaryResourceDiffProducerImpl: "+oldFunction+" did change. Marking as removed so it new version could be added later.");
+ this.removedDefinitions.add(oldFunction);
+ }
+
+
+ }
+
+
+ public void visitKnowledgeDefinitionn(final KnowledgeDefinition oldDefinition){
+ listener.debug("BinaryResourceDiffProducerImpl: Couldn't handle "+oldDefinition+". We must leave it in the new Package.");
+ }
+
+
+
+ private boolean compareRules(Rule r1, Rule r2){
+ listener.debug("BinaryResourceDiffProducerImpl: Comparing "+r1+" against "+r2);
+
+
+
+ //compares the salinces
+ String v1 = r1.getSalience()== null?"":r1.getSalience().toString();
+ String v2 = r2.getSalience()== null?"":r2.getSalience().toString();
+
+ if (!v1.equals(v2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different saliences: r1= "+v1+", r2= "+v2);
+ return false;
+ }
+
+ //compares the activation groups
+ v1 = r1.getActivationGroup()== null?"":r1.getActivationGroup();
+ v2 = r2.getActivationGroup()== null?"":r2.getActivationGroup();
+ if (!v1.equals(v2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different activation groups: r1= "+v1+", r2= "+v2);
+ return false;
+ }
+
+ //compares no-loop attribute
+ if (r1.isNoLoop() != r2.isNoLoop()){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different values for no-loop attribure: r1= "+r1.isNoLoop()+", r2= "+r2.isNoLoop());
+ return false;
+ }
+
+ //compares lock-on-active attribute
+ if (r1.isLockOnActive() != r2.isLockOnActive()){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different values for lock-on-active attribure: r1= "+r1.isLockOnActive()+", r2= "+r2.isLockOnActive());
+ return false;
+ }
+
+ //compares agenda-group attribute
+ v1 = r1.getAgendaGroup()== null?"":r1.getAgendaGroup();
+ v2 = r2.getAgendaGroup()== null?"":r2.getAgendaGroup();
+ if (!v1.equals(v2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different agenda groups: r1= "+v1+", r2= "+v2);
+ return false;
+ }
+
+ //compares auto-focus attribute
+ if (r1.getAutoFocus() != r2.getAutoFocus()){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different values for auto-focus attribure: r1= "+r1.getAutoFocus()+", r2= "+r2.getAutoFocus());
+ return false;
+ }
+
+ //compares ruleflow-group attribute
+ v1 = r1.getRuleFlowGroup()== null?"":r1.getRuleFlowGroup();
+ v2 = r2.getRuleFlowGroup()== null?"":r2.getRuleFlowGroup();
+ if (!v1.equals(v2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different ruleflow-group attribute: r1= "+v1+", r2= "+v2);
+ return false;
+ }
+
+ //compares dialect attribute
+ v1 = r1.getDialect()== null?"":r1.getDialect();
+ v2 = r2.getDialect()== null?"":r2.getDialect();
+ if (!v1.equals(v2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different dialect attribute: r1= "+v1+", r2= "+v2);
+ return false;
+ }
+
+ //compares date-effective attribute
+ Calendar c1 = r1.getDateEffective()== null?now:r1.getDateEffective();
+ Calendar c2 = r2.getDateEffective()== null?now:r2.getDateEffective();
+ if (!c1.equals(c2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different date-effective attribute: r1= "+c1+", r2= "+c2);
+ return false;
+ }
+
+ //compares date-expires attribute
+ c1 = r1.getDateExpires()== null?now:r1.getDateExpires();
+ c2 = r2.getDateExpires()== null?now:r2.getDateExpires();
+ if (!c1.equals(c2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different date-expires attribute: r1= "+c1+", r2= "+c2);
+ return false;
+ }
+
+ //compares the rules' LHS
+ if (!r1.getLhs().equals(r2.getLhs())){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different LHS");
+ return false;
+ }
+
+ //compares the rules consequences
+ Consequence consequence1 = r1.getConsequence()== null?dummyConsequence:r1.getConsequence();
+ Consequence consequence2 = r2.getConsequence()== null?dummyConsequence:r2.getConsequence();
+ if (!consequence1.equals(consequence2)){
+ listener.debug("BinaryResourceDiffProducerImpl: The rules have different Consequences: r1= "+consequence1+", r2= "+consequence2);
+ return false;
+ }
+
+ return true;
+ }
+
+ //Dummy implementation of Consequnce used for rules comparison.
+ private class DummyConsequence implements Consequence{
+
+ public void evaluate(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory) throws Exception {
+ throw new UnsupportedOperationException("You should never call this method!!");
+ }
+
+ }
+
}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/DefaultResourceDiffProducerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/DefaultResourceDiffProducerImpl.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/DefaultResourceDiffProducerImpl.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -1,51 +0,0 @@
-/*
- * Copyright 2009 esteban.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * under the License.
- */
-
-package org.drools.agent.impl;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.drools.RuntimeDroolsException;
-import org.drools.builder.KnowledgeBuilder;
-import org.drools.builder.KnowledgeBuilderFactory;
-import org.drools.definition.KnowledgeDefinition;
-import org.drools.definitions.impl.KnowledgePackageImp;
-import org.drools.agent.ResourceDiffProducer;
-
-/**
- *
- * @author esteban.aliverti at gmail.com
- */
-public class DefaultResourceDiffProducerImpl implements ResourceDiffProducer {
-
- public ResourceDiffResult diff(Set<KnowledgeDefinition> originalDefinitions, KnowledgePackageImp pkg) {
-
- Set<KnowledgeDefinition> removed = new HashSet<KnowledgeDefinition>();
-
- //put all the original definitions as removed
- for (KnowledgeDefinition knowledgeDefinition : originalDefinitions) {
- removed.add(knowledgeDefinition);
- }
-
- //return the whole new package as new
- return new ResourceDiffResult(pkg, removed);
-
-
- }
-
-
-}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -697,15 +697,28 @@
}
- ResourceDiffProducer rdp = new DefaultResourceDiffProducerImpl();
- //ResourceDiffProducer rdp = new BinaryResourceDiffProducerImpl();
+ this.listener.debug("KnowledgeAgent: Diffing: "+entry.getKey());
- ResourceDiffResult diff = rdp.diff(entry.getValue(), kpkg);
+ ResourceDiffProducer rdp = new BinaryResourceDiffProducerImpl();
+
+ //we suppose that the package definition didn't change in the resource.
+ //That's why we are serching the current package as
+ //this.kbase.getKnowledgePackage(kpkg.getName())
+ ResourceDiffResult diff = rdp.diff(entry.getValue(), kpkg, (KnowledgePackageImp) this.kbase.getKnowledgePackage(kpkg.getName()));
+
for (KnowledgeDefinition kd : diff.getRemovedDefinitions()) {
+ this.listener.debug("KnowledgeAgent: Removing: "+kd);
removeKnowledgeDefinitionFromBase(kd);
}
+ //because all the mappings for "resource" were removed, we
+ //need to map again the definitions that didn't change.
+ //Those modified or added will be mapped in addResourcesToKnowledgeBase()
+ for (KnowledgeDefinition knowledgeDefinition : diff.getUnmodifiedDefinitions()) {
+ this.addDefinitionMapping(entry.getKey(), knowledgeDefinition, false);
+ }
+
changeSetState.createdPackages.put(entry.getKey(), diff.getPkg());
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/ResourceDiffResult.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/ResourceDiffResult.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/ResourceDiffResult.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -26,11 +26,23 @@
* @author esteban.aliverti at gmail.com
*/
public class ResourceDiffResult {
- private KnowledgePackage pkg;
- private Set<KnowledgeDefinition> removedDefinitions;
+ private final KnowledgePackage pkg;
- public ResourceDiffResult(KnowledgePackage pkg, Set<KnowledgeDefinition> removedDefinitions) {
+ /**
+ * The definitions present in package's old version but not in the
+ * new one.
+ */
+ private final Set<KnowledgeDefinition> removedDefinitions;
+
+ /**
+ * The definitions that were not modified in the new version of the
+ * package.
+ */
+ private final Set<KnowledgeDefinition> unmodifiedDefinitions;
+
+ public ResourceDiffResult(KnowledgePackage pkg, Set<KnowledgeDefinition> unmodifiedDefinitions, Set<KnowledgeDefinition> removedDefinitions) {
this.pkg = pkg;
+ this.unmodifiedDefinitions = unmodifiedDefinitions;
this.removedDefinitions = removedDefinitions;
}
@@ -38,6 +50,10 @@
return pkg;
}
+ public Set<KnowledgeDefinition> getUnmodifiedDefinitions() {
+ return unmodifiedDefinitions;
+ }
+
public Set<KnowledgeDefinition> getRemovedDefinitions() {
return removedDefinitions;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java 2010-01-06 18:21:27 UTC (rev 30960)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java 2010-01-06 21:16:04 UTC (rev 30961)
@@ -12,6 +12,7 @@
import org.drools.definition.process.Process;
import org.drools.definition.rule.Rule;
import org.drools.definitions.rule.impl.RuleImpl;
+import org.drools.rule.Function;
import org.drools.rule.Package;
public class KnowledgePackageImp
@@ -41,6 +42,48 @@
return list;
}
+ /**
+ * Delegate method to retrieve a Rule by its name.
+ * @param name the rule's name
+ * @return
+ * @see org.drools.rule.Package#getRule(java.lang.String)
+ */
+ public Rule getRule(String name) {
+ return this.pkg.getRule(name);
+ }
+
+ /**
+ * Delegate method to remove a Rule by its name.
+ * @param rule the rule to be removed
+ * @return
+ * @see org.drools.rule.Package#removeRule(org.drools.rule.Rule)
+ */
+ public void removeRule(org.drools.rule.Rule rule) {
+ pkg.removeRule(rule);
+ }
+
+ /**
+ * Delegate method to retrieve a Function by its name.
+ * @param name the function's name
+ * @return
+ * @see org.drools.rule.Package#getFunctions()
+ */
+ public Function getFunction(String name) {
+ return this.pkg.getFunctions().containsKey(name)?this.pkg.getFunctions().get(name):null;
+ }
+
+ /**
+ * Delegate method to retrieve a Rule by its name.
+ * @param functionName the function's name
+ * @return
+ * @see org.drools.rule.Package#removeFunction(java.lang.String)
+ */
+ public void removeFunction(String functionName) {
+ pkg.removeFunction(functionName);
+ }
+
+
+
public Collection<Process> getProcesses() {
Collection<org.drools.definition.process.Process> processes = (Collection<org.drools.definition.process.Process>) pkg.getRuleFlows().values();
List<Process> list = new ArrayList<Process>( processes.size() );
More information about the jboss-svn-commits
mailing list