[jboss-svn-commits] JBL Code SVN: r10412 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/xml and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Mar 21 16:57:11 EDT 2007
Author: tirelli
Date: 2007-03-21 16:57:11 -0400 (Wed, 21 Mar 2007)
New Revision: 10412
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.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/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/test/java/org/drools/xml/DumperTest.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_ParseRule.xml
Log:
JBRULES-746: fixed NPE in XMLDumper and added a provisory RestrictionConnective support. Test case added. XSD is NOT updated yet, since we need to define how new features will be supported.
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -144,12 +144,15 @@
public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
this.template = new String();
String text = descr.getText();
- try {
- Integer.parseInt( text );
- } catch ( final NumberFormatException e ) {
- text = "\"" + text + "\"";
+ if( text == null ) {
+ text = "null";
+ } else {
+ try {
+ Integer.parseInt( text );
+ } catch ( final NumberFormatException e ) {
+ text = "\"" + text + "\"";
+ }
}
-
this.template = descr.getEvaluator() + " " + text;
}
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -22,6 +22,7 @@
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.ColumnDescr;
import org.drools.lang.descr.FieldBindingDescr;
@@ -53,6 +54,7 @@
this.validPeers.add( LiteralRestrictionDescr.class );
this.validPeers.add( ReturnValueRestrictionDescr.class );
this.validPeers.add( VariableRestrictionDescr.class );
+ this.validPeers.add( RestrictionConnectiveDescr.class );
this.allowNesting = false;
}
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -0,0 +1,103 @@
+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.ColumnDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.rule.LiteralRestriction;
+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 RestrictionConnectiveHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ RestrictionConnectiveHandler(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 connective = attrs.getValue( "connective" );
+ if ( connective == null || connective.trim().equals( "" ) ) {
+ throw new SAXParseException( "<restriction-connective> requires a 'connective' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ RestrictionConnectiveDescr connectiveDescr = null;
+ if( connective.equals( "|" ) ) {
+ connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.OR );
+ } else {
+ connectiveDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.AND );
+ }
+
+ return connectiveDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final RestrictionConnectiveDescr connectiveDescr = (RestrictionConnectiveDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) it.previous();
+
+ fieldConstriantDescr.addRestriction( connectiveDescr );
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return RestrictionConnectiveDescr.class;
+ }
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/RestrictionConnectiveHandler.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -22,6 +22,7 @@
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;
@@ -49,6 +50,7 @@
this.validPeers.add( LiteralRestrictionDescr.class );
this.validPeers.add( ReturnValueRestrictionDescr.class );
this.validPeers.add( VariableRestrictionDescr.class );
+ this.validPeers.add( RestrictionConnectiveDescr.class );
this.allowNesting = false;
}
}
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -22,6 +22,7 @@
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.ColumnDescr;
import org.drools.lang.descr.FieldBindingDescr;
@@ -52,6 +53,7 @@
this.validPeers.add( LiteralRestrictionDescr.class );
this.validPeers.add( ReturnValueRestrictionDescr.class );
this.validPeers.add( VariableRestrictionDescr.class );
+ this.validPeers.add( RestrictionConnectiveDescr.class );
this.allowNesting = false;
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2007-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -37,6 +37,7 @@
import org.drools.lang.descr.PackageDescrDumper;
import org.drools.lang.descr.PredicateDescr;
import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.lang.descr.VariableRestrictionDescr;
@@ -83,9 +84,9 @@
this.template = new String();
if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
if ( descr.getIdentifier() != null ) {
- this.template = "<column identifier=\"" + descr.getIdentifier() + "\" object-type=\"" + descr.getObjectType() + "\" >" + processDescrList( descr.getDescrs() ) + "</column>" + XmlDumper.eol;
+ this.template = "<column identifier=\"" + descr.getIdentifier() + "\" object-type=\"" + descr.getObjectType() + "\" >" + XmlDumper.eol + processDescrList( descr.getDescrs() ) + XmlDumper.eol + "</column>" + XmlDumper.eol;
} else {
- this.template = "<column object-type=\"" + descr.getObjectType() + "\" >" + processDescrList( descr.getDescrs() ) + "</column>" + XmlDumper.eol;
+ this.template = "<column object-type=\"" + descr.getObjectType() + "\" >" + XmlDumper.eol + processDescrList( descr.getDescrs() ) + XmlDumper.eol + "</column>" + XmlDumper.eol;
}
} else {
if ( descr.getIdentifier() != null ) {
@@ -99,7 +100,7 @@
public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
if ( !descr.getRestrictions().isEmpty() ) {
- this.template = "<field-constraint field-name=\"" + descr.getFieldName() + "\"> " + processFieldConstraint( descr.getRestrictions() ) + "</field-constraint>";
+ this.template = "<field-constraint field-name=\"" + descr.getFieldName() + "\"> " + XmlDumper.eol + processFieldConstraint( descr.getRestrictions() ) + XmlDumper.eol +"</field-constraint>";
}
}
@@ -219,6 +220,14 @@
return descrString;
}
+ 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;
+ }
+ }
+
private String processDescrList(final List descr) {
String descrString = "";
for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
@@ -306,15 +315,19 @@
*/
private String replaceIllegalChars(String code) {
StringBuffer sb = new StringBuffer();
- int n = code.length();
- for (int i = 0; i < n; i++) {
- char c = code.charAt(i);
- switch (c) {
- case '<': sb.append("<"); break;
- case '>': sb.append(">"); break;
- case '&': sb.append("&"); break;
- default: sb.append(c); break;
- }
+ if( code != null ) {
+ int n = code.length();
+ for (int i = 0; i < n; i++) {
+ char c = code.charAt(i);
+ switch (c) {
+ case '<': sb.append("<"); break;
+ case '>': sb.append(">"); break;
+ case '&': sb.append("&"); break;
+ default: sb.append(c); break;
+ }
+ }
+ } else {
+ sb.append( "null" );
}
return sb.toString();
}
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -167,6 +167,8 @@
new ReturnValueRestrictionHandler( this ) );
this.handlers.put( "field-binding",
new FieldBindingHandler( this ) );
+ this.handlers.put( "restriction-connective",
+ new RestrictionConnectiveHandler( this ) );
initEntityResolver();
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java 2007-03-21 20:57:11 UTC (rev 10412)
@@ -61,7 +61,7 @@
final DrlDumper dumper = new DrlDumper();
final String result = dumper.dump( pkgOriginal );
assertNotNull( result );
-
+
parser = new DrlParser();
final PackageDescr pkgDumped = parser.parse( new StringReader( result ) );
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl 2007-03-21 20:57:11 UTC (rev 10412)
@@ -6,7 +6,7 @@
agenda-group "agenda-group"
activation-group "activation-group"
when
- foo3 : Bar( a == 3 | == 4, a3 == "hello")
+ foo3 : Bar( a == 3 | == 4, a3 == "hello", a4 == null )
foo4 : Bar( a4 : a != 4 & != 5)
foo5 : Bar( b == (a4 + 1) | > a4)
foo6 : Bar( a4 : a, b == 6)
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-03-21 20:20:28 UTC (rev 10411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml 2007-03-21 20:57:11 UTC (rev 10412)
@@ -19,15 +19,66 @@
</body>
</function>
- <rule name="my rule">
- <rule-attribute name="salience" value="10" />
-
- <lhs>
- <column object-type="Foo" />
- </lhs>
-
- <rhs>
- System.out.println( "hello" );
- </rhs>
- </rule>
+<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>
+ <column 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>
+ </column>
+
+ <column 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>
+ </column>
+
+ <column 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>
+ </column>
+
+ <column identifier="foo6" object-type="Bar" >
+ <field-binding field-name="a" identifier="a4" />
+ <field-constraint field-name="b">
+ <literal-restriction evaluator="==" value="6" />
+ </field-constraint>
+ </column>
+
+ <column identifier="foo7" object-type="Bar" >
+ <field-binding field-name="a" identifier="a4" />
+ <field-binding field-name="b" identifier="b4" />
+ </column>
+
+ <column object-type="Baz" > </column>
+ </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