[jboss-svn-commits] JBL Code SVN: r32680 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 29 12:48:36 EDT 2010
Author: tirelli
Date: 2010-04-29 12:48:35 -0400 (Thu, 29 Apr 2010)
New Revision: 32680
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
Log:
JBRULES-2494: enabling string escapes on rule meta attributes
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2010-04-29 15:54:17 UTC (rev 32679)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2010-04-29 16:48:35 UTC (rev 32680)
@@ -20,11 +20,13 @@
import java.util.Calendar;
import java.util.Date;
import java.util.List;
+import java.util.Map.Entry;
import org.drools.RuntimeDroolsException;
import org.drools.base.EnabledBoolean;
import org.drools.base.SalienceInteger;
import org.drools.core.util.DateUtils;
+import org.drools.core.util.StringUtils;
import org.drools.lang.DroolsSoftKeywords;
import org.drools.lang.descr.AttributeDescr;
import org.drools.lang.descr.QueryDescr;
@@ -65,7 +67,7 @@
context.getRule().setParent( context.getPkg().getRule( ruleDescr.getParentName() ) );
}
// add all the rule's meta attributes
- context.getRule().getMetaAttributes().putAll( ruleDescr.getMetaAttributes() );
+ buildMetaAttributes( context );
final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
if ( builder != null ) {
@@ -101,6 +103,17 @@
}
+ public void buildMetaAttributes(final RuleBuildContext context ) {
+ Rule rule = context.getRule();
+ for( Entry<String, String> meta : context.getRuleDescr().getMetaAttributes().entrySet() ) {
+ String value = meta.getValue().trim();
+ if( value.startsWith( "\"" ) && value.endsWith( "\"" ) && value.length() > 2 ) {
+ value = StringUtils.unescapeJava( value.substring( 1, value.length()-1 ) );
+ }
+ rule.addMetaAttribute( meta.getKey(), value );
+ }
+ }
+
public void buildAttributes(final RuleBuildContext context) {
final Rule rule = context.getRule();
final RuleDescr ruleDescr = context.getRuleDescr();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-04-29 15:54:17 UTC (rev 32679)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-04-29 16:48:35 UTC (rev 32680)
@@ -16,13 +16,14 @@
* limitations under the License.
*/
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.io.IOException;
-import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -98,7 +99,6 @@
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
-import org.drools.builder.conf.ClassLoaderCacheOption;
import org.drools.common.AbstractWorkingMemory;
import org.drools.common.DefaultAgenda;
import org.drools.common.DefaultFactHandle;
@@ -114,6 +114,7 @@
import org.drools.compiler.PackageBuilder.PackageMergeException;
import org.drools.compiler.xml.XmlDumper;
import org.drools.definition.KnowledgePackage;
+import org.drools.definition.rule.Rule;
import org.drools.definition.type.FactType;
import org.drools.event.ActivationCancelledEvent;
import org.drools.event.ActivationCreatedEvent;
@@ -137,7 +138,6 @@
import org.drools.lang.descr.RuleDescr;
import org.drools.marshalling.MarshallerFactory;
import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.ReteooRuleBase;
import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.InvalidRulePackage;
import org.drools.rule.Package;
@@ -149,8 +149,6 @@
import org.drools.spi.GlobalResolver;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
/** Run all the tests with the ReteOO engine implementation */
public class MiscTest extends TestCase {
@@ -344,21 +342,24 @@
// read in the source
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "MVEL_soundex.drl", getClass() ), ResourceType.DRL );
-
+ kbuilder.add( ResourceFactory.newClassPathResource( "MVEL_soundex.drl",
+ getClass() ),
+ ResourceType.DRL );
+
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
kbase = SerializationHelper.serializeObject( kbase );
-
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession,
+ true );
+
Cheese c = new Cheese( "fubar",
2 );
@@ -372,17 +373,20 @@
// read in the source
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_MVELrewrite.drl", getClass() ), ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_MVELrewrite.drl",
+ getClass() ),
+ ResourceType.DRL );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession,
+ true );
List results = new ArrayList();
ksession.setGlobal( "results",
- results );
+ results );
Cheese brie = new Cheese( "brie",
2 );
@@ -1320,15 +1324,17 @@
public void testExplicitAnd() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_ExplicitAnd.drl", getClass() ), ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_ExplicitAnd.drl",
+ getClass() ),
+ ResourceType.DRL );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
final List list = new ArrayList();
ksession.setGlobal( "list",
- list );
+ list );
ksession.insert( new Message( "hola" ) );
ksession.fireAllRules();
@@ -1336,9 +1342,10 @@
list.size() );
ksession.insert( new Cheese( "brie",
- 33 ) );
+ 33 ) );
- ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
+ ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession,
+ true );
ksession.fireAllRules();
assertEquals( 1,
((List) ksession.getGlobal( "list" )).size() );
@@ -1347,16 +1354,18 @@
public void testHelloWorld() throws Exception {
// read in the source
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "HelloWorld.drl", getClass() ), ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "HelloWorld.drl",
+ getClass() ),
+ ResourceType.DRL );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
final List list = new ArrayList();
ksession.setGlobal( "list",
- list );
+ list );
// go !
final Message message = new Message( "hola" );
@@ -1460,9 +1469,9 @@
kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "test_RuleExtend.drl" ) ),
ResourceType.DRL );
- assertFalse( kbuilder.getErrors().toString(),
+ assertFalse( kbuilder.getErrors().toString(),
kbuilder.hasErrors() );
-
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
@@ -1485,17 +1494,16 @@
ksession.fireAllRules();
- assertEquals( 2,
+ assertEquals( 2,
results.size() );
- assertEquals( "stilton",
+ assertEquals( "stilton",
results.get( 0 ) );
- assertEquals( "brie",
+ assertEquals( "brie",
results.get( 1 ) );
} catch ( Exception e ) {
e.printStackTrace();
- if( kbuilder.hasErrors() )
- System.out.println( kbuilder.getErrors() );
- fail("Unexpected exception: "+e.getMessage());
+ if ( kbuilder.hasErrors() ) System.out.println( kbuilder.getErrors() );
+ fail( "Unexpected exception: " + e.getMessage() );
}
}
@@ -1552,16 +1560,16 @@
public void testLiteral() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "literal_rule_test.drl" ) ) );
-
+
if ( builder.hasErrors() ) {
fail( builder.getErrors().toString() );
}
-
+
final Package pkg = builder.getPackage();
RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
-
+
ruleBase = SerializationHelper.serializeObject( ruleBase );
StatefulSession session = ruleBase.newStatefulSession();
@@ -2104,7 +2112,6 @@
}
-
public void testEval() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "eval_rule_test.drl" ) ) );
@@ -2634,8 +2641,8 @@
// workingMemory = SerializationHelper.serializeObject(workingMemory);
workingMemory.fireAllRules();
- List<String> results = (List<String>) workingMemory.getGlobal( "list" );
- System.out.println(results);
+ List<String> results = (List<String>) workingMemory.getGlobal( "list" );
+ System.out.println( results );
assertEquals( 5,
results.size() );
assertTrue( results.contains( "first" ) );
@@ -3196,16 +3203,17 @@
}
}
-
public void testInsurancePricingExample() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "insurance_pricing_example.drl", getClass() ), ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "insurance_pricing_example.drl",
+ getClass() ),
+ ResourceType.DRL );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
// now create some test data
final Driver driver = new Driver();
final Policy policy = new Policy();
@@ -3223,15 +3231,18 @@
// read in the source
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_JoinNodeModifyTuple.drl", getClass() ), ResourceType.DRL );
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_JoinNodeModifyTuple.drl",
+ getClass() ),
+ ResourceType.DRL );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession,
+ true );
+
// 1st time
org.drools.Target tgt = new org.drools.Target();
tgt.setLabel( "Santa-Anna" );
@@ -3317,8 +3328,6 @@
ksession.fireAllRules();
}
-
-
public void testFunctionWithPrimitives() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FunctionWithPrimitives.drl" ) ) );
@@ -4807,7 +4816,7 @@
public String aValue = "";
}
-
+
public void testRuleRemovalWithJoinedRootPattern() {
String str = "";
str += "package org.drools \n";
@@ -4817,14 +4826,13 @@
str += " Person() \n";
str += "then \n";
str += "end \n";
-
+
str += "rule rule2 \n";
str += "when \n";
str += " String() \n";
str += " Cheese() \n";
str += "then \n";
str += "end \n";
-
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
@@ -4840,18 +4848,19 @@
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- DefaultFactHandle handle = ( DefaultFactHandle ) ksession.insert( "hello" );
+ DefaultFactHandle handle = (DefaultFactHandle) ksession.insert( "hello" );
LeftTuple leftTuple = handle.getFirstLeftTuple();
assertNotNull( leftTuple );
assertNotNull( leftTuple.getLeftParentNext() );
-
- kbase.removeRule( "org.drools", "rule2" );
-
+
+ kbase.removeRule( "org.drools",
+ "rule2" );
+
leftTuple = handle.getFirstLeftTuple();
assertNotNull( leftTuple );
- assertNull( leftTuple.getLeftParentNext() );
+ assertNull( leftTuple.getLeftParentNext() );
- }
+ }
// JBRULES-1808
public void testKnowledgeHelperFixerInStrings() {
@@ -6074,7 +6083,7 @@
1,
list.size() );
}
-
+
public void testOrWithAndUsingNestedBindings() {
String str = "";
str += "package org.drools\n";
@@ -6104,57 +6113,70 @@
str += " )\n ";
str += "then\n";
str += " jlist.add( $b );\n";
- str += "end\n";
-
+ str += "end\n";
+
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
-
+
Person a = new Person( "a" );
Person b1 = new Person( "b1" );
Person p2 = new Person( "p2" );
Person b2 = new Person( "b2" );
Person p3 = new Person( "p3" );
Person b3 = new Person( "b3" );
-
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
List mlist = new ArrayList();
List jlist = new ArrayList();
-
+
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession.setGlobal( "mlist", mlist);
- ksession.setGlobal( "jlist", jlist);
+ ksession.setGlobal( "mlist",
+ mlist );
+ ksession.setGlobal( "jlist",
+ jlist );
ksession.insert( a );
- ksession.insert( b1 );
- ksession.fireAllRules();
- assertEquals( b1, mlist.get(0));
- assertEquals( b1, jlist.get(0));
-
+ ksession.insert( b1 );
+ ksession.fireAllRules();
+ assertEquals( b1,
+ mlist.get( 0 ) );
+ assertEquals( b1,
+ jlist.get( 0 ) );
+
ksession = kbase.newStatefulKnowledgeSession();
- ksession.setGlobal( "mlist", mlist);
- ksession.setGlobal( "jlist", jlist);
+ ksession.setGlobal( "mlist",
+ mlist );
+ ksession.setGlobal( "jlist",
+ jlist );
ksession.insert( a );
ksession.insert( b2 );
ksession.insert( p2 );
- ksession.fireAllRules();
- assertEquals( b2, mlist.get(1));
- assertEquals( b2, jlist.get(1));
-
+ ksession.fireAllRules();
+ assertEquals( b2,
+ mlist.get( 1 ) );
+ assertEquals( b2,
+ jlist.get( 1 ) );
+
ksession = kbase.newStatefulKnowledgeSession();
- ksession.setGlobal( "mlist", mlist);
- ksession.setGlobal( "jlist", jlist);
+ ksession.setGlobal( "mlist",
+ mlist );
+ ksession.setGlobal( "jlist",
+ jlist );
ksession.insert( a );
ksession.insert( b3 );
ksession.insert( p3 );
- ksession.fireAllRules();
- assertEquals( b3, mlist.get(2));
- assertEquals( b3, jlist.get(2));
-
+ ksession.fireAllRules();
+ assertEquals( b3,
+ mlist.get( 2 ) );
+ assertEquals( b3,
+ jlist.get( 2 ) );
+
}
public void testDeepNestedConstraints() throws Exception {
@@ -6678,49 +6700,52 @@
rule1 += "end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( rule1.getBytes() ), ResourceType.DRL );
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( rule1.getBytes() ),
+ ResourceType.DRL );
+
if ( kbuilder.hasErrors() ) {
System.out.println( kbuilder.getErrors() );
throw new RuntimeException( kbuilder.getErrors().toString() );
}
-
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-
+
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
final WorkingMemoryEntryPoint ep = ksession.getWorkingMemoryEntryPoint( "testep" );
-
+
List list = new ArrayList();
- ksession.setGlobal( "list", list );
-
- ksession.insert( new Cheese("cheddar") );
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.insert( new Cheese( "cheddar" ) );
ksession.fireAllRules();
-
+
Runnable fireUntilHalt = new Runnable() {
public void run() {
ksession.fireUntilHalt();
}
};
-
+
Thread t1 = new Thread( fireUntilHalt );
t1.start();
-
+
Thread.currentThread().sleep( 500 );
- ep.insert( new Person("darth") );
+ ep.insert( new Person( "darth" ) );
Thread.currentThread().sleep( 500 );
ksession.halt();
t1.stop();
- assertEquals( 1, list.size() );
- }
-
+ assertEquals( 1,
+ list.size() );
+ }
+
public void testNetworkBuildErrorAcrossEntryPointsAndFroms() throws Exception {
String rule1 = "package org.drools\n";
rule1 += "global java.util.List list\n";
rule1 += "rule rule1\n";
rule1 += "when\n";
- rule1 += " Cheese() from entry-point \"testep\"\n";
+ rule1 += " Cheese() from entry-point \"testep\"\n";
rule1 += " $p : Person() from list\n";
rule1 += "then \n";
rule1 += " list.add( \"rule1\" ) ;\n";
@@ -6731,33 +6756,35 @@
rule1 += " $p : Person() \n";
rule1 += "then \n";
rule1 += " list.add( \"rule2\" ) ;\n";
- rule1 += "end\n";
+ rule1 += "end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( rule1.getBytes() ), ResourceType.DRL );
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( rule1.getBytes() ),
+ ResourceType.DRL );
+
if ( kbuilder.hasErrors() ) {
System.out.println( kbuilder.getErrors() );
throw new RuntimeException( kbuilder.getErrors().toString() );
}
-
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-
+
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
final WorkingMemoryEntryPoint ep = ksession.getWorkingMemoryEntryPoint( "testep" );
-
+
List list = new ArrayList();
- ksession.setGlobal( "list", list );
-
- list.add( new Person( "darth") );
- ep.insert( new Cheese("cheddar") );
+ ksession.setGlobal( "list",
+ list );
-
+ list.add( new Person( "darth" ) );
+ ep.insert( new Cheese( "cheddar" ) );
+
ksession.fireAllRules();
- assertEquals( 3, list.size() );
- }
+ assertEquals( 3,
+ list.size() );
+ }
public void testJBRules2140() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -6866,9 +6893,10 @@
// since it is no longer listening.
ksession.insert( new Cheese( "brie" ) );
- verify( wmeListener, times(2) ).objectInserted( any( org.drools.event.rule.ObjectInsertedEvent.class ) );
+ verify( wmeListener,
+ times( 2 ) ).objectInserted( any( org.drools.event.rule.ObjectInsertedEvent.class ) );
}
-
+
public void testInsert() throws Exception {
String drl = "";
drl += "package test\n";
@@ -6903,11 +6931,11 @@
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession.insert( new Person("Toni") );
+ ksession.insert( new Person( "Toni" ) );
// XXX: Fails here, this worked in revision 30833
- ksession.insert( new Pet("Toni") );
+ ksession.insert( new Pet( "Toni" ) );
}
-
+
public void testClassLoaderHits() throws Exception {
final KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
//conf.setOption( ClassLoaderCacheOption.DISABLED );
@@ -6922,9 +6950,9 @@
kbuilder.hasErrors() );
//((CompositeClassLoader)((PackageBuilderConfiguration)conf).getClassLoader()).dumpStats();
-
+
}
-
+
public void testMVELConsequenceWithoutSemiColon1() throws Exception {
String drl = "";
drl += "package test\n";
@@ -6957,24 +6985,66 @@
// create working memory mock listener
org.drools.event.rule.WorkingMemoryEventListener wml = Mockito.mock( org.drools.event.rule.WorkingMemoryEventListener.class );
-
+
ksession.addEventListener( wml );
- org.drools.runtime.rule.FactHandle personFH = ksession.insert( new Person("Toni") );
- org.drools.runtime.rule.FactHandle petFH = ksession.insert( new Pet("Toni") );
-
+ org.drools.runtime.rule.FactHandle personFH = ksession.insert( new Person( "Toni" ) );
+ org.drools.runtime.rule.FactHandle petFH = ksession.insert( new Pet( "Toni" ) );
+
int fired = ksession.fireAllRules();
- assertEquals( 1, fired );
+ assertEquals( 1,
+ fired );
// capture the arguments and check that the retracts happened
- ArgumentCaptor<org.drools.event.rule.ObjectRetractedEvent> retracts = ArgumentCaptor.forClass(org.drools.event.rule.ObjectRetractedEvent.class);
- verify( wml, times(2) ).objectRetracted( retracts.capture() );
+ ArgumentCaptor<org.drools.event.rule.ObjectRetractedEvent> retracts = ArgumentCaptor.forClass( org.drools.event.rule.ObjectRetractedEvent.class );
+ verify( wml,
+ times( 2 ) ).objectRetracted( retracts.capture() );
List<org.drools.event.rule.ObjectRetractedEvent> values = retracts.getAllValues();
- assertThat( values.get( 0 ).getFactHandle(), is( personFH ) );
- assertThat( values.get( 1 ).getFactHandle(), is( petFH ) );
-
+ assertThat( values.get( 0 ).getFactHandle(),
+ is( personFH ) );
+ assertThat( values.get( 1 ).getFactHandle(),
+ is( petFH ) );
+
}
-
+
+ public void testRuleMetaAttributes() throws Exception {
+ String drl = "";
+ drl += "package test\n";
+ drl += "rule \"test meta attributes\"\n";
+ drl += " @id(1234 ) @author( john doe ) @text(\"It's an escaped\\\" string\" )\n";
+ drl += "when\n";
+ drl += "then\n";
+ drl += " // some comment\n";
+ drl += "end\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl ) ),
+ ResourceType.DRL );
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.err.println( error );
+ }
+ throw new IllegalArgumentException( "Could not parse knowledge." );
+ }
+ assertFalse( kbuilder.hasErrors() );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ Rule rule = kbase.getRule( "test",
+ "test meta attributes" );
+
+ assertNotNull( rule );
+ assertThat( rule.getMetaAttribute( "id" ),
+ is( "1234" ));
+ assertThat( rule.getMetaAttribute( "author" ),
+ is( "john doe" ));
+ assertThat( rule.getMetaAttribute( "text" ),
+ is( "It's an escaped\" string" ));
+
+ }
+
// following test depends on MVEL: http://jira.codehaus.org/browse/MVEL-212
public void FIXME_testMVELConsequenceUsingFactConstructors() throws Exception {
String drl = "";
@@ -7001,12 +7071,14 @@
}
assertTrue( kbuilder.hasErrors() );
}
-
+
public void testModifyWithRuleflowAndSubNetwork() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_ModifyWithRuleflowAndSubNetwork.drl", getClass() ),
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_ModifyWithRuleflowAndSubNetwork.drl",
+ getClass() ),
ResourceType.DRL );
- kbuilder.add( ResourceFactory.newClassPathResource( "test_modifyWithRuleflowAndSubnetwork.rf", getClass() ),
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_modifyWithRuleflowAndSubnetwork.rf",
+ getClass() ),
ResourceType.DRF );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if ( errors.size() > 0 ) {
@@ -7024,36 +7096,40 @@
// create working memory mock listener
org.drools.event.rule.WorkingMemoryEventListener wml = Mockito.mock( org.drools.event.rule.WorkingMemoryEventListener.class );
org.drools.event.rule.AgendaEventListener ael = Mockito.mock( org.drools.event.rule.AgendaEventListener.class );
-
+
ksession.addEventListener( wml );
ksession.addEventListener( ael );
- Order order = new Order( 1, "bob" );
- OrderItem item = new OrderItem( order, 1 );
+ Order order = new Order( 1,
+ "bob" );
+ OrderItem item = new OrderItem( order,
+ 1 );
order.addItem( item );
order.setStatus( new OrderStatus() );
order.getStatus().setActive( true );
org.drools.runtime.rule.FactHandle orderFH = ksession.insert( order );
-
- Order order2 = new Order( 2, "bob" );
- OrderItem item2 = new OrderItem( order, 2 );
+
+ Order order2 = new Order( 2,
+ "bob" );
+ OrderItem item2 = new OrderItem( order,
+ 2 );
order2.addItem( item2 );
order2.setStatus( new OrderStatus() );
order2.getStatus().setActive( true );
org.drools.runtime.rule.FactHandle order2FH = ksession.insert( order2 );
ksession.startProcess( "ruleflow" );
-
+
int fired = ksession.fireAllRules();
- assertEquals( 4, fired );
+ assertEquals( 4,
+ fired );
// capture the arguments and check that the retracts happened
-// ArgumentCaptor<org.drools.event.rule.ObjectRetractedEvent> retracts = ArgumentCaptor.forClass(org.drools.event.rule.ObjectRetractedEvent.class);
-// verify( wml, times(2) ).objectRetracted( retracts.capture() );
-// List<org.drools.event.rule.ObjectRetractedEvent> values = retracts.getAllValues();
-// assertThat( values.get( 0 ).getFactHandle(), is( personFH ) );
-// assertThat( values.get( 1 ).getFactHandle(), is( petFH ) );
+ // ArgumentCaptor<org.drools.event.rule.ObjectRetractedEvent> retracts = ArgumentCaptor.forClass(org.drools.event.rule.ObjectRetractedEvent.class);
+ // verify( wml, times(2) ).objectRetracted( retracts.capture() );
+ // List<org.drools.event.rule.ObjectRetractedEvent> values = retracts.getAllValues();
+ // assertThat( values.get( 0 ).getFactHandle(), is( personFH ) );
+ // assertThat( values.get( 1 ).getFactHandle(), is( petFH ) );
}
-
-
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java 2010-04-29 15:54:17 UTC (rev 32679)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java 2010-04-29 16:48:35 UTC (rev 32680)
@@ -171,7 +171,7 @@
ruleDescr.addAttribute( new AttributeDescr( "duration",
"60" ) );
ruleDescr.addAttribute( new AttributeDescr( "calendars",
- "\"cal1\"" ) );
+ "\"cal1\"" ) );
ruleDescr.addAttribute( new AttributeDescr( "date-effective",
"10-Jul-1974" ) );
ruleDescr.addAttribute( new AttributeDescr( "date-expires",
@@ -186,28 +186,65 @@
new DateFormatsImpl() ) );
// defining expectations on the mock object
- when( context.getRule() ).thenReturn(rule);
- when( context.getRuleDescr() ).thenReturn(ruleDescr);
- when( context.getPackageBuilder() ).thenReturn(new PackageBuilder());
-
+ when( context.getRule() ).thenReturn( rule );
+ when( context.getRuleDescr() ).thenReturn( ruleDescr );
+ when( context.getPackageBuilder() ).thenReturn( new PackageBuilder() );
+
// calling the build method
RuleBuilder builder = new RuleBuilder();
builder.buildAttributes( context );
// check expectations
- verify( rule ).setNoLoop(true);
- verify( rule ).setAutoFocus(false);
- verify( rule ).setAgendaGroup("my agenda");
+ verify( rule ).setNoLoop( true );
+ verify( rule ).setAutoFocus( false );
+ verify( rule ).setAgendaGroup( "my agenda" );
verify( rule ).setActivationGroup( "my activation" );
verify( rule ).setRuleFlowGroup( "mygroup" );
verify( rule ).setLockOnActive( true );
verify( rule ).setEnabled( EnabledBoolean.ENABLED_FALSE );
- verify( rule ).setTimer( new IntervalTimer( null , null, -1, TimeUtils.parseTimeString( "60" ), 0 ) );
- verify( rule ).setCalendars( new String[] { "cal1" } );
+ verify( rule ).setTimer( new IntervalTimer( null,
+ null,
+ -1,
+ TimeUtils.parseTimeString( "60" ),
+ 0 ) );
+ verify( rule ).setCalendars( new String[]{"cal1"} );
verify( rule ).setDateEffective( effective );
verify( rule ).setDateExpires( expires );
}
+ public void testBuildMetaAttributes() throws Exception {
+ // creates mock objects
+ final RuleBuildContext context = mock( RuleBuildContext.class );
+ final Rule rule = mock( Rule.class );
+
+ // creates input object
+ final RuleDescr ruleDescr = new RuleDescr( "my rule" );
+ ruleDescr.addMetaAttribute( "ruleId",
+ "123" );
+ ruleDescr.addMetaAttribute( "author",
+ "Bob Doe" );
+ ruleDescr.addMetaAttribute( "text",
+ "\"It's a quoted\\\" string\"" );
+
+ // creates expected results
+ // defining expectations on the mock object
+ when( context.getRule() ).thenReturn( rule );
+ when( context.getRuleDescr() ).thenReturn( ruleDescr );
+ when( context.getPackageBuilder() ).thenReturn( new PackageBuilder() );
+
+ // calling the build method
+ RuleBuilder builder = new RuleBuilder();
+ builder.buildMetaAttributes( context );
+
+ // check expectations
+ verify( rule ).addMetaAttribute( "ruleId",
+ "123" );
+ verify( rule ).addMetaAttribute( "author",
+ "Bob Doe" );
+ verify( rule ).addMetaAttribute( "text",
+ "It's a quoted\" string" );
+ }
+
public void testBuildDurationExpression() throws Exception {
// creates mock objects
final RuleBuildContext context = mock( RuleBuildContext.class );
@@ -218,74 +255,83 @@
ruleDescr.addAttribute( new AttributeDescr( "duration",
"( 1h30m )" ) );
ruleDescr.addAttribute( new AttributeDescr( "calendars",
- "[\"cal1\", \"cal2\"]" ) );
-
+ "[\"cal1\", \"cal2\"]" ) );
+
// defining expectations on the mock object
- when( context.getRule() ).thenReturn(rule);
- when( context.getRuleDescr() ).thenReturn(ruleDescr);
+ when( context.getRule() ).thenReturn( rule );
+ when( context.getRuleDescr() ).thenReturn( ruleDescr );
// calling the build method
RuleBuilder builder = new RuleBuilder();
builder.buildAttributes( context );
// check expectations
- verify( rule ).setTimer( new IntervalTimer( null , null, -1, TimeUtils.parseTimeString( "1h30m" ), 0 ) );
- verify( rule ).setCalendars( new String[] { "cal1", "cal2" } );
+ verify( rule ).setTimer( new IntervalTimer( null,
+ null,
+ -1,
+ TimeUtils.parseTimeString( "1h30m" ),
+ 0 ) );
+ verify( rule ).setCalendars( new String[]{"cal1", "cal2"} );
}
-
+
public void testBuildBigDecimalLiteralConstraint() throws Exception {
- final PackageDescr pkgDescr = new PackageDescr("org.drools");
- final RuleDescr ruleDescr = new RuleDescr("Test Rule");
+ final PackageDescr pkgDescr = new PackageDescr( "org.drools" );
+ final RuleDescr ruleDescr = new RuleDescr( "Test Rule" );
AndDescr andDescr = new AndDescr();
- PatternDescr patDescr = new PatternDescr("java.math.BigDecimal", "$bd");
- FieldConstraintDescr fcd = new FieldConstraintDescr("this");
- LiteralRestrictionDescr restr = new LiteralRestrictionDescr("==", "10");
+ PatternDescr patDescr = new PatternDescr( "java.math.BigDecimal",
+ "$bd" );
+ FieldConstraintDescr fcd = new FieldConstraintDescr( "this" );
+ LiteralRestrictionDescr restr = new LiteralRestrictionDescr( "==",
+ "10" );
fcd.addRestriction( restr );
patDescr.addConstraint( fcd );
andDescr.addDescr( patDescr );
ruleDescr.setLhs( andDescr );
ruleDescr.setConsequence( "" );
pkgDescr.addRule( ruleDescr );
-
+
final PackageBuilder pkgBuilder = new PackageBuilder();
pkgBuilder.addPackage( pkgDescr );
Assert.assertTrue( pkgBuilder.getErrors().toString(),
pkgBuilder.getErrors().isEmpty() );
- final Rule rule = pkgBuilder.getPackages()[0].getRule("Test Rule");
+ final Rule rule = pkgBuilder.getPackages()[0].getRule( "Test Rule" );
final GroupElement and = rule.getLhs();
final Pattern pat = (Pattern) and.getChildren().get( 0 );
final LiteralConstraint fc = (LiteralConstraint) pat.getConstraints().get( 0 );
- assertTrue("Wrong class. Expected java.math.BigDecimal. Found: " + fc.getField().getValue().getClass(), fc.getField().getValue() instanceof BigDecimal );
+ assertTrue( "Wrong class. Expected java.math.BigDecimal. Found: " + fc.getField().getValue().getClass(),
+ fc.getField().getValue() instanceof BigDecimal );
}
public void testBuildBigIntegerLiteralConstraint() throws Exception {
- final PackageDescr pkgDescr = new PackageDescr("org.drools");
- final RuleDescr ruleDescr = new RuleDescr("Test Rule");
+ final PackageDescr pkgDescr = new PackageDescr( "org.drools" );
+ final RuleDescr ruleDescr = new RuleDescr( "Test Rule" );
AndDescr andDescr = new AndDescr();
- PatternDescr patDescr = new PatternDescr("java.math.BigInteger", "$bd");
- FieldConstraintDescr fcd = new FieldConstraintDescr("this");
- LiteralRestrictionDescr restr = new LiteralRestrictionDescr("==", "10");
+ PatternDescr patDescr = new PatternDescr( "java.math.BigInteger",
+ "$bd" );
+ FieldConstraintDescr fcd = new FieldConstraintDescr( "this" );
+ LiteralRestrictionDescr restr = new LiteralRestrictionDescr( "==",
+ "10" );
fcd.addRestriction( restr );
patDescr.addConstraint( fcd );
andDescr.addDescr( patDescr );
ruleDescr.setLhs( andDescr );
ruleDescr.setConsequence( "" );
pkgDescr.addRule( ruleDescr );
-
+
final PackageBuilder pkgBuilder = new PackageBuilder();
pkgBuilder.addPackage( pkgDescr );
Assert.assertTrue( pkgBuilder.getErrors().toString(),
pkgBuilder.getErrors().isEmpty() );
- final Rule rule = pkgBuilder.getPackages()[0].getRule("Test Rule");
+ final Rule rule = pkgBuilder.getPackages()[0].getRule( "Test Rule" );
final GroupElement and = rule.getLhs();
final Pattern pat = (Pattern) and.getChildren().get( 0 );
final LiteralConstraint fc = (LiteralConstraint) pat.getConstraints().get( 0 );
- assertTrue("Wrong class. Expected java.math.BigInteger. Found: " + fc.getField().getValue().getClass(), fc.getField().getValue() instanceof BigInteger );
+ assertTrue( "Wrong class. Expected java.math.BigInteger. Found: " + fc.getField().getValue().getClass(),
+ fc.getField().getValue() instanceof BigInteger );
}
-
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2010-04-29 15:54:17 UTC (rev 32679)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2010-04-29 16:48:35 UTC (rev 32680)
@@ -33,7 +33,6 @@
import org.drools.spi.AgendaGroup;
import org.drools.spi.CompiledInvoker;
import org.drools.spi.Consequence;
-import org.drools.spi.Duration;
import org.drools.spi.Enabled;
import org.drools.spi.Salience;
import org.drools.spi.Tuple;
@@ -61,128 +60,129 @@
/**
*
*/
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
/** */
// ------------------------------------------------------------
// Instance members
// ------------------------------------------------------------
/** The parent pkg */
- private String pkg;
+ private String pkg;
/** Name of the rule. */
- private String name;
-
+ private String name;
+
/** Parent Rule Name, optional */
- private Rule parent;
+ private Rule parent;
/** Salience value. */
- private Salience salience;
+ private Salience salience;
/** The Rule is dirty after patterns have been added */
- private boolean dirty;
- private Map declarations;
- private Declaration[] declarationArray;
+ private boolean dirty;
+ private Map declarations;
+ private Declaration[] declarationArray;
- private GroupElement lhsRoot;
+ private GroupElement lhsRoot;
- private String dialect;
+ private String dialect;
- private String agendaGroup;
-
- private Map<String,String> metaAttributes;
+ private String agendaGroup;
+ private Map<String, String> metaAttributes;
+
/** Consequence. */
- private Consequence consequence;
-
+ private Consequence consequence;
+
private Map<String, Consequence> namedConsequence;
-
+
/** Timer semantics that controls the firing of a rule */
- private Timer timer;
+ private Timer timer;
/** Load order in Package */
- private long loadOrder;
+ private long loadOrder;
/** Is recursion of this rule allowed */
- private boolean noLoop;
+ private boolean noLoop;
/** makes the rule's much the current focus */
- private boolean autoFocus;
+ private boolean autoFocus;
- private String activationGroup;
+ private String activationGroup;
- private String ruleFlowGroup;
+ private String ruleFlowGroup;
- private boolean lockOnActive;
+ private boolean lockOnActive;
- private boolean hasLogicalDependency;
+ private boolean hasLogicalDependency;
/** indicates that the rule is semantically correct. */
- private boolean semanticallyValid;
-
- private String[] calendars;
+ private boolean semanticallyValid;
- private Calendar dateEffective;
+ private String[] calendars;
- private Calendar dateExpires;
+ private Calendar dateEffective;
- private Enabled enabled;
-
- private Resource resource;
+ private Calendar dateExpires;
+ private Enabled enabled;
+
+ private Resource resource;
+
public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(pkg);
- out.writeObject(name);
- out.writeObject(parent);
- out.writeObject(salience);
- out.writeBoolean(dirty);
- out.writeObject(declarations);
- out.writeObject(declarationArray);
- out.writeObject(lhsRoot);
- out.writeObject(dialect);
- out.writeObject(agendaGroup);
- out.writeObject(metaAttributes);
+ out.writeObject( pkg );
+ out.writeObject( name );
+ out.writeObject( parent );
+ out.writeObject( salience );
+ out.writeBoolean( dirty );
+ out.writeObject( declarations );
+ out.writeObject( declarationArray );
+ out.writeObject( lhsRoot );
+ out.writeObject( dialect );
+ out.writeObject( agendaGroup );
+ out.writeObject( metaAttributes );
if ( this.consequence instanceof CompiledInvoker ) {
out.writeObject( null );
out.writeObject( null );
} else {
- out.writeObject(this.consequence);
+ out.writeObject( this.consequence );
out.writeObject( this.namedConsequence );
- }
- out.writeObject(timer);
- out.writeLong(loadOrder);
- out.writeBoolean(noLoop);
- out.writeBoolean(autoFocus);
- out.writeObject(activationGroup);
- out.writeObject(ruleFlowGroup);
- out.writeBoolean(lockOnActive);
- out.writeBoolean(hasLogicalDependency);
- out.writeBoolean(semanticallyValid);
- out.writeObject(dateEffective);
- out.writeObject(dateExpires);
- out.writeObject(enabled);
+ }
+ out.writeObject( timer );
+ out.writeLong( loadOrder );
+ out.writeBoolean( noLoop );
+ out.writeBoolean( autoFocus );
+ out.writeObject( activationGroup );
+ out.writeObject( ruleFlowGroup );
+ out.writeBoolean( lockOnActive );
+ out.writeBoolean( hasLogicalDependency );
+ out.writeBoolean( semanticallyValid );
+ out.writeObject( dateEffective );
+ out.writeObject( dateExpires );
+ out.writeObject( enabled );
out.writeObject( resource );
}
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- pkg = (String)in.readObject();
- name = (String)in.readObject();
- parent = (Rule)in.readObject();
- salience = (Salience)in.readObject();
-
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ pkg = (String) in.readObject();
+ name = (String) in.readObject();
+ parent = (Rule) in.readObject();
+ salience = (Salience) in.readObject();
+
dirty = in.readBoolean();
- declarations = (Map)in.readObject();
- declarationArray = (Declaration[])in.readObject();
- lhsRoot = (GroupElement)in.readObject();
- dialect = (String)in.readObject();
- agendaGroup = (String)in.readObject();
- metaAttributes = (Map<String,String>)in.readObject();
-
- consequence = (Consequence)in.readObject();
+ declarations = (Map) in.readObject();
+ declarationArray = (Declaration[]) in.readObject();
+ lhsRoot = (GroupElement) in.readObject();
+ dialect = (String) in.readObject();
+ agendaGroup = (String) in.readObject();
+ metaAttributes = (Map<String, String>) in.readObject();
+
+ consequence = (Consequence) in.readObject();
namedConsequence = (Map<String, Consequence>) in.readObject();
- timer = (Timer)in.readObject();
- loadOrder = in.readLong();
+ timer = (Timer) in.readObject();
+ loadOrder = in.readLong();
noLoop = in.readBoolean();
autoFocus = in.readBoolean();
activationGroup = (String) in.readObject();
@@ -193,7 +193,7 @@
dateEffective = (Calendar) in.readObject();
dateExpires = (Calendar) in.readObject();
enabled = (Enabled) in.readObject();
- resource = ( Resource ) in.readObject();
+ resource = (Resource) in.readObject();
}
// ------------------------------------------------------------
@@ -220,8 +220,8 @@
this.semanticallyValid = true;
this.enabled = EnabledBoolean.ENABLED_TRUE;
this.salience = SalienceInteger.DEFAULT_SALIENCE;
- this.metaAttributes = new HashMap<String,String>();
-
+ this.metaAttributes = new HashMap<String, String>();
+
}
/**
@@ -243,8 +243,6 @@
null,
AgendaGroup.MAIN );
}
-
-
public Resource getResource() {
return resource;
@@ -313,7 +311,7 @@
public void setPackage(String pkg) {
this.pkg = pkg;
}
-
+
public String getPackageName() {
return this.pkg;
}
@@ -366,8 +364,12 @@
*
* This uses the dateEffective, dateExpires and enabled flag to decide this.
*/
- public boolean isEffective(TimeMachine tm, Tuple tuple, WorkingMemory workingMemory) {
- if ( !this.enabled.getValue( tuple, this, workingMemory ) ) {
+ public boolean isEffective(TimeMachine tm,
+ Tuple tuple,
+ WorkingMemory workingMemory) {
+ if ( !this.enabled.getValue( tuple,
+ this,
+ workingMemory ) ) {
return false;
}
if ( this.dateEffective == null && this.dateExpires == null ) {
@@ -425,7 +427,8 @@
*/
public Declaration getDeclaration(final String identifier) {
if ( this.dirty || (this.declarations == null) ) {
- this.declarations = this.getExtendedLhs(this, null).getOuterDeclarations();
+ this.declarations = this.getExtendedLhs( this,
+ null ).getOuterDeclarations();
this.declarationArray = (Declaration[]) this.declarations.values().toArray( new Declaration[this.declarations.values().size()] );
this.dirty = false;
}
@@ -462,7 +465,8 @@
*/
public Declaration[] getDeclarations() {
if ( this.dirty || (this.declarationArray == null) ) {
- this.declarations = this.getExtendedLhs(this, null).getOuterDeclarations();
+ this.declarations = this.getExtendedLhs( this,
+ null ).getOuterDeclarations();
this.declarationArray = (Declaration[]) this.declarations.values().toArray( new Declaration[this.declarations.values().size()] );
this.dirty = false;
}
@@ -496,23 +500,27 @@
this.dirty = true;
this.lhsRoot = lhsRoot;
}
- private GroupElement getExtendedLhs(Rule rule, GroupElement fromChild){
- //combine rules LHS with Parent "Extends"
- final GroupElement lhs = (GroupElement) rule.lhsRoot.clone();
- //use the children passed from prior child rules, and combine with current LHS (at the end)
- if(null != fromChild){
- //Have GroupElement from a child rule, so combine it
- lhs.getChildren().addAll(fromChild.getChildren());
- }
- //move recursively up the tree
- if(rule.parent != null){
- return getExtendedLhs(rule.parent, lhs);
- }
- //at the top of the tree, return combined LHS
- //TODO Merge LHS for performace
-
- return lhs;
+
+ private GroupElement getExtendedLhs(Rule rule,
+ GroupElement fromChild) {
+ //combine rules LHS with Parent "Extends"
+ final GroupElement lhs = (GroupElement) rule.lhsRoot.clone();
+ //use the children passed from prior child rules, and combine with current LHS (at the end)
+ if ( null != fromChild ) {
+ //Have GroupElement from a child rule, so combine it
+ lhs.getChildren().addAll( fromChild.getChildren() );
+ }
+ //move recursively up the tree
+ if ( rule.parent != null ) {
+ return getExtendedLhs( rule.parent,
+ lhs );
+ }
+ //at the top of the tree, return combined LHS
+ //TODO Merge LHS for performace
+
+ return lhs;
}
+
/**
* Uses the LogicTransformer to process the Rule patters - if no ORs are
* used this will return an array of a single AND element. If there are Ors
@@ -524,8 +532,9 @@
* @throws InvalidPatternException
*/
public GroupElement[] getTransformedLhs() throws InvalidPatternException {
- //Moved to getExtendedLhs --final GroupElement cloned = (GroupElement) this.lhsRoot.clone();
- return LogicTransformer.getInstance().transform( getExtendedLhs(this, null) );
+ //Moved to getExtendedLhs --final GroupElement cloned = (GroupElement) this.lhsRoot.clone();
+ return LogicTransformer.getInstance().transform( getExtendedLhs( this,
+ null ) );
}
public int getSpecifity() {
@@ -559,16 +568,17 @@
public void wire(Object object) {
if ( object instanceof Salience ) {
setSalience( (Salience) object );
- } else if( object instanceof Enabled ) {
- setEnabled(( Enabled) object);
+ } else if ( object instanceof Enabled ) {
+ setEnabled( (Enabled) object );
} else {
Consequence c = (Consequence) object;
if ( "default".equals( c.getName() ) ) {
- setConsequence( c );
+ setConsequence( c );
} else {
- getNamedConsequences().put( c.getName(), c );
+ getNamedConsequences().put( c.getName(),
+ c );
}
-
+
}
}
@@ -593,12 +603,12 @@
public Consequence getConsequence() {
return this.consequence;
}
-
+
public Map<String, Consequence> getNamedConsequences() {
if ( this.namedConsequence == null ) {
this.namedConsequence = new HashMap<String, Consequence>();
}
-
+
return this.namedConsequence;
}
@@ -688,27 +698,41 @@
this.enabled = b;
}
- public boolean isEnabled( Tuple tuple, WorkingMemory workingMemory ) {
- return this.enabled.getValue( tuple, this, workingMemory );
+ public boolean isEnabled(Tuple tuple,
+ WorkingMemory workingMemory) {
+ return this.enabled.getValue( tuple,
+ this,
+ workingMemory );
}
- public void setMetaAttributes(Map<String,String> metaAttributes) {
- this.metaAttributes = metaAttributes;
- }
- public Map<String,String> getMetaAttributes() {
- return metaAttributes;
- }
+
+ public void setMetaAttributes(Map<String, String> metaAttributes) {
+ this.metaAttributes = metaAttributes;
+ }
+
+ public void addMetaAttribute(String key,
+ String value) {
+ this.metaAttributes.put( key,
+ value );
+ }
+
+ public Map<String, String> getMetaAttributes() {
+ return metaAttributes;
+ }
+
public String getMetaAttribute(final String identifier) {
return (String) this.metaAttributes.get( identifier );
}
-
+
public Collection<String> listMetaAttributes() {
return this.metaAttributes.keySet();
}
-
- public void setParent(Rule parent) {
- this.parent = parent;
- }
- public Rule getParent() {
- return parent;
- }
+
+ public void setParent(Rule parent) {
+ this.parent = parent;
+ }
+
+ public Rule getParent() {
+ return parent;
+ }
+
}
More information about the jboss-svn-commits
mailing list