[jboss-svn-commits] JBL Code SVN: r12687 - in labs/jbossrules/trunk/drools-compiler/src: main/resources/META-INF and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 19 03:08:19 EDT 2007


Author: fmeyer
Date: 2007-06-19 03:08:19 -0400 (Tue, 19 Jun 2007)
New Revision: 12687

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ForallHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-4.0.xsd
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml
Log:
JBRULES-880 - Tests and resources for xml parser
JBRULES-883 - <and> <or> nesting inside CEs
JBRULES-886 - 'from' keyword support
JBRULES-887 - Add "collect" conditional element
JBRULES-934 - 'accumulate' keyword support

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -41,10 +41,8 @@
             this.validParents.add( QueryDescr.class );
             this.validParents.add( RuleDescr.class );
             this.validParents.add( OrDescr.class );
-            this.validParents.add( AndDescr.class );
             this.validParents.add( LiteralRestrictionHandler.class );
 
-
             this.validPeers = new HashSet();
             this.validPeers.add( null );
             this.validPeers.add( AndDescr.class );
@@ -78,16 +76,15 @@
         final ListIterator it = parents.listIterator( parents.size() );
         it.previous();
         final Object parent = it.previous();
-        
-        
-        if (parent instanceof RuleDescr || parent instanceof QueryDescr) {            
+
+        if ( parent instanceof RuleDescr || parent instanceof QueryDescr ) {
             final RuleDescr ruleDescr = (RuleDescr) parent;
             ruleDescr.setLhs( andDescr );
         } else if ( parent instanceof ConditionalElementDescr ) {
             final ConditionalElementDescr ceDescr = (ConditionalElementDescr) parent;
             ceDescr.addDescr( andDescr );
         }
-        
+
         return null;
     }
 

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -0,0 +1,61 @@
+/**
+ * 
+ */
+package org.drools.xml;
+
+import java.util.HashSet;
+
+import org.drools.lang.descr.CollectDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * @author fernandomeyer
+ *
+ */
+public class CollectHandler  extends BaseAbstractHandler implements Handler  {
+    
+    CollectHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+
+//            this.validParents.add( LiteralRestrictionHandler.class );
+
+            this.validPeers = new HashSet();
+//            this.validPeers.add( null );
+//            this.validPeers.add( AndDescr.class );
+
+            this.allowNesting = true;
+        }
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#end(java.lang.String, java.lang.String)
+     */
+    public Object end(String uri,
+                      String localName) throws SAXException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#generateNodeFor()
+     */
+    public Class generateNodeFor() {
+        return CollectDescr.class;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#start(java.lang.String, java.lang.String, org.xml.sax.Attributes)
+     */
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs) throws SAXException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ForallHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ForallHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ForallHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -0,0 +1,65 @@
+/**
+ * 
+ */
+package org.drools.xml;
+
+import java.util.HashSet;
+
+import org.drools.lang.descr.ForallDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * @author fernandomeyer
+ *
+ */
+public class ForallHandler extends BaseAbstractHandler implements Handler {
+    
+    ForallHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+
+//            this.validParents.add( LiteralRestrictionHandler.class );
+
+            this.validPeers = new HashSet();
+//            this.validPeers.add( null );
+//            this.validPeers.add( AndDescr.class );
+
+            this.allowNesting = true;
+        }
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#end(java.lang.String, java.lang.String)
+     */
+    public Object end(String uri,
+                      String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+        
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#generateNodeFor()
+     */
+    public Class generateNodeFor() {
+        return ForallDescr.class;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#start(java.lang.String, java.lang.String, org.xml.sax.Attributes)
+     */
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs) throws SAXException {
+
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+
+        return null;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -0,0 +1,61 @@
+/**
+ * 
+ */
+package org.drools.xml;
+
+import java.util.HashSet;
+
+import org.drools.lang.descr.FromDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * @author fernandomeyer
+ *
+ */
+public class FromHandler  extends BaseAbstractHandler implements Handler  {
+    
+    FromHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+
+//            this.validParents.add( LiteralRestrictionHandler.class );
+
+            this.validPeers = new HashSet();
+//            this.validPeers.add( null );
+//            this.validPeers.add( AndDescr.class );
+
+            this.allowNesting = true;
+        }
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#end(java.lang.String, java.lang.String)
+     */
+    public Object end(String uri,
+                      String localName) throws SAXException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#generateNodeFor()
+     */
+    public Class generateNodeFor() {
+        return FromDescr.class;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.xml.Handler#start(java.lang.String, java.lang.String, org.xml.sax.Attributes)
+     */
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs) throws SAXException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -39,15 +39,14 @@
         if ( (this.validParents == null) && (this.validPeers == null) ) {
             this.validParents = new HashSet();
             this.validParents.add( FieldConstraintDescr.class );
-            this.validParents.add( AndDescr.class );
-            this.validParents.add( OrDescr.class );
+            this.validParents.add( RestrictionConnectiveDescr.class );
 
             this.validPeers = new HashSet();
             this.validPeers.add( null );
             this.validPeers.add( LiteralRestrictionDescr.class );
             this.validPeers.add( ReturnValueRestrictionDescr.class );
             this.validPeers.add( VariableRestrictionDescr.class );
-            this.validPeers.add( RestrictionConnectiveDescr.class );
+            //this.validPeers.add( RestrictionConnectiveDescr.class );
             this.allowNesting = false;
         }
     }
@@ -85,20 +84,15 @@
         final LinkedList parents = this.xmlPackageReader.getParents();
         final ListIterator it = parents.listIterator( parents.size() );
         it.previous();
-
-        //TODO: correct classcastexception in AndDescr.
         
         Object parent = it.previous();
-        
+
         if (parent instanceof FieldConstraintDescr) {
             final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) parent;
             fieldConstriantDescr.addRestriction( literalDescr );
-        } else if ( parent instanceof ConditionalElementDescr )  { 
-            final ConditionalElementDescr conditionDescr = (ConditionalElementDescr) parent;
-            
-            
-            
-//            System.out.println("LiteralRestriction");
+        } else if ( parent instanceof RestrictionConnectiveDescr )  { 
+            final RestrictionConnectiveDescr restrictionDescr = (RestrictionConnectiveDescr) parent;
+            restrictionDescr.addRestriction( literalDescr );
         }
         return null;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -20,8 +20,10 @@
 import java.util.LinkedList;
 import java.util.ListIterator;
 
