[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