[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=\"&amp;\"/>" + 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("&lt;"); break;
-              case '>': sb.append("&gt;"); break;
-              case '&': sb.append("&amp;"); 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("&lt;"); break;
+                  case '>': sb.append("&gt;"); break;
+                  case '&': sb.append("&amp;"); 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="&amp;"/>
+				<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="&gt;" 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