+import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
@@ -38,6 +40,11 @@
 class RestrictionConnectiveHandler extends BaseAbstractHandler
     implements
     Handler {
+    
+    public final static String   AND              = "and-restriction-connective";
+    public final static String   OR               = "or-restriction-connective";
+
+    
     RestrictionConnectiveHandler(final XmlPackageReader xmlPackageReader) {
         this.xmlPackageReader = xmlPackageReader;
 
@@ -51,7 +58,7 @@
             this.validPeers.add( ReturnValueRestrictionDescr.class );
             this.validPeers.add( VariableRestrictionDescr.class );
             this.validPeers.add( RestrictionConnectiveDescr.class );
-            this.allowNesting = false;
+            this.allowNesting = true;
         }
     }
 
@@ -61,20 +68,13 @@
         this.xmlPackageReader.startConfiguration( localName,
                                                   attrs );
 
-        final String connective = attrs.getValue( "connective" );
-        if ( connective == null || connective.trim().equals( "" ) ) {
-            throw new SAXParseException( "<restriction-connective> requires a 'connective' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
         RestrictionConnectiveDescr connectiveDescr = null;
-        if ( connective.equals( "or" ) ) {
+        if ( localName.equals( RestrictionConnectiveHandler.OR ) ) {
             connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.OR );
-        } else if (connective.equals( "and" )) {
+        } else if (localName.equals( RestrictionConnectiveHandler.AND )) {
             connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.AND );
         } else {
-            throw new SAXParseException( "<connective-restriction> requires a valid 'connective' value (and,or): " + connective,
-                                         this.xmlPackageReader.getLocator() );
+            System.out.println("IDIOTA");
         }
 
         return connectiveDescr;
@@ -87,12 +87,21 @@
         final RestrictionConnectiveDescr connectiveDescr = (RestrictionConnectiveDescr) this.xmlPackageReader.getCurrent();
 
         final LinkedList parents = this.xmlPackageReader.getParents();
-        final ListIterator it = parents.listIterator( parents.size() );
-        it.previous();
-        final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) it.previous();
+        int size = parents.size();
+        final ListIterator ite = parents.listIterator( parents.size() );
+        
+        ite.previous();
 
