[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