[jboss-svn-commits] JBL Code SVN: r12728 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/lang/descr and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 21 00:40:03 EDT 2007


Author: fmeyer
Date: 2007-06-21 00:40:03 -0400 (Thu, 21 Jun 2007)
New Revision: 12728

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseAccumulate.xml
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/QualifiedIdentifierRestrictionDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExistsHandler.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
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/OrHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.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/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_Dump.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseCollect.xml
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseExists.xml
   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_ParseLhs.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
JBRULES-937 - support for QualifiedIdentifierHandler


Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -16,11 +16,13 @@
  * limitations under the License.
  */
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.CollectDescr;
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
@@ -115,7 +117,6 @@
                 this.template = "\t\t" + descr.getObjectType() + "( )";
             }
         }
-
     }
 
     public void visitEvalDescr(final EvalDescr descr) {
@@ -132,6 +133,25 @@
         }
     }
 
+    public void visitCollectDescr(final CollectDescr descr) {
+        String tmpstr = new String();
+        visitPatternDescr( descr.getResultPattern() );
+        tmpstr += this.template + " from collect (";
+        visitPatternDescr( descr.getSourcePattern() );
+        tmpstr += this.template.substring( 2 );
+        this.template = tmpstr + ");";
+    }
+    
+    //TODO FM: FIXME
+    public void visitAccumulateDescr() {
+        
+    }
+    
+    //TODO FM: FIXME
+    public void visitForall() {
+        
+    }
+    
     public void visitFieldBindingDescr(final FieldBindingDescr descr) {
         this.template = new String();
         this.template = descr.getIdentifier() + " : " + descr.getFieldName();
@@ -341,7 +361,7 @@
             visit( obj );
             descrString += this.template;
             
-            if (obj.getClass().equals( PatternDescr.class )) {
+            if (obj.getClass().equals( PatternDescr.class ) || obj.getClass().equals( CollectDescr.class ) ) {
                 descrString += DrlDumper.eol;
             } else if (ite.hasNext()) {
                 descrString += " && ";

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -35,10 +35,6 @@
     private PatternDescr       resultPattern;
     private String            classMethodName;
 
-    CollectDescr() {
-        super();
-    }
-
     public int getLine() {
         return this.sourcePattern.getLine();
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -9,10 +9,6 @@
     private PatternDescr             pattern;
     private DeclarativeInvokerDescr dataSource;
 
-    FromDescr() {
-        //protected so only factory can create
-    }
-
     public int getLine() {
         return this.pattern.getLine();
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/QualifiedIdentifierRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/QualifiedIdentifierRestrictionDescr.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/QualifiedIdentifierRestrictionDescr.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -35,7 +35,11 @@
         this.text = text;
         this.evaluator = evaluator;
     }
-
+    
+    public void setText(String text) {
+        this.text = text;
+    }
+    
     public String getEvaluator() {
         return this.evaluator;
     }

Modified: 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	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -4,8 +4,14 @@
 package org.drools.xml;
 
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
 
+import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -21,41 +27,55 @@
         if ( (this.validParents == null) && (this.validPeers == null) ) {
             this.validParents = new HashSet();
 
-//            this.validParents.add( LiteralRestrictionHandler.class );
+            this.validParents.add( FromDescr.class );
 
             this.validPeers = new HashSet();
-//            this.validPeers.add( null );
-//            this.validPeers.add( AndDescr.class );
+            this.validPeers.add( null );
 
-            this.allowNesting = true;
+            this.allowNesting = false;
         }
     }
     
 
-    /* (non-Javadoc)
-     * @see org.drools.xml.Handler#end(java.lang.String, java.lang.String)
-     */
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs) throws SAXException {
+
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+        final CollectDescr collectDescr = new CollectDescr();
+        return collectDescr;
+    }
+
     public Object end(String uri,
                       String localName) throws SAXException {
-        // TODO Auto-generated method stub
+        
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final CollectDescr collectDescr = (CollectDescr) this.xmlPackageReader.getCurrent();
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator ite = parents.listIterator( parents.size() );
+        ite.previous();
+        final Object parent = ite.previous();
+        
+        if ( parent.getClass().getName().equals( FromDescr.class.getName() ) ) {
+            final PatternDescr source = (PatternDescr) ite.previous();
+            collectDescr.setSourcePattern( source );
+            
+            AndDescr andDescr = (AndDescr) ite.previous();
+            andDescr.addDescr( collectDescr );
+            
+        } else if ( parent instanceof ConditionalElementDescr ) {
+            final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;
+            parentDescr.addDescr( collectDescr );
+        } 
+
         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;
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExistsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExistsHandler.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExistsHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -16,21 +16,15 @@
  * limitations under the License.
  */
 
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.ConditionalElementDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.*;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
 /**
  * @author mproctor
  * 
@@ -47,6 +41,7 @@
             this.validParents = new HashSet();
             this.validParents.add( AndDescr.class );
             this.validParents.add( OrDescr.class );
+            this.validParents.add( NotDescr.class );
 
             this.validPeers = new HashSet();
             this.validPeers.add( null );

Modified: 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	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ForallHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -3,12 +3,13 @@
  */
 package org.drools.xml;
 
-import java.util.HashSet;
-
 import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.AndDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
+import java.util.HashSet;
+
 /**
  * @author fernandomeyer
  *
@@ -20,13 +21,11 @@
 
         if ( (this.validParents == null) && (this.validPeers == null) ) {
             this.validParents = new HashSet();
+            this.validParents.add( AndDescr.class );
 
-//            this.validParents.add( LiteralRestrictionHandler.class );
-
             this.validPeers = new HashSet();
-//            this.validPeers.add( null );
-//            this.validPeers.add( AndDescr.class );
-
+            this.validPeers.add( null );
+            
             this.allowNesting = true;
         }
     }

Modified: 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	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -5,7 +5,9 @@
 
 import java.util.HashSet;
 
+import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -20,42 +22,37 @@
 
         if ( (this.validParents == null) && (this.validPeers == null) ) {
             this.validParents = new HashSet();
+            this.validParents.add( PatternDescr.class );
 
-//            this.validParents.add( LiteralRestrictionHandler.class );
-
             this.validPeers = new HashSet();
-//            this.validPeers.add( null );
-//            this.validPeers.add( AndDescr.class );
-
-            this.allowNesting = true;
+            this.validPeers.add( null );
+            this.validPeers.add( FieldConstraintDescr.class );
+            this.allowNesting = false;
+            
         }
     }
-    
 
-    /* (non-Javadoc)
-     * @see org.drools.xml.Handler#end(java.lang.String, java.lang.String)
-     */
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs) throws SAXException {
+        
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+        final FromDescr fromDesctiptor = new FromDescr();
+
+        return fromDesctiptor;
+    }
+
+
     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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -43,10 +43,13 @@
 
             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.validPeers.add( QualifiedIdentifierRestrictionDescr.class );            
+            
             this.allowNesting = false;
         }
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/OrHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/OrHandler.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/OrHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -47,6 +47,7 @@
             this.validPeers.add( EvalDescr.class );
             this.validPeers.add( PatternDescr.class );
 
+            
             this.allowNesting = true;
         }
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -1,112 +1,124 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.ConditionalElementDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class PatternHandler extends BaseAbstractHandler
-    implements
-    Handler {
-    PatternHandler(final XmlPackageReader xmlPackageReader) {
-        this.xmlPackageReader = xmlPackageReader;
-
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( AndDescr.class );
-            this.validParents.add( OrDescr.class );
-            this.validParents.add( NotDescr.class );
-            this.validParents.add( ExistsDescr.class );
-
-            this.validPeers = new HashSet();
-            this.validPeers.add( null );
-            this.validPeers.add( AndDescr.class );
-            this.validPeers.add( OrDescr.class );
-            this.validPeers.add( NotDescr.class );
-            this.validPeers.add( ExistsDescr.class );
-            this.validPeers.add( EvalDescr.class );
-            this.validPeers.add( PatternDescr.class );
-
-            this.allowNesting = false;
-        }
-    }
-
-    public Object start(final String uri,
-                        final String localName,
-                        final Attributes attrs) throws SAXException {
-        this.xmlPackageReader.startConfiguration( localName,
-                                                  attrs );
-
-        final String objectType = attrs.getValue( "object-type" );
-
-        if ( objectType == null || objectType.trim().equals( "" ) ) {
-            throw new SAXParseException( "<pattern> requires an 'object-type' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        PatternDescr patternDescr = null;
-
-        final String identifier = attrs.getValue( "identifier" );
-        if ( identifier == null || identifier.trim().equals( "" ) ) {
-            patternDescr = new PatternDescr( objectType );
-        } else {
-            patternDescr = new PatternDescr( objectType,
-                                           identifier );
-        }
-
-        return patternDescr;
-    }
-
-    public Object end(final String uri,
-                      final String localName) throws SAXException {
-        final Configuration config = this.xmlPackageReader.endConfiguration();
-
-        final PatternDescr patternDescr = (PatternDescr) this.xmlPackageReader.getCurrent();
-
-        final LinkedList parents = this.xmlPackageReader.getParents();
-        final ListIterator it = parents.listIterator( parents.size() );
-        it.previous();
-        final Object parent = it.previous();
-
-        final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;
-        parentDescr.addDescr( patternDescr );
-
-        return null;
-    }
-
-    public Class generateNodeFor() {
-        return PatternDescr.class;
-    }
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.lang.descr.*;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * @author mproctor
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class PatternHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    PatternHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( AndDescr.class );
+            this.validParents.add( OrDescr.class );
+            this.validParents.add( NotDescr.class );
+            this.validParents.add( ExistsDescr.class );
+            this.validParents.add( CollectDescr.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+            this.validPeers.add( AndDescr.class );
+            this.validPeers.add( OrDescr.class );
+            this.validPeers.add( NotDescr.class );
+            this.validPeers.add( ExistsDescr.class );
+            this.validPeers.add( EvalDescr.class );
+            this.validPeers.add( PatternDescr.class );
+
+            this.allowNesting = true;
+        }
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+
+        final String objectType = attrs.getValue( "object-type" );
+
+        if ( objectType == null || objectType.trim().equals( "" ) ) {
+            throw new SAXParseException( "<pattern> requires an 'object-type' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        PatternDescr patternDescr = null;
+
+        final String identifier = attrs.getValue( "identifier" );
+        if ( identifier == null || identifier.trim().equals( "" ) ) {
+            patternDescr = new PatternDescr( objectType );
+        } else {
+            patternDescr = new PatternDescr( objectType,
+                                           identifier );
+        }
+
+        return patternDescr;
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final PatternDescr patternDescr = (PatternDescr) this.xmlPackageReader.getCurrent();
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator ite = parents.listIterator( parents.size() );
+        ite.previous();
+        final Object parent = ite.previous();
+
+        if ( parent.getClass().getName().equals( CollectDescr.class.getName() ) ) {
+            final CollectDescr parentDescr = (CollectDescr) parent;
+            parentDescr.setResultPattern( patternDescr );
+        } else if ( parent instanceof ConditionalElementDescr ) {
+            final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;
+            List conditionalDescriptors = parentDescr.getDescrs();
+            
+            if ( !conditionalDescriptors.isEmpty() ) {
+                for ( Iterator iterator = conditionalDescriptors.iterator(); iterator.hasNext(); ) {
+                    Object obj = iterator.next();
+                    
+                    if ( obj.getClass().getName().intern().equals( CollectDescr.class.getName().intern() )) {
+                        return null;
+                    }
+                }
+            }
+            parentDescr.addDescr( patternDescr );            
+        }
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return PatternDescr.class;
+    }
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -0,0 +1,120 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author fmeyer
+ */
+
+class QualifiedIdentifierRestrictionHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    QualifiedIdentifierRestrictionHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( FieldConstraintDescr.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( QualifiedIdentifierRestrictionDescr.class );
+
+            this.allowNesting = false;
+        }
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+
+        final String evaluator = attrs.getValue( "evaluator" );
+        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+            throw new SAXParseException( "<bound-variable> requires an 'evaluator' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+        
+//        qualifiedIdentifierRestricionDescr.set
+
+
+        final QualifiedIdentifierRestrictionDescr qualifiedIdentifierRestricionDescr = new QualifiedIdentifierRestrictionDescr( evaluator,
+                                                                                                                                null );
+
+        return qualifiedIdentifierRestricionDescr;
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final QualifiedIdentifierRestrictionDescr qualifiedIdentifierRestricionDescr = 
+            (QualifiedIdentifierRestrictionDescr) this.xmlPackageReader.getCurrent();
+        
+        
+        final String expression = config.getText();
+
+        if ( expression == null || expression.trim().equals( "" ) ) {
+            throw new SAXParseException( "<qualified-identifier-restriction> must have an expression content",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        qualifiedIdentifierRestricionDescr.setText( expression );
+        
+        
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator it = parents.listIterator( parents.size() );
+        it.previous();
+
+        Object parent = it.previous();
+
+        if ( parent instanceof FieldConstraintDescr ) {
+            final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) parent;
+            fieldConstraintDescr.addRestriction( qualifiedIdentifierRestricionDescr );
+        } else if ( parent instanceof RestrictionConnectiveDescr ) {
+            final RestrictionConnectiveDescr restrictionConDescr = (RestrictionConnectiveDescr) parent;
+            restrictionConDescr.addRestriction( qualifiedIdentifierRestricionDescr );
+        }
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return QualifiedIdentifierRestrictionDescr.class;
+    }
+}
\ No newline at end of file

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -20,16 +20,14 @@
 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.QualifiedIdentifierRestrictionDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 
 /**
  * @author mproctor
@@ -54,10 +52,13 @@
 
             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( QualifiedIdentifierRestrictionDescr.class );
+            
             this.allowNesting = true;
         }
     }

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -24,6 +24,7 @@
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
@@ -50,10 +51,13 @@
 
             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( QualifiedIdentifierRestrictionDescr.class );
+            
             this.allowNesting = false;
         }
     }

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -22,6 +22,7 @@
 
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.CollectDescr;
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
@@ -36,6 +37,7 @@
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PackageDescrDumper;
 import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
@@ -53,6 +55,7 @@
     PackageDescrDumper {
 
     private StringBuffer        xmlDump;
+    private boolean             patternContext;
     private final static String eol = System.getProperty( "line.separator" );
 
     public synchronized String dump(final PackageDescr packageDescr) {
@@ -64,9 +67,8 @@
     public void visitAndDescr(final AndDescr descr) {
         this.template = new String();
         if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
-            this.template = "<and>" + processDescrList( descr.getDescrs() ) + "</and>";
-        } else {
-            this.template = "<and> </and>";
+            if ( !this.patternContext ) this.template = "<and-conditional-element>" + processDescrList( descr.getDescrs() ) + "</and-conditional-element>";
+            else this.template = "<and-constraint-connective>" + processDescrList( descr.getDescrs() ) + "</and-constraint-connective>";
         }
     }
 
@@ -81,6 +83,8 @@
     }
 
     public void visitPatternDescr(final PatternDescr descr) {
+        this.patternContext = true;
+
         this.template = new String();
         if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
             if ( descr.getIdentifier() != null ) {
@@ -95,7 +99,7 @@
                 this.template = "<pattern object-type=\"" + descr.getObjectType() + "\" > </pattern>" + XmlDumper.eol;
             }
         }
-
+        this.patternContext = false;
     }
 
     public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
@@ -104,6 +108,29 @@
         }
     }
 
+
+    public void visitCollectDescr(final CollectDescr descr) {
+        String tmpstr = new String();
+        visitPatternDescr( descr.getResultPattern() );
+
+        this.template =  this.template.substring( 0, this.template.indexOf( "</pattern>" ) );
+        tmpstr += this.template + " <from> <collect> ";
+        visitPatternDescr( descr.getSourcePattern() );
+        tmpstr += this.template;
+        this.template = tmpstr + " </collect> </from> ";
+        this.template += "</pattern>";
+    }
+    
+    //TODO FM: FIXME
+    public void visitAccumulateDescr() {
+        System.out.println("Collect Descr");
+    }
+    
+    //TODO FM: FIXME
+    public void visitForall() {
+        System.out.println("Collect Descr");
+    }    
+
     public void visitEvalDescr(final EvalDescr descr) {
         this.template = new String();
         this.template = "<eval>" + replaceIllegalChars( (String) descr.getContent() ) + "</eval>" + XmlDumper.eol;
@@ -137,6 +164,11 @@
         this.template = "<literal-restriction evaluator=\"" + replaceIllegalChars( descr.getEvaluator() ) + "\" value=\"" + replaceIllegalChars( descr.getText() ) + "\" />" + XmlDumper.eol;
     }
 
+    public void visitQualifiedIdentifierRestrictionDescr(final QualifiedIdentifierRestrictionDescr descr) {
+        this.template = new String();
+        this.template = "<qualified-identifier-restriction evaluator=\"" + replaceIllegalChars( descr.getEvaluator() ) + "\">" + replaceIllegalChars( descr.getText() ) + " </qualified-identifier-restriction>" + XmlDumper.eol;
+    }
+
     public void visitNotDescr(final NotDescr descr) {
         this.template = new String();
         if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
@@ -150,9 +182,8 @@
     public void visitOrDescr(final OrDescr descr) {
         this.template = new String();
         if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
-            this.template = "<or>" + processDescrList( descr.getDescrs() ) + "</or>";
-        } else {
-            this.template = "<or> </or>";
+            if ( !this.patternContext ) this.template = "<or-conditional-element>" + processDescrList( descr.getDescrs() ) + "</or-conditional-element>";
+            else this.template = "<or-constraint-connective>" + processDescrList( descr.getDescrs() ) + "</or-constraint-connective>";
         }
     }
 
@@ -223,12 +254,10 @@
     public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
         this.template = new String();
         List restrictions = descr.getRestrictions();
-        String xmlTag = descr.getConnective() == RestrictionConnectiveDescr.OR 
-            ? RestrictionConnectiveHandler.OR 
-            : RestrictionConnectiveHandler.AND; 
-            
+        String xmlTag = descr.getConnective() == RestrictionConnectiveDescr.OR ? RestrictionConnectiveHandler.OR : RestrictionConnectiveHandler.AND;
+
         if ( restrictions != Collections.EMPTY_LIST ) {
-            this.template  = "<" + xmlTag + ">";
+            this.template = "<" + xmlTag + ">";
             this.template += processDescrList( restrictions );
             this.template += "</" + xmlTag + ">";
         }

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -16,19 +16,36 @@
  * limitations under the License.
  */
 
-import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
-import java.io.*;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.*;
 
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
 /**
  * <code>RuleSet</code> loader.
  *
@@ -130,11 +147,21 @@
 
         this.handlers.put( "or-restriction-connective",
                            new RestrictionConnectiveHandler( this ) );
+        
+        this.handlers.put( "and-conditional-element", 
+                           new AndHandler(this));
+        
+        this.handlers.put( "or-conditional-element", 
+                           new OrHandler(this) );
+        
 
-        this.handlers.put( "and",
+        this.handlers.put( "and-constraint-connective",
                            new AndHandler( this ) );
-        this.handlers.put( "or",
+        this.handlers.put( "or-constraint-connective",
                            new OrHandler( this ) );
+        
+        
+        
         this.handlers.put( "not",
                            new NotHandler( this ) );
         this.handlers.put( "exists",
@@ -143,6 +170,11 @@
                            new EvalHandler( this ) );
         this.handlers.put( "pattern",
                            new PatternHandler( this ) );
+        
+        
+        this.handlers.put( "from", new FromHandler(this) );
+        this.handlers.put( "forall", new ForallHandler(this) );
+        this.handlers.put( "collect", new CollectHandler(this) );
 
         // Field Constraints
         this.handlers.put( "field-constraint",
@@ -153,8 +185,12 @@
                            new VariableRestrictionsHandler( this ) );
         this.handlers.put( "predicate",
                            new PredicateHandler( this ) );
+
         this.handlers.put( "return-value-restriction",
                            new ReturnValueRestrictionHandler( this ) );
+        this.handlers.put( "qualified-identifier-restriction",
+                           new QualifiedIdentifierRestrictionHandler( this ) );
+
         this.handlers.put( "field-binding",
                            new FieldBindingHandler( this ) );
 

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-4.0.xsd	2007-06-21 04:40:03 UTC (rev 12728)
@@ -1,6 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:drools="http://drools.org/drools-4.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://drools.org/drools-4.0">
-	<xs:element name="package">
+        
+<xs:schema
+        xmlns:drools="http://drools.org/drools-4.0"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        elementFormDefault="qualified"
+        targetNamespace="http://drools.org/drools-4.0">
+
+    <xs:element name="package">
 		<xs:complexType>
 			<xs:choice maxOccurs="unbounded" minOccurs="0">
 				<xs:element ref="drools:import"/>
@@ -12,7 +18,8 @@
 			<xs:attribute name="name" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	<xs:element name="rule">
+    
+    <xs:element name="rule">
 		<xs:complexType>
 			<xs:sequence>
 				<xs:element maxOccurs="unbounded" minOccurs="0" ref="drools:rule-attribute"/>
@@ -21,37 +28,41 @@
 			</xs:sequence>
 			<xs:attribute name="name" type="xs:string" use="required"/>
 		</xs:complexType>
-<!-- All rules must have unique names -->
+        <!-- All rules must have unique names -->
 		<xs:key name="ruleName">
 			<xs:selector xpath="drools:rule"/>
 			<xs:field xpath="@name"/>
 		</xs:key>
 	</xs:element>
-	<xs:element name="query">
+    
+    <xs:element name="query">
 		<xs:complexType>
 			<xs:sequence>
 				<xs:element ref="drools:lhs"/>
 			</xs:sequence>
 			<xs:attribute name="name" type="xs:string" use="required"/>
 		</xs:complexType>
-<!-- All rules must have unique names -->
+        <!-- All rules must have unique names -->
 		<xs:key name="queryName">
 			<xs:selector xpath="drools:query"/>
 			<xs:field xpath="@name"/>
 		</xs:key>
 	</xs:element>
-	<xs:element name="rule-attribute">
+
+    <xs:element name="rule-attribute">
 		<xs:complexType>
 			<xs:attribute name="name" type="xs:string" use="required"/>
 			<xs:attribute name="value" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	<xs:element name="import">
+    
+    <xs:element name="import">
 		<xs:complexType>
 			<xs:attribute name="name" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	<xs:element name="global">
+    
+    <xs:element name="global">
 		<xs:complexType>
 			<xs:attribute name="type" type="xs:string" use="required"/>
 			<xs:attribute name="identifier" type="xs:string" use="required"/>
@@ -73,66 +84,159 @@
 			<xs:attribute name="identifier" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	
+
 	<xs:element name="rhs" type="xs:string"/>
-	
+
 	<xs:element name="lhs">
 		<xs:complexType>
 			<xs:choice maxOccurs="unbounded" minOccurs="0">
-				<xs:element ref="drools:and"/>
-				<xs:element ref="drools:or"/>
-				<xs:element ref="drools:not"/>
+                <xs:element ref="drools:abstractConditionalElement"/>
+                <xs:element ref="drools:not"/>
 				<xs:element ref="drools:exists"/>
-				<xs:element ref="drools:eval"/>
 				<xs:element ref="drools:pattern"/>
-				<xs:element ref="drools:forall"/>
-				<xs:element ref="drools:exists"/>
+
+                <xs:element ref="drools:eval"/>
+                <xs:element ref="drools:forall"/>
 			</xs:choice>
 		</xs:complexType>
 	</xs:element>
-	
-	<xs:element name="and">
+
+    <!-- Restriction Conective  -->
+    <xs:element name="abstractRestrictionConnective" type="drools:restrictionElementType" abstract="true"/>
+    <xs:element name="abstractConditionalElement" type="drools:conditionalElementType" abstract="true"/>
+    <xs:element name="abstractConstraintConective" type="drools:constraintConnectiveElementType" abstract="true"/>
+    
+    <xs:complexType name="restrictionElementType" >
+        <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="drools:literal-restriction"/>
+            <xs:element ref="drools:variable-restriction"/>
+            <xs:element ref="drools:return-value-restriction"/>
+            <xs:element ref="drools:qualified-identifier-restriction"/>
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:complexType name="conditionalElementType" >
+
+        <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="drools:not"/>
+            <xs:element ref="drools:exists"/>
+            <xs:element ref="drools:eval"/>
+            <xs:element ref="drools:pattern"/>
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:complexType name="constraintConnectiveElementType" >
+        <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="drools:field-constraint"/>
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:element name="and-restriction-connective" substitutionGroup="drools:abstractRestrictionConnective">
+        <xs:complexType>
+            <xs:complexContent>
+                <xs:extension base="drools:restrictionElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:or-restriction-connective"/>
+                    </xs:choice>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="or-restriction-connective" substitutionGroup="drools:abstractRestrictionConnective">
+        <xs:complexType>
+            <xs:complexContent>
+                <xs:extension base="drools:restrictionElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:and-restriction-connective"/>
+                    </xs:choice>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+
+    <!-- Conditional Element -->
+    <xs:element name="and-conditional-element" substitutionGroup="drools:abstractConditionalElement">
+        <xs:complexType>
+            <xs:complexContent>
+                <xs:extension base="drools:conditionalElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:or-conditional-element"/>
+                    </xs:choice>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="or-conditional-element" substitutionGroup="drools:abstractConditionalElement">
+        <xs:complexType>
+            <xs:complexContent>
+                <xs:extension base="drools:conditionalElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:and-conditional-element"/>
+                    </xs:choice>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+    <!-- Logical Connectives -->
+
+
+    <xs:element name="and-constraint-connective" substitutionGroup="drools:abstractConstraintConective">
+        <xs:complexType>
+            <xs:complexContent>
+                <xs:extension base="drools:constraintConnectiveElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:or-constraint-connective"/>
+                    </xs:choice>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="or-constraint-connective" substitutionGroup="drools:abstractConstraintConective">
+        <xs:complexType>
+            <xs:complexContent>
+                <xs:extension base="drools:constraintConnectiveElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:and-constraint-connective"/>
+                    </xs:choice>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>    
+
+
+    <xs:element name="not">
 		<xs:complexType>
-			<xs:choice maxOccurs="unbounded" minOccurs="0">
-				<xs:element ref="drools:or"/>
-				<xs:element ref="drools:not"/>
-				<xs:element ref="drools:exists"/>
-				<xs:element ref="drools:eval"/>
-				<xs:element ref="drools:pattern"/>
-				<xs:element ref="drools:field-constraint"/>
-				
-			</xs:choice>
+			<xs:choice maxOccurs="unbounded" minOccurs="1">
+                <xs:element ref="drools:abstractConditionalElement"/>
+
+                <xs:element ref="drools:not"/>
+                <xs:element ref="drools:exists"/>
+                <xs:element ref="drools:pattern"/>
+
+                <xs:element ref="drools:accumulate"/>
+                <xs:element ref="drools:collect"/>
+                <xs:element ref="drools:forall"/>
+            </xs:choice>
 		</xs:complexType>
 	</xs:element>
-	
-	<xs:element name="or">
+
+	<xs:element name="exists">
 		<xs:complexType>
 			<xs:choice maxOccurs="unbounded" minOccurs="0">
-				<xs:element ref="drools:and"/>
-				<xs:element ref="drools:not"/>
-				<xs:element ref="drools:exists"/>
-				<xs:element ref="drools:eval"/>
-				<xs:element ref="drools:pattern"/>
-				<xs:element ref="drools:field-constraint"/>
-			</xs:choice>
+                <xs:element ref="drools:pattern"/>
+                <xs:element ref="drools:abstractConditionalElement"/>
+
+                <xs:element ref="drools:accumulate"/>
+                <xs:element ref="drools:collect"/>
+                <xs:element ref="drools:forall"/>                
+            </xs:choice>
 		</xs:complexType>
 	</xs:element>
-	
-	<xs:element name="not">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="drools:pattern"/>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-		
-	<xs:element name="exists">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="drools:pattern"/>
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
 
 	<xs:element name="forall">
 		<xs:complexType>
@@ -161,7 +265,6 @@
      </xs:sequence>
     </xs:group>
 
-
     <xs:element name="accumulate">
         <xs:complexType>
             <xs:group ref="drools:accumulate"/>
@@ -170,7 +273,7 @@
 
     <xs:element name="from">
         <xs:complexType>
-            <xs:choice maxOccurs="1" minOccurs="0">
+            <xs:choice maxOccurs="1">
                 <xs:element ref="drools:collect"/>
                 <xs:element ref="drools:expression"/>
                 <xs:element ref="drools:accumulate"/>
@@ -178,39 +281,36 @@
         </xs:complexType>
     </xs:element>
 
-	
 	<xs:element name="eval" type="xs:string"/>
-	
-	<xs:element name="pattern">
+
+    <xs:element name="pattern">
 		<xs:complexType>
 			<xs:choice maxOccurs="unbounded" minOccurs="0">
 				<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:predicate"/>                
+                <xs:element ref="drools:abstractConstraintConective"/>                
             </xs:choice>
 			<xs:attribute name="field-name" type="xs:string" use="optional"/>
 			<xs:attribute name="identifier" type="xs:string" use="optional"/>
 			<xs:attribute name="object-type" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	
+
 	<xs:element name="field-constraint">
 		<xs:complexType>
-			<xs:choice maxOccurs="unbounded" minOccurs="0">
-				<xs:element ref="drools:literal-restriction"/>
-				<xs:element ref="drools:variable-restriction"/>
-				<xs:element ref="drools:return-value-restriction"/>
-				<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:complexContent>
+                <xs:extension base="drools:restrictionElementType">
+                    <xs:choice maxOccurs="unbounded" minOccurs="0" >
+                        <xs:element ref="drools:abstractRestrictionConnective"/>
+                    </xs:choice>
+                    <xs:attribute name="field-name" type="xs:string" use="required"/>
+                </xs:extension>
+            </xs:complexContent>
 		</xs:complexType>
 	</xs:element>
-	
+
 	<xs:element name="field-binding">
 		<xs:complexType>
 			<xs:attribute name="field-name" type="xs:string" use="required"/>
@@ -218,46 +318,20 @@
 		</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: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>
 			<xs:attribute name="evaluator" type="xs:string" use="required"/>
 			<xs:attribute name="value" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	
+
 	<xs:element name="variable-restriction">
 		<xs:complexType>
 			<xs:attribute name="evaluator" type="xs:string" use="required"/>
 			<xs:attribute name="identifier" type="xs:string" use="required"/>
 		</xs:complexType>
 	</xs:element>
-	
+
 	<xs:element name="return-value-restriction">
 		<xs:complexType>
 			<xs:simpleContent>
@@ -268,14 +342,25 @@
 		</xs:complexType>
 	</xs:element>
 
+    <xs:element name="qualified-identifier-restriction">
+        <xs:complexType>
+            <xs:simpleContent>
+                <xs:extension base="xs:string">
+                    <xs:attribute name="evaluator" type="xs:string" use="required"/>
+                </xs:extension>
+            </xs:simpleContent>
+        </xs:complexType>
+    </xs:element>
+
     <xs:element name="predicate">
         <xs:complexType>
 			<xs:simpleContent>
 				<xs:extension base="xs:string">
-                    <xs:attribute name="field-name" type="xs:string" use="required"/>
-                    <xs:attribute name="identifier" type="xs:string" use="required"/>
+                    <xs:attribute name="field-name" type="xs:string" use="optional"/>
+                    <xs:attribute name="identifier" type="xs:string" use="optional"/>
                 </xs:extension>
 			</xs:simpleContent>
         </xs:complexType>
     </xs:element>
+
 </xs:schema>

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -6,7 +6,6 @@
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.RuleDescr;
 
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.StringReader;
@@ -24,7 +23,10 @@
         final PackageDescr pkgOriginal = xmlPackageReader.getPackageDescr();
 
         final XmlDumper dumper = new XmlDumper();
+        
         final String result = dumper.dump( pkgOriginal );
+        
+        System.out.println(result);
 
         final DrlDumper drldumper = new DrlDumper();        
         final String drlresult = drldumper.dump( pkgOriginal );
@@ -65,16 +67,13 @@
         DrlParser parser = new DrlParser();
         final PackageDescr pkgOriginal = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "test_Dump.drl" ) ) );
         final DrlDumper dumper = new DrlDumper();
-
-        
         final XmlDumper XMLdumper = new XmlDumper();
         final String XMLresult = XMLdumper.dump( pkgOriginal );
         
         final String result = dumper.dump( pkgOriginal );
         
-        
         System.out.println(result);
-        
+
         assertNotNull( result );
 
         parser = new DrlParser();
@@ -102,9 +101,9 @@
         
 
         // Now double check the contents are the same
-        
+
         String buffer = readFile( "test_Dump.drl" );
-        
+
         assertEqualsIgnoreWhitespace( buffer.toString(), 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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-21 04:40:03 UTC (rev 12728)
@@ -1,21 +1,16 @@
 package org.drools.xml;
 
 import java.io.InputStreamReader;
-import java.util.ArrayList;
 import java.util.List;
 
 import junit.framework.TestCase;
 
-import org.drools.Cheese;
-import org.drools.Person;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.compiler.PackageBuilder;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.CollectDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
@@ -27,16 +22,15 @@
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
-import org.drools.rule.Package;
 
 public class XmlPackageReaderTest extends TestCase {
-    
-    
+
     protected RuleBase getRuleBase() throws Exception {
 
         return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
@@ -48,61 +42,124 @@
         return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
                                             config );
     }
-
     
-    public void testParsePackageName() throws Exception {
-        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
-        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParsePackageName.xml" ) ) );
-        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
-        assertNotNull( packageDescr );
-        assertEquals( "com.sample",
-                      packageDescr.getName() );
-    }
-        
+    
     public void testParseExists() throws Exception {
         final XmlPackageReader xmlPackageReader = new XmlPackageReader();
         xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseExists.xml" ) ) );
         final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
         assertNotNull( packageDescr );
-        
+
         RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 );
-        Object existdescr = obj.getLhs().getDescrs().get( 1 );
+        Object existdescr = obj.getLhs().getDescrs().get( 0 );
         assertTrue( existdescr instanceof ExistsDescr );
-        
+
         Object patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 );
         assertTrue( patternDescriptor instanceof PatternDescr );
+        assertEquals( ((PatternDescr) patternDescriptor).getObjectType(), "Person" );
+
+        Object notDescr = obj.getLhs().getDescrs().get( 1 );
+        
+        assertEquals( notDescr.getClass().getName(), NotDescr.class.getName());
+        existdescr = ( (NotDescr) notDescr).getDescrs().get( 0 );
+        patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 );
+        assertTrue( patternDescriptor instanceof PatternDescr );
+        assertEquals( ((PatternDescr) patternDescriptor).getObjectType(), "Cheese" );
     }
     
-    public void testParseForall() throws Exception {
+    
+    public void testParseCollect() throws Exception {
         final XmlPackageReader xmlPackageReader = new XmlPackageReader();
-        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseForall.xml" ) ) );
+        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseCollect.xml" ) ) );
         final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+
         assertNotNull( packageDescr );
         
         RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 );
-        assertEquals( obj.getLhs().getDescrs().size(), 3); 
+        Object objectCollect = obj.getLhs().getDescrs().get( 0 );
+        assertTrue( objectCollect instanceof CollectDescr );
+
+        CollectDescr collectDescr = (CollectDescr) objectCollect;
+
+        PatternDescr resultPattern = collectDescr.getResultPattern();
+        PatternDescr sourcePattern = collectDescr.getSourcePattern();
+
+        assertEquals( resultPattern.getObjectType(),
+                      "Person" );
+        assertEquals( sourcePattern.getObjectType(),
+                      "Cheese" );
+
+        Object fieldContraintObject = resultPattern.getConstraint().getDescrs().get( 0 );
+        assertTrue( fieldContraintObject instanceof FieldConstraintDescr );
+        FieldConstraintDescr fieldconstraintdescr = (FieldConstraintDescr) fieldContraintObject;
+        assertEquals( fieldconstraintdescr.getFieldName(),
+                      "hair" );
+        Object literal1 = fieldconstraintdescr.getRestrictions().get( 0 );
+        assertTrue( literal1 instanceof LiteralRestrictionDescr );
+        LiteralRestrictionDescr literalDesc = (LiteralRestrictionDescr) literal1;
+        assertEquals( literalDesc.getEvaluator(),
+                      "==" );
+        assertEquals( literalDesc.getText(),
+                      "pink" );
+
+        fieldContraintObject = sourcePattern.getConstraint().getDescrs().get( 0 );
+        assertTrue( fieldContraintObject instanceof FieldConstraintDescr );
+        fieldconstraintdescr = (FieldConstraintDescr) fieldContraintObject;
+        assertEquals( fieldconstraintdescr.getFieldName(),
+                      "type" );
+        literal1 = fieldconstraintdescr.getRestrictions().get( 0 );
+        assertTrue( literal1 instanceof LiteralRestrictionDescr );
+        literalDesc = (LiteralRestrictionDescr) literal1;
+        assertEquals( literalDesc.getEvaluator(),
+                      "==" );
+        assertEquals( literalDesc.getText(),
+                      "1" );
     }
 
-
-//    public void testParseFrom() throws Exception {
+    
+//    //TODO: FM FIXME
+//    public void testParseForall() throws Exception {
 //        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
-//        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFrom.xml" ) ) );
+//        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseForall.xml" ) ) );
 //        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
 //        assertNotNull( packageDescr );
-//        assertEquals( "com.sample", packageDescr.getName() );
-//        fail();
+//
+//        RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 );
+//        assertEquals( obj.getLhs().getDescrs().size(),
+//                      3 );
 //    }
-//    
-//    
-//    public void testParseCollect() throws Exception {
+//
+//    //TODO: FM FIXME
+//    public void testAccumulate() throws Exception {
 //        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
-//        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseCollect.xml" ) ) );
+//        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseForall.xml" ) ) );
 //        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
 //        assertNotNull( packageDescr );
-//        assertEquals( "com.sample", packageDescr.getName() );
-//        fail();
+//
+//        RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 );
+//        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() );
+    }
     
+    public void testParsePackageName() throws Exception {
+        final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+        xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParsePackageName.xml" ) ) );
+        final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+        assertNotNull( packageDescr );
+        assertEquals( "com.sample",
+                      packageDescr.getName() );
+    }    
+    
+    
 
     public void testParseImport() throws Exception {
         final XmlPackageReader xmlPackageReader = new XmlPackageReader();
@@ -266,7 +323,6 @@
 
         final String consequence = (String) ruleDescr.getConsequence();
         assertNotNull( consequence );
-
     }
 
     public void testParseLhs() throws Exception {
@@ -320,6 +376,7 @@
                       ruleDescr.getName() );
 
         final AndDescr lhsDescr = ruleDescr.getLhs();
+
         AndDescr andDescr = (AndDescr) lhsDescr.getDescrs().get( 0 );
         OrDescr orDescr = (OrDescr) lhsDescr.getDescrs().get( 1 );
         final PatternDescr pattern1 = (PatternDescr) lhsDescr.getDescrs().get( 2 );
@@ -383,22 +440,22 @@
         andDescr = (AndDescr) lhsDescr.getDescrs().get( 7 );
         assertEquals( 2,
                       andDescr.getDescrs().size() );
-        orDescr = (OrDescr) andDescr.getDescrs().get( 0 );
+        orDescr = (OrDescr) andDescr.getDescrs().get( 1 );
         patternDescr = (PatternDescr) orDescr.getDescrs().get( 0 );
         assertEquals( "Bar",
                       patternDescr.getObjectType() );
-        patternDescr = (PatternDescr) andDescr.getDescrs().get( 1 );
+        patternDescr = (PatternDescr) andDescr.getDescrs().get( 0 );
         assertEquals( "Yada",
                       patternDescr.getObjectType() );
 
         orDescr = (OrDescr) lhsDescr.getDescrs().get( 8 );
         assertEquals( 2,
                       orDescr.getDescrs().size() );
-        andDescr = (AndDescr) orDescr.getDescrs().get( 0 );
+        andDescr = (AndDescr) orDescr.getDescrs().get( 1 );
         patternDescr = (PatternDescr) andDescr.getDescrs().get( 0 );
         assertEquals( "Foo",
                       patternDescr.getObjectType() );
-        patternDescr = (PatternDescr) orDescr.getDescrs().get( 1 );
+        patternDescr = (PatternDescr) orDescr.getDescrs().get( 0 );
         assertEquals( "Zaa",
                       patternDescr.getObjectType() );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl	2007-06-21 04:40:03 UTC (rev 12728)
@@ -11,7 +11,8 @@
     foo4 : Bar( a4 : a != 4 && != 5)
     foo5 : Bar( b == (a4 + 1) || > a4)    
     foo6 : Bar( a4 : a, b == 6)    
-    foo7 : Bar( a4 : a, b4 : b)        
+    foo7 : Bar( a4 : a, b4 : b)    
+    $cheeseList  : ArrayList(size > 2) from collect( Cheese( type == $likes ) );    
     Baz()
   then
   if ( a == b ) {

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseAccumulate.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseAccumulate.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseAccumulate.xml	2007-06-21 04:40:03 UTC (rev 12728)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package name="com.sample"
+         xmlns="http://drools.org/drools-4.0"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-4.0 drools-4.0.xsd">
+
+	<import name="import java.util.List"/>
+	<import name="org.drools.Cheese" />
+	<import name="org.drools.Cheesery" />
+
+	<global identifier="cheesery" type="Cheesery" />
+	<global identifier="list1" type="List" />
+
+    <rule name="simple_rule">
+        <rule-attribute name="salience" value="10" />
+        <rule-attribute name="no-loop" value="true" />
+        <rule-attribute name="agenda-group" value="agenda-group" />
+        <rule-attribute name="activation-group" value="activation-group" />
+
+        <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>
+    </rule>
+</package>

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseCollect.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseCollect.xml	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseCollect.xml	2007-06-21 04:40:03 UTC (rev 12728)
@@ -1,27 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample" xmlns="http://drools.org/drools-4.0"
+<package name="com.sample"  
+	xmlns="http://drools.org/drools-4.0"
 	xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 	xs:schemaLocation="http://drools.org/drools-4.0 drools-4.0.xsd">
-	
-	<import name="import java.util.List"/>
-	<import name="org.drools.Cheese"/>
-	<import name="org.drools.Cheesery"/>
-	
-	<global identifier="cheesery" type="Cheesery"/>
-	<global identifier="list" type="List"/>
-	
-	<rule name="simple_rule">
-		<rule-attribute name="salience" value="10"/>
-		<rule-attribute name="no-loop" value="true"/>
-		<rule-attribute name="agenda-group" value="agenda-group"/>
-		<rule-attribute name="activation-group" value="activation-group"/>
-		
-		<lhs>
-			<pattern identifier="cheeseList" object-type="ArrayList">
-				<from source="unordered-fact">person</from>
-			</pattern>
-		</lhs>
-		<rhs> list.add( $cheese ); </rhs>
+
+<rule name="simple_rule">
+
+	<lhs>
+		<pattern object-type="Person" >
+			<field-constraint field-name="hair">
+				<literal-restriction evaluator="==" value="pink" />
+			</field-constraint>
+			<from>
+				<collect>
+					<pattern identifier="cheese" object-type="Cheese" >
+						<field-constraint field-name="type">
+							<literal-restriction evaluator="==" value="1" />
+						</field-constraint>
+					</pattern>
+				</collect>
+			</from>
+	</lhs>
+	<rhs>
+		list.add( $cheese ); </rhs>
 	</rule>
-	
+
 </package>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseExists.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseExists.xml	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseExists.xml	2007-06-21 04:40:03 UTC (rev 12728)
@@ -3,24 +3,8 @@
 	xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 	xs:schemaLocation="http://drools.org/drools-4.0 drools-4.0.xsd">
 	
-	<import name="import java.util.List"/>
-	<import name="org.drools.Cheese"/>
-	<import name="org.drools.Cheesery"/>
-	
-	<global identifier="cheesery" type="Cheesery"/>
-	<global identifier="list" type="List"/>
-	
 	<rule name="simple_rule">
-		<rule-attribute name="salience" value="10"/>
-		<rule-attribute name="no-loop" value="true"/>
-		<rule-attribute name="agenda-group" value="agenda-group"/>
-		<rule-attribute name="activation-group" value="activation-group"/>
-		
 		<lhs>
-			<pattern identifier="cheese" object-type="Cheese">
-				<field-binding field-name="type" identifier="type"/>
-			</pattern>
-			
 			<exists>
 				<pattern object-type="Person">
 					<field-constraint field-name="likes">
@@ -28,6 +12,16 @@
 					</field-constraint>
 				</pattern>
 			</exists>
+
+            <not>
+                <exists>
+                    <pattern object-type="Cheese">
+                        <field-constraint field-name="likes">
+                            <variable-restriction evaluator="==" identifier="type"/>
+                        </field-constraint>
+                    </pattern>
+                </exists>
+            </not>
 		</lhs>
 		<rhs> list.add( $cheese ); </rhs>
 	</rule>

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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml	2007-06-21 04:40:03 UTC (rev 12728)
@@ -25,35 +25,6 @@
                  </expression>
             </from>
         </pattern>
-
-        <pattern identifier="cheese" object-type="Cheese" >
-            <from>
-                <collect>
-                    <pattern object-type="Person">
-                        <field-constraint field-name="hair">
-                            <literal-restriction evaluator="==" value="pink" />
-                        </field-constraint>
-                    </pattern>
-                </collect>
-            </from>
-        </pattern>
-
-        <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 );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml	2007-06-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml	2007-06-21 04:40:03 UTC (rev 12728)
@@ -21,13 +21,12 @@
 	
 	<rule name="my rule">
 		<lhs>
-			<and>
-			</and>	
-				
-			<or>
-			</or>
-			
-			<pattern object-type="Foo" >			
+
+            <and-conditional-element></and-conditional-element>
+
+            <or-conditional-element></or-conditional-element>
+
+            <pattern object-type="Foo" >
 			</pattern>							
 				
 			<pattern identifier="bar" object-type="Bar" >			
@@ -53,21 +52,21 @@
 				<pattern object-type="Bar" />							
 			</exists>		
 			
-			<and>
-				<or>
-					<pattern object-type="Bar" />			
-				</or>
-				<pattern object-type="Yada" />							
-			</and>							
-				
-			<or>
-				<and>
-					<pattern object-type="Foo" />							
-				</and>	
-				<pattern object-type="Zaa" />			
-			</or>	
-			
-			<eval>1==1</eval>					
+			<and-conditional-element>
+                <pattern object-type="Yada"/>
+                <or-conditional-element>
+                    <pattern object-type="Bar"/>
+                </or-conditional-element>
+
+            </and-conditional-element>
+
+            <or-conditional-element>
+                <pattern object-type="Zaa"/>
+                <and-conditional-element>
+                    <pattern object-type="Foo"/>
+                </and-conditional-element>
+            </or-conditional-element>
+			<eval>1==1</eval>
 		</lhs>
 		
 	    <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-21 04:28:03 UTC (rev 12727)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml	2007-06-21 04:40:03 UTC (rev 12728)
@@ -1,24 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
 <package name="com.sample"
          xmlns="http://drools.org/drools-4.0"
          xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
          xs:schemaLocation="http://drools.org/drools-4.0 drools-4.0.xsd">
-         
+
 	<import name="java.util.HashMap" />
-	<import name="org.drools.*" />		
-	
-	<global identifier="x" type="com.sample.X" />		
+	<import name="org.drools.*" />
+
+	<global identifier="x" type="com.sample.X" />
 	<global identifier="yada" type="com.sample.Yada" />
 	
 	<function return-type="void" name="myFunc">
 	    <parameter identifier="foo" type="Bar" />
 	    <parameter identifier="bada" type="Bing" />
-	    	    
+
 	    <body>
 	    	System.out.println("hello world");
-		</body>		
+		</body>
 	</function>
-	
+
 <rule name="simple_rule">
 	<rule-attribute name="salience" value="10" />
 	<rule-attribute name="no-loop" value="true" />
@@ -26,10 +27,9 @@
 	<rule-attribute name="activation-group" value="activation-group" />
 
 	<lhs>
-
 		<pattern identifier="foo2" object-type="Bar" >
-            <or>
-                <and>
+            <or-constraint-connective>
+                <and-constraint-connective>
 					<field-constraint field-name="a">
                         <or-restriction-connective>
                             <and-restriction-connective>
@@ -39,16 +39,16 @@
                             <and-restriction-connective>
                                 <literal-restriction evaluator="&lt;" value="50" />
                                 <literal-restriction evaluator="&gt;" value="55" />
-                            </and-restriction-connective>                            
+                            </and-restriction-connective>
                         </or-restriction-connective>
 					</field-constraint>
 
 					<field-constraint field-name="a3">
                         <literal-restriction evaluator="==" value="black" />
                     </field-constraint>
-                </and>
+                </and-constraint-connective>
 
-                <and>
+                <and-constraint-connective>
                     <field-constraint field-name="a">
                         <literal-restriction evaluator="==" value="40" />
                     </field-constraint>
@@ -56,59 +56,79 @@
                     <field-constraint field-name="a3">
                         <literal-restriction evaluator="==" value="pink" />
                     </field-constraint>
-                </and>
+                </and-constraint-connective>
 
-                <and>
+                <and-constraint-connective>
                     <field-constraint field-name="a">
                         <literal-restriction evaluator="==" value="12"/>
                     </field-constraint>
-					
+
                     <field-constraint field-name="a3">
                         <or-restriction-connective>
                             <literal-restriction evaluator="==" value="yellow"/>
                             <literal-restriction evaluator="==" value="blue" />
                         </or-restriction-connective>
                     </field-constraint>
-                </and>
-            </or>
+                </and-constraint-connective>
+            </or-constraint-connective>
         </pattern>
-		
-		
-        <pattern identifier="foo3" object-type="Bar" >
-			<field-constraint field-name="a">
-                <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" />
-			</field-constraint>
-			<field-constraint field-name="a4">
-                <literal-restriction evaluator="==" value="null" />
-			</field-constraint>
-		</pattern>
 
-		<pattern identifier="foo4" object-type="Bar" >
-			<field-binding field-name="a" identifier="a4" />
-			<field-constraint field-name="a"> 
-				<literal-restriction evaluator="!=" value="4" />
-				<literal-restriction evaluator="!=" value="5" />
-			</field-constraint>
-		</pattern>
+        <not>
+            <pattern object-type="Person">
+                <field-constraint field-name="likes">
+                    <variable-restriction evaluator="==" identifier="type"/>
+                </field-constraint>
+            </pattern>
 
-		<pattern identifier="foo5" object-type="Bar" >
-			<field-constraint field-name="b">
+            <exists>
+                <pattern object-type="Person">
+                    <field-constraint field-name="likes">
+                        <variable-restriction evaluator="==" identifier="type"/>
+                    </field-constraint>
+                </pattern>                
+            </exists>
+        </not>
+
+        <or-conditional-element>
+            <pattern identifier="foo3" object-type="Bar" >
+                <field-constraint field-name="a">
+                    <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" />
+                </field-constraint>
+                <field-constraint field-name="a4">
+                    <literal-restriction evaluator="==" value="null" />
+                </field-constraint>
+            </pattern>
+
+            <pattern identifier="foo4" object-type="Bar" >
+                <field-binding field-name="a" identifier="a4" />
+                <field-constraint field-name="a">
+                    <literal-restriction evaluator="!=" value="4" />
+                    <literal-restriction evaluator="!=" value="5" />
+                </field-constraint>
+            </pattern>
+        </or-conditional-element>
+
+        <pattern identifier="foo5" object-type="Bar" >
+            <field-constraint field-name="b">
                 <or-restriction-connective>
                     <return-value-restriction evaluator="==" >a4 + 1</return-value-restriction>
                     <variable-restriction evaluator="&gt;" identifier="a4" />
+                    <qualified-identifier-restriction evaluator="==">
+                        org.drools.Bar.BAR_ENUM_VALUE
+                    </qualified-identifier-restriction>
                 </or-restriction-connective>
-			</field-constraint>
-		</pattern>
+            </field-constraint>            
+        </pattern>
 
-		<pattern identifier="foo6" object-type="Bar" >
+        <pattern identifier="foo6" object-type="Bar" >
 			<field-binding field-name="a" identifier="a4" />
-			<field-constraint field-name="b"> 
+			<field-constraint field-name="b">
 				<literal-restriction evaluator="==" value="6" />
 			</field-constraint>
 		</pattern>
@@ -117,17 +137,16 @@
 			<field-binding field-name="a" identifier="a4" />
 			<field-binding field-name="b" identifier="b4" />
 		</pattern>
-
 		<pattern object-type="Baz" > </pattern>
 	</lhs>
-	<rhs>  
+	<rhs>
 		  if ( a == b ) {
 		    assert( foo3 );
 		  } else {
 		    retract( foo4 );
-		  } 
+		  }
 		  System.out.println( a4 );
 	</rhs>
 </rule>
 
-</package>
\ No newline at end of file
+</package>




More information about the jboss-svn-commits mailing list