[jboss-svn-commits] JBL Code SVN: r27121 - in labs/jbossrules/branches/DroolsChance/drools-compiler/src/main: java/org/drools/rule/builder and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jun 24 19:53:19 EDT 2009


Author: dsotty
Date: 2009-06-24 19:53:18 -0400 (Wed, 24 Jun 2009)
New Revision: 27121

Modified:
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
Log:


Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2009-06-24 18:36:20 UTC (rev 27120)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2009-06-24 23:53:18 UTC (rev 27121)
@@ -1495,6 +1495,37 @@
 	}
 	
 	
+	
+	public BaseDescr createXorRestrictionConnective(BaseDescr left,
+			BaseDescr right, List<AttributeDescr> attribs) {
+				
+		BaseDescr xor = createXorRestrictionConnective(left, right);
+		fillWithAttribs(xor, attribs);				
+	
+		return xor;
+	}
+	
+	public BaseDescr createXorRestrictionConnective(BaseDescr left,
+			BaseDescr right) {
+		BaseDescr xor = null;
+		if (left instanceof RestrictionDescr
+				&& !(left instanceof PredicateDescr)) {
+			RestrictionConnectiveDescr restXor = new RestrictionConnectiveDescr(
+					RestrictionConnectiveDescr.XOR);
+			restXor.addOrMerge((RestrictionDescr) left);
+			restXor.addOrMerge((RestrictionDescr) right);
+			xor = restXor;
+		} else {
+			XorDescr consXor = new XorDescr();
+			consXor.addOrMerge(left);
+			consXor.addOrMerge(right);
+			xor = consXor;
+		}
+
+		return xor;
+	}
+	
+	
 	public BaseDescr createAndRestrictionConnective(BaseDescr left,
 			BaseDescr right, List<AttributeDescr> attribs) {
 //		Map<String,String> atts = buildAttributes(attribs);

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java	2009-06-24 18:36:20 UTC (rev 27120)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java	2009-06-24 23:53:18 UTC (rev 27121)
@@ -59,7 +59,11 @@
             }
         }
     }
+    
 
+  
+    
+
     public void insertDescr(int index,
                             final BaseDescr baseDescr) {
         if( baseDescr instanceof FieldBindingDescr ) {
@@ -85,7 +89,7 @@
                 addDescr( descr );
             }
         } else {
-            this.descrs.add( baseDescr );
+        	 addDescr( baseDescr );
         }
     }
 

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java	2009-06-24 18:36:20 UTC (rev 27120)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java	2009-06-24 23:53:18 UTC (rev 27121)
@@ -17,6 +17,7 @@
 
     public final static RestrictionConnectiveType AND              = RestrictionConnectiveType.AND;
     public final static RestrictionConnectiveType OR               = RestrictionConnectiveType.OR;
+    public final static RestrictionConnectiveType XOR              = RestrictionConnectiveType.XOR;
 
     private RestrictionConnectiveType             connective;
     private List<RestrictionDescr>                restrictions;
@@ -81,7 +82,13 @@
             public String toString() {
                 return "||";
             }
+        },
+        XOR {
+            public String toString() {
+                return "^^";
+            }
         };
