[jboss-svn-commits] JBL Code SVN: r26834 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/lang and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 4 16:35:26 EDT 2009


Author: tirelli
Date: 2009-06-04 16:35:26 -0400 (Thu, 04 Jun 2009)
New Revision: 26834

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-2111: fixing parser to properly construct the descriptor model

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java	2009-06-04 19:03:28 UTC (rev 26833)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java	2009-06-04 20:35:26 UTC (rev 26834)
@@ -33,10 +33,24 @@
 
     public void addDescr(final BaseDescr baseDescr) {
         this.descrs.add( baseDescr );
+        if( baseDescr instanceof FieldBindingDescr ) {
+            FieldBindingDescr fbd = (FieldBindingDescr) baseDescr;
+            if( fbd.getFieldConstraint() != null ) {
+                this.descrs.add( fbd.getFieldConstraint() );
+                fbd.setFieldConstraint( null );
+            }
+        }
     }
 
     public void insertDescr(int index,
                             final BaseDescr baseDescr) {
+        if( baseDescr instanceof FieldBindingDescr ) {
+            FieldBindingDescr fbd = (FieldBindingDescr) baseDescr;
+            if( fbd.getFieldConstraint() != null ) {
+                this.descrs.add(index, fbd.getFieldConstraint() );
+                fbd.setFieldConstraint( null );
+            }
+        }
         this.descrs.add( index,
                          baseDescr );
     }
@@ -65,7 +79,9 @@
 
     public void addOrMerge(final BaseDescr baseDescr) {
         if ( baseDescr instanceof AndDescr ) {
-            this.descrs.addAll( ((AndDescr) baseDescr).getDescrs() );
+            for( BaseDescr descr : (List<BaseDescr>)((AndDescr) baseDescr).getDescrs() ) {
+                addDescr( descr );
+            }
         } else {
             addDescr( baseDescr );
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2009-06-04 19:03:28 UTC (rev 26833)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2009-06-04 20:35:26 UTC (rev 26834)
@@ -935,28 +935,10 @@
 
 		if (null != exprList && exprList.size() > 0) {
 			if (exprList.size() == 1) {
-				if (exprList.get(0) instanceof FieldBindingDescr
-						&& ((FieldBindingDescr) exprList.get(0))
-								.getFieldConstraint().getRestriction()
-								.getRestrictions().size() > 0) {
-					pattern.getConstraint().addDescr(exprList.get(0));
-					pattern.getConstraint().addDescr(
-							((FieldBindingDescr) exprList.get(0))
-									.getFieldConstraint());
-				} else {
-					pattern.getConstraint().addOrMerge(exprList.get(0));
-				}
+                pattern.getConstraint().addOrMerge(exprList.get(0));
 			} else {
 				for (BaseDescr constraint : exprList) {
 					pattern.getConstraint().addDescr(constraint);
-					if (constraint instanceof FieldBindingDescr
-							&& ((FieldBindingDescr) constraint)
-									.getFieldConstraint().getRestriction()
-									.getRestrictions().size() > 0) {
-						pattern.getConstraint().addDescr(
-								((FieldBindingDescr) constraint)
-										.getFieldConstraint());
-					}
 				}
 			}
 			pattern.setEndCharacter(exprList.get(exprList.size() - 1)
@@ -1051,7 +1033,9 @@
 		FieldConstraintDescr fieldConstraint = (FieldConstraintDescr) descr;
 		fieldBiding.setIdentifier(label.getText());
 		fieldBiding.setFieldName(fieldConstraint.getFieldName());
-		fieldBiding.setFieldConstraint(fieldConstraint);
+		if( ! fieldConstraint.getRestrictions().isEmpty() ) {
+	        fieldBiding.setFieldConstraint(fieldConstraint);
+		}
 		return fieldBiding;
 	}
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java	2009-06-04 19:03:28 UTC (rev 26833)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java	2009-06-04 20:35:26 UTC (rev 26834)
@@ -48,11 +48,26 @@
     }
     
     public void insertDescr(int index, final BaseDescr baseDescr) {
-        this.descrs.add( index, baseDescr );
+        if( baseDescr instanceof FieldBindingDescr ) {
+            FieldBindingDescr fbd = (FieldBindingDescr) baseDescr;
+            if( fbd.getFieldConstraint() != null ) {
+                this.descrs.add(index, fbd.getFieldConstraint() );
+                fbd.setFieldConstraint( null );
+            }
+        }
+        this.descrs.add( index,
+                         baseDescr );
     }    
 
     public void addDescr(final BaseDescr baseDescr) {
         this.descrs.add( baseDescr );
+        if( baseDescr instanceof FieldBindingDescr ) {
+            FieldBindingDescr fbd = (FieldBindingDescr) baseDescr;
+            if( fbd.getFieldConstraint() != null ) {
+                this.descrs.add( fbd.getFieldConstraint() );
+                fbd.setFieldConstraint( null );
+            }
+        }
     }
 
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2009-06-04 19:03:28 UTC (rev 26833)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2009-06-04 20:35:26 UTC (rev 26834)
@@ -4008,6 +4008,54 @@
                       qualifiedIdentifierRestrictionDescr.getText() );
     }
 
+    public void testAndRestrictionConnective() throws Exception {
+        final String source = "rule \"Test\" when ( $r :Person( $n : name == 'Bob' && $a : age == 20) ) then end";
+
+        parse( "compilation_unit",
+               "compilation_unit",
+               source );
+
+        RuleDescr rule = (RuleDescr) this.walker.getPackageDescr().getRules().get( 0 );
+        assertFalse( parser.hasErrors() );
+
+        assertEquals( "Test",
+                      rule.getName() );
+        assertEquals( 1,
+                      rule.getLhs().getDescrs().size() );
+        PatternDescr patternDescr = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        assertEquals( "$r",
+                      patternDescr.getIdentifier() );
+        assertEquals( 4,
+                      patternDescr.getDescrs().size() );
+        FieldBindingDescr nameBind = (FieldBindingDescr) patternDescr.getDescrs().get( 0 );
+        assertEquals( "$n", nameBind.getIdentifier() );
+        assertEquals( "name", nameBind.getFieldName() );
+        FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) patternDescr.getDescrs().get( 1 );
+        assertEquals( "name",
+                      fieldConstraintDescr.getFieldName() );
+        assertEquals( 1,
+                      fieldConstraintDescr.getRestriction().getRestrictions().size() );
+        LiteralRestrictionDescr literalRestrictionDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestriction().getRestrictions().get( 0 );
+        assertEquals( "==",
+                      literalRestrictionDescr.getEvaluator() );
+        assertEquals( "Bob",
+                      literalRestrictionDescr.getText() );
+        
+        FieldBindingDescr ageBind = (FieldBindingDescr) patternDescr.getDescrs().get( 2 );
+        assertEquals( "$a", ageBind.getIdentifier() );
+        assertEquals( "age", ageBind.getFieldName() );
+        fieldConstraintDescr = (FieldConstraintDescr) patternDescr.getDescrs().get( 3 );
+        assertEquals( "age",
+                      fieldConstraintDescr.getFieldName() );
+        assertEquals( 1,
+                      fieldConstraintDescr.getRestriction().getRestrictions().size() );
+        literalRestrictionDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestriction().getRestrictions().get( 0 );
+        assertEquals( "==",
+                      literalRestrictionDescr.getEvaluator() );
+        assertEquals( "20",
+                      literalRestrictionDescr.getText() );
+    }
+
     public void testTypeWithMetaData() throws Exception {
 
         parseResource( "compilation_unit",




More information about the jboss-svn-commits mailing list