[jboss-svn-commits] JBL Code SVN: r12964 - in labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools: lang/descr and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Jun 30 17:10:07 EDT 2007
Author: ahtik
Date: 2007-06-30 17:10:06 -0400 (Sat, 30 Jun 2007)
New Revision: 12964
Added:
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java
Modified:
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
Log:
work in progress debugger code
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -153,6 +153,7 @@
registry.addDialect( dialectName,
(Dialect) cons.newInstance( new Object[]{packageBuilder} ) );
} catch ( Exception e ) {
+ e.printStackTrace();
throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'" );
}
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -20,6 +20,8 @@
import java.util.Collections;
import java.util.List;
+import org.drools.rule.builder.Dialect;
+
public class RuleDescr extends BaseDescr {
/**
*
@@ -38,11 +40,14 @@
private String className;
+ private Dialect dialect;
+
public RuleDescr(final String name) {
this( name,
"" );
}
+
public RuleDescr(final String ruleName,
final String documentation) {
this.name = ruleName;
@@ -125,4 +130,14 @@
public int getConsequencePattern() {
return this.consequencePattern;
}
+
+
+ public void setDialect(Dialect dialect) {
+ this.dialect = dialect;
+ }
+
+
+ public Dialect getDialect() {
+ return dialect;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -11,6 +11,9 @@
import org.drools.rule.Package;
public interface Dialect {
+
+ String getId();
+
// this is needed because some dialects use other dialects
// to build complex expressions. Example: java dialect uses MVEL
// to execute complex expressions
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -119,8 +119,9 @@
ruleDescr.getAttributes() );
this.dialectRegistry = dialectRegistry;
- this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
+ this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
+ getDialect().init( pkg );
getDialect().init( ruleDescr );
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -8,6 +8,7 @@
import java.util.Map;
import java.util.Set;
+import org.drools.RuntimeDroolsException;
import org.drools.base.ClassFieldExtractorCache;
import org.drools.base.TypeResolver;
import org.drools.commons.jci.compilers.CompilationResult;
@@ -64,6 +65,8 @@
implements
Dialect {
+ public static final String ID = "JavaDialect";
+
private final static String EXPRESSION_DIALECT_NAME = "MVEL";
// builders
private final PatternBuilder pattern = new PatternBuilder();
@@ -120,7 +123,7 @@
loadCompiler();
}
-
+
public void initBuilder() {
// statically adding all builders to the map
// but in the future we can move that to a configuration
@@ -168,6 +171,7 @@
}
public void init(final Package pkg) {
+
this.pkg = pkg;
this.errorHandlers = new HashMap();
this.results = new ArrayList();
@@ -183,8 +187,7 @@
this.packageStoreWrapper = new PackageStore( pkg.getPackageCompilationData(),
this.results );
- this.lineMappings = new HashMap();
- pkg.getPackageCompilationData().setLineMappings( this.lineMappings );
+
}
public void init(final RuleDescr ruleDescr) {
@@ -193,6 +196,7 @@
"java",
this.src );
ruleDescr.setClassName( ucFirst( ruleClassName ) );
+ ruleDescr.setDialect( this );
}
public void setRuleClass(final String ruleClass) {
@@ -516,12 +520,14 @@
/**
* Takes a given name and makes sure that its legal and doesn't already exist. If the file exists it increases counter appender untill it is unique.
*
+ * TODO Consider "move" refactoring
+ *
* @param packageName
* @param name
* @param ext
* @return
*/
- private String getUniqueLegalName(final String packageName,
+ public static String getUniqueLegalName(final String packageName,
final String name,
final String ext,
final ResourceReader src) {
@@ -548,8 +554,18 @@
return newName;
}
- private String ucFirst(final String name) {
+ /**
+ * TODO Consider "move" refactoring
+ *
+ * @param name
+ * @return
+ */
+ public static String ucFirst(final String name) {
return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
}
+ public String getId() {
+ return ID;
+ }
+
}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -12,7 +12,8 @@
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.KnowledgeHelper;
import org.mvel.ASTNode;
-import org.mvel.MVEL;
+import org.mvel.CompiledExpression;
+import org.mvel.ExpressionCompiler;
import org.mvel.Macro;
import org.mvel.MacroProcessor;
import org.mvel.ast.WithNode;
@@ -76,9 +77,18 @@
MacroProcessor macroProcessor = new MacroProcessor();
macroProcessor.setMacros( macros );
- final Serializable expr = MVEL.compileExpression( macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), this.interceptors );
+
+ String pkg = "";
+ if (context.getPkg()!=null && context.getPkg().getName()!=null && context.getPkg().getName().length()>0) {
+ pkg = context.getPkg().getName()+".";
+ }
+
+ String sourceFile = pkg+context.getRuleDescr().getClassName();
+
+ final Serializable expr = compileExpression( macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )),
+ ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), this.interceptors , sourceFile);
+
context.getRule().setConsequence( new MVELConsequence( expr,
factory ) );
} catch ( final Exception e ) {
@@ -182,4 +192,16 @@
}
}
+
+ public static Serializable compileExpression(String expression, Map imports,
+ Map interceptors, String sourceName) {
+ ExpressionCompiler parser = new ExpressionCompiler(expression);
+ parser.setImportedClasses(imports);
+ parser.setInterceptors(interceptors);
+ parser.setSourceFile(sourceName);
+ parser.setDebugSymbols( true );
+ CompiledExpression cExpr = parser.compile();
+ return cExpr;
+ }
+
}
Added: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -0,0 +1,18 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MVELDebugger {
+
+ public Map frameLocalVars = new HashMap();
+
+ public MVELDebugger() {
+ frameLocalVars.put( "hei", "houi" );
+ }
+
+ public void fireBreakpoint() {
+ System.out.println("breakpoint catched");
+ }
+
+}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -9,6 +9,7 @@
import org.drools.base.ClassFieldExtractorCache;
import org.drools.base.TypeResolver;
+import org.drools.commons.jci.readers.MemoryResourceReader;
import org.drools.compiler.ImportError;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -25,7 +26,9 @@
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.QueryDescr;
import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.LineMappings;
import org.drools.rule.Package;
+import org.drools.rule.Rule;
import org.drools.rule.builder.AccumulateBuilder;
import org.drools.rule.builder.ConsequenceBuilder;
import org.drools.rule.builder.Dialect;
@@ -39,7 +42,21 @@
import org.drools.rule.builder.RuleClassBuilder;
import org.drools.rule.builder.RuleConditionBuilder;
import org.drools.rule.builder.SalienceBuilder;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaAccumulateBuilder;
+import org.drools.rule.builder.dialect.java.JavaConsequenceBuilder;
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.java.JavaEvalBuilder;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.JavaFunctionBuilder;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
+import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.java.PackageStore;
import org.mvel.AbstractParser;
+import org.mvel.AbstractParser;
+import org.mvel.AbstractParser;
import org.mvel.integration.impl.ClassImportResolverFactory;
import org.mvel.integration.impl.StaticMethodImportResolverFactory;
@@ -47,10 +64,14 @@
implements
Dialect {
+ public final static String ID = "MVELDialect";
+
private final static String EXPRESSION_DIALECT_NAME = "MVEL";
- private final PatternBuilder pattern = new PatternBuilder();
- private final QueryBuilder query = new QueryBuilder();
+ private final MVELRuleClassBuilder rule = new MVELRuleClassBuilder();
+
+ private final PatternBuilder pattern = new PatternBuilder( );
+ private final QueryBuilder query = new QueryBuilder();
private final MVELAccumulateBuilder accumulate = new MVELAccumulateBuilder();
private final SalienceBuilder salience = new MVELSalienceBuilder();
private final MVELEvalBuilder eval = new MVELEvalBuilder();
@@ -60,9 +81,13 @@
//private final JavaRuleClassBuilder rule = new JavaRuleClassBuilder();
private final MVELFromBuilder from = new MVELFromBuilder();
+ private Map lineMappings;
+
private List results;
//private final JavaFunctionBuilder function = new JavaFunctionBuilder();
+ private MemoryResourceReader src;
+
private Package pkg;
private PackageBuilderConfiguration configuration;
private final TypeResolver typeResolver;
@@ -139,14 +164,29 @@
this.builders.put( EvalDescr.class,
getEvalBuilder() );
}
+
+ public void init(Package pkg) {
- public void init(Package pkg) {
this.pkg = pkg;
+
this.results = new ArrayList();
+ this.src = new MemoryResourceReader();
+
+ if ( pkg != null ) {
+ this.lineMappings = pkg.getPackageCompilationData().getLineMappings();
+ }
}
public void init(RuleDescr ruleDescr) {
+
+ System.out.println("Init from MVELDialect called to ruleDescr "+ruleDescr);
+ final String ruleClassName = JavaDialect.getUniqueLegalName( this.pkg.getName(),
+ ruleDescr.getName(),
+ "mvel",
+ this.src );
+ ruleDescr.setClassName( JavaDialect.ucFirst( ruleClassName ) );
+ ruleDescr.setDialect( this );
}
public String getExpressionDialectName() {
@@ -155,6 +195,17 @@
public void addRule(RuleBuildContext context) {
+ final RuleDescr ruleDescr = context.getRuleDescr();
+
+ // setup the line mappins for this rule
+ final String name = this.pkg.getName() + "." + JavaDialect.ucFirst( ruleDescr.getClassName() );
+ final LineMappings mapping = new LineMappings( name );
+ mapping.setStartLine( ruleDescr.getConsequenceLine() );
+ mapping.setOffset( ruleDescr.getConsequenceOffset() );
+ System.out.println("Adding mvel mappings for "+name+"; "+mapping.getStartLine());
+ this.lineMappings.put( name,
+ mapping );
+
}
public void addImport(String importEntry) {
@@ -295,11 +346,15 @@
}
public RuleClassBuilder getRuleClassBuilder() {
- return null;
+ return rule;
}
public TypeResolver getTypeResolver() {
return this.typeResolver;
}
+ public String getId() {
+ return ID;
+ }
+
}
Added: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java 2007-06-30 21:10:06 UTC (rev 12964)
@@ -0,0 +1,35 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+
+public class MVELRuleClassBuilder
+ implements
+ RuleClassBuilder {
+
+ /**
+ * No real building for now.
+ * Simply to update ruleDescr.setConsequenceOffset
+ */
+ public void buildRule(RuleBuildContext context) {
+ final MVELDialect dialect = (MVELDialect) context.getDialect();
+
+ final String lineSeparator = System.getProperty( "line.separator" );
+
+ final StringBuffer buffer = new StringBuffer();
+
+ final RuleDescr ruleDescr = context.getRuleDescr();
+
+/* for ( int i = 0, size = context.getMethods().size() - 1; i < size; i++ ) {
+ buffer.append( context.getMethods().get( i ) + lineSeparator );
+ }
+
+ final String[] lines = buffer.toString().split( lineSeparator );
+*/
+ //ruleDescr.setConsequenceOffset( lines.length + 1 );
+ ruleDescr.setConsequenceOffset( 0);
+
+ }
+
+}
More information about the jboss-svn-commits
mailing list