-        fieldConstriantDescr.addRestriction( connectiveDescr );
+        Object obj = ite.previous();
 
+        if ( obj instanceof FieldConstraintDescr ) {
+            final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) obj;
+            fieldConstriantDescr.addRestriction( connectiveDescr );
+        } else if (obj instanceof RestrictionConnectiveDescr ) {
+            final RestrictionConnectiveDescr restconective = (RestrictionConnectiveDescr) obj;
+            restconective.addRestriction( connectiveDescr );
+        }
+        
         return null;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -46,8 +46,7 @@
         if ( (this.validParents == null) && (this.validPeers == null) ) {
             this.validParents = new HashSet();
             this.validParents.add( FieldConstraintDescr.class );
-            this.validParents.add( AndDescr.class );
-            this.validParents.add( OrDescr.class );
+            this.validParents.add( RestrictionConnectiveDescr.class );
 
             this.validPeers = new HashSet();
             this.validPeers.add( null );
@@ -101,7 +100,13 @@
         if (parent instanceof FieldConstraintDescr) {
 	        final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) parent;
 	        fieldConstraintDescr.addRestriction( returnValueDescr );
-        } else {
+        } else if ( parent instanceof RestrictionConnectiveDescr ) {
+            final RestrictionConnectiveDescr rcDescr = (RestrictionConnectiveDescr) parent;
+            rcDescr.addRestriction( returnValueDescr );
+        }
+        
+        
+        else {
             System.out.println("ReturnValueRestriction");
         }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -45,9 +45,8 @@
         if ( (this.validParents == null) && (this.validPeers == null) ) {
             this.validParents = new HashSet();
             this.validParents.add( FieldConstraintDescr.class );
-            this.validParents.add( AndDescr.class);
-            this.validParents.add( OrDescr.class);
-
+            this.validParents.add( RestrictionConnectiveDescr.class );
+            
             this.validPeers = new HashSet();
             this.validPeers.add( null );
             this.validPeers.add( LiteralRestrictionDescr.class );
@@ -97,8 +96,9 @@
         if ( parent instanceof FieldConstraintDescr ) {
         	final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) parent;
         	fieldConstraintDescr.addRestriction( variableDescr );
-        } else {
-            System.out.println("variableRestriction class");
+        } else if (parent instanceof RestrictionConnectiveDescr ) {
+            final RestrictionConnectiveDescr restrictionConDescr = (RestrictionConnectiveDescr) parent;
+            restrictionConDescr.addRestriction( variableDescr );
         }
 
         return null;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -221,9 +221,17 @@
     }
 
     public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
-        this.template = "<restriction-connective connective=";
-        this.template += descr.getConnective() == RestrictionConnectiveDescr.OR ? "\"or\"" : "\"and\"" ;
-        this.template += "/>" + XmlDumper.eol;
+        this.template = new String();
+        List restrictions = descr.getRestrictions();
+        String xmlTag = descr.getConnective() == RestrictionConnectiveDescr.OR 
+            ? RestrictionConnectiveHandler.OR 
+            : RestrictionConnectiveHandler.AND; 
+            
+        if ( restrictions != Collections.EMPTY_LIST ) {
+            this.template  = "<" + xmlTag + ">";
+            this.template += processDescrList( restrictions );
+            this.template += "</" + xmlTag + ">";
+        }
     }
 
     private String processDescrList(final List descr) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -124,6 +124,13 @@
         // Conditional Elements
         this.handlers.put( "lhs",
                            new AndHandler( this ) );
+
+        this.handlers.put( "and-restriction-connective",
+                           new RestrictionConnectiveHandler( this ) );
+        
+        this.handlers.put( "or-restriction-connective",
+                           new RestrictionConnectiveHandler( this) );
+        
         this.handlers.put( "and",
                            new AndHandler( this ) );
         this.handlers.put( "or",
@@ -150,11 +157,8 @@
                            new ReturnValueRestrictionHandler( this ) );
         this.handlers.put( "field-binding",
                            new FieldBindingHandler( this ) );
