[jboss-svn-commits] JBL Code SVN: r18517 - in labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools: rule/builder/dialect/java and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 19 15:48:08 EST 2008


Author: tirelli
Date: 2008-02-19 15:48:08 -0500 (Tue, 19 Feb 2008)
New Revision: 18517

Modified:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
   labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
   labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java
Log:
JBRULES-1473: adding configuration parameter to dump source generated source code

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2008-02-19 19:26:23 UTC (rev 18516)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2008-02-19 20:48:08 UTC (rev 18517)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import java.io.File;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -38,6 +39,7 @@
  * 
  * drools.dialect.default = <String>
  * drools.accumulate.function.<function name> = <qualified class>
+ * drools.dump.dir = <String>
  * 
  * default dialect is java.
  * Available preconfigured Accumulate functions are:
@@ -50,7 +52,7 @@
 public class PackageBuilderConfiguration {
 
     private static final String ACCUMULATE_FUNCTION_PREFIX = "drools.accumulate.function.";
-    
+
     private Map                 dialectConfigurations;
 
     private String              defaultDialect;
@@ -61,11 +63,13 @@
 
     private Map                 accumulateFunctions;
 
+    private File                dumpDirectory;
+
     /**
      * Constructor that sets the parent class loader for the package being built/compiled
      * @param classLoader
      */
-    public PackageBuilderConfiguration(ClassLoader classLoader ) {
+    public PackageBuilderConfiguration(ClassLoader classLoader) {
         init( classLoader,
               null );
     }
@@ -111,12 +115,14 @@
         if ( properties != null ) {
             this.chainedProperties.addProperties( properties );
         }
-        
+
         this.dialectConfigurations = new HashMap();
-        
+
         buildDialectConfigurationMap();
 
         buildAccumulateFunctionsMap();
+
+        buildDumpDirectory();
     }
 
     public ChainedProperties getChainedProperties() {
@@ -130,42 +136,46 @@
                                               "drools.dialect",
                                               false );
         setDefaultDialect( (String) dialectProperties.remove( "drools.dialect.default" ) );
-        
+
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         for ( Iterator it = dialectProperties.entrySet().iterator(); it.hasNext(); ) {
             Entry entry = (Entry) it.next();
             String str = (String) entry.getKey();
             String dialectName = str.substring( str.lastIndexOf( "." ) + 1 );
             String dialectClass = (String) entry.getValue();
-            addDialect( dialectName, dialectClass);
+            addDialect( dialectName,
+                        dialectClass );
         }
     }
-    
-    public void addDialect(String dialectName, String dialectClass) {
+
+    public void addDialect(String dialectName,
+                           String dialectClass) {
         try {
             Class cls = classLoader.loadClass( dialectClass );
             DialectConfiguration dialectConf = (DialectConfiguration) cls.newInstance();
             dialectConf.init( this );
-            addDialect( dialectName, 
-            		    dialectConf);
+            addDialect( dialectName,
+                        dialectConf );
         } catch ( Exception e ) {
             throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'",
                                               e );
-        }    	
+        }
     }
 
-    public void addDialect(String dialectName, DialectConfiguration dialectConf) {
+    public void addDialect(String dialectName,
+                           DialectConfiguration dialectConf) {
         dialectConfigurations.put( dialectName,
-                				   dialectConf );    	
+                                   dialectConf );
     }
-    
+
     public DialectRegistry buildDialectRegistry() {
-    	DialectRegistry registry = new DialectRegistry();
-    	for ( Iterator it = this.dialectConfigurations.values().iterator(); it.hasNext(); ) {
-    		DialectConfiguration conf = ( DialectConfiguration ) it.next();
-    		Dialect dialect = conf.getDialect();
-    		registry.addDialect( conf.getDialect().getId(), dialect );
-    	}
+        DialectRegistry registry = new DialectRegistry();
+        for ( Iterator it = this.dialectConfigurations.values().iterator(); it.hasNext(); ) {
+            DialectConfiguration conf = (DialectConfiguration) it.next();
+            Dialect dialect = conf.getDialect();
+            registry.addDialect( conf.getDialect().getId(),
+                                 dialect );
+        }
         return registry;
     }
 
