[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