From: <jbo...@li...> - 2006-05-02 19:17:53
|
Author: mar...@jb... Date: 2006-05-02 15:17:43 -0400 (Tue, 02 May 2006) New Revision: 4049 Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java Log: -Reverted PackageBulider as previous older code had been recommitted. 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 2006-05-02 18:10:26 UTC (rev 4048) +++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2006-05-02 19:17:43 UTC (rev 4049) @@ -1,4 +1,5 @@ package org.drools.compiler; + /* * Copyright 2005 JBoss Inc * @@ -15,11 +16,10 @@ * limitations under the License. */ - - import java.io.IOException; import java.io.Reader; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -27,8 +27,8 @@ import org.apache.commons.jci.compilers.CompilationResult; import org.apache.commons.jci.compilers.JavaCompiler; import org.apache.commons.jci.compilers.JavaCompilerFactory; +import org.apache.commons.jci.readers.ResourceReader; import org.apache.commons.jci.readers.MemoryResourceReader; -import org.apache.commons.jci.readers.ResourceReader; import org.apache.commons.jci.stores.ResourceStore; import org.drools.lang.descr.FunctionDescr; import org.drools.lang.descr.PackageDescr; @@ -45,15 +45,15 @@ import org.xml.sax.SAXException; public class PackageBuilder { - private JavaCompiler compiler; + private JavaCompiler compiler; - private Package pkg; + private Package pkg; - private List results; + private List results; - private PackageStore packageStoreWrapper; + private PackageStore packageStoreWrapper; - private MemoryResourceReader src; + private MemoryResourceReader src; private PackageBuilderConfiguration configuration; @@ -72,21 +72,20 @@ if ( configuration == null ) { configuration = new PackageBuilderConfiguration(); } - - this.compiler = JavaCompilerFactory.getInstance().createCompiler( configuration.getCompiler() ); - - this.configuration = configuration; - + + this.compiler = getCompiler( configuration.getCompiler() ); + + this.configuration = configuration; + this.src = new MemoryResourceReader(); this.results = new ArrayList(); this.pkg = pkg; - if ( pkg != null ) { this.packageStoreWrapper = new PackageStore( pkg.getPackageCompilationData() ); - } + } } /** @@ -95,20 +94,22 @@ * @throws DroolsParserException * @throws IOException */ - public void addPackageFromDrl(Reader reader) throws DroolsParserException, IOException { + public void addPackageFromDrl(Reader reader) throws DroolsParserException, + IOException { DrlParser parser = new DrlParser(); PackageDescr pkg = parser.parse( reader ); this.results.addAll( parser.getErrors() ); addPackage( pkg ); } - + /** * Load a rule package from XML source. * @param reader * @throws DroolsParserException * @throws IOException */ - public void addPackageFromXml(Reader reader) throws DroolsParserException, IOException { + public void addPackageFromXml(Reader reader) throws DroolsParserException, + IOException { XmlPackageReader xmlReader = new XmlPackageReader(); try { @@ -118,7 +119,7 @@ } addPackage( xmlReader.getPackageDescr() ); - } + } /** * Load a rule package from DRL source using the supplied DSL configuration. @@ -128,20 +129,22 @@ * @throws IOException */ public void addPackageFromDrl(Reader source, - Reader dsl) throws DroolsParserException, IOException { + Reader dsl) throws DroolsParserException, + IOException { DrlParser parser = new DrlParser(); - PackageDescr pkg = parser.parse( source, dsl ); + PackageDescr pkg = parser.parse( source, + dsl ); this.results.addAll( parser.getErrors() ); addPackage( pkg ); - } - + } + public void addPackage(PackageDescr packageDescr) { - if (packageDescr.getName() == null || "".equals(packageDescr.getName())) { - - throw new MissingPackageNameException("Missing package name for rule package."); + if ( packageDescr.getName() == null || "".equals( packageDescr.getName() ) ) { + + throw new MissingPackageNameException( "Missing package name for rule package." ); } - + if ( this.pkg != null ) { //mergePackage( packageDescr ) ; mergePackage( this.pkg, @@ -192,7 +195,7 @@ try { clazz = typeResolver.resolveType( className ); pkg.addGlobal( identifier, - clazz ); + clazz ); } catch ( ClassNotFoundException e ) { new GlobalError( identifier ); } @@ -203,9 +206,9 @@ String text, MemoryResourceReader src, ResourceStore dst) { - src.addFile( className.replace( '.', - '/' ) + ".java", - text.toCharArray() ); + src.add( className.replace( '.', + '/' ) + ".java", + text.getBytes() ); CompilationResult result = compiler.compile( new String[]{className}, src, dst, @@ -217,15 +220,16 @@ private void addFunction(FunctionDescr functionDescr) { FunctionBuilder buidler = new FunctionBuilder(); CompilationResult result = compile( this.pkg.getName() + "." + ucFirst( functionDescr.getName() ), - buidler.build( this.pkg, functionDescr ), + buidler.build( this.pkg, + functionDescr ), src, this.packageStoreWrapper ); - + if ( result.getErrors().length > 0 ) { this.results.add( new FunctionError( functionDescr, result.getErrors(), "Function Compilation error" ) ); - } + } } private void addRule(RuleDescr ruleDescr) { @@ -247,16 +251,17 @@ // Check if there is any code to compile. If so compile it. if ( builder.getRuleClass() != null ) { - compileRule( builder, - rule, + compileRule( builder, + rule, ruleDescr ); } - this.pkg.addRule( rule ); } - - public void compileRule(RuleBuilder builder, Rule rule, RuleDescr ruleDescr) { + + public void compileRule(RuleBuilder builder, + Rule rule, + RuleDescr ruleDescr) { // The compilation result is for th entire rule, so difficult to associate with any descr CompilationResult result = compile( this.pkg.getName() + "." + ruleDescr.getClassName(), builder.getRuleClass(), @@ -269,10 +274,10 @@ result.getErrors(), "Rule Compilation error" ) ); } else { - + for ( Iterator it = builder.getInvokers().keySet().iterator(); it.hasNext(); ) { String className = (String) it.next(); - + // Check if an invoker - returnvalue, predicate, eval or consequence has been associated // If so we add it to the PackageCompilationData as it will get wired up on compilation Object invoker = builder.getInvokerLookups().get( className ); @@ -281,14 +286,14 @@ invoker ); } String text = (String) builder.getInvokers().get( className ); - + //System.out.println( className + ":\n" + text ); - + result = compile( className, text, src, this.packageStoreWrapper ); - + if ( result.getErrors().length > 0 ) { PatternDescr descr = (PatternDescr) builder.getDescrLookups().get( className ); this.results.add( new RuleError( rule, @@ -296,8 +301,8 @@ result.getErrors(), "Rule Compilation error for Invoker" ) ); } - } - } + } + } } /** @@ -308,7 +313,7 @@ * Compiled packages are serializable. */ public Package getPackage() { - if (hasErrors()) { + if ( hasErrors() ) { this.pkg.setError( this.printErrors() ); } return this.pkg; @@ -334,12 +339,12 @@ StringBuffer buf = new StringBuffer(); for ( Iterator iter = this.results.iterator(); iter.hasNext(); ) { DroolsError err = (DroolsError) iter.next(); - buf.append(err.getMessage()); + buf.append( err.getMessage() ); buf.append( "\n" ); } return buf.toString(); } - + /** * 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. * @@ -353,7 +358,8 @@ String ext, ResourceReader src) { // replaces all non alphanumeric or $ chars with _ - String newName = "Rule_" + name.replaceAll( "[^\\w$]", "_" ); + String newName = "Rule_" + name.replaceAll( "[^\\w$]", + "_" ); // make sure the class name does not exist, if it does increase the counter int counter = -1; @@ -374,6 +380,16 @@ return newName; } + private JavaCompiler getCompiler(int compiler) { + switch ( compiler ) { + case PackageBuilderConfiguration.JANINO : + return JavaCompilerFactory.getInstance().createCompiler( "janino" ); + case PackageBuilderConfiguration.ECLIPSE : + default : + return JavaCompilerFactory.getInstance().createCompiler( "eclipse" ); + } + } + private String ucFirst(String name) { return name.toUpperCase().charAt( 0 ) + name.substring( 1 ); } @@ -381,9 +397,8 @@ public static class MissingPackageNameException extends IllegalArgumentException { public MissingPackageNameException(String message) { - super(message); + super( message ); } - + } - } \ No newline at end of file |