@@ -248,4 +258,27 @@
         }
     }
 
+    private void buildDumpDirectory() {
+        String dumpStr = this.chainedProperties.getProperty( "drools.dump.dir",
+                                                             null );
+        if ( dumpStr != null ) {
+            this.dumpDirectory = new File( dumpStr );
+            if ( !dumpDirectory.isDirectory() || !dumpDirectory.canWrite() || !dumpDirectory.canRead() ) {
+                this.dumpDirectory = null;
+                throw new RuntimeDroolsException( "Drools dump directory is not accessible: " + dumpStr );
+            }
+        }
+    }
+
+    public File getDumpDir() {
+        return this.dumpDirectory;
+    }
+
+    public void setDumpDir(File dumpDir) {
+        if ( !dumpDir.isDirectory() || !dumpDir.canWrite() || !dumpDir.canRead() ) {
+            throw new RuntimeDroolsException( "Drools dump directory is not accessible: " + dumpDir.toString() );
+        }
+        this.dumpDirectory = dumpDir;
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2008-02-19 19:26:23 UTC (rev 18516)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2008-02-19 20:48:08 UTC (rev 18517)
@@ -1,5 +1,9 @@
 package org.drools.rule.builder.dialect.java;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -104,7 +108,7 @@
 
     // a map of registered builders
     private Map                            builders;
-
+    
     public JavaDialect() {
 
     }
@@ -329,14 +333,11 @@
         final String[] classes = new String[this.generatedClassList.size()];
         this.generatedClassList.toArray( classes );
         
-//        if( true ) {
-//            for( int i = 0; i < classes.length; i++ ) {
-//                System.out.println("CLASS: "+classes[i]);
-//                System.out.println("---------------------------");
-//                System.out.println(new String( this.src.getBytes( classes[i] )));
-//                System.out.println("===========================");
-//            }
-//        }
+        File dumpDir = this.configuration.getPackageBuilderConfiguration().getDumpDir(); 
+        if(  dumpDir != null ) {
+            dumpResources( classes,
+                           dumpDir );
+        }
 
         final CompilationResult result = this.compiler.compile( classes,
                                                                 this.src,
@@ -380,6 +381,35 @@
     }
 
     /**
+     * @param classes
+     * @param dumpDir
+     * @throws IOException
+     * @throws FileNotFoundException
+     */
+    private void dumpResources(final String[] classes,
+                               File dumpDir) {
+        for( int i = 0; i < classes.length; i++ ) {
+            File target = new File( dumpDir, classes[i] );
+            FileOutputStream out = null;
+            try {
+                File parent = target.getParentFile();
+                if( parent != null && ! parent.exists() ) {
+                    parent.mkdirs();
+                }
+                target.createNewFile();
+                out = new FileOutputStream( target );
+                out.write( this.src.getBytes( classes[i] ) );
+            } catch ( FileNotFoundException e ) {
+                e.printStackTrace();
+            } catch ( IOException e ) {
+                e.printStackTrace();
+            } finally {
+                if( out != null ) try { out.close(); } catch (Exception e) {}
+            }
+        }
+    }
+
+    /**
      * This will add the rule for compiling later on.
      * It will not actually call the compiler
      */
@@ -569,4 +599,5 @@
     public String getId() {
         return ID;
     }
+
 }

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java	2008-02-19 19:26:23 UTC (rev 18516)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java	2008-02-19 20:48:08 UTC (rev 18517)
@@ -1,12 +1,10 @@
 package org.drools.rule.builder.dialect.java;
 
 import java.util.Arrays;
-import java.util.Properties;
 
 import org.drools.RuntimeDroolsException;
 import org.drools.compiler.Dialect;
 import org.drools.compiler.DialectConfiguration;
-import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 
 /**




More information about the jboss-svn-commits mailing list