[jboss-svn-commits] JBL Code SVN: r9774 - in labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools: dialect/java and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Feb 26 18:49:21 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-02-26 18:49:21 -0500 (Mon, 26 Feb 2007)
New Revision: 9774
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java
Log:
JBRULES-708 MVEL Integration
-More interface/implementation seperation for dialects
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -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.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/dialect/java/JavaPredicateBuilder.java (from rev 9773, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,89 @@
+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/dialect/java/JavaReturnValueBuilder.java (from rev 9773, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,81 @@
+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 );
+ }
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -26,6 +26,7 @@
import org.drools.RuntimeDroolsException;
import org.drools.base.ClassFieldExtractorCache;
import org.drools.base.evaluators.DateFactory;
+import org.drools.dialect.java.JavaEvalBuilder;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.AttributeDescr;
@@ -48,7 +49,7 @@
import org.drools.semantics.java.builder.ColumnBuilder;
import org.drools.semantics.java.builder.ConditionalElementBuilder;
import org.drools.semantics.java.builder.ConsequenceBuilder;
-import org.drools.semantics.java.builder.EvalBuilder;
+import org.drools.semantics.java.builder.JavaConsequenceBuilder;
import org.drools.semantics.java.builder.ForallBuilder;
import org.drools.semantics.java.builder.FromBuilder;
import org.drools.semantics.java.builder.GroupElementBuilder;
@@ -88,7 +89,7 @@
// if we want to
this.builders = new HashMap();
builders.put( EvalDescr.class,
- new EvalBuilder() );
+ new JavaEvalBuilder() );
builders.put( FromDescr.class,
new FromBuilder() );
builders.put( CollectDescr.class,
@@ -117,7 +118,7 @@
this.columnBuilder = new ColumnBuilder();
- this.consequenceBuilder = new ConsequenceBuilder();
+ this.consequenceBuilder = new JavaConsequenceBuilder();
this.classBuilder = new RuleClassBuilder();
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java 2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -28,6 +28,8 @@
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;
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java 2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,113 +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.semantics.java.builder;
-
-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;
-
-/**
- * @author etirelli
- *
- */
-public class ConsequenceBuilder {
-
- 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/semantics/java/builder/EvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java 2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,113 +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.semantics.java.builder;
-
-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;
-
-/**
- * @author etirelli
- *
- */
-public class EvalBuilder
- 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/semantics/java/builder/JavaConsequenceBuilder.java (from rev 9753, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,116 @@
+/*
+ * 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.semantics.java.builder;
+
+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;
+
+/**
+ * @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/semantics/java/builder/JavaPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java 2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,86 +0,0 @@
-package org.drools.semantics.java.builder;
-
-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;
-
-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/semantics/java/builder/JavaReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java 2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java 2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,79 +0,0 @@
-package org.drools.semantics.java.builder;
-
-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;
-
-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 );
- }
-}
More information about the jboss-svn-commits
mailing list