[jboss-svn-commits] JBL Code SVN: r9782 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/dialect and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Feb 26 19:15:50 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-02-26 19:15:50 -0500 (Mon, 26 Feb 2007)
New Revision: 9782
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java
Log:
JBRULES-708 MVEL Integration
-More interface/implementation seperation for dialects
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -39,9 +39,6 @@
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.drools.RuntimeDroolsException;
import org.drools.base.ClassFieldExtractorCache;
-import org.drools.dialect.java.FunctionBuilder;
-import org.drools.dialect.java.PackageStore;
-import org.drools.dialect.java.RuleBuilder;
import org.drools.facttemplates.FactTemplate;
import org.drools.facttemplates.FactTemplateImpl;
import org.drools.facttemplates.FieldTemplate;
@@ -58,6 +55,9 @@
import org.drools.rule.LineMappings;
import org.drools.rule.Package;
import org.drools.rule.Rule;
+import org.drools.rule.builder.dialect.java.FunctionBuilder;
+import org.drools.rule.builder.dialect.java.PackageStore;
+import org.drools.rule.builder.dialect.java.RuleBuilder;
import org.drools.spi.FunctionResolver;
import org.drools.xml.XmlPackageReader;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -28,12 +28,12 @@
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.drools.base.ClassFieldExtractorCache;
import org.drools.compiler.RuleError;
-import org.drools.dialect.java.DeclarationTypeFixer;
-import org.drools.dialect.java.JavaExprAnalyzer;
-import org.drools.dialect.java.KnowledgeHelperFixer;
-import org.drools.dialect.java.RuleBuilder;
import org.drools.lang.descr.BaseDescr;
import org.drools.rule.Declaration;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.java.RuleBuilder;
/**
* A holder class for utility functions
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -28,8 +28,6 @@
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
import org.drools.compiler.RuleError;
-import org.drools.dialect.java.JavaPredicateBuilder;
-import org.drools.dialect.java.JavaReturnValueBuilder;
import org.drools.facttemplates.FactTemplate;
import org.drools.facttemplates.FactTemplateFieldExtractor;
import org.drools.facttemplates.FactTemplateObjectType;
@@ -55,6 +53,8 @@
import org.drools.rule.ReturnValueRestriction;
import org.drools.rule.VariableConstraint;
import org.drools.rule.VariableRestriction;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldExtractor;
import org.drools.spi.FieldValue;
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java (from rev 9780, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java)
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/DeclarationTypeFixer.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,24 @@
+/**
+ *
+ */
+package org.drools.rule.builder.dialect.java;
+
+import org.drools.rule.Declaration;
+
+/**
+ * @author fburlet
+ * @author gdupriez
+ *
+ */
+public class DeclarationTypeFixer {
+
+ public String fix(Declaration declaration) {
+ Class classType = declaration.getExtractor().getExtractToClass();
+ if (classType.isArray()) {
+ return classType.getComponentType().getName().concat("[]");
+ } else {
+ // Does this replacement usefull in the declaration type ??
+ return classType.getName().replace('$', '.');
+ }
+ }
+}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/FunctionBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,118 @@
+package org.drools.rule.builder.dialect.java;
+
+/*
+ * 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.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.antlr.stringtemplate.StringTemplateGroup;
+import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
+import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.RuntimeDroolsException;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.rule.LineMappings;
+import org.drools.rule.Package;
+import org.drools.spi.DeclarationScopeResolver;
+
+public class FunctionBuilder {
+ private static final StringTemplateGroup functionGroup = new StringTemplateGroup( new InputStreamReader( FunctionBuilder.class.getResourceAsStream( "javaFunction.stg" ) ),
+ AngleBracketTemplateLexer.class );
+
+ public FunctionBuilder() {
+
+ }
+
+ public String build(final Package pkg,
+ final FunctionDescr functionDescr,
+ final TypeResolver typeResolver,
+ final Map lineMappings) {
+ final StringTemplate st = FunctionBuilder.functionGroup.getInstanceOf( "function" );
+
+ st.setAttribute( "package",
+ pkg.getName() );
+
+ st.setAttribute( "imports",
+ pkg.getImports() );
+
+ st.setAttribute( "className",
+ ucFirst( functionDescr.getName() ) );
+ st.setAttribute( "methodName",
+ functionDescr.getName() );
+
+ st.setAttribute( "returnType",
+ functionDescr.getReturnType() );
+
+ st.setAttribute( "parameterTypes",
+ functionDescr.getParameterTypes() );
+
+ st.setAttribute( "parameterNames",
+ functionDescr.getParameterNames() );
+
+ Map params = new HashMap();
+ List names = functionDescr.getParameterNames();
+ List types = functionDescr.getParameterTypes();
+ try {
+ for ( int i = 0, size = names.size(); i < size; i++ ) {
+ params.put( names.get( i ), typeResolver.resolveType( (String) types.get( i ) ) );
+ }
+ } catch ( ClassNotFoundException e ) {
+ // todo : must be a better way so we don't have to try/catch each resolveType call
+ throw new RuntimeDroolsException( e );
+ }
+
+ st.setAttribute( "text",
+ functionDescr.getText() );
+
+ String text = st.toString();
+
+ BufferedReader reader = new BufferedReader( new StringReader ( text ) );
+ String line = null;
+ String lineStartsWith = " public static " + functionDescr.getReturnType( ) + " " + functionDescr.getName();
+ int offset = 0;
+ try {
+ while ( ( line = reader.readLine() ) != null ) {
+ offset++;
+ if ( line.startsWith( lineStartsWith ) ) {
+ break;
+ }
+ }
+ functionDescr.setOffset( offset );
+ } catch ( IOException e ) {
+ // won't ever happen, it's just reading over a string.
+ throw new RuntimeDroolsException( "Error determining start offset with function" );
+ }
+
+ String name = pkg.getName() + "." + ucFirst( functionDescr.getName() );
+ LineMappings mapping = new LineMappings( name );
+ mapping.setStartLine( functionDescr.getLine() );
+ mapping.setOffset( functionDescr.getOffset() );
+ lineMappings.put( name, lineMappings );
+
+ return text;
+
+ }
+
+ private String ucFirst(final String name) {
+ return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
+ }
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaAccumulateBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,166 +0,0 @@
-/*
- * Copyright 2006 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.
- */
-
-package org.drools.dialect.java;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.base.ClassObjectType;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.Accumulate;
-import org.drools.rule.Column;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.semantics.java.builder.AccumulateBuilder;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-
-/**
- * @author etirelli
- *
- */
-public class JavaAccumulateBuilder
- implements
- ConditionalElementBuilder, AccumulateBuilder {
-
- /* (non-Javadoc)
- * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
- */
- /* (non-Javadoc)
- * @see org.drools.semantics.java.builder.AccumulateBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
- */
- public ConditionalElement build(BuildContext context,
- BuildUtils utils,
- ColumnBuilder columnBuilder,
- BaseDescr descr) {
-
- AccumulateDescr accumDescr = (AccumulateDescr) descr;
-
- Column sourceColumn = columnBuilder.build( context,
- utils,
- accumDescr.getSourceColumn() );
-
- if ( sourceColumn == null ) {
- return null;
- }
-
- Column resultColumn = columnBuilder.build( context,
- utils,
- accumDescr.getResultColumn() );
-
- final String className = "accumulate" + context.getNextId();
- accumDescr.setClassMethodName( className );
-
- final List[] usedIdentifiers1 = utils.getUsedIdentifiers( context,
- accumDescr,
- accumDescr.getInitCode() );
- final List[] usedIdentifiers2 = utils.getUsedIdentifiers( context,
- accumDescr,
- accumDescr.getActionCode() );
- final List[] usedIdentifiers3 = utils.getUsedIdentifiers( context,
- accumDescr,
- accumDescr.getResultCode() );
-
- final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
- requiredDeclarations.addAll( usedIdentifiers2[0] );
- requiredDeclarations.addAll( usedIdentifiers3[0] );
-
- final List requiredGlobals = new ArrayList( usedIdentifiers1[1] );
- requiredGlobals.addAll( usedIdentifiers2[1] );
- requiredGlobals.addAll( usedIdentifiers3[1] );
-
- final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
- for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
- declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
- }
- final Declaration[] sourceDeclArr = (Declaration[]) sourceColumn.getOuterDeclarations().values().toArray( new Declaration[0] );
-
- final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
-
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "accumulateMethod" );
-
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- globals );
-
- st.setAttribute( "innerDeclarations",
- sourceDeclArr );
- st.setAttribute( "methodName",
- className );
-
- final String initCode = accumDescr.getInitCode();
- final String actionCode = accumDescr.getActionCode();
- final String resultCode = accumDescr.getResultCode();
- st.setAttribute( "initCode",
- initCode );
- st.setAttribute( "actionCode",
- actionCode );
- st.setAttribute( "resultCode",
- resultCode );
-
- String resultType = null;
- // TODO: Need to change this...
- if ( resultColumn.getObjectType() instanceof ClassObjectType ) {
- resultType = ((ClassObjectType) resultColumn.getObjectType()).getClassType().getName();
- } else {
- resultType = resultColumn.getObjectType().getValueType().getClassType().getName();
- }
-
- st.setAttribute( "resultType",
- resultType );
-
- context.getMethods().add( st.toString() );
-
- st = utils.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
-
- st.setAttribute( "package",
- context.getPkg().getName() );
- st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
- st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
- st.setAttribute( "methodName",
- className );
-
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
-
- st.setAttribute( "hashCode",
- actionCode.hashCode() );
-
- Accumulate accumulate = new Accumulate( sourceColumn,
- resultColumn,
- declarations,
- sourceDeclArr );
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
- context.getInvokers().put( invokerClassName,
- st.toString() );
- context.getInvokerLookups().put( invokerClassName,
- accumulate );
- context.getDescrLookups().put( invokerClassName,
- accumDescr );
- return accumulate;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaAccumulateBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.rule.builder.dialect.java;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.base.ClassObjectType;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.rule.Accumulate;
+import org.drools.rule.Column;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaAccumulateBuilder
+ implements
+ ConditionalElementBuilder, AccumulateBuilder {
+
+ /* (non-Javadoc)
+ * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
+ */
+ /* (non-Javadoc)
+ * @see org.drools.semantics.java.builder.AccumulateBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
+ */
+ public ConditionalElement build(BuildContext context,
+ BuildUtils utils,
+ ColumnBuilder columnBuilder,
+ BaseDescr descr) {
+
+ AccumulateDescr accumDescr = (AccumulateDescr) descr;
+
+ Column sourceColumn = columnBuilder.build( context,
+ utils,
+ accumDescr.getSourceColumn() );
+
+ if ( sourceColumn == null ) {
+ return null;
+ }
+
+ Column resultColumn = columnBuilder.build( context,
+ utils,
+ accumDescr.getResultColumn() );
+
+ final String className = "accumulate" + context.getNextId();
+ accumDescr.setClassMethodName( className );
+
+ final List[] usedIdentifiers1 = utils.getUsedIdentifiers( context,
+ accumDescr,
+ accumDescr.getInitCode() );
+ final List[] usedIdentifiers2 = utils.getUsedIdentifiers( context,
+ accumDescr,
+ accumDescr.getActionCode() );
+ final List[] usedIdentifiers3 = utils.getUsedIdentifiers( context,
+ accumDescr,
+ accumDescr.getResultCode() );
+
+ final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
+ requiredDeclarations.addAll( usedIdentifiers2[0] );
+ requiredDeclarations.addAll( usedIdentifiers3[0] );
+
+ final List requiredGlobals = new ArrayList( usedIdentifiers1[1] );
+ requiredGlobals.addAll( usedIdentifiers2[1] );
+ requiredGlobals.addAll( usedIdentifiers3[1] );
+
+ final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
+ for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
+ declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
+ }
+ final Declaration[] sourceDeclArr = (Declaration[]) sourceColumn.getOuterDeclarations().values().toArray( new Declaration[0] );
+
+ final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
+
+ StringTemplate st = utils.getRuleGroup().getInstanceOf( "accumulateMethod" );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ globals );
+
+ st.setAttribute( "innerDeclarations",
+ sourceDeclArr );
+ st.setAttribute( "methodName",
+ className );
+
+ final String initCode = accumDescr.getInitCode();
+ final String actionCode = accumDescr.getActionCode();
+ final String resultCode = accumDescr.getResultCode();
+ st.setAttribute( "initCode",
+ initCode );
+ st.setAttribute( "actionCode",
+ actionCode );
+ st.setAttribute( "resultCode",
+ resultCode );
+
+ String resultType = null;
+ // TODO: Need to change this...
+ if ( resultColumn.getObjectType() instanceof ClassObjectType ) {
+ resultType = ((ClassObjectType) resultColumn.getObjectType()).getClassType().getName();
+ } else {
+ resultType = resultColumn.getObjectType().getValueType().getClassType().getName();
+ }
+
+ st.setAttribute( "resultType",
+ resultType );
+
+ context.getMethods().add( st.toString() );
+
+ st = utils.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
+
+ st.setAttribute( "package",
+ context.getPkg().getName() );
+ st.setAttribute( "ruleClassName",
+ utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ st.setAttribute( "invokerClassName",
+ context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ st.setAttribute( "methodName",
+ className );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
+
+ st.setAttribute( "hashCode",
+ actionCode.hashCode() );
+
+ Accumulate accumulate = new Accumulate( sourceColumn,
+ resultColumn,
+ declarations,
+ sourceDeclArr );
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ context.getInvokers().put( invokerClassName,
+ st.toString() );
+ context.getInvokerLookups().put( invokerClassName,
+ accumulate );
+ context.getDescrLookups().put( invokerClassName,
+ accumDescr );
+ return accumulate;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaConsequenceBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,119 +0,0 @@
-/*
- * Copyright 2006 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.
- */
-
-package org.drools.dialect.java;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.RuntimeDroolsException;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Declaration;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ConsequenceBuilder;
-
-/**
- * @author etirelli
- *
- */
-public class JavaConsequenceBuilder implements ConsequenceBuilder {
-
- /* (non-Javadoc)
- * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
- */
- public void buildConsequence(final BuildContext context,
- final BuildUtils utils,
- final RuleDescr ruleDescr) {
-
- // pushing consequence LHS into the stack for variable resolution
- context.getBuildStack().push( context.getRule().getLhs() );
-
- // generate
- // generate Invoker
- final String className = "consequence";
-
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
-
- st.setAttribute( "methodName",
- className );
-
- final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
- ruleDescr,
- ruleDescr.getConsequence() );
-
- final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
- for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
- }
-
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
- st.setAttribute( "text",
- utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ) );
-
- context.getMethods().add( st.toString() );
-
- st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
-
- st.setAttribute( "package",
- context.getPkg().getName() );
- st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
- st.setAttribute( "invokerClassName",
- ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
- st.setAttribute( "methodName",
- className );
-
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- // Must use the rule declarations, so we use the same order as used in the generated invoker
- final List list = Arrays.asList( context.getRule().getDeclarations() );
-
- final int[] indexes = new int[declarations.length];
- for ( int i = 0, length = declarations.length; i < length; i++ ) {
- indexes[i] = list.indexOf( declarations[i] );
- if ( indexes[i] == -1 ) {
- // some defensive code, this should never happen
- throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
- }
- }
-
- st.setAttribute( "indexes",
- indexes );
-
- st.setAttribute( "text",
- ruleDescr.getConsequence() );
-
- final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
- context.getInvokers().put( invokerClassName,
- st.toString() );
- context.getInvokerLookups().put( invokerClassName,
- context.getRule() );
- context.getDescrLookups().put( invokerClassName,
- ruleDescr );
-
- // popping Rule.getLHS() from the build stack
- context.getBuildStack().pop();
- }
-
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaConsequenceBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.rule.builder.dialect.java;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.RuntimeDroolsException;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ConsequenceBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaConsequenceBuilder implements ConsequenceBuilder {
+
+ /* (non-Javadoc)
+ * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
+ */
+ public void buildConsequence(final BuildContext context,
+ final BuildUtils utils,
+ final RuleDescr ruleDescr) {
+
+ // pushing consequence LHS into the stack for variable resolution
+ context.getBuildStack().push( context.getRule().getLhs() );
+
+ // generate
+ // generate Invoker
+ final String className = "consequence";
+
+ StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
+
+ st.setAttribute( "methodName",
+ className );
+
+ final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
+ ruleDescr,
+ ruleDescr.getConsequence() );
+
+ final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+ for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+ declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+ }
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+ st.setAttribute( "text",
+ utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ) );
+
+ context.getMethods().add( st.toString() );
+
+ st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
+
+ st.setAttribute( "package",
+ context.getPkg().getName() );
+ st.setAttribute( "ruleClassName",
+ utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ st.setAttribute( "invokerClassName",
+ ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
+ st.setAttribute( "methodName",
+ className );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ // Must use the rule declarations, so we use the same order as used in the generated invoker
+ final List list = Arrays.asList( context.getRule().getDeclarations() );
+
+ final int[] indexes = new int[declarations.length];
+ for ( int i = 0, length = declarations.length; i < length; i++ ) {
+ indexes[i] = list.indexOf( declarations[i] );
+ if ( indexes[i] == -1 ) {
+ // some defensive code, this should never happen
+ throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
+ }
+ }
+
+ st.setAttribute( "indexes",
+ indexes );
+
+ st.setAttribute( "text",
+ ruleDescr.getConsequence() );
+
+ final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
+ context.getInvokers().put( invokerClassName,
+ st.toString() );
+ context.getInvokerLookups().put( invokerClassName,
+ context.getRule() );
+ context.getDescrLookups().put( invokerClassName,
+ ruleDescr );
+
+ // popping Rule.getLHS() from the build stack
+ context.getBuildStack().pop();
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,117 +0,0 @@
-/*
- * Copyright 2006 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.
- */
-
-package org.drools.dialect.java;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.rule.EvalCondition;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-
-/**
- * @author etirelli
- *
- */
-public class JavaEvalBuilder
- implements
- ConditionalElementBuilder {
-
- /**
- * Builds and returns an Eval Conditional Element
- *
- * @param context The current build context
- * @param utils The current build utils instance
- * @param columnBuilder not used by EvalBuilder
- * @param descr The Eval Descriptor to build the eval conditional element from
- *
- * @return the Eval Conditional Element
- */
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final ColumnBuilder columnBuilder,
- final BaseDescr descr) {
- // it must be an EvalDescr
- EvalDescr evalDescr = (EvalDescr) descr;
-
- final String className = "eval" + context.getNextId();
-
- evalDescr.setClassMethodName( className );
-
- final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
- evalDescr,
- evalDescr.getText() );
-
- final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
- for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
- }
-
- final EvalCondition eval = new EvalCondition( declarations );
-
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
-
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- st.setAttribute( "methodName",
- className );
-
- final String evalText = evalDescr.getText();
- st.setAttribute( "text",
- evalText );
-
- context.getMethods().add( st.toString() );
-
- st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
-
- st.setAttribute( "package",
- context.getPkg().getName() );
- st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
- st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
- st.setAttribute( "methodName",
- className );
-
- utils.setStringTemplateAttributes( context,
- st,
- declarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- st.setAttribute( "hashCode",
- evalText.hashCode() );
-
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
- context.getInvokers().put( invokerClassName,
- st.toString() );
- context.getInvokerLookups().put( invokerClassName,
- eval );
- context.getDescrLookups().put( invokerClassName,
- evalDescr );
- return eval;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.rule.builder.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaEvalBuilder
+ implements
+ ConditionalElementBuilder {
+
+ /**
+ * Builds and returns an Eval Conditional Element
+ *
+ * @param context The current build context
+ * @param utils The current build utils instance
+ * @param columnBuilder not used by EvalBuilder
+ * @param descr The Eval Descriptor to build the eval conditional element from
+ *
+ * @return the Eval Conditional Element
+ */
+ public ConditionalElement build(final BuildContext context,
+ final BuildUtils utils,
+ final ColumnBuilder columnBuilder,
+ final BaseDescr descr) {
+ // it must be an EvalDescr
+ EvalDescr evalDescr = (EvalDescr) descr;
+
+ final String className = "eval" + context.getNextId();
+
+ evalDescr.setClassMethodName( className );
+
+ final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
+ evalDescr,
+ evalDescr.getText() );
+
+ final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+ for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+ declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+ }
+
+ final EvalCondition eval = new EvalCondition( declarations );
+
+ StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ st.setAttribute( "methodName",
+ className );
+
+ final String evalText = evalDescr.getText();
+ st.setAttribute( "text",
+ evalText );
+
+ context.getMethods().add( st.toString() );
+
+ st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
+
+ st.setAttribute( "package",
+ context.getPkg().getName() );
+ st.setAttribute( "ruleClassName",
+ utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ st.setAttribute( "invokerClassName",
+ context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ st.setAttribute( "methodName",
+ className );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ declarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ st.setAttribute( "hashCode",
+ evalText.hashCode() );
+
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ context.getInvokers().put( invokerClassName,
+ st.toString() );
+ context.getInvokerLookups().put( invokerClassName,
+ eval );
+ context.getDescrLookups().put( invokerClassName,
+ evalDescr );
+ return eval;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaExprAnalyzer.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,137 @@
+package org.drools.rule.builder.dialect.java;
+
+/*
+ * 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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+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.semantics.java.parser.JavaParserLexer;
+import org.drools.semantics.java.parser.JavaParserParser;
+
+/**
+ * Expression analyzer.
+ *
+ * @author <a href="mailto:bob at eng.werken.com">bob mcwhirter </a>
+ */
+public class JavaExprAnalyzer {
+ // ------------------------------------------------------------
+ // Constructors
+ // ------------------------------------------------------------
+
+ /**
+ * Construct.
+ */
+ public JavaExprAnalyzer() {
+ // intentionally left blank.
+ }
+
+ // ------------------------------------------------------------
+ // Instance methods
+ // ------------------------------------------------------------
+
+ /**
+ * Analyze an expression.
+ *
+ * @param expr
+ * The expression to analyze.
+ * @param availDecls
+ * Total set of declarations available.
+ *
+ * @return The <code>Set</code> of declarations used by the expression.
+ * @throws RecognitionException
+ * If an error occurs in the parser.
+ */
+ public List[] analyzeExpression(final String expr,
+ final Set[] availableIdentifiers) throws RecognitionException {
+ final CharStream charStream = new ANTLRStringStream( expr );
+ final JavaParserLexer lexer = new JavaParserLexer( charStream );
+ final TokenStream tokenStream = new CommonTokenStream( lexer );
+ final JavaParserParser parser = new JavaParserParser( tokenStream );
+
+ parser.logicalOrExpression();
+
+ return analyze( parser.getIdentifiers(),
+ availableIdentifiers );
+ }
+
+ public List[] analyzeBlock(final String expr,
+ final Set[] availableIdentifiers) throws RecognitionException {
+ final CharStream charStream = new ANTLRStringStream( "{" + expr + "}" );
+ final JavaParserLexer lexer = new JavaParserLexer( charStream );
+ final TokenStream tokenStream = new CommonTokenStream( lexer );
+ final JavaParserParser parser = new JavaParserParser( tokenStream );
+
+ parser.compoundStatement();
+
+ return analyze( parser.getIdentifiers(),
+ availableIdentifiers );
+ }
+
+ /**
+ * Analyze an expression.
+ *
+ * @param availDecls
+ * Total set of declarations available.
+ * @param ast
+ * The AST for the expression.
+ *
+ * @return The <code>Set</code> of declarations used by the expression.
+ *
+ * @throws RecognitionException
+ * If an error occurs in the parser.
+ */
+ private List[] analyze(final List identifiers,
+ final Set[] availableIdentifiers) throws RecognitionException {
+ final List[] used = new List[availableIdentifiers.length];
+ for ( int i = 0, length = used.length; i < length; i++ ) {
+ used[i] = new ArrayList();
+ }
+
+ for ( int i = 0, length = availableIdentifiers.length; i < length; i++ ) {
+ final Set set = availableIdentifiers[i];
+ for ( final Iterator it = set.iterator(); it.hasNext(); ) {
+ final String eachDecl = (String) it.next();
+ if ( identifiers.contains( eachDecl ) ) {
+ used[i].add( eachDecl );
+ }
+ }
+ }
+
+ return used;
+ //--------------------------------------------------------
+ // List decls = new ArrayList();
+ //
+ // for ( Iterator declIter = availDecls.iterator(); declIter.hasNext(); )
+ // {
+ // String eachDecl = (String) declIter.next();
+ //
+ // if ( identifiers.contains( eachDecl ) )
+ // {
+ // decls.add( eachDecl );
+ // }
+ // }
+ //
+ // return decls;
+ }
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,89 +0,0 @@
-package org.drools.dialect.java;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.PredicateConstraint;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.PredicateBuilder;
-
-public class JavaPredicateBuilder
- implements
- PredicateBuilder {
-
- public void build(final BuildContext context,
- final BuildUtils utils,
- final List[] usedIdentifiers,
- final Declaration[] previousDeclarations,
- final Declaration[] localDeclarations,
- final PredicateConstraint predicateConstraint,
- final PredicateDescr predicateDescr) {
- // generate
- // generate Invoker
- final String className = "predicate" + context.getNextId();
- predicateDescr.setClassMethodName( className );
-
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
-
- utils.setStringTemplateAttributes( context,
- st,
- previousDeclarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- final String[] localDeclarationTypes = new String[localDeclarations.length];
- for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
- localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
- }
-
- st.setAttribute( "localDeclarations",
- localDeclarations );
- st.setAttribute( "localDeclarationTypes",
- localDeclarationTypes );
-
- st.setAttribute( "methodName",
- className );
-
- final String predicateText = predicateDescr.getText();
-
- st.setAttribute( "text",
- predicateText );
-
- context.getMethods().add( st.toString() );
-
- st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
-
- st.setAttribute( "package",
- context.getPkg().getName() );
- st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
- st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
- st.setAttribute( "methodName",
- className );
-
- utils.setStringTemplateAttributes( context,
- st,
- previousDeclarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- st.setAttribute( "localDeclarations",
- localDeclarations );
- st.setAttribute( "localDeclarationTypes",
- localDeclarationTypes );
-
- st.setAttribute( "hashCode",
- predicateText.hashCode() );
-
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
- context.getInvokers().put( invokerClassName,
- st.toString() );
- context.getInvokerLookups().put( invokerClassName,
- predicateConstraint );
- context.getDescrLookups().put( invokerClassName,
- predicateDescr );
- }
-
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,89 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.PredicateBuilder;
+
+public class JavaPredicateBuilder
+ implements
+ PredicateBuilder {
+
+ public void build(final BuildContext context,
+ final BuildUtils utils,
+ final List[] usedIdentifiers,
+ final Declaration[] previousDeclarations,
+ final Declaration[] localDeclarations,
+ final PredicateConstraint predicateConstraint,
+ final PredicateDescr predicateDescr) {
+ // generate
+ // generate Invoker
+ final String className = "predicate" + context.getNextId();
+ predicateDescr.setClassMethodName( className );
+
+ StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ previousDeclarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ final String[] localDeclarationTypes = new String[localDeclarations.length];
+ for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
+ localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+ }
+
+ st.setAttribute( "localDeclarations",
+ localDeclarations );
+ st.setAttribute( "localDeclarationTypes",
+ localDeclarationTypes );
+
+ st.setAttribute( "methodName",
+ className );
+
+ final String predicateText = predicateDescr.getText();
+
+ st.setAttribute( "text",
+ predicateText );
+
+ context.getMethods().add( st.toString() );
+
+ st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
+
+ st.setAttribute( "package",
+ context.getPkg().getName() );
+ st.setAttribute( "ruleClassName",
+ utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ st.setAttribute( "invokerClassName",
+ context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ st.setAttribute( "methodName",
+ className );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ previousDeclarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ st.setAttribute( "localDeclarations",
+ localDeclarations );
+ st.setAttribute( "localDeclarationTypes",
+ localDeclarationTypes );
+
+ st.setAttribute( "hashCode",
+ predicateText.hashCode() );
+
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ context.getInvokers().put( invokerClassName,
+ st.toString() );
+ context.getInvokerLookups().put( invokerClassName,
+ predicateConstraint );
+ context.getDescrLookups().put( invokerClassName,
+ predicateDescr );
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,81 +0,0 @@
-package org.drools.dialect.java;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.ReturnValueRestriction;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-
-public class JavaReturnValueBuilder {
- public void build(final BuildContext context,
- final BuildUtils utils,
- final List[] usedIdentifiers,
- final Declaration[] previousDeclarations,
- final Declaration[] localDeclarations,
- final ReturnValueRestriction returnValueRestriction,
- final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
- final String className = "returnValue" + context.getNextId();
- returnValueRestrictionDescr.setClassMethodName( className );
-
- StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
-
- utils.setStringTemplateAttributes( context,
- st,
- previousDeclarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- final String[] localDeclarationTypes = new String[localDeclarations.length];
- for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
- localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
- }
-
- st.setAttribute( "localDeclarations",
- localDeclarations );
- st.setAttribute( "localDeclarationTypes",
- localDeclarationTypes );
-
- st.setAttribute( "methodName",
- className );
-
- final String returnValueText = returnValueRestrictionDescr.getText();
- st.setAttribute( "text",
- returnValueText );
-
- context.getMethods().add( st.toString() );
-
- st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
-
- st.setAttribute( "package",
- context.getPkg().getName() );
- st.setAttribute( "ruleClassName",
- utils.ucFirst( context.getRuleDescr().getClassName() ) );
- st.setAttribute( "invokerClassName",
- context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
- st.setAttribute( "methodName",
- className );
-
- utils.setStringTemplateAttributes( context,
- st,
- previousDeclarations,
- (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
- st.setAttribute( "localDeclarations",
- localDeclarations );
- st.setAttribute( "localDeclarationTypes",
- localDeclarationTypes );
-
- st.setAttribute( "hashCode",
- returnValueText.hashCode() );
-
- final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
- context.getInvokers().put( invokerClassName,
- st.toString() );
- context.getInvokerLookups().put( invokerClassName,
- returnValueRestriction );
- context.getDescrLookups().put( invokerClassName,
- returnValueRestrictionDescr );
- }
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,81 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.ReturnValueRestriction;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+
+public class JavaReturnValueBuilder {
+ public void build(final BuildContext context,
+ final BuildUtils utils,
+ final List[] usedIdentifiers,
+ final Declaration[] previousDeclarations,
+ final Declaration[] localDeclarations,
+ final ReturnValueRestriction returnValueRestriction,
+ final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
+ final String className = "returnValue" + context.getNextId();
+ returnValueRestrictionDescr.setClassMethodName( className );
+
+ StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ previousDeclarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ final String[] localDeclarationTypes = new String[localDeclarations.length];
+ for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
+ localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+ }
+
+ st.setAttribute( "localDeclarations",
+ localDeclarations );
+ st.setAttribute( "localDeclarationTypes",
+ localDeclarationTypes );
+
+ st.setAttribute( "methodName",
+ className );
+
+ final String returnValueText = returnValueRestrictionDescr.getText();
+ st.setAttribute( "text",
+ returnValueText );
+
+ context.getMethods().add( st.toString() );
+
+ st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
+
+ st.setAttribute( "package",
+ context.getPkg().getName() );
+ st.setAttribute( "ruleClassName",
+ utils.ucFirst( context.getRuleDescr().getClassName() ) );
+ st.setAttribute( "invokerClassName",
+ context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+ st.setAttribute( "methodName",
+ className );
+
+ utils.setStringTemplateAttributes( context,
+ st,
+ previousDeclarations,
+ (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+ st.setAttribute( "localDeclarations",
+ localDeclarations );
+ st.setAttribute( "localDeclarationTypes",
+ localDeclarationTypes );
+
+ st.setAttribute( "hashCode",
+ returnValueText.hashCode() );
+
+ final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+ context.getInvokers().put( invokerClassName,
+ st.toString() );
+ context.getInvokerLookups().put( invokerClassName,
+ returnValueRestriction );
+ context.getDescrLookups().put( invokerClassName,
+ returnValueRestrictionDescr );
+ }
+}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/KnowledgeHelperFixer.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,199 @@
+package org.drools.rule.builder.dialect.java;
+
+/*
+ * 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.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class KnowledgeHelperFixer {
+
+ static String KNOWLEDGE_HELPER_PFX = ""; //could also be: "drools\\." for "classic" mode.
+ static Pattern MODIFY = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "modify\\s*\\(([^)]+)\\)(.*)",
+ Pattern.DOTALL );
+ static Pattern ASSERT = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "assert\\s*\\((.*)\\)(.*)",
+ Pattern.DOTALL );
+ static Pattern ASSERT_LOGICAL = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "assertLogical\\s*\\((.*)\\)(.*)",
+ Pattern.DOTALL );
+ static Pattern RETRACT = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "retract\\s*\\(([^)]+)\\)(.*)",
+ Pattern.DOTALL );
+
+ /**
+ * This takes a raw consequence, and fixes up the KnowledegeHelper references
+ * to be what SMF requires.
+ *
+ * eg: modify( myObject ); --> drools.modify( myObjectHandle, myObject );
+ * refer to the Replacer implementation classes below for the specific replacement patterns.
+ *
+ * (can adjust the PREFIX if needed).
+ *
+ * Uses some non-tail recursion to ensure that all parts are "expanded".
+ */
+ public String fix(final String raw) {
+ String result = fix( raw,
+ ModifyReplacer.INSTANCE );
+ result = fix( result,
+ AssertReplacer.INSTANCE );
+ result = fix( result,
+ AssertLogicalReplacer.INSTANCE );
+ result = fix( result,
+ RetractReplacer.INSTANCE );
+ return result;
+ }
+
+ /**
+ * Recursively apply the pattern, replace the guts of what is matched.
+ */
+ public String fix(final String raw,
+ final Replacer replacer) {
+ if ( raw == null ) {
+ return null;
+ }
+ final Matcher matcher = replacer.getPattern().matcher( raw );
+
+ if ( matcher.matches() ) {
+ String pre = matcher.group( 1 );
+ if ( matcher.group( 1 ) != null ) {
+ pre = fix( pre,
+ replacer );
+ }
+ final String obj = matcher.group( 2 ).trim();
+ String post = matcher.group( 3 );
+ if ( post != null ) {
+ post = fix( post,
+ replacer );
+ }
+
+ final String replacement = escapeDollarSigns( replacer,
+ obj );
+ return pre + matcher.replaceAll( replacement ) + post;
+
+ } else {
+ return raw;
+ }
+ }
+
+ /**
+ * This is needed to escape "$" so that matches doesn't try and pull out groups that don't exist.
+ * "$" may just be used in variable name etc...
+ */
+ private String escapeDollarSigns(final Replacer replacer,
+ final String obj) {
+ return KnowledgeHelperFixer.replace( replacer.getReplacement( obj ),
+ "$",
+ "\\$",
+ 256 );
+ }
+
+ static interface Replacer {
+ Pattern getPattern();
+
+ String getReplacement(String guts);
+ }
+
+ static class AssertReplacer
+ implements
+ Replacer {
+
+ static Replacer INSTANCE = new AssertReplacer();
+
+ public Pattern getPattern() {
+ return KnowledgeHelperFixer.ASSERT;
+ }
+
+ public String getReplacement(final String guts) {
+ return "drools.assertObject(" + guts + ")";
+ }
+
+ }
+
+ static class AssertLogicalReplacer
+ implements
+ Replacer {
+
+ static Replacer INSTANCE = new AssertLogicalReplacer();
+
+ public Pattern getPattern() {
+ return KnowledgeHelperFixer.ASSERT_LOGICAL;
+ }
+
+ public String getReplacement(final String guts) {
+ return "drools.assertLogicalObject(" + guts + ")";
+ }
+
+ }
+
+ static class ModifyReplacer
+ implements
+ Replacer {
+
+ static Replacer INSTANCE = new ModifyReplacer();
+
+ public Pattern getPattern() {
+ return KnowledgeHelperFixer.MODIFY;
+ }
+
+ public String getReplacement(final String guts) {
+ return "drools.modifyObject(" + guts.trim() + "__Handle__, " + guts + ")";
+ }
+
+ }
+
+ static class RetractReplacer
+ implements
+ Replacer {
+
+ static Replacer INSTANCE = new RetractReplacer();
+
+ public Pattern getPattern() {
+ return KnowledgeHelperFixer.RETRACT;
+ }
+
+ public String getReplacement(final String guts) {
+ return "drools.retractObject(" + guts.trim() + "__Handle__)";
+ }
+
+ }
+
+ /**
+ * Simple non regex replacer.
+ * jakarta commons provided the inspiration for this.
+ */
+ static String replace(final String text,
+ final String repl,
+ final String with,
+ int max) {
+ if ( text == null || repl == null || repl.equals( "" ) || with == null || max == 0 ) {
+ return text;
+ }
+
+ final StringBuffer buf = new StringBuffer( text.length() );
+ int start = 0, end = 0;
+ while ( (end = text.indexOf( repl,
+ start )) != -1 ) {
+ buf.append( text.substring( start,
+ end ) ).append( with );
+ start = end + repl.length();
+
+ if ( --max == 0 ) {
+ break;
+ }
+ }
+ buf.append( text.substring( start ) );
+ return buf.toString();
+ }
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/PackageStore.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,65 @@
+package org.drools.rule.builder.dialect.java;
+
+/*
+ * 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.apache.commons.jci.stores.ResourceStore;
+import org.drools.rule.PackageCompilationData;
+
+public class PackageStore
+ implements
+ ResourceStore {
+ private PackageCompilationData packageCompilationData;
+
+ public PackageStore() {
+ }
+
+ public PackageStore(final PackageCompilationData packageCompiationData) {
+ this.packageCompilationData = packageCompiationData;
+ }
+
+ public void setPackageCompilationData(final PackageCompilationData packageCompiationData) {
+ this.packageCompilationData = packageCompiationData;
+ }
+
+ public void write(final String resourceName,
+ final byte[] clazzData) {
+ try {
+ this.packageCompilationData.write( resourceName,
+ clazzData );
+ } catch ( final Exception e ) {
+
+ }
+ }
+
+ public byte[] read(final String resourceName) {
+ byte[] clazz = null;
+ try {
+ clazz = this.packageCompilationData.read( resourceName );
+ } catch ( final Exception e ) {
+
+ }
+ return clazz;
+ }
+
+ public void remove(final String resourceName) {
+ try {
+ this.packageCompilationData.remove( resourceName );
+ } catch ( final Exception e ) {
+
+ }
+ }
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/RuleBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,250 @@
+package org.drools.rule.builder.dialect.java;
+
+/*
+ * 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.Calendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.evaluators.DateFactory;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.CollectDescr;
+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.QueryDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.CollectBuilder;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.ForallBuilder;
+import org.drools.rule.builder.GroupElementBuilder;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
+
+/**
+ * This builds the rule structure from an AST.
+ * Generates semantic code where necessary if semantics are used.
+ * This is an internal API.
+ */
+public class RuleBuilder {
+
+ // the current build context
+ private BuildContext context;
+
+ // the current build utils
+ private BuildUtils utils;
+
+ // a map of registered builders
+ private Map builders;
+
+ // the builder for columns
+ private ColumnBuilder columnBuilder;
+
+ // the builder for the consequence
+ private ConsequenceBuilder consequenceBuilder;
+
+ // the builder for the rule class
+ private RuleClassBuilder classBuilder;
+
+ // Constructor
+ public RuleBuilder(final TypeResolver typeResolver,
+ final ClassFieldExtractorCache cache) {
+
+ // statically adding all builders to the map
+ // but in the future we can move that to a configuration
+ // if we want to
+ this.builders = new HashMap();
+ builders.put( EvalDescr.class,
+ new JavaEvalBuilder() );
+ builders.put( FromDescr.class,
+ new MVELFromBuilder() );
+ builders.put( CollectDescr.class,
+ new CollectBuilder() );
+ builders.put( AccumulateDescr.class,
+ new JavaAccumulateBuilder() );
+ builders.put( ForallDescr.class,
+ new ForallBuilder() );
+ GroupElementBuilder gebuilder = new GroupElementBuilder();
+ builders.put( AndDescr.class,
+ gebuilder);
+ builders.put( OrDescr.class,
+ gebuilder);
+ builders.put( NotDescr.class,
+ gebuilder);
+ builders.put( ExistsDescr.class,
+ gebuilder);
+
+
+ this.utils = new BuildUtils( new KnowledgeHelperFixer(),
+ new DeclarationTypeFixer(),
+ new JavaExprAnalyzer(),
+ typeResolver,
+ cache,
+ builders );
+
+ this.columnBuilder = new ColumnBuilder();
+
+ this.consequenceBuilder = new JavaConsequenceBuilder();
+
+ this.classBuilder = new RuleClassBuilder();
+ }
+
+ public Map getInvokers() {
+ return (this.context == null) ? null : this.context.getInvokers();
+ }
+
+ public Map getDescrLookups() {
+ return (this.context == null) ? null : this.context.getDescrLookups();
+ }
+
+ public String getRuleClass() {
+ return (this.context == null) ? null : this.context.getRuleClass();
+ }
+
+ public Map getInvokerLookups() {
+ return (this.context == null) ? null : this.context.getInvokerLookups();
+ }
+
+ public List getErrors() {
+ return (this.context == null) ? null : this.context.getErrors();
+ }
+
+ public Rule getRule() {
+ if ( this.context == null ) {
+ return null;
+ }
+ if ( !this.context.getErrors().isEmpty() ) {
+ this.context.getRule().setSemanticallyValid( false );
+ }
+ return this.context.getRule();
+ }
+
+ public Package getPackage() {
+ return this.context.getPkg();
+ }
+
+ /**
+ * Build the give rule into the
+ * @param pkg
+ * @param ruleDescr
+ * @return
+ */
+ public synchronized Rule build(final Package pkg,
+ final RuleDescr ruleDescr) {
+ this.context = new BuildContext( pkg,
+ ruleDescr );
+
+ // Assign attributes
+ setAttributes( this.context.getRule(),
+ ruleDescr.getAttributes() );
+
+ ConditionalElementBuilder builder = utils.getBuilder( ruleDescr.getLhs().getClass() );
+ if( builder != null ) {
+ GroupElement ce = (GroupElement) builder.build( this.context, this.utils, this.columnBuilder, ruleDescr.getLhs() );
+ this.context.getRule().setLhs( ce );
+ } else {
+ throw new RuntimeDroolsException("BUG: builder not found for descriptor class "+ruleDescr.getLhs().getClass() );
+ }
+
+ // Build the consequence and generate it's invoker/s
+ // generate the main rule from the previously generated s.
+ if ( !(ruleDescr instanceof QueryDescr) ) {
+ // do not build the consequence if we have a query
+ this.consequenceBuilder.buildConsequence( this.context,
+ this.utils,
+ ruleDescr );
+ }
+ this.classBuilder.buildRule( this.context, this.utils, ruleDescr );
+
+ return this.context.getRule();
+ }
+
+
+ /**
+ * Sets rule Attributes
+ *
+ * @param rule
+ * @param attributes
+ */
+ void setAttributes(final Rule rule,
+ final List attributes) {
+
+ for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
+ final AttributeDescr attributeDescr = (AttributeDescr) it.next();
+ final String name = attributeDescr.getName();
+ if ( name.equals( "salience" ) ) {
+ rule.setSalience( Integer.parseInt( attributeDescr.getValue() ) );
+ } else if ( name.equals( "no-loop" ) ) {
+ if ( attributeDescr.getValue() == null ) {
+ rule.setNoLoop( true );
+ } else {
+ rule.setNoLoop( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
+ }
+ } else if ( name.equals( "auto-focus" ) ) {
+ if ( attributeDescr.getValue() == null ) {
+ rule.setAutoFocus( true );
+ } else {
+ rule.setAutoFocus( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
+ }
+ } else if ( name.equals( "agenda-group" ) ) {
+ rule.setAgendaGroup( attributeDescr.getValue() );
+ } else if ( name.equals( "activation-group" ) ) {
+ rule.setActivationGroup( attributeDescr.getValue() );
+ } else if ( name.equals( "ruleflow-group" ) ) {
+ rule.setRuleFlowGroup( attributeDescr.getValue() );
+ } else if ( name.equals( "duration" ) ) {
+ rule.setDuration( Long.parseLong( attributeDescr.getValue() ) );
+ rule.setAgendaGroup( "" );
+ } else if (name.equals( "enabled" )){
+ if (attributeDescr.getValue() == null) {
+ rule.setEnabled( true );
+ } else {
+ rule.setEnabled( Boolean.valueOf( attributeDescr.getValue() ).booleanValue());
+ }
+ } else if (name.equals( "date-effective" )) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
+ rule.setDateEffective( cal );
+ } else if (name.equals( "date-expires" )) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
+ rule.setDateExpires( cal );
+
+ } else if ( name.equals( "language" ) ) {
+ //@todo: we don't currently support multiple languages
+ }
+ }
+ }
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel (from rev 9780, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel)
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELEvalBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,83 +0,0 @@
-/*
- * Copyright 2006 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.
- */
-
-package org.drools.dialect.mvel;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.base.DroolsMVELFactory;
-import org.drools.base.MVEL.MVELEvalExpression;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.rule.EvalCondition;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-import org.drools.spi.DeclarationScopeResolver;
-import org.mvel.MVEL;
-
-/**
- * @author etirelli
- *
- */
-public class MVELEvalBuilder
- implements
- ConditionalElementBuilder {
-
- /**
- * Builds and returns an Eval Conditional Element
- *
- * @param context The current build context
- * @param utils The current build utils instance
- * @param columnBuilder not used by EvalBuilder
- * @param descr The Eval Descriptor to build the eval conditional element from
- *
- * @return the Eval Conditional Element
- */
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final ColumnBuilder columnBuilder,
- final BaseDescr descr) {
- // it must be an EvalDescr
- EvalDescr evalDescr = (EvalDescr) descr;
-
- final Declaration[] declarations = new Declaration[0];
-// final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-// evalDescr,
-// evalDescr.getText() );
-//
-// final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
-// for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-// declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
-// }
-
- DroolsMVELFactory factory = new DroolsMVELFactory( );
- factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
-
- Serializable expr = MVEL.compileExpression( evalDescr.getText() );
- final EvalCondition eval = new EvalCondition( declarations );
- eval.setEvalExpression( new MVELEvalExpression(expr,factory) );
-
- return eval;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELEvalBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.base.DroolsMVELFactory;
+import org.drools.base.MVEL.MVELEvalExpression;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.spi.DeclarationScopeResolver;
+import org.mvel.MVEL;
+
+/**
+ * @author etirelli
+ *
+ */
+public class MVELEvalBuilder
+ implements
+ ConditionalElementBuilder {
+
+ /**
+ * Builds and returns an Eval Conditional Element
+ *
+ * @param context The current build context
+ * @param utils The current build utils instance
+ * @param columnBuilder not used by EvalBuilder
+ * @param descr The Eval Descriptor to build the eval conditional element from
+ *
+ * @return the Eval Conditional Element
+ */
+ public ConditionalElement build(final BuildContext context,
+ final BuildUtils utils,
+ final ColumnBuilder columnBuilder,
+ final BaseDescr descr) {
+ // it must be an EvalDescr
+ EvalDescr evalDescr = (EvalDescr) descr;
+
+ final Declaration[] declarations = new Declaration[0];
+// final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
+// evalDescr,
+// evalDescr.getText() );
+//
+// final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+// for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+// declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+// }
+
+ DroolsMVELFactory factory = new DroolsMVELFactory( );
+ factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+ factory.setGlobalsMap( context.getPkg().getGlobals() );
+
+ Serializable expr = MVEL.compileExpression( evalDescr.getText() );
+ final EvalCondition eval = new EvalCondition( declarations );
+ eval.setEvalExpression( new MVELEvalExpression(expr,factory) );
+
+ return eval;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELFromBuilder.java 2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,91 +0,0 @@
-/*
- * Copyright 2006 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.
- */
-
-package org.drools.dialect.mvel;
-
-import java.io.Serializable;
-
-import org.drools.base.DroolsMVELFactory;
-import org.drools.base.dataproviders.MVELDataProvider;
-import org.drools.compiler.RuleError;
-import org.drools.lang.descr.AccessorDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.rule.Column;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.From;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-import org.drools.semantics.java.builder.FromBuilder;
-import org.drools.spi.DataProvider;
-import org.mvel.CompiledExpression;
-import org.mvel.ExpressionParser;
-import org.mvel.MVEL;
-
-/**
- * A builder for "from" conditional element
- *
- * @author etirelli
- */
-public class MVELFromBuilder
- implements
- ConditionalElementBuilder, FromBuilder {
-
- /* (non-Javadoc)
- * @see org.drools.dialect.mvel.FromBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
- */
- public ConditionalElement build(final BuildContext context,
- final BuildUtils utils,
- final ColumnBuilder columnBuilder,
- final BaseDescr descr) {
- FromDescr fromDescr = (FromDescr) descr;
-
- final Column column = columnBuilder.build( context,
- utils,
- fromDescr.getReturnedColumn() );
-
- if ( column == null ) {
- return null;
- }
-
- AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
- DataProvider dataProvider = null;
- try {
-// JFDIParser parser = createParser( utils,
-// accessor.toString() );
- DroolsMVELFactory factory = new DroolsMVELFactory( );
- factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
- factory.setGlobalsMap( context.getPkg().getGlobals() );
-
- //parser.setValueHandlerFactory( factory );
- Serializable compiled = MVEL.compileExpression( accessor.toString() );
-
- dataProvider = new MVELDataProvider( compiled,
- factory );
- } catch ( final Exception e ) {
- context.getErrors().add( new RuleError( context.getRule(),
- fromDescr,
- null,
- "Unable to build expression for 'from' node '" + accessor.toString() + "'" ) );
- return null;
- }
-
- return new From( column,
- dataProvider );
- }
-}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELFromBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+
+import org.drools.base.DroolsMVELFactory;
+import org.drools.base.dataproviders.MVELDataProvider;
+import org.drools.compiler.RuleError;
+import org.drools.lang.descr.AccessorDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.rule.Column;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.From;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.spi.DataProvider;
+import org.mvel.CompiledExpression;
+import org.mvel.ExpressionParser;
+import org.mvel.MVEL;
+
+/**
+ * A builder for "from" conditional element
+ *
+ * @author etirelli
+ */
+public class MVELFromBuilder
+ implements
+ ConditionalElementBuilder, FromBuilder {
+
+ /* (non-Javadoc)
+ * @see org.drools.dialect.mvel.FromBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
+ */
+ public ConditionalElement build(final BuildContext context,
+ final BuildUtils utils,
+ final ColumnBuilder columnBuilder,
+ final BaseDescr descr) {
+ FromDescr fromDescr = (FromDescr) descr;
+
+ final Column column = columnBuilder.build( context,
+ utils,
+ fromDescr.getReturnedColumn() );
+
+ if ( column == null ) {
+ return null;
+ }
+
+ AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
+ DataProvider dataProvider = null;
+ try {
+// JFDIParser parser = createParser( utils,
+// accessor.toString() );
+ DroolsMVELFactory factory = new DroolsMVELFactory( );
+ factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+ factory.setGlobalsMap( context.getPkg().getGlobals() );
+
+ //parser.setValueHandlerFactory( factory );
+ Serializable compiled = MVEL.compileExpression( accessor.toString() );
+
+ dataProvider = new MVELDataProvider( compiled,
+ factory );
+ } catch ( final Exception e ) {
+ context.getErrors().add( new RuleError( context.getRule(),
+ fromDescr,
+ null,
+ "Unable to build expression for 'from' node '" + accessor.toString() + "'" ) );
+ return null;
+ }
+
+ return new From( column,
+ dataProvider );
+ }
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -20,6 +20,7 @@
import org.drools.rule.EvalCondition;
import org.drools.rule.Package;
import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
import org.drools.spi.DeclarationScopeResolver;
import org.drools.spi.FieldExtractor;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -13,8 +13,8 @@
import org.drools.Person;
import org.drools.base.ClassFieldExtractor;
import org.drools.base.ClassObjectType;
-import org.drools.dialect.java.RuleBuilder;
import org.drools.rule.Declaration;
+import org.drools.rule.builder.dialect.java.RuleBuilder;
import org.drools.spi.ColumnExtractor;
public class AccumulateTemplateTest extends TestCase {
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-import org.drools.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
import junit.framework.TestCase;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java 2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java 2007-02-27 00:15:50 UTC (rev 9782)
@@ -29,13 +29,13 @@
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.drools.base.ClassFieldExtractorCache;
import org.drools.compiler.DrlParser;
-import org.drools.dialect.java.RuleBuilder;
import org.drools.lang.descr.AttributeDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.GroupElement;
import org.drools.rule.Package;
import org.drools.rule.Rule;
+import org.drools.rule.builder.dialect.java.RuleBuilder;
import org.drools.spi.FunctionResolver;
/**
@@ -59,7 +59,7 @@
}
/**
- * Test method for {@link org.drools.dialect.java.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
+ * Test method for {@link org.drools.rule.builder.dialect.java.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
*/
public void testBuild() {
try {
More information about the jboss-svn-commits
mailing list