+        
     }
     
     public boolean isCutter() {

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2009-06-24 18:36:20 UTC (rev 27120)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2009-06-24 23:53:18 UTC (rev 27121)
@@ -52,6 +52,7 @@
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.SlidingWindowDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.lang.descr.XorDescr;
 import org.drools.rule.AbstractCompositeConstraint;
 import org.drools.rule.AbstractCompositeRestriction;
 import org.drools.rule.AndCompositeRestriction;
@@ -74,6 +75,8 @@
 import org.drools.rule.SlidingTimeWindow;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.VariableRestriction;
+import org.drools.rule.XorCompositeRestriction;
+import org.drools.rule.XorConstraint;
 import org.drools.rule.builder.dialect.mvel.MVELDialect;
 import org.drools.spi.AcceptsReadAccessor;
 import org.drools.spi.Constraint;
@@ -289,6 +292,27 @@
             and.setCutter(cutter);
             and.setLabel(label);
             and.setParams(((AndDescr) constraint ).getParams());
+        } else if ( constraint instanceof XorDescr ) {
+            XorConstraint xor = new XorConstraint();
+            for ( Iterator it = ((XorDescr) constraint).getDescrs().iterator(); it.hasNext(); ) {
+                this.buildConstraint( context,
+                                      pattern,
+                                      it.next(),
+                                      xor );
+            }
+
+            if ( container == null ) {
+                pattern.addConstraint( xor );
+            } else {
+                if ( xor.getType().equals( Constraint.ConstraintType.UNKNOWN ) ) {
+                    this.setConstraintType( pattern,
+                                            (MutableTypeConstraint) xor );
+                }                
+                container.addConstraint( xor );
+            }
+            xor.setCutter(cutter);
+            xor.setLabel(label);
+            xor.setParams(((XorDescr) constraint ).getParams());
         } else if ( constraint instanceof OrDescr ) {
             OrConstraint or = new OrConstraint();
             for ( Iterator it = ((OrDescr) constraint).getDescrs().iterator(); it.hasNext(); ) {
@@ -564,6 +588,8 @@
                 composite = new AndCompositeRestriction( restrictions );
             } else if ( top.getConnective() == RestrictionConnectiveDescr.OR ) {
                 composite = new OrCompositeRestriction( restrictions );
+            } else if ( top.getConnective() == RestrictionConnectiveDescr.XOR ) {
+                composite = new XorCompositeRestriction( restrictions );
             } else {
                 context.getErrors().add( new DescrBuildError( context.getParentDescr(),
                                                               fieldConstraintDescr,

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2009-06-24 18:36:20 UTC (rev 27120)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2009-06-24 23:53:18 UTC (rev 27121)
@@ -1270,82 +1270,41 @@
 	;
 
 constraint
-	:	or_constr
+	:	or_constr		
 	;
 
 
 
+xor_constr
+  : 
+   and_constr
+   xor_key^
+   and_constr
+  ;
 
-//or_constr
-//  :             
-//     or_constr_config
-//          
-//        (DOUBLE_PIPE^                        
-//         and_constr
-//        )*
-//        
-//  ;
-//   
-//or_constr_config
-//  :     
-//    (and_constr SINGLE_PIPE) =>
-//      and_constr
-//         SINGLE_PIPE
-//           //square_chunk?
-//           //constr_identifier? 
-//           //cut?
-//           constr_parameters             
-//           and_constr
-//      -> ^(SINGLE_PIPE 
-//            // square_chunk? ^(VT_CONSTRID constr_identifier)? cut?
-//            constr_parameters? 
-//            and_constr and_constr)
-//    |
-//    and_constr      
-//  ;     
-
-
-//
-//and_constr
-//  :       
-//          and_constr_config          
-//          (DOUBLE_AMPER^                        
-//           unary_constr
-//          )*                        
-//  ;
-//  
-//and_constr_config
-//  :     
-//    (unary_constr SINGLE_AMPER) =>
-//      unary_constr
-//         SINGLE_AMPER
-//           //square_chunk?
-//           //constr_identifier?
-//           //cut?
-//           constr_parameters?                 
-//           unary_constr           
-//      -> ^(SINGLE_AMPER 
-//            // square_chunk? ^(VT_CONSTRID constr_identifier)? cut?
-//            constr_parameters? 
-//            unary_constr unary_constr)
-//    |
-//    unary_constr      
-//  ;      
-
-
-
-
-
 or_constr
-  :              
-         and_constr          
-          
-          (DOUBLE_PIPE^
-            constr_parameters?
-            or_constr_follow
-          )?
+  :   
+      and_constr               
+      or_sequitur^?
+         
+         
         
   ;
+  
+  
+  
+or_sequitur
+  : (DOUBLE_PIPE^
+            constr_parameters?
+            or_constr_follow
+          )
+    | (DOUBLE_XOR^
+      and_constr)
+          
+  ;  
+  
+  
+  
    
 or_constr_follow
   : and_constr
@@ -3220,6 +3179,10 @@
 	:	'&&'
 	;
 	
+DOUBLE_XOR
+  : '^^'
+  ;	
+	
 DOUBLE_PIPE
 	:	'||'
 	;

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2009-06-24 18:36:20 UTC (rev 27120)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2009-06-24 23:53:18 UTC (rev 27121)
@@ -414,9 +414,11 @@
 	{	$descr = factory.createOrRestrictionConnective($left.descr, $right.descr, attribs); }	
 	  
 	|	^(( DOUBLE_AMPER | SINGLE_AMPER) left=fact_expression attribs=constraint_attributes? right=fact_expression )
-	{	$descr = factory.createAndRestrictionConnective($left.descr, $right.descr, attribs); 
-		
-	} 
+	{	$descr = factory.createAndRestrictionConnective($left.descr, $right.descr, attribs); } 
+	
+	|  ^(( DOUBLE_XOR | SINGLE_XOR) left=fact_expression attribs=constraint_attributes? right=fact_expression )
+  { $descr = factory.createXorRestrictionConnective($left.descr, $right.descr, attribs); }
+			
 
 	|	^(VT_ACCESSOR_PATH (ae=accessor_element {exprList.add($ae.element);})+)
 	{	$descr = factory.createAccessorPath(exprList);	}




More information about the jboss-svn-commits mailing list