-        this.handlers.put( "restriction-connective",
-                           new RestrictionConnectiveHandler( this ) );
         
         initEntityResolver();
-
     }
 
     /**
@@ -259,8 +263,7 @@
             throw new RuntimeException( "parser must be namespace-aware" );
         }
 
-        localParser.parse( in,
-                           this );
+        localParser.parse( in, this );
 
         return this.packageDescr;
     }
@@ -374,8 +377,7 @@
 
         this.current = getParent( handler.generateNodeFor() );
 
-        final Object node = handler.end( uri,
-                                         localName );
+        final Object node = handler.end( uri, localName );
 
         // next
         if ( node != null && !this.lastWasEndElement ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-4.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-4.0.xsd	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-4.0.xsd	2007-06-19 07:08:19 UTC (rev 12687)
@@ -99,12 +99,8 @@
 				<xs:element ref="drools:exists"/>
 				<xs:element ref="drools:eval"/>
 				<xs:element ref="drools:pattern"/>
-				<xs:element ref="drools:field-binding"/>
 				<xs:element ref="drools:field-constraint"/>
-				<xs:element ref="drools:predicate"/>
-				<xs:element ref="drools:literal-restriction"/>
-				<xs:element ref="drools:variable-restriction"/>
-				<xs:element ref="drools:return-value-restriction"/>
+				
 			</xs:choice>
 		</xs:complexType>
 	</xs:element>
@@ -117,12 +113,7 @@
 				<xs:element ref="drools:exists"/>
 				<xs:element ref="drools:eval"/>
 				<xs:element ref="drools:pattern"/>
-				<xs:element ref="drools:field-binding"/>
 				<xs:element ref="drools:field-constraint"/>
-				<xs:element ref="drools:predicate"/>
-				<xs:element ref="drools:literal-restriction"/>
-				<xs:element ref="drools:variable-restriction"/>
-				<xs:element ref="drools:return-value-restriction"/>
 			</xs:choice>
 		</xs:complexType>
 	</xs:element>
@@ -134,8 +125,7 @@
 			</xs:sequence>
 		</xs:complexType>
 	</xs:element>
-	
-	
+		
 	<xs:element name="exists">
 		<xs:complexType>
 			<xs:sequence>
@@ -154,23 +144,40 @@
 
     <xs:element name="collect">
         <xs:complexType>
-            <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:choice maxOccurs="1" minOccurs="1">
                 <xs:element ref="drools:pattern"/>
             </xs:choice>
         </xs:complexType>
     </xs:element>
 
-<!-- Still working 
+    <xs:element name="expression" type="xs:string"/>
+
+    <xs:group name="accumulate">
+     <xs:sequence>
+        <xs:element ref="drools:pattern"/>
+        <xs:element name="init" type="xs:string"/>
+        <xs:element name="action" type="xs:string"/>
+        <xs:element name="result" type="xs:string"/>
+     </xs:sequence>
+    </xs:group>
+
+
+    <xs:element name="accumulate">
+        <xs:complexType>
+            <xs:group ref="drools:accumulate"/>
+        </xs:complexType>
+    </xs:element>
+
     <xs:element name="from">
         <xs:complexType>
-			<xs:simpleContent>
-				<xs:extension base="xs:string">
-                    <xs:attribute name="source" type="xs:string" use="required"/>
-                </xs:extension>
-			</xs:simpleContent>
-        </xs:complexType>        
+            <xs:choice maxOccurs="1" minOccurs="0">
+                <xs:element ref="drools:collect"/>
+                <xs:element ref="drools:expression"/>
+                <xs:element ref="drools:accumulate"/>
+            </xs:choice>
+        </xs:complexType>
     </xs:element>
--->
+
 	
 	<xs:element name="eval" type="xs:string"/>
 	
@@ -180,9 +187,10 @@
 				<xs:element ref="drools:field-binding"/>
 				<xs:element ref="drools:field-constraint"/>
 				<xs:element ref="drools:predicate"/>
+				<xs:element ref="drools:from"/>
 				<xs:element ref="drools:or"/>
 				<xs:element ref="drools:and"/>
-				<!-- xs:element ref="drools:from"/ -->
+				
             </xs:choice>
 			<xs:attribute name="field-name" type="xs:string" use="optional"/>
 			<xs:attribute name="identifier" type="xs:string" use="optional"/>
@@ -196,8 +204,9 @@
 				<xs:element ref="drools:literal-restriction"/>
 				<xs:element ref="drools:variable-restriction"/>
 				<xs:element ref="drools:return-value-restriction"/>
-				<xs:element ref="drools:restriction-connective"/>
-			</xs:choice>
+				<xs:element ref="drools:and-restriction-connective"/>
+                <xs:element ref="drools:or-restriction-connective"/>
+            </xs:choice>
 			<xs:attribute name="field-name" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
@@ -209,12 +218,31 @@
 		</xs:complexType>
 	</xs:element>
 
+    <xs:element name="and-restriction-connective">
+        <xs:complexType>
+            <xs:choice maxOccurs="unbounded" minOccurs="0">
+                <xs:element ref="drools:or-restriction-connective"/>
+                <xs:element ref="drools:literal-restriction"/>
+                <xs:element ref="drools:variable-restriction"/>
+                <xs:element ref="drools:return-value-restriction"/>
 
-    <xs:element name="restriction-connective">
-		<xs:complexType>
-			<xs:attribute name="connective" type="xs:string" use="required"/>
-		</xs:complexType>
-	</xs:element>
+            </xs:choice>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="or-restriction-connective">
+        <xs:complexType>
+            <xs:choice maxOccurs="unbounded" minOccurs="0">
+				<xs:element ref="drools:and-restriction-connective"/>
+                
+                <xs:element ref="drools:literal-restriction"/>
+                <xs:element ref="drools:variable-restriction"/>
+                <xs:element ref="drools:return-value-restriction"/>
+            </xs:choice>
+        </xs:complexType>
+    </xs:element>
+
+
     
     <xs:element name="literal-restriction">
 		<xs:complexType>

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -31,6 +31,16 @@
         
         String buffer = readFile("test_ParseRule.xml");
         
+        System.out.println("-------------");
+        
+        System.out.println(buffer);
+        
+        System.out.println("-------------");
+        
+        System.out.println(result);
+        
+        System.out.println("-------------");
+        
         assertEqualsIgnoreWhitespace( buffer, result );
         assertNotNull( result );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-19 07:08:19 UTC (rev 12687)
@@ -83,27 +83,26 @@
         assertEquals( obj.getLhs().getDescrs().size(), 3); 
     }
 
-    /*
-    public void testParseFrom() throws Exception {
-        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
-        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFrom.xml" ) ) );
-        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
-        assertNotNull( packageDescr );
-        assertEquals( "com.sample", packageDescr.getName() );
-        fail();
-    }
+
+//    public void testParseFrom() throws Exception {
+//        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+//        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFrom.xml" ) ) );
+//        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+//        assertNotNull( packageDescr );
+//        assertEquals( "com.sample", packageDescr.getName() );
+//        fail();
+//    }
+//    
+//    
+//    public void testParseCollect() throws Exception {
+//        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+//        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseCollect.xml" ) ) );
+//        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+//        assertNotNull( packageDescr );
+//        assertEquals( "com.sample", packageDescr.getName() );
+//        fail();
+//    }
     
-    
-    public void testParseCollect() throws Exception {
-        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
-        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseCollect.xml" ) ) );
-        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
-        assertNotNull( packageDescr );
-        assertEquals( "com.sample", packageDescr.getName() );
-        fail();
-    }
-    */
-    
 
     public void testParseImport() throws Exception {
         final XmlPackageReader xmlPackageReader = new XmlPackageReader();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml	2007-06-19 07:08:19 UTC (rev 12687)
@@ -18,19 +18,43 @@
 	<rule-attribute name="activation-group" value="activation-group" />
 
 	<lhs>
-        <pattern object-type="Cheese">
-            <from source="unordered-fact">
-                person
+        <pattern identifier="cheese" object-type="Cheese" >
+            <from>
+                <expression>
+                    cheesery.getCheeses()
+                 </expression>
             </from>
+        </pattern>
 
-        </pattern>
         <pattern identifier="cheese" object-type="Cheese" >
             <from>
-                <statement>
-                 </statement>
+                <collect>
+                    <pattern object-type="Person">
+                        <field-constraint field-name="hair">
+                            <literal-restriction evaluator="==" value="pink" />
+                        </field-constraint>
+                    </pattern>
+                </collect>
             </from>
         </pattern>
-	</lhs>
+
+        <pattern identifier="cheese" object-type="Cheese">
+            <from>
+                <accumulate>
+                    <pattern object-type="Cheese"></pattern>
+                    <init>
+                        int total = 0;
+                    </init>
+                    <action>
+                        total += $cheese.getPrice();
+                    </action>
+                    <result>
+                        new Integer( total ) )
+                    </result>
+                </accumulate>
+            </from>
+        </pattern>
+    </lhs>
 	<rhs>
 		list1.add( $cheese );
 	</rhs>

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml	2007-06-19 06:49:51 UTC (rev 12686)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml	2007-06-19 07:08:19 UTC (rev 12687)
@@ -31,13 +31,16 @@
             <or>
                 <and>
 					<field-constraint field-name="a">
