[jboss-svn-commits] JBL Code SVN: r12646 - in labs/jbossrules/trunk/drools-compiler/src: main/resources/META-INF and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jun 17 18:36:12 EDT 2007
Author: fmeyer
Date: 2007-06-17 18:36:12 -0400 (Sun, 17 Jun 2007)
New Revision: 12646
Added:
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_ParseForall.xml
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.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/RestrictionConnectiveHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.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_ParseFunction.xml
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseGlobal.xml
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseImport.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_ParsePackageName.xml
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseQuery.xml
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRhs.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-888 - Special connective "or" constraint
JBRULES-891 - Create a specialized "exists" node
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AndHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,102 +1,97 @@
-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.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * @author mproctor
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class AndHandler extends BaseAbstractHandler
- implements
- Handler {
- AndHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( QueryDescr.class );
- this.validParents.add( RuleDescr.class );
- this.validParents.add( OrDescr.class );
- this.validParents.add( AndDescr.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 AndDescr andDescr = new AndDescr();
-
- return andDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final AndDescr andDescr = (AndDescr) this.xmlPackageReader.getCurrent();
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final Object parent = it.previous();
-
- if ( parent.getClass() == RuleDescr.class || parent.getClass() == QueryDescr.class ) {
- final RuleDescr ruleDescr = (RuleDescr) parent;
- ruleDescr.setLhs( andDescr );
- } else {
- final ConditionalElementDescr ceDescr = (ConditionalElementDescr) parent;
- ceDescr.addDescr( andDescr );
- }
-
- return null;
- }
-
- public Class generateNodeFor() {
- return AndDescr.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 java.util.HashSet;
+import java.util.LinkedList;
+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 AndHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ AndHandler(final XmlPackageReader xmlPackageReader) {
+ this.xmlPackageReader = xmlPackageReader;
+
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( QueryDescr.class );
+ this.validParents.add( RuleDescr.class );
+ this.validParents.add( OrDescr.class );
+ this.validParents.add( AndDescr.class );
+ this.validParents.add( LiteralRestrictionHandler.class );
+
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+ this.validPeers.add( AndDescr.class );
+ 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 AndDescr andDescr = new AndDescr();
+
+ return andDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final AndDescr andDescr = (AndDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final Object parent = it.previous();
+
+
+ if (parent instanceof RuleDescr || parent instanceof QueryDescr) {
+ final RuleDescr ruleDescr = (RuleDescr) parent;
+ ruleDescr.setLhs( andDescr );
+ } else if ( parent instanceof ConditionalElementDescr ) {
+ final ConditionalElementDescr ceDescr = (ConditionalElementDescr) parent;
+ ceDescr.addDescr( andDescr );
+ }
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return AndDescr.class;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,94 +1,104 @@
-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.PatternDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.PredicateDescr;
-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 FieldConstraintHandler extends BaseAbstractHandler
- implements
- Handler {
- FieldConstraintHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( PatternDescr.class );
-
- this.validPeers = new HashSet();
- this.validPeers.add( null );
- this.validPeers.add( FieldConstraintDescr.class );
- this.validPeers.add( PredicateDescr.class );
- this.validPeers.add( FieldBindingDescr.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 fieldName = attrs.getValue( "field-name" );
-
- if ( fieldName == null || fieldName.trim().equals( "" ) ) {
- throw new SAXParseException( "<field-constraint> requires a 'field-name' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final FieldConstraintDescr fieldConstraint = new FieldConstraintDescr( fieldName );
-
- return fieldConstraint;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) this.xmlPackageReader.getCurrent();
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final Object parent = it.previous();
-
- final PatternDescr patternDescr = (PatternDescr) parent;
- patternDescr.addConstraint( fieldConstraintDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return FieldConstraintDescr.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.LinkedList;
+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 FieldConstraintHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ FieldConstraintHandler(final XmlPackageReader xmlPackageReader) {
+ this.xmlPackageReader = xmlPackageReader;
+
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( PatternDescr.class );
+ this.validParents.add( AndDescr.class );
+ this.validParents.add( OrDescr.class );
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+ this.validPeers.add( FieldConstraintDescr.class );
+ this.validPeers.add( PredicateDescr.class );
+ this.validPeers.add( FieldBindingDescr.class );
+
+ this.validPeers.add( AndDescr.class );
+ this.validPeers.add( OrDescr.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 fieldName = attrs.getValue( "field-name" );
+
+ if ( fieldName == null || fieldName.trim().equals( "" ) ) {
+ throw new SAXParseException( "<field-constraint> requires a 'field-name' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final FieldConstraintDescr fieldConstraint = new FieldConstraintDescr( fieldName );
+
+ return fieldConstraint;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final Object parent = it.previous();
+
+ if ( parent instanceof PatternDescr ) {
+ final PatternDescr patternDescr = (PatternDescr) parent;
+ patternDescr.addConstraint( fieldConstraintDescr );
+ } else if ( parent instanceof ConditionalElementDescr ) {
+ final ConditionalElementDescr ceDescr = (ConditionalElementDescr) parent;
+ FieldConstraintDescr field = (FieldConstraintDescr) this.xmlPackageReader.getCurrent();
+ ceDescr.addOrMerge( field );
+ }
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return FieldConstraintDescr.class;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,46 +1,44 @@
-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.Set;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * @author mproctor
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-interface Handler {
-
- Object start(String uri,
- String localName,
- Attributes attrs) throws SAXException;
-
- Object end(String uri,
- String localName) throws SAXException;
-
- Set getValidParents();
-
- Set getValidPeers();
-
- boolean allowNesting();
-
- Class generateNodeFor();
+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.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import java.util.Set;
+
+/**
+ * @author mproctor
+ *
+ */
+interface Handler {
+
+ Object start(String uri,
+ String localName,
+ Attributes attrs) throws SAXException;
+
+ Object end(String uri,
+ String localName) throws SAXException;
+
+ Set getValidParents();
+
+ Set getValidPeers();
+
+ boolean allowNesting();
+
+ Class generateNodeFor();
}
\ No newline at end of file
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,101 +1,109 @@
-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.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 LiteralRestrictionHandler extends BaseAbstractHandler
- implements
- Handler {
- LiteralRestrictionHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( FieldConstraintDescr.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.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( "<literal-restriction> requires an 'evaluator' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final String text = attrs.getValue( "value" );
- if ( text == null || text.trim().equals( "" ) ) {
- throw new SAXParseException( "<literal-restriction> requires an 'value' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final LiteralRestrictionDescr literalDescr = new LiteralRestrictionDescr( evaluator,
- text );
-
- return literalDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) this.xmlPackageReader.getCurrent();
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) it.previous();
-
- fieldConstriantDescr.addRestriction( literalDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return LiteralRestrictionDescr.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.LinkedList;
+import java.util.ListIterator;
+
+/**
+ * @author mproctor
+ * @author fmeyer
+ *
+ */
+class LiteralRestrictionHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ LiteralRestrictionHandler(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( AndDescr.class );
+ this.validParents.add( OrDescr.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.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( "<literal-restriction> requires an 'evaluator' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final String text = attrs.getValue( "value" );
+ if ( text == null || text.trim().equals( "" ) ) {
+ throw new SAXParseException( "<literal-restriction> requires an 'value' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final LiteralRestrictionDescr literalDescr = new LiteralRestrictionDescr( evaluator,
+ text );
+
+ return literalDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+
+ //TODO: correct classcastexception in AndDescr.
+
+ Object parent = it.previous();
+
+ if (parent instanceof FieldConstraintDescr) {
+ final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) parent;
+ fieldConstriantDescr.addRestriction( literalDescr );
+ } else if ( parent instanceof ConditionalElementDescr ) {
+ final ConditionalElementDescr conditionDescr = (ConditionalElementDescr) parent;
+
+
+
+// System.out.println("LiteralRestriction");
+ }
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return LiteralRestrictionDescr.class;
+ }
}
\ No newline at end of file
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/OrHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,93 +1,89 @@
-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;
-
-/**
- * @author mproctor
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class OrHandler extends BaseAbstractHandler
- implements
- Handler {
- OrHandler(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.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 OrDescr orDescr = new OrDescr();
-
- return orDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final OrDescr orDescr = (OrDescr) 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( orDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return OrDescr.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 java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+/**
+ * @author mproctor
+ */
+class OrHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ OrHandler(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( PatternDescr.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 OrDescr orDescr = new OrDescr();
+
+ return orDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final OrDescr orDescr = (OrDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final Object parent = it.previous();
+
+ if ( parent instanceof ConditionalElementDescr ) {
+ final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;
+ parentDescr.addDescr( orDescr );
+ } else if ( parent instanceof PatternDescr ) {
+ final PatternDescr parentDescr = (PatternDescr) parent;
+ parentDescr.addConstraint( orDescr );
+ }
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return OrDescr.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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -68,10 +68,13 @@
}
RestrictionConnectiveDescr connectiveDescr = null;
- if ( connective.equals( "|" ) ) {
+ if ( connective.equals( "or" ) ) {
connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.OR );
+ } else if (connective.equals( "and" )) {
+ connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.AND );
} else {
- connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.AND );
+ throw new SAXParseException( "<connective-restriction> requires a valid 'connective' value (and,or): " + connective,
+ this.xmlPackageReader.getLocator() );
}
return connectiveDescr;
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,102 +1,114 @@
-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.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 ReturnValueRestrictionHandler extends BaseAbstractHandler
- implements
- Handler {
- ReturnValueRestrictionHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( FieldConstraintDescr.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.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( "<return-value-restriction> requires an 'evaluator' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final ReturnValueRestrictionDescr returnValueDescr = new ReturnValueRestrictionDescr( evaluator );
-
- return returnValueDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) this.xmlPackageReader.getCurrent();
-
- final String expression = config.getText();
-
- if ( expression == null || expression.trim().equals( "" ) ) {
- throw new SAXParseException( "<return-value-restriction> must have some content",
- this.xmlPackageReader.getLocator() );
- }
-
- returnValueDescr.setContent( expression );
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) it.previous();
-
- fieldConstraintDescr.addRestriction( returnValueDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return ReturnValueRestrictionDescr.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 java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+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 ReturnValueRestrictionHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ ReturnValueRestrictionHandler(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( AndDescr.class );
+ this.validParents.add( OrDescr.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.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( "<return-value-restriction> requires an 'evaluator' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final ReturnValueRestrictionDescr returnValueDescr = new ReturnValueRestrictionDescr( evaluator );
+
+ return returnValueDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+ final String expression = config.getText();
+
+ if ( expression == null || expression.trim().equals( "" ) ) {
+ throw new SAXParseException( "<return-value-restriction> must have some content",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ returnValueDescr.setContent( expression );
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+
+ Object parent = it.previous();
+
+ //TODO: Again same problem with these parent shit
+
+ if (parent instanceof FieldConstraintDescr) {
+ final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) parent;
+ fieldConstraintDescr.addRestriction( returnValueDescr );
+ } else {
+ System.out.println("ReturnValueRestriction");
+ }
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return ReturnValueRestrictionDescr.class;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,101 +1,110 @@
-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.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 VariableRestrictionsHandler extends BaseAbstractHandler
- implements
- Handler {
- VariableRestrictionsHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( FieldConstraintDescr.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.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() );
- }
-
- final String identifier = attrs.getValue( "identifier" );
- if ( identifier == null || identifier.trim().equals( "" ) ) {
- throw new SAXParseException( "<bound-variable> requires an 'identifier' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final VariableRestrictionDescr variableDescr = new VariableRestrictionDescr( evaluator,
- identifier );
-
- return variableDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) this.xmlPackageReader.getCurrent();
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) it.previous();
-
- fieldConstraintDescr.addRestriction( variableDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return VariableRestrictionDescr.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 java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+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 VariableRestrictionsHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ VariableRestrictionsHandler(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( AndDescr.class);
+ this.validParents.add( OrDescr.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.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() );
+ }
+
+ final String identifier = attrs.getValue( "identifier" );
+ if ( identifier == null || identifier.trim().equals( "" ) ) {
+ throw new SAXParseException( "<bound-variable> requires an 'identifier' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final VariableRestrictionDescr variableDescr = new VariableRestrictionDescr( evaluator,
+ identifier );
+
+ return variableDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+ 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( variableDescr );
+ } else {
+ System.out.println("variableRestriction class");
+ }
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return VariableRestrictionDescr.class;
+ }
}
\ No newline at end of file
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -158,8 +158,8 @@
public void visitPackageDescr(final PackageDescr packageDescr) {
final String packageName = packageDescr.getName();
- final String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + XmlDumper.eol + " <package name=\"" + packageName + "\" " + XmlDumper.eol + "\txmlns=\"http://drools.org/drools-3.0\" " + XmlDumper.eol
- + "\txmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\" " + XmlDumper.eol + "\txs:schemaLocation=\"http://drools.org/drools-3.0 drools-3.0.xsd\"> " + XmlDumper.eol;
+ final String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + XmlDumper.eol + " <package name=\"" + packageName + "\" " + XmlDumper.eol + "\txmlns=\"http://drools.org/drools-4.0\" " + XmlDumper.eol
+ + "\txmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\" " + XmlDumper.eol + "\txs:schemaLocation=\"http://drools.org/drools-4.0 drools-4.0.xsd\"> " + XmlDumper.eol;
appendXmlDump( xmlString );
appendXmlDump( processImportsList( packageDescr.getImports() ) );
appendXmlDump( processGlobalsList( packageDescr.getGlobals() ) );
@@ -221,11 +221,9 @@
}
public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
- if ( descr.getConnective() == RestrictionConnectiveDescr.OR ) {
- this.template = "<restriction-connective connective=\"|\"/>" + XmlDumper.eol;
- } else {
- this.template = "<restriction-connective connective=\"&\"/>" + XmlDumper.eol;
- }
+ this.template = "<restriction-connective connective=";
+ this.template += descr.getConnective() == RestrictionConnectiveDescr.OR ? "\"or\"" : "\"and\"" ;
+ this.template += "/>" + XmlDumper.eol;
}
private String processDescrList(final List descr) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,747 +1,727 @@
-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.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 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.
- *
- * Note you can override the default entity resolver by setting the System property of:
- * <code>org.drools.io.EntityResolve</code> to your own custom entity resolver.
- * This can be done using -Dorg.drools.io.EntityResolver=YourClassHere on the command line, for instance.
- *
- * @author <a href="mailto:bob at werken.com">bob mcwhirter </a>
- */
-public class XmlPackageReader extends DefaultHandler {
- // ----------------------------------------------------------------------
- // Constants
- // ----------------------------------------------------------------------
- public static final String ENTITY_RESOLVER_PROPERTY_NAME = "org.drools.io.EntityResolver";
-
- /** Namespace URI for the general tags. */
- public static final String RULES_NAMESPACE_URI = "http://drools.org/rules";
-
- private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
-
- private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
-
- // ----------------------------------------------------------------------
- // Instance members
- // ----------------------------------------------------------------------
- /** SAX parser. */
- private SAXParser parser;
-
- /** isValidating */
- private boolean isValidating = true;
-
- /** Locator for errors. */
- private Locator locator;
-
- // private Map repo;
-
- /** Stack of configurations. */
- private LinkedList configurationStack;
-
- /** Current configuration text. */
- private StringBuffer characters;
-
- private Map handlers;
-
- private boolean lastWasEndElement;
-
- private LinkedList parents;
-
- private Object peer;
-
- private Object current;
-
- private PackageDescr packageDescr;
-
- private boolean inHandledRuleSubElement;
-
- private final MessageFormat message = new MessageFormat( "({0}: {1}, {2}): {3}" );
-
- private final Map namespaces = new HashMap();
-
- EntityResolver entityResolver;
-
- // ----------------------------------------------------------------------
- // Constructors
- // ----------------------------------------------------------------------
-
- /**
- * Construct.
- *
- * <p>
- * Uses the default JAXP SAX parser and the default classpath-based
- * <code>DefaultSemanticModule</code>.
- * </p>
- */
- public XmlPackageReader() {
- // init
- this.configurationStack = new LinkedList();
- this.parents = new LinkedList();
-
- this.handlers = new HashMap();
-
- this.handlers.put( "package",
- new PackageHandler( this ) );
- this.handlers.put( "rule",
- new RuleHandler( this ) );
- this.handlers.put( "query",
- new QueryHandler( this ) );
- this.handlers.put( "attribute",
- null );
- this.handlers.put( "function",
- new FunctionHandler( this ) );
-
- // Conditional Elements
- this.handlers.put( "lhs",
- new AndHandler( this ) );
- this.handlers.put( "and",
- new AndHandler( this ) );
- this.handlers.put( "or",
- new OrHandler( this ) );
- this.handlers.put( "not",
- new NotHandler( this ) );
- this.handlers.put( "exists",
- new ExistsHandler( this ) );
- this.handlers.put( "eval",
- new EvalHandler( this ) );
- this.handlers.put( "pattern",
- new PatternHandler( this ) );
-
- // Field Constraints
- this.handlers.put( "field-constraint",
- new FieldConstraintHandler( this ) );
- this.handlers.put( "literal-restriction",
- new LiteralRestrictionHandler( this ) );
- this.handlers.put( "variable-restriction",
- new VariableRestrictionsHandler( this ) );
- this.handlers.put( "predicate",
- new PredicateHandler( this ) );
- this.handlers.put( "return-value-restriction",
- new ReturnValueRestrictionHandler( this ) );
- this.handlers.put( "field-binding",
- new FieldBindingHandler( this ) );
- this.handlers.put( "restriction-connective",
- new RestrictionConnectiveHandler( this ) );
-
- initEntityResolver();
-
- }
-
- /**
- * Construct.
- *
- * <p>
- * Uses the default classpath-based <code>DefaultSemanticModule</code>.
- * </p>
- *
- * @param parser
- * The SAX parser.
- */
- public XmlPackageReader(final SAXParser parser) {
- this.parser = parser;
- }
-
- // ----------------------------------------------------------------------
- // Instance methods
- // ----------------------------------------------------------------------
-
- /**
- * Read a <code>RuleSet</code> from a <code>Reader</code>.
- *
- * @param reader
- * The reader containing the rule-set.
- *
- * @return The rule-set.
- */
- public PackageDescr read(final Reader reader) throws SAXException,
- IOException {
- return read( new InputSource( reader ) );
- }
-
- /**
- * Read a <code>RuleSet</code> from an <code>InputStream</code>.
- *
- * @param inputStream
- * The input-stream containing the rule-set.
- *
- * @return The rule-set.
- */
- public PackageDescr read(final InputStream inputStream) throws SAXException,
- IOException {
- return read( new InputSource( inputStream ) );
- }
-
- /**
- * Read a <code>RuleSet</code> from an <code>InputSource</code>.
- *
- * @param in
- * The rule-set input-source.
- *
- * @return The rule-set.
- */
- public PackageDescr read(final InputSource in) throws SAXException,
- IOException {
- SAXParser localParser = null;
- if ( this.parser == null ) {
- final SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setNamespaceAware( true );
-
- final String isValidatingString = System.getProperty( "drools.schema.validating" );
- if ( System.getProperty( "drools.schema.validating" ) != null ) {
- this.isValidating = Boolean.getBoolean( "drools.schema.validating" );
- }
-
- if ( this.isValidating == true ) {
- factory.setValidating( true );
- try {
- localParser = factory.newSAXParser();
- } catch ( final ParserConfigurationException e ) {
- throw new RuntimeException( e.getMessage() );
- }
-
- try {
- localParser.setProperty( XmlPackageReader.JAXP_SCHEMA_LANGUAGE,
- XmlPackageReader.W3C_XML_SCHEMA );
- } catch ( final SAXNotRecognizedException e ) {
- boolean hideWarnings = Boolean.getBoolean( "drools.schema.hidewarnings" );
- if ( !hideWarnings ) {
- System.err.println( "Your SAX parser is not JAXP 1.2 compliant - turning off validation." );
- }
- localParser = null;
- }
- }
-
- if ( localParser == null ) {
- // not jaxp1.2 compliant so turn off validation
- try {
- this.isValidating = false;
- factory.setValidating( this.isValidating );
- localParser = factory.newSAXParser();
- } catch ( final ParserConfigurationException e ) {
- throw new RuntimeException( e.getMessage() );
- }
- }
- } else {
- localParser = this.parser;
- }
-
- if ( !localParser.isNamespaceAware() ) {
- throw new RuntimeException( "parser must be namespace-aware" );
- }
-
- localParser.parse( in,
- this );
-
- return this.packageDescr;
- }
-
- void setPackageDescr(final PackageDescr packageDescr) {
- this.packageDescr = packageDescr;
- }
-
- public PackageDescr getPackageDescr() {
- return this.packageDescr;
- }
-
- /**
- * @see org.xml.sax.ContentHandler
- */
- public void setDocumentLocator(final Locator locator) {
- this.locator = locator;
- }
-
- /**
- * Get the <code>Locator</code>.
- *
- * @return The locator.
- */
- public Locator getLocator() {
- return this.locator;
- }
-
- public void startDocument() {
- this.isValidating = true;
- this.packageDescr = null;
- this.current = null;
- this.peer = null;
- this.lastWasEndElement = false;
- this.parents.clear();
- this.characters = null;
- this.configurationStack.clear();
- this.namespaces.clear();
- }
-
- /**
- * @param uri
- * @param localName
- * @param qname
- * @param attrs
- * @throws SAXException
- * @see org.xml.sax.ContentHandler
- *
- * @todo: better way to manage unhandled elements
- */
- public void startElement(final String uri,
- final String localName,
- final String qname,
- final Attributes attrs) throws SAXException {
- // going down so no peer
- if ( !this.lastWasEndElement ) {
- this.peer = null;
- }
-
- final Handler handler = getHandler( localName );
-
- if ( (handler != null) && (!this.parents.isEmpty() && this.parents.getLast() instanceof RuleDescr) ) {
- this.inHandledRuleSubElement = true;
- }
-
- if ( handler == null ) {
- // if ( ((this.inHandledRuleSubElement == false) && (this.parents.getLast() instanceof RuleDescr)) || (this.parents.getLast() instanceof PackageDescr) ) {
- // throw new SAXParseException( "unknown tag '" + localName + "' in namespace '" + uri + "'",
- // getLocator() );
- // }
- // no handler so build up the configuration
- startConfiguration( localName,
- attrs );
- return;
- }
-
- validate( uri,
- localName,
- handler );
-
- final Object node = handler.start( uri,
- localName,
- attrs );
-
- if ( node != null ) {
- this.parents.add( node );
- this.current = node;
- }
- this.lastWasEndElement = false;
- }
-
- /**
- * @param uri
- * @param localName
- * @param qname
- * @throws SAXException
- * @see org.xml.sax.ContentHandler
- */
- public void endElement(final String uri,
- final String localName,
- final String qname) throws SAXException {
- final Handler handler = getHandler( localName );
-
- if ( (handler != null) && (!this.parents.isEmpty() && this.parents.getLast() instanceof RuleDescr) ) {
- this.inHandledRuleSubElement = false;
- }
-
- if ( handler == null ) {
- if ( this.configurationStack.size() >= 1 ) {
- endConfiguration();
- }
- return;
- }
-
- this.current = getParent( handler.generateNodeFor() );
-
- final Object node = handler.end( uri,
- localName );
-
- // next
- if ( node != null && !this.lastWasEndElement ) {
- this.peer = node;
- }
- // up or no children
- else if ( this.lastWasEndElement || (this.parents.getLast()).getClass().isInstance( this.current ) ) {
- this.peer = this.parents.removeLast();
- }
-
- this.lastWasEndElement = true;
- }
-
- private void validate(final String uri,
- final String localName,
- final Handler handler) throws SAXParseException {
- boolean validParent = false;
- boolean validPeer = false;
- boolean invalidNesting = false;
-
- final Set validParents = handler.getValidParents();
- final Set validPeers = handler.getValidPeers();
- boolean allowNesting = handler.allowNesting();
-
- // get parent
- Object parent;
- if ( this.parents.size() != 0 ) {
- parent = this.parents.getLast();
- } else {
- parent = null;
- }
-
- // check valid parents
- // null parent means localname is rule-set
- // dont process if elements are the same
- // instead check for allowed nesting
- final Class nodeClass = getHandler( localName ).generateNodeFor();
- if ( !nodeClass.isInstance( parent ) ) {
- Object allowedParent;
- final Iterator it = validParents.iterator();
- while ( !validParent && it.hasNext() ) {
- allowedParent = it.next();
- if ( parent == null && allowedParent == null ) {
- validParent = true;
- } else if ( allowedParent != null && ((Class) allowedParent).isInstance( parent ) ) {
- validParent = true;
- }
- }
- if ( !validParent ) {
- throw new SAXParseException( "<" + localName + "> has an invalid parent element [" + parent + "]",
- getLocator() );
- }
- }
-
- // check valid peers
- // null peer means localname is rule-set
- final Object peer = this.peer;
-
- Object allowedPeer;
- Iterator it = validPeers.iterator();
- while ( !validPeer && it.hasNext() ) {
- allowedPeer = it.next();
- if ( peer == null && allowedPeer == null ) {
- validPeer = true;
- } else if ( allowedPeer != null && ((Class) allowedPeer).isInstance( peer ) ) {
- validPeer = true;
- }
- }
- if ( !validPeer ) {
- throw new SAXParseException( "<" + localName + "> is after an invalid element",
- getLocator() );
- }
-
- if ( !allowNesting ) {
- it = this.parents.iterator();
- while ( !invalidNesting && it.hasNext() ) {
- if ( nodeClass.isInstance( it.next() ) ) {
- invalidNesting = true;
- }
- }
- }
- if ( invalidNesting ) {
- throw new SAXParseException( "<" + localName + "> may not be nested",
- getLocator() );
- }
-
- }
-
- /**
- * Start a configuration node.
- *
- * @param name
- * Tag name.
- * @param attrs
- * Tag attributes.
- */
- protected void startConfiguration(final String name,
- final Attributes attrs) {
- this.characters = new StringBuffer();
-
- final DefaultConfiguration config = new DefaultConfiguration( name );
-
- final int numAttrs = attrs.getLength();
-
- for ( int i = 0; i < numAttrs; ++i ) {
- config.setAttribute( attrs.getLocalName( i ),
- attrs.getValue( i ) );
- }
-
- // lets add the namespaces as attributes
- for ( final Iterator iter = this.namespaces.entrySet().iterator(); iter.hasNext(); ) {
- final Map.Entry entry = (Map.Entry) iter.next();
- String ns = (String) entry.getKey();
- final String value = (String) entry.getValue();
- if ( ns == null || ns.length() == 0 ) {
- ns = "xmlns";
- } else {
- ns = "xmlns:" + ns;
- }
- config.setAttribute( ns,
- value );
- }
-
- if ( this.configurationStack.isEmpty() ) {
- this.configurationStack.addLast( config );
- } else {
- ((DefaultConfiguration) this.configurationStack.getLast()).addChild( config );
- this.configurationStack.addLast( config );
- }
- }
-
- Handler getHandler(final String localName) {
- return (Handler) this.handlers.get( localName );
- }
-
- /**
- * @param chars
- * @param start
- * @param len
- * @see org.xml.sax.ContentHandler
- */
- public void characters(final char[] chars,
- final int start,
- final int len) {
- if ( this.characters != null ) {
- this.characters.append( chars,
- start,
- len );
- }
- }
-
- /**
- * End a configuration node.
- *
- * @return The configuration.
- */
- protected Configuration endConfiguration() {
- final DefaultConfiguration config = (DefaultConfiguration) this.configurationStack.removeLast();
- if ( this.characters != null ) {
- config.setText( this.characters.toString() );
- }
-
- this.characters = null;
-
- return config;
- }
-
- LinkedList getParents() {
- return this.parents;
- }
-
- Object getParent(final Class parent) {
- final ListIterator it = this.parents.listIterator( this.parents.size() );
- Object node = null;
- while ( it.hasPrevious() ) {
- node = it.previous();
- if ( parent.isInstance( node ) ) {
- break;
- }
- }
- return node;
- }
-
- Object getPeer() {
- return this.peer;
- }
-
- Object getCurrent() {
- return this.current;
- }
-
- public InputSource resolveEntity(final String publicId,
- final String systemId) throws SAXException {
- try {
- final InputSource inputSource = resolveSchema( publicId,
- systemId );
- if ( inputSource != null ) {
- return inputSource;
- }
- if ( this.entityResolver != null ) {
- return this.entityResolver.resolveEntity( publicId,
- systemId );
- }
- } catch ( final IOException ioe ) {
- }
- return null;
- }
-
- public void startPrefixMapping(final String prefix,
- final String uri) throws SAXException {
- super.startPrefixMapping( prefix,
- uri );
- this.namespaces.put( prefix,
- uri );
- }
-
- public void endPrefixMapping(final String prefix) throws SAXException {
- super.endPrefixMapping( prefix );
- this.namespaces.remove( prefix );
- }
-
- private void print(final SAXParseException x) {
- final String msg = this.message.format( new Object[]{x.getSystemId(), new Integer( x.getLineNumber() ), new Integer( x.getColumnNumber() ), x.getMessage()} );
- System.out.println( msg );
- }
-
- public void warning(final SAXParseException x) {
- print( x );
- }
-
- public void error(final SAXParseException x) {
- print( x );
- }
-
- public void fatalError(final SAXParseException x) throws SAXParseException {
- print( x );
- throw x;
- }
-
- private InputSource resolveSchema(final String publicId,
- final String systemId) throws SAXException,
- IOException {
- // Schema files must end with xsd
- if ( !systemId.toLowerCase().endsWith( "xsd" ) ) {
- return null;
- }
-
- // try the actual location given by systemId
- try {
- final URL url = new URL( systemId );
- return new InputSource( url.openStream() );
- } catch ( final Exception e ) {
- }
-
- // Try and get the index for the filename, else return null
- String xsd;
- int index = systemId.lastIndexOf( "/" );
- if ( index == -1 ) {
- index = systemId.lastIndexOf( "\\" );
- }
- if ( index != -1 ) {
- xsd = systemId.substring( index + 1 );
- } else {
- xsd = systemId;
- }
-
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
-
- if ( cl == null ) {
- cl = XmlPackageReader.class.getClassLoader();
- }
-
- // Try looking in META-INF
-
- {
- final InputStream is = cl.getResourceAsStream( "META-INF/" + xsd );
- if ( is != null ) {
- return new InputSource( is );
- }
- }
-
- // Try looking in /META-INF
- {
- final InputStream is = cl.getResourceAsStream( "/META-INF/" + xsd );
- if ( is != null ) {
- return new InputSource( is );
- }
- }
-
- // Try looking at root of classpath
- {
- final InputStream is = cl.getResourceAsStream( "/" + xsd );
- if ( is != null ) {
- return new InputSource( is );
- }
- }
-
- // Try current working directory
- {
- final File file = new File( xsd );
- if ( file.exists() ) {
- return new InputSource( new BufferedInputStream( new FileInputStream( file ) ) );
- }
- }
-
- cl = ClassLoader.getSystemClassLoader();
-
- // Try looking in META-INF
- {
- final InputStream is = cl.getResourceAsStream( "META-INF/" + xsd );
- if ( is != null ) {
- return new InputSource( is );
- }
- }
-
- // Try looking in /META-INF
- {
- final InputStream is = cl.getResourceAsStream( "/META-INF/" + xsd );
- if ( is != null ) {
- return new InputSource( is );
- }
- }
-
- // Try looking at root of classpath
- {
- final InputStream is = cl.getResourceAsStream( "/" + xsd );
- if ( is != null ) {
- return new InputSource( is );
- }
- }
-
- return null;
- }
-
- /**
- * Intializes EntityResolver that is configured via system property ENTITY_RESOLVER_PROPERTY_NAME.
- */
- private void initEntityResolver() {
- final String entityResolveClazzName = System.getProperty( XmlPackageReader.ENTITY_RESOLVER_PROPERTY_NAME );
- if ( entityResolveClazzName != null && entityResolveClazzName.length() > 0 ) {
- try {
- final Class entityResolverClazz = Thread.currentThread().getContextClassLoader().loadClass( entityResolveClazzName );
- this.entityResolver = (EntityResolver) entityResolverClazz.newInstance();
- } catch ( final Exception ignoreIt ) {
- }
- }
- }
-
+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.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.xml.sax.*;
+import org.xml.sax.helpers.DefaultHandler;
+
+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.*;
+
+/**
+ * <code>RuleSet</code> loader.
+ *
+ * Note you can override the default entity resolver by setting the System property of:
+ * <code>org.drools.io.EntityResolve</code> to your own custom entity resolver.
+ * This can be done using -Dorg.drools.io.EntityResolver=YourClassHere on the command line, for instance.
+ *
+ * @author <a href="mailto:bob at werken.com">bob mcwhirter </a>
+ */
+public class XmlPackageReader extends DefaultHandler {
+ // ----------------------------------------------------------------------
+ // Constants
+ // ----------------------------------------------------------------------
+ public static final String ENTITY_RESOLVER_PROPERTY_NAME = "org.drools.io.EntityResolver";
+
+ /** Namespace URI for the general tags. */
+ public static final String RULES_NAMESPACE_URI = "http://drools.org/rules";
+
+ private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
+
+ private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
+
+ // ----------------------------------------------------------------------
+ // Instance members
+ // ----------------------------------------------------------------------
+ /** SAX parser. */
+ private SAXParser parser;
+
+ /** isValidating */
+ private boolean isValidating = true;
+
+ /** Locator for errors. */
+ private Locator locator;
+
+ // private Map repo;
+
+ /** Stack of configurations. */
+ private LinkedList configurationStack;
+
+ /** Current configuration text. */
+ private StringBuffer characters;
+
+ private Map handlers;
+
+ private boolean lastWasEndElement;
+
+ private LinkedList parents;
+
+ private Object peer;
+
+ private Object current;
+
+ private PackageDescr packageDescr;
+
+ private boolean inHandledRuleSubElement;
+
+ private final MessageFormat message = new MessageFormat( "({0}: {1}, {2}): {3}" );
+
+ private final Map namespaces = new HashMap();
+
+ EntityResolver entityResolver;
+
+ // ----------------------------------------------------------------------
+ // Constructors
+ // ----------------------------------------------------------------------
+
+ /**
+ * Construct.
+ *
+ * <p>
+ * Uses the default JAXP SAX parser and the default classpath-based
+ * <code>DefaultSemanticModule</code>.
+ * </p>
+ */
+ public XmlPackageReader() {
+ // init
+ this.configurationStack = new LinkedList();
+ this.parents = new LinkedList();
+
+ this.handlers = new HashMap();
+
+ this.handlers.put( "package",
+ new PackageHandler( this ) );
+ this.handlers.put( "rule",
+ new RuleHandler( this ) );
+ this.handlers.put( "query",
+ new QueryHandler( this ) );
+ this.handlers.put( "attribute",
+ null );
+ this.handlers.put( "function",
+ new FunctionHandler( this ) );
+
+ // Conditional Elements
+ this.handlers.put( "lhs",
+ new AndHandler( this ) );
+ this.handlers.put( "and",
+ new AndHandler( this ) );
+ this.handlers.put( "or",
+ new OrHandler( this ) );
+ this.handlers.put( "not",
+ new NotHandler( this ) );
+ this.handlers.put( "exists",
+ new ExistsHandler( this ) );
+ this.handlers.put( "eval",
+ new EvalHandler( this ) );
+ this.handlers.put( "pattern",
+ new PatternHandler( this ) );
+
+ // Field Constraints
+ this.handlers.put( "field-constraint",
+ new FieldConstraintHandler( this ) );
+ this.handlers.put( "literal-restriction",
+ new LiteralRestrictionHandler( this ) );
+ this.handlers.put( "variable-restriction",
+ new VariableRestrictionsHandler( this ) );
+ this.handlers.put( "predicate",
+ new PredicateHandler( this ) );
+ this.handlers.put( "return-value-restriction",
+ new ReturnValueRestrictionHandler( this ) );
+ this.handlers.put( "field-binding",
+ new FieldBindingHandler( this ) );
+ this.handlers.put( "restriction-connective",
+ new RestrictionConnectiveHandler( this ) );
+
+ initEntityResolver();
+
+ }
+
+ /**
+ * Construct.
+ *
+ * <p>
+ * Uses the default classpath-based <code>DefaultSemanticModule</code>.
+ * </p>
+ *
+ * @param parser
+ * The SAX parser.
+ */
+ public XmlPackageReader(final SAXParser parser) {
+ this.parser = parser;
+ }
+
+ // ----------------------------------------------------------------------
+ // Instance methods
+ // ----------------------------------------------------------------------
+
+ /**
+ * Read a <code>RuleSet</code> from a <code>Reader</code>.
+ *
+ * @param reader
+ * The reader containing the rule-set.
+ *
+ * @return The rule-set.
+ */
+ public PackageDescr read(final Reader reader) throws SAXException,
+ IOException {
+ return read( new InputSource( reader ) );
+ }
+
+ /**
+ * Read a <code>RuleSet</code> from an <code>InputStream</code>.
+ *
+ * @param inputStream
+ * The input-stream containing the rule-set.
+ *
+ * @return The rule-set.
+ */
+ public PackageDescr read(final InputStream inputStream) throws SAXException,
+ IOException {
+ return read( new InputSource( inputStream ) );
+ }
+
+ /**
+ * Read a <code>RuleSet</code> from an <code>InputSource</code>.
+ *
+ * @param in
+ * The rule-set input-source.
+ *
+ * @return The rule-set.
+ */
+ public PackageDescr read(final InputSource in) throws SAXException,
+ IOException {
+ SAXParser localParser = null;
+ if ( this.parser == null ) {
+ final SAXParserFactory factory = SAXParserFactory.newInstance();
+ factory.setNamespaceAware( true );
+
+ final String isValidatingString = System.getProperty( "drools.schema.validating" );
+ if ( System.getProperty( "drools.schema.validating" ) != null ) {
+ this.isValidating = Boolean.getBoolean( "drools.schema.validating" );
+ }
+
+ if ( this.isValidating == true ) {
+ factory.setValidating( true );
+ try {
+ localParser = factory.newSAXParser();
+ } catch ( final ParserConfigurationException e ) {
+ throw new RuntimeException( e.getMessage() );
+ }
+
+ try {
+ localParser.setProperty( XmlPackageReader.JAXP_SCHEMA_LANGUAGE,
+ XmlPackageReader.W3C_XML_SCHEMA );
+ } catch ( final SAXNotRecognizedException e ) {
+ boolean hideWarnings = Boolean.getBoolean( "drools.schema.hidewarnings" );
+ if ( !hideWarnings ) {
+ System.err.println( "Your SAX parser is not JAXP 1.2 compliant - turning off validation." );
+ }
+ localParser = null;
+ }
+ }
+
+ if ( localParser == null ) {
+ // not jaxp1.2 compliant so turn off validation
+ try {
+ this.isValidating = false;
+ factory.setValidating( this.isValidating );
+ localParser = factory.newSAXParser();
+ } catch ( final ParserConfigurationException e ) {
+ throw new RuntimeException( e.getMessage() );
+ }
+ }
+ } else {
+ localParser = this.parser;
+ }
+
+ if ( !localParser.isNamespaceAware() ) {
+ throw new RuntimeException( "parser must be namespace-aware" );
+ }
+
+ localParser.parse( in,
+ this );
+
+ return this.packageDescr;
+ }
+
+ void setPackageDescr(final PackageDescr packageDescr) {
+ this.packageDescr = packageDescr;
+ }
+
+ public PackageDescr getPackageDescr() {
+ return this.packageDescr;
+ }
+
+ /**
+ * @see org.xml.sax.ContentHandler
+ */
+ public void setDocumentLocator(final Locator locator) {
+ this.locator = locator;
+ }
+
+ /**
+ * Get the <code>Locator</code>.
+ *
+ * @return The locator.
+ */
+ public Locator getLocator() {
+ return this.locator;
+ }
+
+ public void startDocument() {
+ this.isValidating = true;
+ this.packageDescr = null;
+ this.current = null;
+ this.peer = null;
+ this.lastWasEndElement = false;
+ this.parents.clear();
+ this.characters = null;
+ this.configurationStack.clear();
+ this.namespaces.clear();
+ }
+
+ /**
+ * @param uri
+ * @param localName
+ * @param qname
+ * @param attrs
+ * @throws SAXException
+ * @see org.xml.sax.ContentHandler
+ *
+ * @todo: better way to manage unhandled elements
+ */
+ public void startElement(final String uri,
+ final String localName,
+ final String qname,
+ final Attributes attrs) throws SAXException {
+ // going down so no peer
+ if ( !this.lastWasEndElement ) {
+ this.peer = null;
+ }
+
+ final Handler handler = getHandler( localName );
+
+ if ( (handler != null) && (!this.parents.isEmpty() && this.parents.getLast() instanceof RuleDescr) ) {
+ this.inHandledRuleSubElement = true;
+ }
+
+ if ( handler == null ) {
+ // if ( ((this.inHandledRuleSubElement == false) && (this.parents.getLast() instanceof RuleDescr)) || (this.parents.getLast() instanceof PackageDescr) ) {
+ // throw new SAXParseException( "unknown tag '" + localName + "' in namespace '" + uri + "'",
+ // getLocator() );
+ // }
+ // no handler so build up the configuration
+ startConfiguration( localName,
+ attrs );
+ return;
+ }
+
+ validate( uri, localName, handler );
+
+ final Object node = handler.start( uri, localName, attrs );
+
+ if ( node != null ) {
+ this.parents.add( node );
+ this.current = node;
+ }
+ this.lastWasEndElement = false;
+ }
+
+ /**
+ * @param uri
+ * @param localName
+ * @param qname
+ * @throws SAXException
+ * @see org.xml.sax.ContentHandler
+ */
+
+ public void endElement(final String uri,
+ final String localName,
+ final String qname) throws SAXException {
+ final Handler handler = getHandler( localName );
+
+ if ( (handler != null) && (!this.parents.isEmpty() && this.parents.getLast() instanceof RuleDescr) ) {
+ this.inHandledRuleSubElement = false;
+ }
+
+ if ( handler == null ) {
+ if ( this.configurationStack.size() >= 1 ) {
+ endConfiguration();
+ }
+ return;
+ }
+
+ this.current = getParent( handler.generateNodeFor() );
+
+ final Object node = handler.end( uri,
+ localName );
+
+ // next
+ if ( node != null && !this.lastWasEndElement ) {
+ this.peer = node;
+ }
+ // up or no children
+ else if ( this.lastWasEndElement || (this.parents.getLast()).getClass().isInstance( this.current ) ) {
+ this.peer = this.parents.removeLast();
+ }
+
+ this.lastWasEndElement = true;
+ }
+
+ private void validate(final String uri,
+ final String localName,
+ final Handler handler) throws SAXParseException {
+ boolean validParent = false;
+ boolean validPeer = false;
+ boolean invalidNesting = false;
+
+ final Set validParents = handler.getValidParents();
+ final Set validPeers = handler.getValidPeers();
+ boolean allowNesting = handler.allowNesting();
+
+ // get parent
+ Object parent;
+ if ( this.parents.size() != 0 ) {
+ parent = this.parents.getLast();
+ } else {
+ parent = null;
+ }
+
+ // check valid parents
+ // null parent means localname is rule-set
+ // dont process if elements are the same
+ // instead check for allowed nesting
+ final Class nodeClass = getHandler( localName ).generateNodeFor();
+ if ( !nodeClass.isInstance( parent ) ) {
+ Object allowedParent;
+ final Iterator it = validParents.iterator();
+ while ( !validParent && it.hasNext() ) {
+ allowedParent = it.next();
+ if ( parent == null && allowedParent == null ) {
+ validParent = true;
+ } else if ( allowedParent != null && ((Class) allowedParent).isInstance( parent ) ) {
+ validParent = true;
+ }
+ }
+ if ( !validParent ) {
+ throw new SAXParseException( "<" + localName + "> has an invalid parent element [" + parent + "]",
+ getLocator() );
+ }
+ }
+
+ // check valid peers
+ // null peer means localname is rule-set
+ final Object peer = this.peer;
+
+ Object allowedPeer;
+ Iterator it = validPeers.iterator();
+ while ( !validPeer && it.hasNext() ) {
+ allowedPeer = it.next();
+ if ( peer == null && allowedPeer == null ) {
+ validPeer = true;
+ } else if ( allowedPeer != null && ((Class) allowedPeer).isInstance( peer ) ) {
+ validPeer = true;
+ }
+ }
+ if ( !validPeer ) {
+ throw new SAXParseException( "<" + localName + "> is after an invalid element",
+ getLocator() );
+ }
+
+ if ( !allowNesting ) {
+ it = this.parents.iterator();
+ while ( !invalidNesting && it.hasNext() ) {
+ if ( nodeClass.isInstance( it.next() ) ) {
+ invalidNesting = true;
+ }
+ }
+ }
+ if ( invalidNesting ) {
+ throw new SAXParseException( "<" + localName + "> may not be nested",
+ getLocator() );
+ }
+
+ }
+
+ /**
+ * Start a configuration node.
+ *
+ * @param name
+ * Tag name.
+ * @param attrs
+ * Tag attributes.
+ */
+ protected void startConfiguration(final String name,
+ final Attributes attrs) {
+ this.characters = new StringBuffer();
+
+ final DefaultConfiguration config = new DefaultConfiguration( name );
+
+ final int numAttrs = attrs.getLength();
+
+ for ( int i = 0; i < numAttrs; ++i ) {
+ config.setAttribute( attrs.getLocalName( i ),
+ attrs.getValue( i ) );
+ }
+
+ // lets add the namespaces as attributes
+ for ( final Iterator iter = this.namespaces.entrySet().iterator(); iter.hasNext(); ) {
+ final Map.Entry entry = (Map.Entry) iter.next();
+ String ns = (String) entry.getKey();
+ final String value = (String) entry.getValue();
+ if ( ns == null || ns.length() == 0 ) {
+ ns = "xmlns";
+ } else {
+ ns = "xmlns:" + ns;
+ }
+ config.setAttribute( ns,
+ value );
+ }
+
+ if ( this.configurationStack.isEmpty() ) {
+ this.configurationStack.addLast( config );
+ } else {
+ ((DefaultConfiguration) this.configurationStack.getLast()).addChild( config );
+ this.configurationStack.addLast( config );
+ }
+ }
+
+ Handler getHandler(final String localName) {
+ return (Handler) this.handlers.get( localName );
+ }
+
+ /**
+ * @param chars
+ * @param start
+ * @param len
+ * @see org.xml.sax.ContentHandler
+ */
+ public void characters(final char[] chars,
+ final int start,
+ final int len) {
+ if ( this.characters != null ) {
+ this.characters.append( chars,
+ start,
+ len );
+ }
+ }
+
+ /**
+ * End a configuration node.
+ *
+ * @return The configuration.
+ */
+ protected Configuration endConfiguration() {
+ final DefaultConfiguration config = (DefaultConfiguration) this.configurationStack.removeLast();
+ if ( this.characters != null ) {
+ config.setText( this.characters.toString() );
+ }
+
+ this.characters = null;
+
+ return config;
+ }
+
+ LinkedList getParents() {
+ return this.parents;
+ }
+
+ Object getParent(final Class parent) {
+ final ListIterator it = this.parents.listIterator( this.parents.size() );
+ Object node = null;
+ while ( it.hasPrevious() ) {
+ node = it.previous();
+ if ( parent.isInstance( node ) ) {
+ break;
+ }
+ }
+ return node;
+ }
+
+ Object getPeer() {
+ return this.peer;
+ }
+
+ Object getCurrent() {
+ return this.current;
+ }
+
+ public InputSource resolveEntity(final String publicId,
+ final String systemId) throws SAXException {
+ try {
+ final InputSource inputSource = resolveSchema( publicId,
+ systemId );
+ if ( inputSource != null ) {
+ return inputSource;
+ }
+ if ( this.entityResolver != null ) {
+ return this.entityResolver.resolveEntity( publicId,
+ systemId );
+ }
+ } catch ( final IOException ioe ) {
+ }
+ return null;
+ }
+
+ public void startPrefixMapping(final String prefix,
+ final String uri) throws SAXException {
+ super.startPrefixMapping( prefix,
+ uri );
+ this.namespaces.put( prefix,
+ uri );
+ }
+
+ public void endPrefixMapping(final String prefix) throws SAXException {
+ super.endPrefixMapping( prefix );
+ this.namespaces.remove( prefix );
+ }
+
+ private void print(final SAXParseException x) {
+ final String msg = this.message.format( new Object[]{x.getSystemId(), new Integer( x.getLineNumber() ), new Integer( x.getColumnNumber() ), x.getMessage()} );
+ System.out.println( msg );
+ }
+
+ public void warning(final SAXParseException x) {
+ print( x );
+ }
+
+ public void error(final SAXParseException x) {
+ print( x );
+ }
+
+ public void fatalError(final SAXParseException x) throws SAXParseException {
+ print( x );
+ throw x;
+ }
+
+ private InputSource resolveSchema(final String publicId,
+ final String systemId) throws SAXException,
+ IOException {
+ // Schema files must end with xsd
+ if ( !systemId.toLowerCase().endsWith( "xsd" ) ) {
+ return null;
+ }
+
+ // try the actual location given by systemId
+ try {
+ final URL url = new URL( systemId );
+ return new InputSource( url.openStream() );
+ } catch ( final Exception e ) {
+ }
+
+ // Try and get the index for the filename, else return null
+ String xsd;
+ int index = systemId.lastIndexOf( "/" );
+ if ( index == -1 ) {
+ index = systemId.lastIndexOf( "\\" );
+ }
+ if ( index != -1 ) {
+ xsd = systemId.substring( index + 1 );
+ } else {
+ xsd = systemId;
+ }
+
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+ if ( cl == null ) {
+ cl = XmlPackageReader.class.getClassLoader();
+ }
+
+ // Try looking in META-INF
+
+ {
+ final InputStream is = cl.getResourceAsStream( "META-INF/" + xsd );
+ if ( is != null ) {
+ return new InputSource( is );
+ }
+ }
+
+ // Try looking in /META-INF
+ {
+ final InputStream is = cl.getResourceAsStream( "/META-INF/" + xsd );
+ if ( is != null ) {
+ return new InputSource( is );
+ }
+ }
+
+ // Try looking at root of classpath
+ {
+ final InputStream is = cl.getResourceAsStream( "/" + xsd );
+ if ( is != null ) {
+ return new InputSource( is );
+ }
+ }
+
+ // Try current working directory
+ {
+ final File file = new File( xsd );
+ if ( file.exists() ) {
+ return new InputSource( new BufferedInputStream( new FileInputStream( file ) ) );
+ }
+ }
+
+ cl = ClassLoader.getSystemClassLoader();
+
+ // Try looking in META-INF
+ {
+ final InputStream is = cl.getResourceAsStream( "META-INF/" + xsd );
+ if ( is != null ) {
+ return new InputSource( is );
+ }
+ }
+
+ // Try looking in /META-INF
+ {
+ final InputStream is = cl.getResourceAsStream( "/META-INF/" + xsd );
+ if ( is != null ) {
+ return new InputSource( is );
+ }
+ }
+
+ // Try looking at root of classpath
+ {
+ final InputStream is = cl.getResourceAsStream( "/" + xsd );
+ if ( is != null ) {
+ return new InputSource( is );
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Intializes EntityResolver that is configured via system property ENTITY_RESOLVER_PROPERTY_NAME.
+ */
+ private void initEntityResolver() {
+ final String entityResolveClazzName = System.getProperty( XmlPackageReader.ENTITY_RESOLVER_PROPERTY_NAME );
+ if ( entityResolveClazzName != null && entityResolveClazzName.length() > 0 ) {
+ try {
+ final Class entityResolverClazz = Thread.currentThread().getContextClassLoader().loadClass( entityResolveClazzName );
+ this.entityResolver = (EntityResolver) entityResolverClazz.newInstance();
+ } catch ( final Exception ignoreIt ) {
+ }
+ }
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd 2007-06-17 22:36:12 UTC (rev 12646)
@@ -8,13 +8,9 @@
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="drools:import"/>
-
<xs:element ref="drools:global"/>
-
<xs:element ref="drools:function"/>
-
<xs:element ref="drools:rule"/>
-
<xs:element ref="drools:query"/>
</xs:choice>
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,17 +1,16 @@
package org.drools.xml;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-
import junit.framework.TestCase;
-
import org.drools.compiler.DrlParser;
import org.drools.lang.DrlDumper;
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;
+
/**
* Test the dump/convert format utilities.
* @author Michael Neale
@@ -26,6 +25,31 @@
final XmlDumper dumper = new XmlDumper();
final String result = dumper.dump( pkgOriginal );
+
+ final BufferedReader reader = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRule.xml" ) ) );
+ final StringBuffer buffer = new StringBuffer();
+ String s = null;
+ while ( (s = reader.readLine()) != null ) {
+ buffer.append( s );
+ }
+
+ System.out.println("-------------------------");
+
+ System.out.println(result);
+
+ System.out.println("-------------------------");
+
+ System.out.println(buffer);
+
+ System.out.println("-------------------------");
+
+ assertEqualsIgnoreWhitespace( buffer.toString(),
+ result );
+
+
+
+ // TODO: FM need test dumped result
+
assertNotNull( result );
//now lest slurp it back up
@@ -59,7 +83,16 @@
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 );
+
+ System.out.println(XMLresult);
+
final String result = dumper.dump( pkgOriginal );
+
+ System.out.println(result);
+
assertNotNull( result );
parser = new DrlParser();
@@ -84,6 +117,7 @@
ruleDumped.getLhs().getDescrs().size() );
assertEquals( ruleOriginal.getConsequence(),
ruleDumped.getConsequence() );
+
// Now double check the contents are the same
final BufferedReader reader = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "test_Dump.drl" ) ) );
@@ -92,6 +126,10 @@
while ( (s = reader.readLine()) != null ) {
buffer.append( s );
}
+
+ System.out.println(result);
+ System.out.println(buffer);
+
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,455 +1,525 @@
-package org.drools.xml;
-
-import java.io.InputStreamReader;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.GlobalDescr;
-import org.drools.lang.descr.ImportDescr;
-import org.drools.lang.descr.LiteralRestrictionDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.PackageDescr;
-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;
-
-public class XmlPackageReaderTest extends TestCase {
- 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();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseImport.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
- }
-
- public void testParseGlobal() throws Exception {
- final XmlPackageReader xmlPackageReader = new XmlPackageReader();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseGlobal.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
-
- final List globals = packageDescr.getGlobals();
- assertEquals( 2,
- globals.size() );
- final GlobalDescr x = (GlobalDescr) globals.get( 0 );
- final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
- assertEquals( "com.sample.X",
- x.getType() );
- assertEquals( "x",
- x.getIdentifier() );
- assertEquals( "com.sample.Yada",
- yada.getType() );
- assertEquals( "yada",
- yada.getIdentifier() );
- }
-
- public void testParseFunction() throws Exception {
- final XmlPackageReader xmlPackageReader = new XmlPackageReader();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFunction.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
-
- final List globals = packageDescr.getGlobals();
- assertEquals( 2,
- globals.size() );
- final GlobalDescr x = (GlobalDescr) globals.get( 0 );
- final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
- assertEquals( "com.sample.X",
- x.getType() );
- assertEquals( "x",
- x.getIdentifier() );
- assertEquals( "com.sample.Yada",
- yada.getType() );
- assertEquals( "yada",
- yada.getIdentifier() );
-
- final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
- final List names = functionDescr.getParameterNames();
- assertEquals( "foo",
- names.get( 0 ) );
- assertEquals( "bada",
- names.get( 1 ) );
-
- final List types = functionDescr.getParameterTypes();
- assertEquals( "Bar",
- types.get( 0 ) );
- assertEquals( "Bing",
- types.get( 1 ) );
-
- assertEquals( "System.out.println(\"hello world\");",
- functionDescr.getText().trim() );
- }
-
- public void testParseRule() throws Exception {
- final XmlPackageReader xmlPackageReader = new XmlPackageReader();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRule.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
-
- final List globals = packageDescr.getGlobals();
- assertEquals( 2,
- globals.size() );
- final GlobalDescr x = (GlobalDescr) globals.get( 0 );
- final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
- assertEquals( "com.sample.X",
- x.getType() );
- assertEquals( "x",
- x.getIdentifier() );
- assertEquals( "com.sample.Yada",
- yada.getType() );
- assertEquals( "yada",
- yada.getIdentifier() );
-
- final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
- final List names = functionDescr.getParameterNames();
- assertEquals( "foo",
- names.get( 0 ) );
- assertEquals( "bada",
- names.get( 1 ) );
-
- final List types = functionDescr.getParameterTypes();
- assertEquals( "Bar",
- types.get( 0 ) );
- assertEquals( "Bing",
- types.get( 1 ) );
-
- assertEquals( "System.out.println(\"hello world\");",
- functionDescr.getText().trim() );
-
- final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
- assertEquals( "simple_rule",
- ruleDescr.getName() );
-
- assertEquals( 4,
- ruleDescr.getAttributes().size() );
- final AttributeDescr attributeDescr = (AttributeDescr) ruleDescr.getAttributes().get( 0 );
- assertEquals( "salience",
- attributeDescr.getName() );
- assertEquals( "10",
- attributeDescr.getValue() );
-
- final AndDescr lhs = ruleDescr.getLhs();
- assertEquals( 6,
- lhs.getDescrs().size() );
- final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get( 0 );
- assertEquals( "Bar",
- patternDescr.getObjectType() );
-
- final String consequence = (String) ruleDescr.getConsequence();
- assertNotNull( consequence );
-
- }
-
- public void testParseLhs() throws Exception {
- final XmlPackageReader xmlPackageReader = new XmlPackageReader();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseLhs.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
-
- final List globals = packageDescr.getGlobals();
- assertEquals( 2,
- globals.size() );
- final GlobalDescr x = (GlobalDescr) globals.get( 0 );
- final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
- assertEquals( "com.sample.X",
- x.getType() );
- assertEquals( "x",
- x.getIdentifier() );
- assertEquals( "com.sample.Yada",
- yada.getType() );
- assertEquals( "yada",
- yada.getIdentifier() );
-
- final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
- final List names = functionDescr.getParameterNames();
- assertEquals( "foo",
- names.get( 0 ) );
- assertEquals( "bada",
- names.get( 1 ) );
-
- final List types = functionDescr.getParameterTypes();
- assertEquals( "Bar",
- types.get( 0 ) );
- assertEquals( "Bing",
- types.get( 1 ) );
-
- assertEquals( "System.out.println(\"hello world\");",
- functionDescr.getText().trim() );
-
- final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
- assertEquals( "my rule",
- 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 );
- assertNull( pattern1.getIdentifier() );
- assertEquals( "Foo",
- pattern1.getObjectType() );
-
- final PatternDescr pattern2 = (PatternDescr) lhsDescr.getDescrs().get( 3 );
- assertEquals( "Bar",
- pattern2.getObjectType() );
- assertEquals( "bar",
- pattern2.getIdentifier() );
-
- final PatternDescr pattern3 = (PatternDescr) lhsDescr.getDescrs().get( 4 );
- //final LiteralDescr literalDescr = (LiteralDescr) pattern3.getDescrs().get( 0 );
- final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) pattern3.getDescrs().get( 0 );
- final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
- assertEquals( "field1",
- fieldConstraintDescr.getFieldName() );
- assertEquals( "==",
- literalDescr.getEvaluator() );
- assertEquals( "value1",
- literalDescr.getText() );
-
- final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 1 );
- assertEquals( "==",
- returnValueDescr.getEvaluator() );
- assertEquals( "1==1",
- returnValueDescr.getContent() );
-
- final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 2 );
- assertEquals( "==",
- variableDescr.getEvaluator() );
- assertEquals( "var1",
- variableDescr.getIdentifier() );
-
- final PredicateDescr predicateDescr = (PredicateDescr) pattern3.getDescrs().get( 1 );
- assertEquals( "1==1",
- predicateDescr.getContent() );
-
- final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) pattern3.getDescrs().get( 2 );
- assertEquals( "field1",
- fieldBindingDescr.getFieldName() );
- assertEquals( "var1",
- fieldBindingDescr.getIdentifier() );
-
- final NotDescr notDescr = (NotDescr) lhsDescr.getDescrs().get( 5 );
- assertEquals( 1,
- notDescr.getDescrs().size() );
- PatternDescr patternDescr = (PatternDescr) notDescr.getDescrs().get( 0 );
- assertEquals( "Bar",
- patternDescr.getObjectType() );
-
- final ExistsDescr existsDescr = (ExistsDescr) lhsDescr.getDescrs().get( 6 );
- assertEquals( 1,
- existsDescr.getDescrs().size() );
- patternDescr = (PatternDescr) existsDescr.getDescrs().get( 0 );
- assertEquals( "Bar",
- patternDescr.getObjectType() );
-
- andDescr = (AndDescr) lhsDescr.getDescrs().get( 7 );
- assertEquals( 2,
- andDescr.getDescrs().size() );
- orDescr = (OrDescr) andDescr.getDescrs().get( 0 );
- patternDescr = (PatternDescr) orDescr.getDescrs().get( 0 );
- assertEquals( "Bar",
- patternDescr.getObjectType() );
- patternDescr = (PatternDescr) andDescr.getDescrs().get( 1 );
- assertEquals( "Yada",
- patternDescr.getObjectType() );
-
- orDescr = (OrDescr) lhsDescr.getDescrs().get( 8 );
- assertEquals( 2,
- orDescr.getDescrs().size() );
- andDescr = (AndDescr) orDescr.getDescrs().get( 0 );
- patternDescr = (PatternDescr) andDescr.getDescrs().get( 0 );
- assertEquals( "Foo",
- patternDescr.getObjectType() );
- patternDescr = (PatternDescr) orDescr.getDescrs().get( 1 );
- assertEquals( "Zaa",
- patternDescr.getObjectType() );
-
- final EvalDescr evalDescr = (EvalDescr) lhsDescr.getDescrs().get( 9 );
- assertEquals( "1==1",
- evalDescr.getContent() );
- }
-
- public void testParseRhs() throws Exception {
- final XmlPackageReader xmlPackageReader = new XmlPackageReader();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRhs.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
-
- final List globals = packageDescr.getGlobals();
- assertEquals( 2,
- globals.size() );
- final GlobalDescr x = (GlobalDescr) globals.get( 0 );
- final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
- assertEquals( "com.sample.X",
- x.getType() );
- assertEquals( "x",
- x.getIdentifier() );
- assertEquals( "com.sample.Yada",
- yada.getType() );
- assertEquals( "yada",
- yada.getIdentifier() );
-
- final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
- final List names = functionDescr.getParameterNames();
- assertEquals( "foo",
- names.get( 0 ) );
- assertEquals( "bada",
- names.get( 1 ) );
-
- final List types = functionDescr.getParameterTypes();
- assertEquals( "Bar",
- types.get( 0 ) );
- assertEquals( "Bing",
- types.get( 1 ) );
-
- assertEquals( "System.out.println(\"hello world\");",
- functionDescr.getText().trim() );
-
- final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
- assertEquals( "my rule",
- ruleDescr.getName() );
-
- final String consequence = (String) ruleDescr.getConsequence();
- assertNotNull( consequence );
- assertEquals( "System.out.println( \"hello\" );",
- consequence.trim() );
- }
-
- public void testParseQuery() throws Exception {
- final XmlPackageReader xmlPackageReader = new XmlPackageReader();
- xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseQuery.xml" ) ) );
- final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
- assertNotNull( packageDescr );
- assertEquals( "com.sample",
- packageDescr.getName() );
-
- final List imports = packageDescr.getImports();
- assertEquals( 2,
- imports.size() );
- assertEquals( "java.util.HashMap",
- ((ImportDescr) imports.get( 0 )).getTarget() );
- assertEquals( "org.drools.*",
- ((ImportDescr) imports.get( 1 )).getTarget() );
-
- final List globals = packageDescr.getGlobals();
- assertEquals( 2,
- globals.size() );
- final GlobalDescr x = (GlobalDescr) globals.get( 0 );
- final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
- assertEquals( "com.sample.X",
- x.getType() );
- assertEquals( "x",
- x.getIdentifier() );
- assertEquals( "com.sample.Yada",
- yada.getType() );
- assertEquals( "yada",
- yada.getIdentifier() );
-
- final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
- final List names = functionDescr.getParameterNames();
- assertEquals( "foo",
- names.get( 0 ) );
- assertEquals( "bada",
- names.get( 1 ) );
-
- final List types = functionDescr.getParameterTypes();
- assertEquals( "Bar",
- types.get( 0 ) );
- assertEquals( "Bing",
- types.get( 1 ) );
-
- assertEquals( "System.out.println(\"hello world\");",
- functionDescr.getText().trim() );
-
- final QueryDescr queryDescr = (QueryDescr) packageDescr.getRules().get( 0 );
- assertEquals( "my query",
- queryDescr.getName() );
-
- final AndDescr lhs = queryDescr.getLhs();
- assertEquals( 1,
- lhs.getDescrs().size() );
- final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get( 0 );
- assertEquals( "Foo",
- patternDescr.getObjectType() );
-
- }
-}
+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.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.GlobalDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PackageDescr;
+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,
+ null );
+ }
+
+ protected RuleBase getRuleBase(final RuleBaseConfiguration config) throws Exception {
+
+ 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 );
+ assertTrue( existdescr instanceof ExistsDescr );
+
+ Object patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 );
+ assertTrue( patternDescriptor instanceof PatternDescr );
+ }
+
+ public void testParseForall() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseForall.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+
+ 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() );
+ fail();
+ }
+
+
+ public void testParseCollect() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseCollect.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample", packageDescr.getName() );
+ fail();
+ }
+ */
+
+
+ public void testParseImport() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseImport.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+ }
+
+ public void testParseGlobal() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseGlobal.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+
+ final List globals = packageDescr.getGlobals();
+ assertEquals( 2,
+ globals.size() );
+ final GlobalDescr x = (GlobalDescr) globals.get( 0 );
+ final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
+ assertEquals( "com.sample.X",
+ x.getType() );
+ assertEquals( "x",
+ x.getIdentifier() );
+ assertEquals( "com.sample.Yada",
+ yada.getType() );
+ assertEquals( "yada",
+ yada.getIdentifier() );
+ }
+
+ public void testParseFunction() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFunction.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+
+ final List globals = packageDescr.getGlobals();
+ assertEquals( 2,
+ globals.size() );
+ final GlobalDescr x = (GlobalDescr) globals.get( 0 );
+ final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
+ assertEquals( "com.sample.X",
+ x.getType() );
+ assertEquals( "x",
+ x.getIdentifier() );
+ assertEquals( "com.sample.Yada",
+ yada.getType() );
+ assertEquals( "yada",
+ yada.getIdentifier() );
+
+ final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
+ final List names = functionDescr.getParameterNames();
+ assertEquals( "foo",
+ names.get( 0 ) );
+ assertEquals( "bada",
+ names.get( 1 ) );
+
+ final List types = functionDescr.getParameterTypes();
+ assertEquals( "Bar",
+ types.get( 0 ) );
+ assertEquals( "Bing",
+ types.get( 1 ) );
+
+ assertEquals( "System.out.println(\"hello world\");",
+ functionDescr.getText().trim() );
+ }
+
+ public void testParseRule() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRule.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+
+ final List globals = packageDescr.getGlobals();
+ assertEquals( 2,
+ globals.size() );
+ final GlobalDescr x = (GlobalDescr) globals.get( 0 );
+ final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
+ assertEquals( "com.sample.X",
+ x.getType() );
+ assertEquals( "x",
+ x.getIdentifier() );
+ assertEquals( "com.sample.Yada",
+ yada.getType() );
+ assertEquals( "yada",
+ yada.getIdentifier() );
+
+ final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
+ final List names = functionDescr.getParameterNames();
+ assertEquals( "foo",
+ names.get( 0 ) );
+ assertEquals( "bada",
+ names.get( 1 ) );
+
+ final List types = functionDescr.getParameterTypes();
+ assertEquals( "Bar",
+ types.get( 0 ) );
+ assertEquals( "Bing",
+ types.get( 1 ) );
+
+ assertEquals( "System.out.println(\"hello world\");",
+ functionDescr.getText().trim() );
+
+ final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
+ assertEquals( "simple_rule",
+ ruleDescr.getName() );
+
+ assertEquals( 4,
+ ruleDescr.getAttributes().size() );
+ final AttributeDescr attributeDescr = (AttributeDescr) ruleDescr.getAttributes().get( 0 );
+ assertEquals( "salience",
+ attributeDescr.getName() );
+ assertEquals( "10",
+ attributeDescr.getValue() );
+
+ final AndDescr lhs = ruleDescr.getLhs();
+ assertEquals( 7,
+ lhs.getDescrs().size() );
+ final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get( 0 );
+ assertEquals( "Bar",
+ patternDescr.getObjectType() );
+
+ final String consequence = (String) ruleDescr.getConsequence();
+ assertNotNull( consequence );
+
+ }
+
+ public void testParseLhs() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseLhs.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+
+ final List globals = packageDescr.getGlobals();
+ assertEquals( 2,
+ globals.size() );
+ final GlobalDescr x = (GlobalDescr) globals.get( 0 );
+ final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
+ assertEquals( "com.sample.X",
+ x.getType() );
+ assertEquals( "x",
+ x.getIdentifier() );
+ assertEquals( "com.sample.Yada",
+ yada.getType() );
+ assertEquals( "yada",
+ yada.getIdentifier() );
+
+ final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
+ final List names = functionDescr.getParameterNames();
+ assertEquals( "foo",
+ names.get( 0 ) );
+ assertEquals( "bada",
+ names.get( 1 ) );
+
+ final List types = functionDescr.getParameterTypes();
+ assertEquals( "Bar",
+ types.get( 0 ) );
+ assertEquals( "Bing",
+ types.get( 1 ) );
+
+ assertEquals( "System.out.println(\"hello world\");",
+ functionDescr.getText().trim() );
+
+ final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
+ assertEquals( "my rule",
+ 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 );
+ assertNull( pattern1.getIdentifier() );
+ assertEquals( "Foo",
+ pattern1.getObjectType() );
+
+ final PatternDescr pattern2 = (PatternDescr) lhsDescr.getDescrs().get( 3 );
+ assertEquals( "Bar",
+ pattern2.getObjectType() );
+ assertEquals( "bar",
+ pattern2.getIdentifier() );
+
+ final PatternDescr pattern3 = (PatternDescr) lhsDescr.getDescrs().get( 4 );
+ //final LiteralDescr literalDescr = (LiteralDescr) pattern3.getDescrs().get( 0 );
+ final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) pattern3.getDescrs().get( 0 );
+ final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "field1",
+ fieldConstraintDescr.getFieldName() );
+ assertEquals( "==",
+ literalDescr.getEvaluator() );
+ assertEquals( "value1",
+ literalDescr.getText() );
+
+ final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 1 );
+ assertEquals( "==",
+ returnValueDescr.getEvaluator() );
+ assertEquals( "1==1",
+ returnValueDescr.getContent() );
+
+ final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 2 );
+ assertEquals( "==",
+ variableDescr.getEvaluator() );
+ assertEquals( "var1",
+ variableDescr.getIdentifier() );
+
+ final PredicateDescr predicateDescr = (PredicateDescr) pattern3.getDescrs().get( 1 );
+ assertEquals( "1==1",
+ predicateDescr.getContent() );
+
+ final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) pattern3.getDescrs().get( 2 );
+ assertEquals( "field1",
+ fieldBindingDescr.getFieldName() );
+ assertEquals( "var1",
+ fieldBindingDescr.getIdentifier() );
+
+ final NotDescr notDescr = (NotDescr) lhsDescr.getDescrs().get( 5 );
+ assertEquals( 1,
+ notDescr.getDescrs().size() );
+ PatternDescr patternDescr = (PatternDescr) notDescr.getDescrs().get( 0 );
+ assertEquals( "Bar",
+ patternDescr.getObjectType() );
+
+ final ExistsDescr existsDescr = (ExistsDescr) lhsDescr.getDescrs().get( 6 );
+ assertEquals( 1,
+ existsDescr.getDescrs().size() );
+ patternDescr = (PatternDescr) existsDescr.getDescrs().get( 0 );
+ assertEquals( "Bar",
+ patternDescr.getObjectType() );
+
+ andDescr = (AndDescr) lhsDescr.getDescrs().get( 7 );
+ assertEquals( 2,
+ andDescr.getDescrs().size() );
+ orDescr = (OrDescr) andDescr.getDescrs().get( 0 );
+ patternDescr = (PatternDescr) orDescr.getDescrs().get( 0 );
+ assertEquals( "Bar",
+ patternDescr.getObjectType() );
+ patternDescr = (PatternDescr) andDescr.getDescrs().get( 1 );
+ assertEquals( "Yada",
+ patternDescr.getObjectType() );
+
+ orDescr = (OrDescr) lhsDescr.getDescrs().get( 8 );
+ assertEquals( 2,
+ orDescr.getDescrs().size() );
+ andDescr = (AndDescr) orDescr.getDescrs().get( 0 );
+ patternDescr = (PatternDescr) andDescr.getDescrs().get( 0 );
+ assertEquals( "Foo",
+ patternDescr.getObjectType() );
+ patternDescr = (PatternDescr) orDescr.getDescrs().get( 1 );
+ assertEquals( "Zaa",
+ patternDescr.getObjectType() );
+
+ final EvalDescr evalDescr = (EvalDescr) lhsDescr.getDescrs().get( 9 );
+ assertEquals( "1==1",
+ evalDescr.getContent() );
+ }
+
+ public void testParseRhs() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseRhs.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+
+ final List globals = packageDescr.getGlobals();
+ assertEquals( 2,
+ globals.size() );
+ final GlobalDescr x = (GlobalDescr) globals.get( 0 );
+ final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
+ assertEquals( "com.sample.X",
+ x.getType() );
+ assertEquals( "x",
+ x.getIdentifier() );
+ assertEquals( "com.sample.Yada",
+ yada.getType() );
+ assertEquals( "yada",
+ yada.getIdentifier() );
+
+ final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
+ final List names = functionDescr.getParameterNames();
+ assertEquals( "foo",
+ names.get( 0 ) );
+ assertEquals( "bada",
+ names.get( 1 ) );
+
+ final List types = functionDescr.getParameterTypes();
+ assertEquals( "Bar",
+ types.get( 0 ) );
+ assertEquals( "Bing",
+ types.get( 1 ) );
+
+ assertEquals( "System.out.println(\"hello world\");",
+ functionDescr.getText().trim() );
+
+ final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
+ assertEquals( "my rule",
+ ruleDescr.getName() );
+
+ final String consequence = (String) ruleDescr.getConsequence();
+ assertNotNull( consequence );
+ assertEquals( "System.out.println( \"hello\" );",
+ consequence.trim() );
+ }
+
+ public void testParseQuery() throws Exception {
+ final XmlPackageReader xmlPackageReader = new XmlPackageReader();
+ xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseQuery.xml" ) ) );
+ final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
+ assertNotNull( packageDescr );
+ assertEquals( "com.sample",
+ packageDescr.getName() );
+
+ final List imports = packageDescr.getImports();
+ assertEquals( 2,
+ imports.size() );
+ assertEquals( "java.util.HashMap",
+ ((ImportDescr) imports.get( 0 )).getTarget() );
+ assertEquals( "org.drools.*",
+ ((ImportDescr) imports.get( 1 )).getTarget() );
+
+ final List globals = packageDescr.getGlobals();
+ assertEquals( 2,
+ globals.size() );
+ final GlobalDescr x = (GlobalDescr) globals.get( 0 );
+ final GlobalDescr yada = (GlobalDescr) globals.get( 1 );
+ assertEquals( "com.sample.X",
+ x.getType() );
+ assertEquals( "x",
+ x.getIdentifier() );
+ assertEquals( "com.sample.Yada",
+ yada.getType() );
+ assertEquals( "yada",
+ yada.getIdentifier() );
+
+ final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 );
+ final List names = functionDescr.getParameterNames();
+ assertEquals( "foo",
+ names.get( 0 ) );
+ assertEquals( "bada",
+ names.get( 1 ) );
+
+ final List types = functionDescr.getParameterTypes();
+ assertEquals( "Bar",
+ types.get( 0 ) );
+ assertEquals( "Bing",
+ types.get( 1 ) );
+
+ assertEquals( "System.out.println(\"hello world\");",
+ functionDescr.getText().trim() );
+
+ final QueryDescr queryDescr = (QueryDescr) packageDescr.getRules().get( 0 );
+ assertEquals( "my query",
+ queryDescr.getName() );
+
+ final AndDescr lhs = queryDescr.getLhs();
+ assertEquals( 1,
+ lhs.getDescrs().size() );
+ final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get( 0 );
+ assertEquals( "Foo",
+ 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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl 2007-06-17 22:36:12 UTC (rev 12646)
@@ -6,6 +6,7 @@
agenda-group "agenda-group"
activation-group "activation-group"
when
+ foo2 : Bar( ( a ( > 60 && < 70 ) || ( > 50 && < 55 ) && a3 == "black" ) || ( a == 40 && a3 == "pink" ) || ( a == 12 && ( a3 == "yellow" || a3 == "blue" ) ) )
foo3 : Bar( a == 3 || == 4, a3 == "hello", a4 == null )
foo4 : Bar( a4 : a != 4 && != 5)
foo5 : Bar( b == (a4 + 1) || > a4)
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseCollect.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -0,0 +1,27 @@
+<?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="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>
+
+</package>
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseExists.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -0,0 +1,35 @@
+<?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="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">
+ <variable-restriction evaluator="==" identifier="type"/>
+ </field-constraint>
+ </pattern>
+ </exists>
+ </lhs>
+ <rhs> list.add( $cheese ); </rhs>
+ </rule>
+
+</package>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseForall.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseForall.xml (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseForall.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -0,0 +1,38 @@
+<?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">
+
+ <global identifier="results" type="java.util.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>
+ <forall>
+ <pattern object-type="State">
+ <field-binding field-name="state" identifier="state" />
+ </pattern>
+
+ <pattern object-type="Person">
+ <field-constraint field-name="status">
+ <variable-restriction evaluator="==" identifier="state" />
+ </field-constraint>
+ <field-binding field-name="likes" identifier="likes" />
+ </pattern>
+
+ <pattern object-type="Cheese">
+ <field-binding field-name="type" identifier="likes" />
+ </pattern>
+ </forall>
+
+ </lhs>
+ <rhs>
+ results.add("OK");
+ </rhs>
+</rule>
+</package>
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -0,0 +1,39 @@
+<?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 object-type="Cheese">
+ <from source="unordered-fact">
+ person
+ </from>
+
+ </pattern>
+ <pattern identifier="cheese" object-type="Cheese" >
+ <from>
+ <statement>
+ </statement>
+ </from>
+ </pattern>
+ </lhs>
+ <rhs>
+ list1.add( $cheese );
+ </rhs>
+</rule>
+
+</package>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFunction.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFunction.xml 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFunction.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,21 +1,21 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <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>
- </function>
+<?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" />
+ <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>
+ </function>
</package>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseGlobal.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseGlobal.xml 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseGlobal.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <import name="org.drools.*" />
-
-
- <global identifier="x" type="com.sample.X" />
- <global identifier="yada" type="com.sample.Yada" />
+<?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" />
+ <global identifier="yada" type="com.sample.Yada" />
</package>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseImport.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseImport.xml 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseImport.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <import name="org.drools.*" />
+<?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.*" />
</package>
\ No newline at end of file
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,76 +1,76 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <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>
- </function>
-
- <rule name="my rule">
- <lhs>
- <and>
- </and>
-
- <or>
- </or>
-
- <pattern object-type="Foo" >
- </pattern>
-
- <pattern identifier="bar" object-type="Bar" >
- </pattern>
-
- <pattern object-type="Foo">
- <field-constraint field-name="field1">
- <literal-restriction evaluator="==" value="value1" />
- <return-value-restriction evaluator="==">1==1</return-value-restriction>
- <variable-restriction evaluator="==" identifier="var1" />
- </field-constraint>
-
- <predicate field-name="field1" identifier="var1">1==1</predicate>
-
- <field-binding field-name="field1" identifier="var1" />
- </pattern>
-
- <not>
- <pattern object-type="Bar" />
- </not>
-
- <exists>
- <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>
- </lhs>
-
- <rhs>
- </rhs>
- </rule>
+<?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" />
+ <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>
+ </function>
+
+ <rule name="my rule">
+ <lhs>
+ <and>
+ </and>
+
+ <or>
+ </or>
+
+ <pattern object-type="Foo" >
+ </pattern>
+
+ <pattern identifier="bar" object-type="Bar" >
+ </pattern>
+
+ <pattern object-type="Foo">
+ <field-constraint field-name="field1">
+ <literal-restriction evaluator="==" value="value1" />
+ <return-value-restriction evaluator="==">1==1</return-value-restriction>
+ <variable-restriction evaluator="==" identifier="var1" />
+ </field-constraint>
+
+ <predicate field-name="field1" identifier="var1">1==1</predicate>
+
+ <field-binding field-name="field1" identifier="var1" />
+ </pattern>
+
+ <not>
+ <pattern object-type="Bar" />
+ </not>
+
+ <exists>
+ <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>
+ </lhs>
+
+ <rhs>
+ </rhs>
+ </rule>
</package>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParsePackageName.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParsePackageName.xml 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParsePackageName.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
+<?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">
</package>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseQuery.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseQuery.xml 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseQuery.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,27 +1,26 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <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>
- </function>
-
- <query name="my query">
- <lhs>
- <pattern object-type="Foo" />
- </lhs>
- </query>
+<?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" />
+ <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>
+ </function>
+
+ <query name="my query">
+ <lhs>
+ <pattern object-type="Foo" />
+ </lhs>
+ </query>
</package>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRhs.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRhs.xml 2007-06-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRhs.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,30 +1,30 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <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>
- </function>
-
- <rule name="my rule">
- <lhs>
- </lhs>
-
- <rhs>
- System.out.println( "hello" );
- </rhs>
- </rule>
+<?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" />
+ <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>
+ </function>
+
+ <rule name="my rule">
+ <lhs>
+ </lhs>
+
+ <rhs>
+ System.out.println( "hello" );
+ </rhs>
+ </rule>
</package>
\ No newline at end of file
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-17 22:32:04 UTC (rev 12645)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml 2007-06-17 22:36:12 UTC (rev 12646)
@@ -1,84 +1,127 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package name="com.sample"
- xmlns="http://drools.org/drools-3.0"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
-
- <import name="java.util.HashMap" />
- <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>
- </function>
-
-<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="foo3" object-type="Bar" >
- <field-constraint field-name="a">
- <literal-restriction evaluator="==" value="3" />
- <restriction-connective connective="|"/>
- <literal-restriction evaluator="==" value="4" />
- </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" />
- <restriction-connective connective="&"/>
- <literal-restriction evaluator="!=" value="5" />
- </field-constraint>
- </pattern>
-
- <pattern identifier="foo5" object-type="Bar" >
- <field-constraint field-name="b">
- <return-value-restriction evaluator="==" >a4 + 1</return-value-restriction>
- <restriction-connective connective="|"/>
- <variable-restriction evaluator=">" identifier="a4" />
- </field-constraint>
- </pattern>
-
- <pattern identifier="foo6" object-type="Bar" >
- <field-binding field-name="a" identifier="a4" />
- <field-constraint field-name="b">
- <literal-restriction evaluator="==" value="6" />
- </field-constraint>
- </pattern>
-
- <pattern identifier="foo7" object-type="Bar" >
- <field-binding field-name="a" identifier="a4" />
- <field-binding field-name="b" identifier="b4" />
- </pattern>
-
- <pattern object-type="Baz" > </pattern>
- </lhs>
- <rhs>
- if ( a == b ) {
- assert( foo3 );
- } else {
- retract( foo4 );
- }
- System.out.println( a4 );
- </rhs>
-</rule>
-
+<?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" />
+ <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>
+ </function>
+
+<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="foo2" object-type="Bar" >
+ <or>
+ <and>
+ <field-constraint field-name="a">
+ <literal-restriction evaluator=">" value="60" />
+ <restriction-connective connective="and" />
+ <literal-restriction evaluator="<" value="70" />
+ <restriction-connective connective="or"/>
+ <literal-restriction evaluator="<" value="50" />
+ <restriction-connective connective="and"/>
+ <literal-restriction evaluator=">" value="55" />
+ </field-constraint>
+
+ <field-constraint field-name="a3">
+ <literal-restriction evaluator="==" value="black" />
+ </field-constraint>
+ </and>
+
+ <and>
+ <field-constraint field-name="a">
+ <literal-restriction evaluator="==" value="40" />
+ </field-constraint>
+
+ <field-constraint field-name="a3">
+ <literal-restriction evaluator="==" value="pink" />
+ </field-constraint>
+ </and>
+
+ <and>
+ <field-constraint field-name="a">
+ <literal-restriction evaluator="==" value="12"/>
+ </field-constraint>
+
+ <field-constraint field-name="a3">
+ <literal-restriction evaluator="==" value="yellow"/>
+ <restriction-connective connective="and"/>
+ <literal-restriction evaluator="==" value="blue" />
+ </field-constraint>
+ </and>
+ </or>
+ </pattern>
+
+
+ <pattern identifier="foo3" object-type="Bar" >
+ <field-constraint field-name="a">
+ <literal-restriction evaluator="==" value="3" />
+ <restriction-connective connective="or"/>
+ <literal-restriction evaluator="==" value="4" />
+ </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>
+
+ <pattern identifier="foo5" object-type="Bar" >
+ <field-constraint field-name="b">
+ <return-value-restriction evaluator="==" >a4 + 1</return-value-restriction>
+ <restriction-connective connective="or"/>
+ <variable-restriction evaluator=">" identifier="a4" />
+ </field-constraint>
+ </pattern>
+
+ <pattern identifier="foo6" object-type="Bar" >
+ <field-binding field-name="a" identifier="a4" />
+ <field-constraint field-name="b">
+ <literal-restriction evaluator="==" value="6" />
+ </field-constraint>
+ </pattern>
+
+ <pattern identifier="foo7" object-type="Bar" >
+ <field-binding field-name="a" identifier="a4" />
+ <field-binding field-name="b" identifier="b4" />
+ </pattern>
+
+ <pattern object-type="Baz" > </pattern>
+ </lhs>
+ <rhs>
+ if ( a == b ) {
+ assert( foo3 );
+ } else {
+ retract( foo4 );
+ }
+ System.out.println( a4 );
+ </rhs>
+</rule>
+
</package>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list