[jboss-svn-commits] JBL Code SVN: r35660 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/rule/builder and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Oct 21 22:29:21 EDT 2010
Author: tsurdilovic
Date: 2010-10-21 22:29:21 -0400 (Thu, 21 Oct 2010)
New Revision: 35660
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Bin.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/BinTask.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEscapesMvelTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapes.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapesoff.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/MVELDumperTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EvalRewriteMatches.drl
Log:
JBRULES-2745 - Problems in the use of escapes in the "matches" operator
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java 2010-10-22 01:59:43 UTC (rev 35659)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/MVELDumper.java 2010-10-22 02:29:21 UTC (rev 35660)
@@ -19,7 +19,9 @@
import java.util.Iterator;
import org.drools.base.evaluators.Operator;
+import org.drools.builder.conf.ProcessStringEscapesOption;
import org.drools.core.util.ReflectiveVisitor;
+import org.drools.core.util.StringUtils;
import org.drools.lang.descr.FieldBindingDescr;
import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.LiteralRestrictionDescr;
@@ -28,6 +30,7 @@
import org.drools.lang.descr.RestrictionConnectiveDescr;
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.rule.builder.RuleBuildContext;
/**
*
@@ -41,6 +44,15 @@
private static final String eol = System.getProperty( "line.separator" );
private String template;
private String fieldName;
+ private RuleBuildContext context;
+
+ public MVELDumper(RuleBuildContext context) {
+ this.context = context;
+ }
+
+ public MVELDumper() {
+
+ }
public String dump(FieldConstraintDescr fieldConstr) {
return this.dump( fieldConstr, false );
@@ -146,17 +158,33 @@
evaluator( evaluator ) + " " +
value + evaluatorSufix( evaluator );
} else if(op == Operator.determineOperator( "matches", false )) {
- evaluator = "~=";
- return evaluatorPrefix( evaluator ) +
- this.fieldName + " " +
- evaluator( evaluator ) + " " +
- value.replaceAll( "\\\\", "\\\\\\\\" ) + evaluatorSufix( evaluator );
+ evaluator = "~=";
+ if(context != null && !context.getConfiguration().isProcessStringEscapes()) {
+ return evaluatorPrefix( evaluator ) +
+ this.fieldName + " " +
+ evaluator( evaluator ) + " " +
+ value.replaceAll( "\\\\", "\\\\\\\\" ) + evaluatorSufix( evaluator );
+ } else {
+ return evaluatorPrefix( evaluator ) +
+ this.fieldName + " " +
+ evaluator( evaluator ) + " " +
+ value +
+ evaluatorSufix( evaluator );
+ }
} else if(op == Operator.determineOperator( "matches", true )) {
evaluator = "not ~=";
- return evaluatorPrefix( evaluator ) +
- this.fieldName + " " +
- evaluator( evaluator ) + " " +
- value.replaceAll( "\\\\", "\\\\\\\\" ) + evaluatorSufix( evaluator );
+ if(context != null && !context.getConfiguration().isProcessStringEscapes()) {
+ return evaluatorPrefix( evaluator ) +
+ this.fieldName + " " +
+ evaluator( evaluator ) + " " +
+ value.replaceAll( "\\\\", "\\\\\\\\" ) + evaluatorSufix( evaluator );
+ } else {
+ return evaluatorPrefix( evaluator ) +
+ this.fieldName + " " +
+ evaluator( evaluator ) + " " +
+ value +
+ evaluatorSufix( evaluator );
+ }
}
return evaluatorPrefix( evaluator ) +
this.fieldName + " " +
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2010-10-22 01:59:43 UTC (rev 35659)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2010-10-22 02:29:21 UTC (rev 35660)
@@ -475,7 +475,7 @@
fieldConstraintDescr );
PredicateDescr predicateDescr = new PredicateDescr();
- MVELDumper dumper = new MVELDumper();
+ MVELDumper dumper = new MVELDumper(context);
predicateDescr.setContent( dumper.dump( fieldConstraintDescr,
Date.class.isAssignableFrom( resultType ) ) );
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Bin.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Bin.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Bin.java 2010-10-22 02:29:21 UTC (rev 35660)
@@ -0,0 +1,14 @@
+package org.drools;
+
+public class Bin {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/Bin.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/BinTask.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/BinTask.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/BinTask.java 2010-10-22 02:29:21 UTC (rev 35660)
@@ -0,0 +1,14 @@
+package org.drools;
+
+public class BinTask {
+ private Bin bin;
+
+ public Bin getBin() {
+ return bin;
+ }
+
+ public void setBin(Bin bin) {
+ this.bin = bin;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/BinTask.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEscapesMvelTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEscapesMvelTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEscapesMvelTest.java 2010-10-22 02:29:21 UTC (rev 35660)
@@ -0,0 +1,98 @@
+package org.drools.integrationtests;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.Bin;
+import org.drools.BinTask;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.builder.conf.ProcessStringEscapesOption;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+import junit.framework.TestCase;
+
+public class ProcessEscapesMvelTest extends TestCase {
+
+ public void testProcessStringEscapesOptionOn() throws Exception {
+ KnowledgeBase kbase = readKnowledgeBase();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ List list = new ArrayList();
+ ksession.setGlobal( "list", list );
+
+ BinTask bt = new BinTask();
+ Bin b = new Bin();
+ b.setName("aa123bb");
+ bt.setBin(b);
+
+ ksession.insert(b);
+ ksession.insert(bt);
+ ksession.fireAllRules();
+
+ assertEquals(1, list.size());
+
+ }
+
+ public void testProcessStringEscapesOptionOff() throws Exception {
+ KnowledgeBase kbase = readKnowledgeBaseWithEscapesOff();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ List list = new ArrayList();
+ ksession.setGlobal( "list", list );
+
+ BinTask bt = new BinTask();
+ Bin b = new Bin();
+ b.setName("aa123bb");
+ bt.setBin(b);
+
+ ksession.insert(bt);
+ ksession.insert(b);
+ ksession.fireAllRules();
+
+ assertEquals(1, list.size());
+ }
+
+ private KnowledgeBase readKnowledgeBase() throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "processescapes.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." + errors.toArray());
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ return kbase;
+ }
+
+ private KnowledgeBase readKnowledgeBaseWithEscapesOff() throws Exception {
+ KnowledgeBuilderConfiguration kbconf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+ kbconf.setProperty("drools.parser.processStringEscapes", "false");
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbconf);
+ //kbuilder.add(ResourceFactory.newClassPathResource("processescapes.drl"), ResourceType.DRL);
+ kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "processescapesoff.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." + errors.toArray());
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ return kbase;
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEscapesMvelTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/MVELDumperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/MVELDumperTest.java 2010-10-22 01:59:43 UTC (rev 35659)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/MVELDumperTest.java 2010-10-22 02:29:21 UTC (rev 35660)
@@ -46,7 +46,7 @@
public void testDumpMatches() throws Exception {
String input = "Cheese( type.toString matches \"something\\swith\\tsingle escapes\" )";
- String expected = "type.toString ~= \"something\\\\swith\\\\tsingle escapes\"" ;
+ String expected = "type.toString ~= \"something\\swith\\tsingle escapes\"" ;
PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", input);
FieldConstraintDescr fieldDescr = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
@@ -57,7 +57,7 @@
public void testDumpMatches2() throws Exception {
String input = "Cheese( type.toString matches 'something\\swith\\tsingle escapes' )";
- String expected = "type.toString ~= \"something\\\\swith\\\\tsingle escapes\"" ;
+ String expected = "type.toString ~= \"something\\swith\\tsingle escapes\"" ;
PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", input);
FieldConstraintDescr fieldDescr = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapes.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapes.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapes.drl 2010-10-22 02:29:21 UTC (rev 35660)
@@ -0,0 +1,14 @@
+package org.drools.integrationtests
+
+import org.drools.BinTask;
+import org.drools.Bin;
+
+global java.util.List list;
+
+rule "escapeon"
+ when
+ $task : BinTask( $bn : bin.name matches "\\w\\w\\d{3}\\w\\w" )
+ $bin : Bin( $nm : name matches "\\w\\w\\d{3}\\w\\w" )
+ then
+ list.add( $task );
+end
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapesoff.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapesoff.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/processescapesoff.drl 2010-10-22 02:29:21 UTC (rev 35660)
@@ -0,0 +1,14 @@
+package org.drools.integrationtests
+
+import org.drools.BinTask;
+import org.drools.Bin;
+
+global java.util.List list;
+
+rule "escapeoff"
+ when
+ $task : BinTask( $bn : bin.name matches "\w\w\d{3}\w\w" )
+ $bin : Bin( $nm : name matches "\w\w\d{3}\w\w" )
+ then
+ list.add( $task );
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EvalRewriteMatches.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EvalRewriteMatches.drl 2010-10-22 01:59:43 UTC (rev 35659)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EvalRewriteMatches.drl 2010-10-22 02:29:21 UTC (rev 35660)
@@ -5,7 +5,7 @@
rule "eval rewrite with 'matches'"
salience 20
when
- $oi : OrderItem( order.number == 14, seq == 1, order.customer matches "M\w*" )
+ $oi : OrderItem( order.number == 14, seq == 1, order.customer matches "M\\w*" )
then
results.add( $oi );
end
@@ -13,7 +13,7 @@
rule "eval rewrite with 'not matches'"
salience 10
when
- $oi : OrderItem( order.number == 14, seq == 2, order.customer not matches "B\w*" )
+ $oi : OrderItem( order.number == 14, seq == 2, order.customer not matches "B\\w*" )
then
results.add( $oi );
end
More information about the jboss-svn-commits
mailing list