-						<literal-restriction evaluator="&gt;" value="60" />
-						<restriction-connective connective="and" />
-						<literal-restriction evaluator="&lt;" value="70" />
-						<restriction-connective connective="or"/>	
-						<literal-restriction evaluator="&lt;" value="50" />
-						<restriction-connective connective="and"/>
-						<literal-restriction evaluator="&gt;" value="55" />
+                        <or-restriction-connective>
+                            <and-restriction-connective>
+                                <literal-restriction evaluator="&gt;" value="60" />
+                                <literal-restriction evaluator="&lt;" value="70" />
+                            </and-restriction-connective>
+                            <and-restriction-connective>
+                                <literal-restriction evaluator="&lt;" value="50" />
+                                <literal-restriction evaluator="&gt;" value="55" />
+                            </and-restriction-connective>                            
+                        </or-restriction-connective>
 					</field-constraint>
 
 					<field-constraint field-name="a3">
@@ -61,9 +64,10 @@
                     </field-constraint>
 					
                     <field-constraint field-name="a3">
-                        <literal-restriction evaluator="==" value="yellow"/>
-                        <restriction-connective connective="and"/>
-                        <literal-restriction evaluator="==" value="blue" />
+                        <or-restriction-connective>
+                            <literal-restriction evaluator="==" value="yellow"/>
+                            <literal-restriction evaluator="==" value="blue" />
+                        </or-restriction-connective>
                     </field-constraint>
                 </and>
             </or>
@@ -72,9 +76,10 @@
 		
         <pattern identifier="foo3" object-type="Bar" >
 			<field-constraint field-name="a">
-                <literal-restriction evaluator="==" value="3" />
-                <restriction-connective connective="or"/>
-                <literal-restriction evaluator="==" value="4" />
+                <or-restriction-connective>
+                    <literal-restriction evaluator="==" value="3" />
+                    <literal-restriction evaluator="==" value="4" />                    
+                </or-restriction-connective>
 			</field-constraint>
 			<field-constraint field-name="a3"> 
 				<literal-restriction evaluator="==" value="hello" />
@@ -94,9 +99,10 @@
 
 		<pattern identifier="foo5" object-type="Bar" >
 			<field-constraint field-name="b">
-                <return-value-restriction evaluator="==" >a4 + 1</return-value-restriction>
-                <restriction-connective connective="or"/>
-                <variable-restriction evaluator="&gt;" identifier="a4" />
+                <or-restriction-connective>
+                    <return-value-restriction evaluator="==" >a4 + 1</return-value-restriction>
+                    <variable-restriction evaluator="&gt;" identifier="a4" />
+                </or-restriction-connective>
 			</field-constraint>
 		</pattern>
 




More information about the jboss-svn-commits mailing list