[jboss-svn-commits] JBL Code SVN: r12758 - 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
Thu Jun 21 18:50:25 EDT 2007


Author: fmeyer
Date: 2007-06-21 18:50:25 -0400 (Thu, 21 Jun 2007)
New Revision: 12758

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExpressionHandler.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DeclarativeInvokerDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.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/XmlPackageReaderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml
Log:
JBRULES-881
JBRULES-880
	- support for 'from expression' Conditional Element
	

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DeclarativeInvokerDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DeclarativeInvokerDescr.java	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DeclarativeInvokerDescr.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -4,5 +4,5 @@
  * This is the parent class function/method calls.
  */
 public class DeclarativeInvokerDescr extends BaseDescr {
-
+    private static final long serialVersionUID = 7094766307159430528L;
 }

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -1,89 +0,0 @@
-/**
- * 
- */
-package org.drools.xml;
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author fernandomeyer
- */
-
-public class AccumulateHelperHandler extends BaseAbstractHandler
-    implements
-    Handler {
-
-    AccumulateHelperHandler(final XmlPackageReader xmlPackageReader) {
-        this.xmlPackageReader = xmlPackageReader;
-
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( AccumulateDescr.class );
-
-            this.validPeers = new HashSet();
-            this.validPeers.add( null );
-
-            this.validPeers.add( PatternDescr.class );
-            this.validPeers.add( BaseDescr.class );
-
-            this.allowNesting = true;
-        }
-    }
-
-    public Object end(final String uri,
-                      final String localName) throws SAXException {
-
-        final Configuration config = this.xmlPackageReader.endConfiguration();
-        final BaseDescr baseDescr = (BaseDescr) this.xmlPackageReader.getCurrent();
-
-        final String expression = config.getText();
-
-        if ( expression == null || expression.trim().equals( "" ) ) {
-            throw new SAXParseException( "<" + localName + "> must have some content",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final LinkedList parents = this.xmlPackageReader.getParents();
-        final ListIterator ite = parents.listIterator( parents.size() );
-        ite.previous();
-        final Object parent = ite.previous();
-
-        final AccumulateDescr accumulate = (AccumulateDescr) parent;
-
-        if ( localName.equals( "init" ) ) accumulate.setInitCode( expression.trim() );
-        else if ( localName.equals( "action" ) ) accumulate.setActionCode( expression.trim() );
-        else if ( localName.equals( "result" ) ) accumulate.setResultCode( expression.trim() );
-        else if ( localName.equals( "reverse" ) ) {
-        }
-        //accumulate.setReverseCode( expression.trim() );
-        else {
-            //TODO FM: support for external functions
-        }
-
-        return null;
-    }
-
-    public Class generateNodeFor() {
-        return BaseDescr.class;
-    }
-
-    public Object start(final String uri,
-                        final String localName,
-                        final Attributes attrs) throws SAXException {
-
-        this.xmlPackageReader.startConfiguration( localName,
-                                                  attrs );
-
-        return new BaseDescr();
-    }
-
-}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHelperHandler.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -0,0 +1,87 @@
+/**
+ * 
+ */
+package org.drools.xml;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author fernandomeyer
+ */
+
+public class AccumulateHelperHandler extends BaseAbstractHandler
+    implements
+    Handler {
+
+    AccumulateHelperHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( AccumulateDescr.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+
+            this.validPeers.add( PatternDescr.class );
+            this.validPeers.add( BaseDescr.class );
+
+            this.allowNesting = true;
+        }
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+        final BaseDescr baseDescr = (BaseDescr) this.xmlPackageReader.getCurrent();
+
+        final String expression = config.getText();
+
+        if ( expression == null || expression.trim().equals( "" ) ) {
+            throw new SAXParseException( "<" + localName + "> must have some content",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator ite = parents.listIterator( parents.size() );
+        ite.previous();
+        final Object parent = ite.previous();
+
+        final AccumulateDescr accumulate = (AccumulateDescr) parent;
+
+        if ( localName.equals( "init" ) ) accumulate.setInitCode( expression.trim() );
+        else if ( localName.equals( "action" ) ) accumulate.setActionCode( expression.trim() );
+        else if ( localName.equals( "result" ) ) accumulate.setResultCode( expression.trim() );
+        else if ( localName.equals( "reverse" ) ) accumulate.setReverseCode( expression.trim() );
+        else {
+            //TODO FM: support for external functions
+        }
+
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return BaseDescr.class;
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+
+        return new BaseDescr();
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExpressionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExpressionHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ExpressionHandler.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -0,0 +1,97 @@
+/**
+ * 
+ */
+package org.drools.xml;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.TokenStream;
+import org.drools.lang.DRLLexer;
+import org.drools.lang.DRLParser;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.DeclarativeInvokerDescr;
+import org.drools.lang.descr.FromDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author fernandomeyer
+ */
+
+public class ExpressionHandler extends BaseAbstractHandler
+    implements
+    Handler {
+
+    ExpressionHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( FromHandler.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+            this.validPeers.add( BaseDescr.class );
+
+            this.allowNesting = true;
+        }
+    }
+
+    public Class generateNodeFor() {
+        return BaseDescr.class;
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+
+        return new BaseDescr();
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+        final BaseDescr baseDescr = (BaseDescr) this.xmlPackageReader.getCurrent();
+
+        final String expression = config.getText();
+
+        if ( expression == null || expression.trim().equals( "" ) ) {
+            throw new SAXParseException( "<" + localName + "> must have some content",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator ite = parents.listIterator( parents.size() );
+        ite.previous();
+        final Object parent = ite.previous();
+
+        final FromDescr fromSource = (FromDescr) parent;
+        final CharStream charStream = new ANTLRStringStream( expression.trim() );
+        final DRLLexer lexer = new DRLLexer( charStream );
+        final TokenStream tokenStream = new CommonTokenStream( lexer );
+        final DRLParser parser = new DRLParser( tokenStream );
+
+        try {
+            final DeclarativeInvokerDescr declarativeInvoker = parser.from_source( fromSource );
+            fromSource.setDataSource( declarativeInvoker );
+
+        } catch ( final RecognitionException e ) {
+            throw new SAXParseException( "<" + localName + "> must have a valid expression content ",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        return null;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -4,7 +4,10 @@
 package org.drools.xml;
 
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
 
+import org.drools.lang.descr.ConditionalElementDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.FromDescr;
 import org.drools.lang.descr.PatternDescr;
@@ -47,21 +50,24 @@
     public Object end(final String uri,
                       final String localName) throws SAXException {
 
-//        final Configuration config = this.xmlPackageReader.endConfiguration();
-//        final BaseDescr baseDescr = (BaseDescr) this.xmlPackageReader.getCurrent();
-//        
-//        final String expression = config.getText();
-//
-//        final LinkedList parents = this.xmlPackageReader.getParents();
-//        final ListIterator ite = parents.listIterator( parents.size() );
-//        ite.previous();
-//        ite.previous();
-//        final Object parent = ite.previous();
-//        
-//        AccumulateDescr accumulate = (AccumulateDescr) parent;
+        final Configuration config = this.xmlPackageReader.endConfiguration();
 
+        final FromDescr fromDescr = (FromDescr) this.xmlPackageReader.getCurrent();
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator it = parents.listIterator( parents.size() );
+        it.previous();
+        Object parent = it.previous();
+
+        final PatternDescr patternDescr = (PatternDescr) parent;
+
+        fromDescr.setPattern( patternDescr );
+
+        parent = it.previous();
+
+        ((ConditionalElementDescr) parent).addDescr( fromDescr );
+
         return null;
-
     }
 
     public Class generateNodeFor() {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -29,6 +29,7 @@
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PatternDescr;
@@ -113,11 +114,12 @@
             final PatternProcessorCeDescr parentDescr = (PatternProcessorCeDescr) parent;
             parentDescr.setSourcePattern( patternDescr );
         } else {
+
             final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;
             final List conditionalDescriptors = parentDescr.getDescrs();
             for ( final Iterator iterator = conditionalDescriptors.iterator(); iterator.hasNext(); ) {
                 final Object obj = iterator.next();
-                if ( obj instanceof PatternProcessorCeDescr ) return null;
+                if ( obj instanceof PatternProcessorCeDescr || FromDescr.class.getName().equals( obj.getClass().getName() ) ) return null;
             }
             parentDescr.addDescr( patternDescr );
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -207,6 +207,9 @@
         this.handlers.put( "reverse",
                            new AccumulateHelperHandler( this ) );
 
+        this.handlers.put( "expression",
+                           new ExpressionHandler( this ) );
+
         initEntityResolver();
     }
 
@@ -380,11 +383,6 @@
         }
 
         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;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-21 22:50:25 UTC (rev 12758)
@@ -8,6 +8,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
+import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
@@ -17,6 +18,7 @@
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.GlobalDescr;
 import org.drools.lang.descr.ImportDescr;
@@ -50,8 +52,17 @@
         xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFrom.xml" ) ) );
         final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
         assertNotNull( packageDescr );
-        assertEquals( "com.sample",
-                      packageDescr.getName() );
+        RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 );
+        FromDescr from = (FromDescr) obj.getLhs().getDescrs().get( 0 );
+        
+        AccessorDescr accessordescriptor =  (AccessorDescr) from.getDataSource();
+        assertEquals( accessordescriptor.getVariableName(), "cheesery" );
+        
+        PatternDescr patterndescr = from.getReturnedPattern();
+        
+        assertEquals( patterndescr.getObjectType(), "Cheese" );
+        assertEquals( patterndescr.getIdentifier(), "cheese" );
+        
     }
 
     public void testAccumulate() throws Exception {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml	2007-06-21 22:42:07 UTC (rev 12757)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseFrom.xml	2007-06-21 22:50:25 UTC (rev 12758)
@@ -21,7 +21,7 @@
         <pattern identifier="cheese" object-type="Cheese" >
             <from>
                 <expression>
-                    cheesery.getCheeses()
+                    cheesery.getCheeses();
                  </expression>
             </from>
         </pattern>




More information about the jboss-svn-commits mailing list