[jboss-svn-commits] JBL Code SVN: r23887 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/builder/impl and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Nov 15 19:54:55 EST 2008
Author: mark.proctor at jboss.com
Date: 2008-11-15 19:54:55 -0500 (Sat, 15 Nov 2008)
New Revision: 23887
Added:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableConfiguration.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableInputType.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceConfiguration.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/DecisionTableConfigurationImpl.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableFactory.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableProvider.java
labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilder.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactory.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderProvider.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeType.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderImpl.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderProviderImpl.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/acme/insurance/launcher/PricingRuleLauncher.java
labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetIntegrationTest.java
Log:
JBRULES-1734 Drools API
-DecisionTable integration for drools-api is now in place.
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableConfiguration.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,12 @@
+package org.drools.builder;
+
+public interface DecisionTableConfiguration extends ResourceConfiguration {
+
+ void setInputType(DecisionTableInputType inputType);
+
+ DecisionTableInputType getInputType();
+
+ void setWorksheetName(String name);
+
+ String getWorksheetName();
+}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableInputType.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableInputType.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableInputType.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,6 @@
+package org.drools.builder;
+
+public enum DecisionTableInputType {
+ XLS,
+ CSV;
+}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilder.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilder.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -7,9 +7,15 @@
import org.drools.definition.KnowledgePackage;
public interface KnowledgeBuilder extends RuleBuilder, ProcessBuilder {
- void addResource(URL url, KnowledgeType type);
- void addResource(Reader reader, KnowledgeType type);
+ void addResource(URL url, KnowledgeType type);
+
+ void addResource(URL url, KnowledgeType type, ResourceConfiguration configuration);
+
+ void addResource(Reader reader, KnowledgeType type);
+
+ void addResource(Reader reader, KnowledgeType type, ResourceConfiguration configuration);
+
/**
* Returns the built packages.
*
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactory.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactory.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -1,14 +1,38 @@
package org.drools.builder;
+import java.util.Properties;
+
import org.drools.ProviderInitializationException;
public class KnowledgeBuilderFactory {
- private static KnowledgeBuilderProvider provider;
+ private static volatile KnowledgeBuilderProvider provider;
public static void setKnowledgeBuilderProvider(KnowledgeBuilderProvider provider) {
KnowledgeBuilderFactory.provider = provider;
}
+ public static KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+ if ( provider == null ) {
+ loadProvider();
+ }
+ return provider.newKnowledgeBuilderConfiguration();
+ }
+
+ public static KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties, ClassLoader classLoader) {
+ if ( provider == null ) {
+ loadProvider();
+ }
+ return provider.newKnowledgeBuilderConfiguration( properties,
+ classLoader );
+ }
+
+ public static DecisionTableConfiguration newDecisionTableConfiguration() {
+ if ( provider == null ) {
+ loadProvider();
+ }
+ return provider.newDecisionTableConfiguration();
+ }
+
public static KnowledgeBuilder newKnowledgeBuilder() {
if ( provider == null ) {
loadProvider();
@@ -16,6 +40,13 @@
return provider.newKnowledgeBuilder();
}
+ public static KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+ if ( provider == null ) {
+ loadProvider();
+ }
+ return provider.newKnowledgeBuilder(conf);
+ }
+
private static void loadProvider() {
try {
Class<KnowledgeBuilderProvider> cls = ( Class<KnowledgeBuilderProvider> ) Class.forName( "org.drools.builder.impl.KnowledgeBuilderProviderImpl" );
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderProvider.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderProvider.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -22,6 +22,15 @@
public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties, ClassLoader classLoader);
/**
+ * DecisionTables need to take a configuration of the InputType and XLS based
+ * ones can also take a Worksheet name.
+ *
+ * @return
+ * The DecisionTableConfiguration
+ */
+ public DecisionTableConfiguration newDecisionTableConfiguration();
+
+ /**
* Instantiate and return a new KnowledgeBuilder using the default KnowledgeBuilderConfiguration
*
* @return
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeType.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeType.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeType.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -4,18 +4,18 @@
/** Drools Rule Language */
DRL,
- /** Drools DSL Rule */
- DSLR,
+ /** Drools XML Rule Language */
+ XDRL,
/** Drools DSL */
- DSL,
+ DSL,
- /** Drools XML Rule Language */
- XDRL,
-
+ /** Drools DSL Rule */
+ DSLR,
+
/** Drools Rule Flow Language */
DRF,
- /** Excel Decision Table */
- XLS;
+ /** Decision Table */
+ DTABLE;
}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceConfiguration.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,5 @@
+package org.drools.builder;
+
+public interface ResourceConfiguration {
+
+}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/DecisionTableConfigurationImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/DecisionTableConfigurationImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/DecisionTableConfigurationImpl.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,31 @@
+package org.drools.builder.impl;
+
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.DecisionTableInputType;
+
+public class DecisionTableConfigurationImpl implements DecisionTableConfiguration {
+
+ private DecisionTableInputType inputType;
+
+ private String worksheetName;
+
+ public DecisionTableConfigurationImpl() {
+
+ }
+
+ public void setInputType(DecisionTableInputType inputType) {
+ this.inputType = inputType;
+ }
+
+ public DecisionTableInputType getInputType() {
+ return this.inputType;
+ }
+
+ public void setWorksheetName(String worksheetName) {
+ this.worksheetName = worksheetName;
+ }
+
+ public String getWorksheetName() {
+ return this.worksheetName;
+ }
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderImpl.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderImpl.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -10,6 +10,7 @@
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeType;
+import org.drools.builder.ResourceConfiguration;
import org.drools.compiler.PackageBuilder;
import org.drools.definition.KnowledgePackage;
import org.drools.knowledge.definitions.impl.KnowledgePackageImp;
@@ -25,12 +26,24 @@
public void addResource(URL url, KnowledgeType type) {
pkgBuilder.addResource( url, type ) ;
}
+
+ public void addResource(URL url,
+ KnowledgeType type,
+ ResourceConfiguration configuration) {
+ pkgBuilder.addResource( url, type, configuration );
+ }
public void addResource(Reader reader,
KnowledgeType type) {
pkgBuilder.addResource( reader, type ) ;
}
+ public void addResource(Reader reader,
+ KnowledgeType type,
+ ResourceConfiguration configuration) {
+ pkgBuilder.addResource( reader, type, configuration );
+ }
+
public Collection<KnowledgePackage> getKnowledgePackages() {
if ( pkgBuilder.hasErrors() ) {
return new ArrayList<KnowledgePackage>( 0 );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderProviderImpl.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderProviderImpl.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -2,6 +2,7 @@
import java.util.Properties;
+import org.drools.builder.DecisionTableConfiguration;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderProvider;
@@ -18,6 +19,10 @@
return new PackageBuilderConfiguration(classLoader, properties);
}
+ public DecisionTableConfiguration newDecisionTableConfiguration() {
+ return new DecisionTableConfigurationImpl();
+ }
+
public KnowledgeBuilder newKnowledgeBuilder() {
return new KnowledgeBuilderImpl( new PackageBuilder() );
}
@@ -25,6 +30,4 @@
public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
return new KnowledgeBuilderImpl( new PackageBuilder( (PackageBuilderConfiguration) conf ) );
}
-
-
}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableFactory.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,32 @@
+package org.drools.compiler;
+
+import java.io.InputStream;
+import java.io.Reader;
+
+import org.drools.ProviderInitializationException;
+import org.drools.builder.DecisionTableConfiguration;
+
+public class DecisionTableFactory {
+ private static volatile DecisionTableProvider provider;
+
+ public static void setDecisionTableProvider(DecisionTableProvider provider) {
+ DecisionTableFactory.provider = provider;
+ }
+
+ public static String loadFromReader(Reader reader, DecisionTableConfiguration configuration) {
+ if ( provider == null ) {
+ loadProvider();
+ }
+ return provider.loadFromReader( reader, configuration );
+ }
+
+ private static void loadProvider() {
+ try {
+ // we didn't find anything in properties so lets try and us reflection
+ Class<DecisionTableProvider> cls = ( Class<DecisionTableProvider> ) Class.forName( "org.drools.decisiontable.DecisionTableProviderImpl" );
+ setDecisionTableProvider( cls.newInstance() );
+ } catch ( Exception e2 ) {
+ throw new ProviderInitializationException( "Provider org.drools.decisiontable.DecisionTableProviderImpl could not be set." );
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableProvider.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableProvider.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,12 @@
+package org.drools.compiler;
+
+import java.io.Reader;
+
+import org.drools.builder.DecisionTableConfiguration;
+
+public interface DecisionTableProvider {
+
+ String loadFromReader(Reader reader, DecisionTableConfiguration configuration);
+
+
+}
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 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.ArrayList;
@@ -34,7 +35,9 @@
import org.drools.base.ClassFieldAccessor;
import org.drools.base.ClassFieldAccessorCache;
import org.drools.base.ClassFieldAccessorStore;
+import org.drools.builder.DecisionTableConfiguration;
import org.drools.builder.KnowledgeType;
+import org.drools.builder.ResourceConfiguration;
import org.drools.common.InternalRuleBase;
import org.drools.commons.jci.problems.CompilationProblem;
import org.drools.definition.process.Process;
@@ -409,8 +412,12 @@
}
public void addResource(URL url, KnowledgeType type) {
+ addResource( url, type, null );
+ }
+
+ public void addResource(URL url, KnowledgeType type, ResourceConfiguration configuration) {
try {
- addResource( new InputStreamReader( url.openStream() ), type );
+ addResource( new InputStreamReader( url.openStream() ), type, configuration );
} catch ( IOException e ) {
throw new RuntimeException( e );
}
@@ -418,11 +425,18 @@
public void addResource(Reader reader,
KnowledgeType type) {
+ addResource(reader, type, null);
+ }
+
+ public void addResource(Reader reader,
+ KnowledgeType type,
+ ResourceConfiguration configuration) {
try {
switch ( type ) {
case DRL : {
addPackageFromDrl( reader );
break;
+
}
case DSLR : {
addPackageFromDslr( reader );
@@ -440,8 +454,10 @@
addProcessFromXml( reader );
break;
}
- case XLS : {
- //pkgBuilder.
+ case DTABLE : {
+ String string = DecisionTableFactory.loadFromReader( reader, (DecisionTableConfiguration) configuration );
+ addPackageFromDrl( new StringReader( string ) );
+ break;
}
}
} catch (Exception e) {
@@ -449,10 +465,6 @@
}
}
- private void addSemanticModules() {
- // this.configuration.getSemanticModules();
- }
-
/**
* This adds a package from a Descr/AST This will also trigger a compile, if
* there are any generated classes to compile of course.
Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -0,0 +1,219 @@
+package org.drools.decisiontable;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.compiler.DecisionTableProvider;
+import org.drools.util.StringUtils;
+
+public class DecisionTableProviderImpl implements DecisionTableProvider {
+
+ public String loadFromReader(Reader reader,
+ DecisionTableConfiguration configuration) {
+ SpreadsheetCompiler compiler = new SpreadsheetCompiler();
+ InputStream is = new ReaderInputStream( reader );
+ switch ( configuration.getInputType() ) {
+ case XLS : {
+ if ( StringUtils.isEmpty( configuration.getWorksheetName() ) ) {
+ return compiler.compile( is, InputType.XLS );
+ } else {
+ return compiler.compile( is, configuration.getWorksheetName() );
+ }
+ }
+ case CSV : {
+ return compiler.compile( is, InputType.CSV );
+ }
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Adapts a <code>Reader</code> as an <code>InputStream</code>.
+ * Adapted from <CODE>StringInputStream</CODE>.
+ *
+ */
+ public static class ReaderInputStream extends InputStream {
+
+ /** Source Reader */
+ private Reader in;
+
+ private String encoding = System.getProperty("file.encoding");
+
+ private byte[] slack;
+
+ private int begin;
+
+ /**
+ * Construct a <CODE>ReaderInputStream</CODE>
+ * for the specified <CODE>Reader</CODE>.
+ *
+ * @param reader <CODE>Reader</CODE>. Must not be <code>null</code>.
+ */
+ public ReaderInputStream(Reader reader) {
+ in = reader;
+ }
+
+ /**
+ * Construct a <CODE>ReaderInputStream</CODE>
+ * for the specified <CODE>Reader</CODE>,
+ * with the specified encoding.
+ *
+ * @param reader non-null <CODE>Reader</CODE>.
+ * @param encoding non-null <CODE>String</CODE> encoding.
+ */
+ public ReaderInputStream(Reader reader, String encoding) {
+ this(reader);
+ if (encoding == null) {
+ throw new IllegalArgumentException("encoding must not be null");
+ } else {
+ this.encoding = encoding;
+ }
+ }
+
+ /**
+ * Reads from the <CODE>Reader</CODE>, returning the same value.
+ *
+ * @return the value of the next character in the <CODE>Reader</CODE>.
+ *
+ * @exception IOException if the original <code>Reader</code> fails to be read
+ */
+ public synchronized int read() throws IOException {
+ if (in == null) {
+ throw new IOException("Stream Closed");
+ }
+
+ byte result;
+ if (slack != null && begin < slack.length) {
+ result = slack[begin];
+ if (++begin == slack.length) {
+ slack = null;
+ }
+ } else {
+ byte[] buf = new byte[1];
+ if (read(buf, 0, 1) <= 0) {
+ result = -1;
+ }
+ result = buf[0];
+ }
+
+ if (result < -1) {
+ result += 256;
+ }
+
+ return result;
+ }
+
+ /**
+ * Reads from the <code>Reader</code> into a byte array
+ *
+ * @param b the byte array to read into
+ * @param off the offset in the byte array
+ * @param len the length in the byte array to fill
+ * @return the actual number read into the byte array, -1 at
+ * the end of the stream
+ * @exception IOException if an error occurs
+ */
+ public synchronized int read(byte[] b, int off, int len)
+ throws IOException {
+ if (in == null) {
+ throw new IOException("Stream Closed");
+ }
+
+ while (slack == null) {
+ char[] buf = new char[len]; // might read too much
+ int n = in.read(buf);
+ if (n == -1) {
+ return -1;
+ }
+ if (n > 0) {
+ slack = new String(buf, 0, n).getBytes(encoding);
+ begin = 0;
+ }
+ }
+
+ if (len > slack.length - begin) {
+ len = slack.length - begin;
+ }
+
+ System.arraycopy(slack, begin, b, off, len);
+
+ if ((begin += len) >= slack.length) {
+ slack = null;
+ }
+
+ return len;
+ }
+
+ /**
+ * Marks the read limit of the StringReader.
+ *
+ * @param limit the maximum limit of bytes that can be read before the
+ * mark position becomes invalid
+ */
+ public synchronized void mark(final int limit) {
+ try {
+ in.mark(limit);
+ } catch (IOException ioe) {
+ throw new RuntimeException(ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * @return the current number of bytes ready for reading
+ * @exception IOException if an error occurs
+ */
+ public synchronized int available() throws IOException {
+ if (in == null) {
+ throw new IOException("Stream Closed");
+ }
+ if (slack != null) {
+ return slack.length - begin;
+ }
+ if (in.ready()) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * @return false - mark is not supported
+ */
+ public boolean markSupported () {
+ return false; // would be imprecise
+ }
+
+ /**
+ * Resets the StringReader.
+ *
+ * @exception IOException if the StringReader fails to be reset
+ */
+ public synchronized void reset() throws IOException {
+ if (in == null) {
+ throw new IOException("Stream Closed");
+ }
+ slack = null;
+ in.reset();
+ }
+
+ /**
+ * Closes the Stringreader.
+ *
+ * @exception IOException if the original StringReader fails to be closed
+ */
+ public synchronized void close() throws IOException {
+ if (in != null) {
+ in.close();
+ slack = null;
+ in = null;
+ }
+ }
+ }
+
+
+}
Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/acme/insurance/launcher/PricingRuleLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/acme/insurance/launcher/PricingRuleLauncher.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/acme/insurance/launcher/PricingRuleLauncher.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -2,17 +2,26 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.StringReader;
import org.acme.insurance.Driver;
import org.acme.insurance.Policy;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
+import org.drools.runtime.StatefulKnowledgeSession;
/**
* This is a sample file to launch a rule package from a rule source file.
@@ -25,26 +34,34 @@
}
public int executeExample() throws Exception {
-
- //first we compile the decision table into a whole lot of rules.
- SpreadsheetCompiler compiler = new SpreadsheetCompiler();
- String drl = compiler.compile(getSpreadsheetStream(), InputType.XLS);
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+ DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
+ dtconf.setInputType( DecisionTableInputType.XLS );
+
+ kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( "/data/ExamplePolicyPricing.xls" ) ),
+ KnowledgeType.DTABLE,
+ dtconf );
+
+ if ( kbuilder.hasErrors() ) {
+ throw new RuntimeException( kbuilder.getErrors().toString() );
+ }
- //UNCOMMENT ME TO SEE THE DRL THAT IS GENERATED
- //System.out.println(drl);
+ //BUILD RULEBASE
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- RuleBase ruleBase = buildRuleBase(drl);
-
- WorkingMemory wm = ruleBase.newStatefulSession();
+ //NEW WORKING MEMORY
+ final StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
//now create some test data
Driver driver = new Driver();
Policy policy = new Policy();
- wm.insert(driver);
- wm.insert(policy);
+ session.insert(driver);
+ session.insert(policy);
- wm.fireAllRules();
+ session.fireAllRules();
System.out.println("BASE PRICE IS: " + policy.getBasePrice());
System.out.println("DISCOUNT IS: " + policy.getDiscountPercent());
Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetIntegrationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetIntegrationTest.java 2008-11-15 23:58:20 UTC (rev 23886)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetIntegrationTest.java 2008-11-16 00:54:55 UTC (rev 23887)
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
@@ -23,51 +24,53 @@
import junit.framework.TestCase;
import org.acme.insurance.launcher.PricingRuleLauncher;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;
+import org.drools.runtime.StatefulKnowledgeSession;
public class SpreadsheetIntegrationTest extends TestCase {
public void testExecute() throws Exception {
- final SpreadsheetCompiler converter = new SpreadsheetCompiler();
- final String drl = converter.compile( "/data/IntegrationExampleTest.xls",
- InputType.XLS );
- assertNotNull( drl );
- //System.out.println(drl);
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+ DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
+ dtconf.setInputType( DecisionTableInputType.XLS );
+
+ kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( "/data/IntegrationExampleTest.xls" ) ),
+ KnowledgeType.DTABLE,
+ dtconf );
+
+ assertFalse( kbuilder.hasErrors() );
- //COMPILE
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new StringReader( drl ) );
-
- final Package pkg = builder.getPackage();
- assertNotNull( pkg );
- System.out.println( pkg.getErrorSummary() );
- assertEquals( 0,
- builder.getErrors().getErrors().length );
-
//BUILD RULEBASE
- final RuleBase rb = RuleBaseFactory.newRuleBase();
- rb.addPackage( pkg );
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
//NEW WORKING MEMORY
- final WorkingMemory wm = rb.newStatefulSession();
+ final StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
//ASSERT AND FIRE
- wm.insert( new Cheese( "stilton",
+ session.insert( new Cheese( "stilton",
42 ) );
- wm.insert( new Person( "michael",
+ session.insert( new Person( "michael",
"stilton",
42 ) );
final List<String> list = new ArrayList<String>();
- wm.setGlobal( "list",
+ session.setGlobal( "list",
list );
- wm.fireAllRules();
+ session.fireAllRules();
assertEquals( 1,
list.size() );
-
}
/**
More information about the jboss-svn-commits
mailing list