[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="<" value="50" />
<literal-restriction evaluator=">" 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=">" 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