[jboss-svn-commits] JBL Code SVN: r24131 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools and 41 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 28 01:34:08 EST 2008


Author: mark.proctor at jboss.com
Date: 2008-11-28 01:34:07 -0500 (Fri, 28 Nov 2008)
New Revision: 24131

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/Resource.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceProvider.java
   labs/jbossrules/trunk/drools-api/src/main/java/overview.html
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeComposition.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeResource.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CompositionSemanticModule.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlCompositionReader.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/CompositionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/DecisionTableConfigurationHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/ResourceHandler.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/composition/
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/composition/CompositionTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.xml
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition2Test.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ByteArrayResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ClassPathResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/EncodedResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/FileSystemResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/InputStreamResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderInputStream.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/UrlResource.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/CompositionTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.drl
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.xml
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition2Test.drl
Removed:
   labs/jbossrules/trunk/drools-api/src/main/resources/overview.html
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgentFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableConfiguration.java
   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/KnowledgeType.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
   labs/jbossrules/trunk/drools-compiler/.classpath
   labs/jbossrules/trunk/drools-compiler/.project
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderImpl.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-compiler/src/main/java/org/drools/compiler/DrlParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLTokenizedMappingFile.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeSessionTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessWorkItemTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
   labs/jbossrules/trunk/drools-core/.classpath
   labs/jbossrules/trunk/drools-core/.project
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/StringUtils.java
   labs/jbossrules/trunk/drools-decisiontables/.classpath
   labs/jbossrules/trunk/drools-decisiontables/.project
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.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
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltz/WaltzBenchmark.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltzdb/WaltzDbBenchmark.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/GolfingExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HelloWorldExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HonestPoliticianExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/NumberGuessExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PetStore.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleDTExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleTemplateExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ShoppingExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/cdss/CDSSExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/AgendaGroupDelegate.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/RuleFlowDelegate.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ruleflow/WorkItemExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/sudoku/rules/DroolsUtil.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExampleWithDSL.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/tutorials/banking/RuleRunner.java
Log:
JBRULES-1875 Load Composition XML files for multiple resources
JBRULES-1874 Create Resource Framework

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgentFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgentFactory.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgentFactory.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -66,12 +66,6 @@
  *  This is needed so that the runtime can startup and load packages even if the BRMS
  *  is not available (or the network).
  *  </li>
- *  
- *  <li>
- *  <code>name</code>
- *  the Name is used in any logging, so each agent can be differentiated (you may have one agent per KnowledeBase
- *  that you need in your application).
- *  </li>
  * </p>
  *  
  * <p>

Modified: 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	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DecisionTableConfiguration.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -13,9 +13,9 @@
  * DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
  * dtconf.setInputType( DecisionTableInputType.XLS );
  * dtconf.setWorksheetName( "Tables_2" );
- * kbuilder.addResource( new URL( "file://IntegrationExampleTest.xls" ),
- *                       KnowledgeType.DTABLE,
- *                       dtconf );
+ * kbuilder.add( ResourceFactory.newUrlResource( "file://IntegrationExampleTest.xls" ),
+ *               KnowledgeType.DTABLE,
+ *               dtconf );
  * assertFalse( kbuilder.hasErrors() );
  * KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  * </pre>

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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilder.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -5,6 +5,7 @@
 import java.util.Collection;
 
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.Resource;
 
 /**
  * <p>
@@ -14,8 +15,9 @@
  * </p>
  * 
  * <p>
- * Binaries, such as xls decision tables must use the URL based methods, so that an InputStream
- * can be obtained. Reader is only suitable for text based resources.
+ * The ResourceFactory provides capabilities to load Resources from a number of sources; such as
+ * Reader, ClassPath, URL, File, ByteArray. Binaries, such as xls decision tables,
+ * should not use a Reader based Resource handler, which is only suitable for text based resources.
  * </p>
  * 
  * <p>
@@ -29,7 +31,7 @@
  * </p>
  * <pre>
  * KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- * kbuilder.addResource( new URL( "file://myrules.drl" ),
+ * kbuilder.add( ResourceFactory.newUrlResource( "file://myrules.drl" ),
  *                       KnowledgeType.DRL);
  * assertFalse( kbuilder.hasErrors() );
  * KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
@@ -43,9 +45,9 @@
  * DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
  * dtconf.setInputType( DecisionTableInputType.XLS );
  * dtconf.setWorksheetName( "Tables_2" );
- * kbuilder.addResource( new URL( "file://IntegrationExampleTest.xls" ),
- *                       KnowledgeType.DTABLE,
- *                       dtconf );
+ * kbuilder.add( ResourceFactory.newUrlResource( "file://IntegrationExampleTest.xls" ),
+ *               KnowledgeType.DTABLE,
+                 dtconf );
  * assertFalse( kbuilder.hasErrors() );
  * KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  * </pre>
@@ -55,8 +57,8 @@
  * <p>
  * <pre>
  * KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- * kbuilder.addResource( new URL( "file://myflow.rf" ),
- *                       KnowledgeType.DRF);
+ * kbuilder.add( ResourceFactory.newUrlResource( "file://myflow.rf" ),
+ *               KnowledgeType.DRF);
  * assertFalse( kbuilder.hasErrors() );
  * KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  * </pre>
@@ -81,35 +83,18 @@
      * @param url
      * @param type
      */
-    void addResource(URL url,
-                     KnowledgeType type);
+    void add(Resource resource,
+             KnowledgeType type);
+
     /**
     * A a resource of the KnowledgeType from a given URL, using the provided ResourceConfiguration.
     * Currently only only decision tables use this, via the DecisionTableResourceConfiguration class.
     */
-    void addResource(URL url,
-                     KnowledgeType type,
-                     ResourceConfiguration configuration);
+    void add(Resource resource,
+             KnowledgeType type,
+             ResourceConfiguration configuration);
 
     /**
-     * A a resource of the KnowledgeType from a given Reader.
-     * 
-     * @param url
-     * @param type
-     */    
-    void addResource(Reader reader,
-                     KnowledgeType type);
-
-    /**
-     * A a resource of the KnowledgeType from a given URL, using the provided ResourceConfiguration.
-     * Currently only only decision tables use this, via the DecisionTableResourceConfiguration class.
-     * IF you use a Reader, make sure a text based decision table is used, such as CSV and not binary like XLS.
-     */    
-    void addResource(Reader reader,
-                     KnowledgeType type,
-                     ResourceConfiguration configuration);
-
-    /**
      * Returns the built packages.
      * 
      * If the KnowledgeBuilder has errors the Collection will be empty. The hasErrors()

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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactory.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -67,7 +67,7 @@
      * DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
      * dtconf.setInputType( DecisionTableInputType.XLS );
      * dtconf.setWorksheetName( "Tables_2" );
-     * kbuilder.addResource( new URL( "file://IntegrationExampleTest.xls" ),
+     * kbuilder.add( new URL( "file://IntegrationExampleTest.xls" ),
      *                       KnowledgeType.DTABLE,
      *                       dtconf );
      * assertFalse( kbuilder.hasErrors() );

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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeType.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -17,5 +17,8 @@
     DRF,
 
     /** Decision Table */
-    DTABLE;
+    DTABLE,
+    
+    /** Composition */
+    COMPOSITION;
 }

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/Resource.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/Resource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/Resource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,13 @@
+package org.drools.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URL;
+
+public interface Resource {
+    InputStream getInputStream() throws IOException;
+    public Reader getReader() throws IOException;
+    URL getURL() throws IOException;
+    boolean hasURL();
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,79 @@
+package org.drools.io;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.ProviderInitializationException;
+
+public class ResourceFactory {
+    private static ResourceProvider resourceProvider;
+    
+    public static Resource newUrlResource(URL url) {
+        return getResourceProvider().newUrlResource( url );
+    }
+    
+    public static Resource newUrlResource(String path) {
+        return getResourceProvider().newUrlResource( path );
+    }    
+    
+    public static Resource newFileResource(File file) {
+        return getResourceProvider().newFileSystemResource( file );
+    }
+    
+    public static Resource newFileResource(String fileName) {
+        return getResourceProvider().newFileSystemResource( fileName );
+    }
+        
+    
+    public static Resource newByteArrayResource(byte[] bytes) {
+        return getResourceProvider().newByteArrayResource( bytes );
+    }
+    
+    public static Resource newInputStreamResource(InputStream stream) {
+        return getResourceProvider().newInputStreamResource( stream );
+    }
+    
+    public static Resource newReaderResource(Reader reader) {
+        return getResourceProvider().newReaderResource( reader );
+    }
+    
+    public static Resource newReaderResource(Reader reader, String encoding) {
+        return getResourceProvider().newReaderResource( reader, encoding );
+    }  
+    
+    public static Resource newClassPathResource(String path) {
+        return getResourceProvider().newClassPathResource( path );
+    }
+    
+    public static Resource newClassPathResource(String path, Class clazz) {
+        return getResourceProvider().newClassPathResource( path, clazz );
+    }     
+    
+    public static Resource newClassPathResource(String path, ClassLoader classLoader) {
+        return getResourceProvider().newClassPathResource( path, classLoader );
+    }  
+    
+    private static synchronized void setResourceProvider(ResourceProvider provider) {
+        ResourceFactory.resourceProvider = provider;
+    }
+
+    private static synchronized ResourceProvider getResourceProvider() {
+        if ( resourceProvider == null ) {
+            loadProvider();
+        }
+        return resourceProvider;
+    }
+
+    private static void loadProvider() {
+        try {
+            Class<ResourceProvider> cls = (Class<ResourceProvider>) Class.forName( "org.drools.io.impl.ResourceProviderImpl" );
+            setResourceProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new ProviderInitializationException( "Provider org.drools.io.impl.ResourceProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }    
+        
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceProvider.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,31 @@
+package org.drools.io;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URL;
+
+public interface ResourceProvider {
+    Resource newUrlResource(URL url);
+    
+    Resource newUrlResource(String path);    
+    
+    Resource newFileSystemResource(File file);
+    
+    Resource newFileSystemResource(String fileName);
+            
+    Resource newByteArrayResource(byte[] bytes);
+    
+    Resource newInputStreamResource(InputStream stream);
+    
+    Resource newReaderResource(Reader reader);
+    
+    Resource newReaderResource(Reader reader, String encoding);
+    
+    Resource newClassPathResource(String path);
+        
+    Resource newClassPathResource(String path, ClassLoader classLoader);
+    
+    Resource newClassPathResource(String path, Class clazz);
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -15,7 +15,7 @@
  * </p>
  * <pre>
  * KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- * kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( fileName ) ), KnowledgeType.DRL );
+ * kbuilder.add( ResourceFactory.newFileSystemResource( fileName ), KnowledgeType.DRL );
  * assertFalse( kbuilder.hasErrors() );     
  * if (kbuilder.hasErrors() ) {
  *     System.out.println( kbuilder.getErrors() );

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -16,7 +16,7 @@
  * </p>
  * <pre>
  * KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- * kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( fileName ) ), KnowledgeType.DRL );
+ * kbuilder.add( ResourceFactory.newFileSystemResource( fileName ), KnowledgeType.DRL );
  * assertFalse( kbuilder.hasErrors() );     
  * if (kbuilder.hasErrors() ) {
  *     System.out.println( kbuilder.getErrors() );

Copied: labs/jbossrules/trunk/drools-api/src/main/java/overview.html (from rev 24108, labs/jbossrules/trunk/drools-api/src/main/resources/overview.html)
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/overview.html	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/overview.html	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,77 @@
+<body>
+
+<p>
+Drools the Business Logic Integration Platform provides an knowledge centric api, where rules and processes are first class citizens.
+</p>
+
+<p>
+The most common interfaces you will use are:
+<ul>
+<li><tt>org.drools.builder.KnowledgeBuilder</tt></li>
+<li><tt>org.drools.KnowledgeBase</tt></li>
+<li><tt>org.drools.agent.KnowledgeAgent</tt></li>
+<li><tt>org.drools.runtime.StatefulKnowledgeSession</tt></li>
+<li><tt>org.drools.runtime.StatelessKnowledgeSession</tt></li>
+</ul>
+</p>
+
+<p>
+Factory classes, with static methods, provide instances of the above interfaces. A pluggable provider approach is used to allow provider implementations to
+be wired up to the factories at runtime. The Factories you will most commonly used are:
+<ul>
+<li><tt>org.drools.builder.KnowledgeBuilderFactory</tt></li>
+<li><tt>org.drools.io.ResourceFactory</tt></li>
+<li><tt>org.drools.KnowledgeBaseFactory</tt></li>
+<li><tt>org.drools.agent.KnowledgeAgentFactory</tt></li>
+</ul>
+</p>
+
+<p>
+A Typical example to load a rule resource.
+<pre>
+KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+kbuilder.addResource( ResourceFactory.newUrlResource( url ),
+                      KnowledgeType.DRL );
+if ( kbuilder.hasErrors() ) {
+    System.err.println( builder.getErrors().toString() );
+}                     
+
+KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+kbase.addKnowledgePackages( builder.getKnowledgePackages() );
+
+StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();
+ksession.insert( new Fibonacci( 10 ) );
+ksession.fireAllRules();
+
+ksession.dispose();
+</pre>
+</p>
+
+<p>
+A Typical example to load a process resource. Notice the KnowledgeType is changed, in accordance with the Resource type.
+<pre>
+KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+kbuilder.addResource( ResourceFactory.newUrlResource( url ),
+                      KnowledgeType.DRF );
+if ( kbuilder.hasErrors() ) {
+    System.err.println( builder.getErrors().toString() );
+}                     
+
+KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+kbase.addKnowledgePackages( builder.getKnowledgePackages() );
+
+StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();
+ksession.startProcess( "Buy Order Process" );
+
+ksession.dispose();
+</pre>
+</p>
+
+<p>
+'kbuilder', 'kbase', 'ksession' are the variable identifiers often used, the k prefix is for 'knowledge'.
+</p>
+
+<p>
+The majority of Drools API is considered stable and should not change, experimental classes and apis will be marked as such.
+</p>
+</body>
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/overview.html
___________________________________________________________________
Name: svn:mergeinfo
   + 

Deleted: labs/jbossrules/trunk/drools-api/src/main/resources/overview.html
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/resources/overview.html	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-api/src/main/resources/overview.html	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,76 +0,0 @@
-<body>
-
-<p>
-Drools the Business Logic Integration Platform provides an knowledge centric api, where rules and processes are first class citizens.
-</p>
-
-<p>
-The most common interfaces you will use are:
-<ul>
-<li><tt>org.drools.builder.KnowledgeBuilder</tt></li>
-<li><tt>org.drools.KnowledgeBase</tt></li>
-<li><tt>org.drools.agent.KnowledgeAgent</tt></li>
-<li><tt>org.drools.runtime.StatefulKnowledgeSession</tt></li>
-<li><tt>org.drools.runtime.StatelessKnowledgeSession</tt></li>
-</ul>
-</p>
-
-<p>
-Factory classes, with static methods, provide instances of the above interfaces. A pluggable provider approach is used to allow provider implementations to
-be wired up to the factories at runtime. The Factories you will most commonly used are:
-<ul>
-<li><tt>org.drools.builder.KnowledgeBuilderFactory</tt></li>
-<li><tt>org.drools.KnowledgeBaseFactory</tt></li>
-<li><tt>org.drools.agent.KnowledgeAgentFactory</tt></li>
-</ul>
-</p>
-
-<p>
-A Typical example to load a rule resource.
-<pre>
-KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-kbuilder.addResource( url,
-                      KnowledgeType.DRL );
-if ( kbuilder.hasErrors() ) {
-    System.err.println( builder.getErrors().toString() );
-}                     
-
-KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-kbase.addKnowledgePackages( builder.getKnowledgePackages() );
-
-StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();
-ksession.insert( new Fibonacci( 10 ) );
-ksession.fireAllRules();
-
-ksession.dispose();
-</pre>
-</p>
-
-<p>
-A Typical example to load a process resource. Notice the KnowledgeType is changed, in accordance with the Resource type.
-<pre>
-KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-kbuilder.addResource( url,
-                      KnowledgeType.DRF );
-if ( kbuilder.hasErrors() ) {
-    System.err.println( builder.getErrors().toString() );
-}                     
-
-KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-kbase.addKnowledgePackages( builder.getKnowledgePackages() );
-
-StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();
-ksession.startProcess( "Buy Order Process" );
-
-ksession.dispose();
-</pre>
-</p>
-
-<p>
-'kbuilder', 'kbase', 'ksession' are the variable identifiers often used, the k prefix is for 'knowledge'.
-</p>
-
-<p>
-The majority of Drools API is considered stable and should not change, experimental classes and apis will be marked as such.
-</p>
-</body>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/.classpath	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,23 +1,23 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.1-SNAPSHOT/mvel2-2.0.1-SNAPSHOT.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.1.1/antlr-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="src" path="/drools-api"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.4-SNAPSHOT/mvel2-2.0.4-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/.project
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.project	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/.project	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,16 +1,16 @@
-<projectDescription>
-  <name>drools-compiler</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-core</project>
-    <project>drools-api</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-compiler</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-api</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/builder/impl/KnowledgeBuilderImpl.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -14,6 +14,9 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.definition.KnowledgePackage;
 import org.drools.definitions.impl.KnowledgePackageImp;
+import org.drools.io.Resource;
+import org.drools.io.impl.ReaderResource;
+import org.drools.io.impl.UrlResource;
 import org.drools.rule.Package;
 
 public class KnowledgeBuilderImpl implements KnowledgeBuilder {
@@ -23,27 +26,16 @@
 		this.pkgBuilder = pkgBuilder;
 	}
 	
-	public void addResource(URL url, KnowledgeType type) {
-        pkgBuilder.addResource( url, type )  ;
+	public void add(Resource resource, KnowledgeType type) {
+        pkgBuilder.addKnowledgeResource( resource, type, null )  ;
 	}	
 
-    public void addResource(URL url,
+    public void add(Resource resource,
                             KnowledgeType type,
                             ResourceConfiguration configuration) {
-        pkgBuilder.addResource( url, type, configuration );
+        pkgBuilder.addKnowledgeResource( resource, 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/compiler/DecisionTableFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableFactory.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableFactory.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -7,25 +7,25 @@
 import org.drools.builder.DecisionTableConfiguration;
 
 public class DecisionTableFactory {
-    private static volatile DecisionTableProvider provider;
+    private static DecisionTableProvider provider;
     
-    public static void setDecisionTableProvider(DecisionTableProvider provider) {
+
+    
+    public static String loadFromInputStream(InputStream is, DecisionTableConfiguration configuration) {
+
+        return getDecisionTableProvider().loadFromInputStream( is, configuration );
+    } 
+    
+    public static synchronized void setDecisionTableProvider(DecisionTableProvider provider) {
         DecisionTableFactory.provider = provider;
     }
     
-    public static String loadFromInputStream(InputStream is, DecisionTableConfiguration configuration) {
+    public static synchronized DecisionTableProvider getDecisionTableProvider() {
         if ( provider == null ) {
             loadProvider();
         }
-        return provider.loadFromInputStream( is, configuration );
-    } 
-
-    public static String loadFromReader(Reader reader, DecisionTableConfiguration configuration) {
-        if ( provider == null ) {
-            loadProvider();
-        }
-        return provider.loadFromReader( reader, configuration );
-    } 
+        return provider;
+    }
     
     private static void loadProvider() {
         try {

Modified: 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	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DecisionTableProvider.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -7,8 +7,6 @@
 
 public interface DecisionTableProvider {
 
-    String loadFromReader(Reader reader, DecisionTableConfiguration configuration);
-
     String loadFromInputStream(InputStream is,
                                DecisionTableConfiguration configuration);
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -17,11 +17,13 @@
  */
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.antlr.runtime.ANTLRInputStream;
 import org.antlr.runtime.ANTLRReaderStream;
 import org.antlr.runtime.ANTLRStringStream;
 import org.antlr.runtime.CommonTokenStream;
@@ -47,249 +49,298 @@
  */
 public class DrlParser {
 
-	private static final String GENERIC_ERROR_MESSAGE = "Unknown error while parsing. This is a bug. Please contact the Development team.";
-	private final List results = new ArrayList();
-	private List<DroolsSentence> editorSentences = null;
-	private Location location = new Location(Location.LOCATION_UNKNOWN);
-	private DescrBuilderTree walker = null;
-	private DRLLexer lexer = null;
+    private static final String  GENERIC_ERROR_MESSAGE = "Unknown error while parsing. This is a bug. Please contact the Development team.";
+    private final List           results               = new ArrayList();
+    private List<DroolsSentence> editorSentences       = null;
+    private Location             location              = new Location( Location.LOCATION_UNKNOWN );
+    private DescrBuilderTree     walker                = null;
+    private DRLLexer             lexer                 = null;
 
-	public DrlParser() {
-	}
+    public DrlParser() {
+    }
 
-	/** Parse a rule from text */
-	public PackageDescr parse(final String text) throws DroolsParserException {
-		return parse(false, text);
-	}
+    /** Parse a rule from text */
+    public PackageDescr parse(final String text) throws DroolsParserException {
+        return parse( false,
+                      text );
+    }
 
-	public PackageDescr parse(final boolean isEditor, final String text)
-			throws DroolsParserException {
-		final DRLParser parser = getParser(text);
-		return compile(isEditor, parser);
-	}
+    public PackageDescr parse(final boolean isEditor,
+                              final String text) throws DroolsParserException {
+        final DRLParser parser = getParser( text );
+        return compile( isEditor,
+                        parser );
+    }
 
-	public PackageDescr parse(final boolean isEditor, final Reader reader)
-			throws DroolsParserException {
-		final DRLParser parser = getParser(reader);
-		return compile(isEditor, parser);
-	}
+    public PackageDescr parse(final boolean isEditor,
+                              final Reader reader) throws DroolsParserException {
+        final DRLParser parser = getParser( reader );
+        return compile( isEditor,
+                        parser );
+    }
 
-	public PackageDescr parse(final Reader reader) throws DroolsParserException {
-		return parse(false, reader);
-	}
+    public PackageDescr parse(final Reader reader) throws DroolsParserException {
+        return parse( false,
+                      reader );
+    }
 
-	/**
-	 * Parse and build a rule package from a DRL source with a domain specific
-	 * language.
-	 */
-	public PackageDescr parse(final Reader drl, final Reader dsl)
-			throws DroolsParserException, IOException {
-		return parse(false, drl, dsl);
-	}
+    /**
+     * Parse and build a rule package from a DRL source with a domain specific
+     * language.
+     */
+    public PackageDescr parse(final Reader drl,
+                              final Reader dsl) throws DroolsParserException,
+                                               IOException {
+        return parse( false,
+                      drl,
+                      dsl );
+    }
 
-	public PackageDescr parse(boolean isEditor, final Reader drl,
-			final Reader dsl) throws DroolsParserException, IOException {
-		final StringBuffer text = getDRLText(drl);
-		return parse(text.toString(), dsl);
-	}
+    public PackageDescr parse(boolean isEditor,
+                              final Reader drl,
+                              final Reader dsl) throws DroolsParserException,
+                                               IOException {
+        final StringBuffer text = getDRLText( drl );
+        return parse( text.toString(),
+                      dsl );
+    }
 
-	/**
-	 * Parse and build a rule package from a DRL source with a domain specific
-	 * language.
-	 * 
-	 * @param source
-	 *            As Text.
-	 * @param dsl
-	 * @return
-	 * @throws DroolsParserException
-	 */
-	public PackageDescr parse(boolean isEditor, final String source,
-			final Reader dsl) throws DroolsParserException {
-		DefaultExpanderResolver resolver = getDefaultResolver(dsl);
+    /**
+     * Parse and build a rule package from a DRL source with a domain specific
+     * language.
+     * 
+     * @param source
+     *            As Text.
+     * @param dsl
+     * @return
+     * @throws DroolsParserException
+     */
+    public PackageDescr parse(boolean isEditor,
+                              final String source,
+                              final Reader dsl) throws DroolsParserException {
+        DefaultExpanderResolver resolver = getDefaultResolver( dsl );
 
-		final Expander expander = resolver.get("*", null);
-		final String expanded = expander.expand(source);
-		if (expander.hasErrors()) {
-			this.results.addAll(expander.getErrors());
-		}
-		return this.parse(isEditor, expanded);
-	}
+        final Expander expander = resolver.get( "*",
+                                                null );
+        final String expanded = expander.expand( source );
+        if ( expander.hasErrors() ) {
+            this.results.addAll( expander.getErrors() );
+        }
+        return this.parse( isEditor,
+                           expanded );
+    }
 
-	public PackageDescr parse(final String source, final Reader dsl)
-			throws DroolsParserException {
-		return this.parse(false, source, dsl);
-	}
+    public PackageDescr parse(final String source,
+                              final Reader dsl) throws DroolsParserException {
+        return this.parse( false,
+                           source,
+                           dsl );
+    }
 
-	/**
-	 * This will expand the DRL. useful for debugging.
-	 * 
-	 * @param source -
-	 *            the source which use a DSL
-	 * @param dsl -
-	 *            the DSL itself.
-	 * @throws DroolsParserException
-	 *             If unable to expand in any way.
-	 */
-	public String getExpandedDRL(final String source, final Reader dsl)
-			throws DroolsParserException {
-		DefaultExpanderResolver resolver = getDefaultResolver(dsl);
-		return getExpandedDRL(source, resolver);
-	}
+    public PackageDescr parse(final boolean isEditor,
+                              final InputStream is) throws DroolsParserException {
+        final DRLParser parser = getParser( is );
+        return compile( isEditor,
+                        parser );
+    }
 
-	/**
-	 * This will expand the DRL using the given expander resolver. useful for
-	 * debugging.
-	 * 
-	 * @param source -
-	 *            the source which use a DSL
-	 * @param resolver -
-	 *            the DSL expander resolver itself.
-	 * @throws DroolsParserException
-	 *             If unable to expand in any way.
-	 */
-	public String getExpandedDRL(final String source,
-			final DefaultExpanderResolver resolver)
-			throws DroolsParserException {
+    public PackageDescr parse(final InputStream is) throws DroolsParserException {
+        return parse( false,
+                      is );
+    }
 
-		final Expander expander = resolver.get("*", null);
-		final String expanded = expander.expand(source);
-		if (expander.hasErrors()) {
-			String err = "";
-			for (Iterator iter = expander.getErrors().iterator(); iter
-					.hasNext();) {
-				ExpanderException ex = (ExpanderException) iter.next();
-				err = err + "\n Line:[" + ex.getLine() + "] " + ex.getMessage();
+    /**
+     * This will expand the DRL. useful for debugging.
+     * 
+     * @param source -
+     *            the source which use a DSL
+     * @param dsl -
+     *            the DSL itself.
+     * @throws DroolsParserException
+     *             If unable to expand in any way.
+     */
+    public String getExpandedDRL(final String source,
+                                 final Reader dsl) throws DroolsParserException {
+        DefaultExpanderResolver resolver = getDefaultResolver( dsl );
+        return getExpandedDRL( source,
+                               resolver );
+    }
 
-			}
-			throw new DroolsParserException(err);
-		}
-		return expanded;
-	}
+    /**
+     * This will expand the DRL using the given expander resolver. useful for
+     * debugging.
+     * 
+     * @param source -
+     *            the source which use a DSL
+     * @param resolver -
+     *            the DSL expander resolver itself.
+     * @throws DroolsParserException
+     *             If unable to expand in any way.
+     */
+    public String getExpandedDRL(final String source,
+                                 final DefaultExpanderResolver resolver) throws DroolsParserException {
 
-	private StringBuffer getDRLText(final Reader reader) throws IOException {
-		final StringBuffer text = new StringBuffer();
+        final Expander expander = resolver.get( "*",
+                                                null );
+        final String expanded = expander.expand( source );
+        if ( expander.hasErrors() ) {
+            String err = "";
+            for ( Iterator iter = expander.getErrors().iterator(); iter.hasNext(); ) {
+                ExpanderException ex = (ExpanderException) iter.next();
+                err = err + "\n Line:[" + ex.getLine() + "] " + ex.getMessage();
 
-		final char[] buf = new char[1024];
-		int len = 0;
+            }
+            throw new DroolsParserException( err );
+        }
+        return expanded;
+    }
 
-		while ((len = reader.read(buf)) >= 0) {
-			text.append(buf, 0, len);
-		}
-		return text;
-	}
+    private StringBuffer getDRLText(final InputStream is) throws IOException {
+        
+        
+        return null;
+    }
+    
+    private StringBuffer getDRLText(final Reader reader) throws IOException {
+        final StringBuffer text = new StringBuffer();
 
-	/**
-	 * @return true if there were parser errors.
-	 */
-	public boolean hasErrors() {
-		return this.results.size() > 0;
-	}
+        final char[] buf = new char[1024];
+        int len = 0;
 
-	/**
-	 * @return a list of ParserError's.
-	 */
-	public List getErrors() {
-		return this.results;
-	}
+        while ( (len = reader.read( buf )) >= 0 ) {
+            text.append( buf,
+                         0,
+                         len );
+        }
+        return text;
+    }
 
-	private PackageDescr compile(boolean isEditor, final DRLParser parser)
-			throws DroolsParserException {
-		try {
-			if (isEditor) {
-				parser.enableEditorInterface();
-			}
-			DroolsTree resultTree = (DroolsTree) parser.compilation_unit()
-					.getTree();
-			editorSentences = parser.getEditorInterface();
-			makeErrorList(parser);
-			if (isEditor || !this.hasErrors()) {
-				return walk(parser.getTokenStream(), resultTree);
-			} else {
-				return null;
-			}
-		} catch (Exception e) {
-			final ParserError err = new ParserError(GENERIC_ERROR_MESSAGE, -1,
-					0);
-			this.results.add(err);
-			if (isEditor) {
-				if (walker == null) {
-					return null;
-				}
-				return walker.getPackageDescr();
-			} else {
-				throw new DroolsParserException(GENERIC_ERROR_MESSAGE, e);
-			}
-		}
-	}
+    /**
+     * @return true if there were parser errors.
+     */
+    public boolean hasErrors() {
+        return this.results.size() > 0;
+    }
 
-	private PackageDescr walk(TokenStream tokenStream, Tree resultTree)
-			throws RecognitionException {
-		CommonTreeNodeStream nodes = new CommonTreeNodeStream(resultTree);
-		// AST nodes have payload that point into token stream
-		nodes.setTokenStream(tokenStream);
-		// Create a tree walker attached to the nodes stream
-		walker = new DescrBuilderTree(nodes);
-		walker.compilation_unit();
-		return walker.getPackageDescr();
-	}
+    /**
+     * @return a list of ParserError's.
+     */
+    public List getErrors() {
+        return this.results;
+    }
 
-	/** Convert the antlr exceptions to drools parser exceptions */
-	private void makeErrorList(final DRLParser parser) {
-		for (final Iterator iter = lexer.getErrors().iterator(); iter.hasNext();) {
-			final DroolsParserException recogErr = (DroolsParserException) iter
-					.next();
-			final ParserError err = new ParserError(recogErr.getMessage(),
-					recogErr.getLineNumber(), recogErr.getColumn());
-			this.results.add(err);
-		}
-		for (final Iterator iter = parser.getErrors().iterator(); iter
-				.hasNext();) {
-			final DroolsParserException recogErr = (DroolsParserException) iter
-					.next();
-			final ParserError err = new ParserError(recogErr.getMessage(),
-					recogErr.getLineNumber(), recogErr.getColumn());
-			this.results.add(err);
-		}
-	}
+    private PackageDescr compile(boolean isEditor,
+                                 final DRLParser parser) throws DroolsParserException {
+        try {
+            if ( isEditor ) {
+                parser.enableEditorInterface();
+            }
+            DroolsTree resultTree = (DroolsTree) parser.compilation_unit().getTree();
+            editorSentences = parser.getEditorInterface();
+            makeErrorList( parser );
+            if ( isEditor || !this.hasErrors() ) {
+                return walk( parser.getTokenStream(),
+                             resultTree );
+            } else {
+                return null;
+            }
+        } catch ( Exception e ) {
+            final ParserError err = new ParserError( GENERIC_ERROR_MESSAGE,
+                                                     -1,
+                                                     0 );
+            this.results.add( err );
+            if ( isEditor ) {
+                if ( walker == null ) {
+                    return null;
+                }
+                return walker.getPackageDescr();
+            } else {
+                throw new DroolsParserException( GENERIC_ERROR_MESSAGE,
+                                                 e );
+            }
+        }
+    }
 
-	/**
-	 * @return An instance of a RuleParser should you need one (most folks will
-	 *         not).
-	 */
-	private DRLParser getParser(final String text) {
-		lexer = new DRLLexer(new ANTLRStringStream(text));
-		DRLParser parser = new DRLParser(new CommonTokenStream(lexer));
-		parser.setTreeAdaptor(new DroolsTreeAdaptor());
-		return parser;
-	}
+    private PackageDescr walk(TokenStream tokenStream,
+                              Tree resultTree) throws RecognitionException {
+        CommonTreeNodeStream nodes = new CommonTreeNodeStream( resultTree );
+        // AST nodes have payload that point into token stream
+        nodes.setTokenStream( tokenStream );
+        // Create a tree walker attached to the nodes stream
+        walker = new DescrBuilderTree( nodes );
+        walker.compilation_unit();
+        return walker.getPackageDescr();
+    }
 
-	private DRLParser getParser(final Reader reader) {
-		try {
-			lexer = new DRLLexer(new ANTLRReaderStream(reader));
-			DRLParser parser = new DRLParser(new CommonTokenStream(lexer));
-			parser.setTreeAdaptor(new DroolsTreeAdaptor());
-			return parser;
-		} catch (final Exception e) {
-			throw new RuntimeException("Unable to parser Reader", e);
-		}
-	}
+    /** Convert the antlr exceptions to drools parser exceptions */
+    private void makeErrorList(final DRLParser parser) {
+        for ( final Iterator iter = lexer.getErrors().iterator(); iter.hasNext(); ) {
+            final DroolsParserException recogErr = (DroolsParserException) iter.next();
+            final ParserError err = new ParserError( recogErr.getMessage(),
+                                                     recogErr.getLineNumber(),
+                                                     recogErr.getColumn() );
+            this.results.add( err );
+        }
+        for ( final Iterator iter = parser.getErrors().iterator(); iter.hasNext(); ) {
+            final DroolsParserException recogErr = (DroolsParserException) iter.next();
+            final ParserError err = new ParserError( recogErr.getMessage(),
+                                                     recogErr.getLineNumber(),
+                                                     recogErr.getColumn() );
+            this.results.add( err );
+        }
+    }
 
-	public Location getLocation() {
-		return this.location;
-	}
+    /**
+     * @return An instance of a RuleParser should you need one (most folks will
+     *         not).
+     */
+    private DRLParser getParser(final String text) {
+        lexer = new DRLLexer( new ANTLRStringStream( text ) );
+        DRLParser parser = new DRLParser( new CommonTokenStream( lexer ) );
+        parser.setTreeAdaptor( new DroolsTreeAdaptor() );
+        return parser;
+    }
 
-	public DefaultExpanderResolver getDefaultResolver(final Reader dsl)
-			throws DroolsParserException {
-		DefaultExpanderResolver resolver;
-		try {
-			resolver = new DefaultExpanderResolver(dsl);
-		} catch (final IOException e) {
-			throw new DroolsParserException("Error parsing the DSL.", e);
-		}
-		return resolver;
-	}
+    private DRLParser getParser(final Reader reader) {
+        try {
+            lexer = new DRLLexer( new ANTLRReaderStream( reader ) );
+            DRLParser parser = new DRLParser( new CommonTokenStream( lexer ) );
+            parser.setTreeAdaptor( new DroolsTreeAdaptor() );
+            return parser;
+        } catch ( final Exception e ) {
+            throw new RuntimeException( "Unable to parser Reader",
+                                        e );
+        }
+    }
 
-	public List<DroolsSentence> getEditorSentences() {
-		return editorSentences;
-	}
+    private DRLParser getParser(final InputStream is) {
+        try {
+            lexer = new DRLLexer( new ANTLRInputStream( is ) );
+            DRLParser parser = new DRLParser( new CommonTokenStream( lexer ) );
+            parser.setTreeAdaptor( new DroolsTreeAdaptor() );
+            return parser;
+        } catch ( final Exception e ) {
+            throw new RuntimeException( "Unable to parser Reader",
+                                        e );
+        }
+    }
+
+    public Location getLocation() {
+        return this.location;
+    }
+
+    public DefaultExpanderResolver getDefaultResolver(final Reader dsl) throws DroolsParserException {
+        DefaultExpanderResolver resolver;
+        try {
+            resolver = new DefaultExpanderResolver( dsl );
+        } catch ( final IOException e ) {
+            throw new DroolsParserException( "Error parsing the DSL.",
+                                             e );
+        }
+        return resolver;
+    }
+
+    public List<DroolsSentence> getEditorSentences() {
+        return editorSentences;
+    }
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeComposition.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeComposition.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeComposition.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,21 @@
+package org.drools.compiler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class KnowledgeComposition {
+    private List<KnowledgeResource> resources;
+    
+    public KnowledgeComposition() {
+        this.resources = new ArrayList<KnowledgeResource>();
+    }
+
+    public List<KnowledgeResource> getResources() {
+        return resources;
+    }
+
+    public void setResources(List<KnowledgeResource> parts) {
+        this.resources = parts;
+    }
+               
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeResource.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/KnowledgeResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,50 @@
+package org.drools.compiler;
+
+import org.drools.builder.KnowledgeType;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.io.Resource;
+
+public class KnowledgeResource {
+    private String                source;
+    private KnowledgeType         type;
+    private ResourceConfiguration configuration;
+
+    public KnowledgeResource(String src,
+                             KnowledgeType type) {
+        this.source = src;
+        this.type = type;
+    }
+
+    public KnowledgeResource(String src,
+                             KnowledgeType type,
+                             ResourceConfiguration configuration) {
+        this.source = src;
+        this.type = type;
+        this.configuration = configuration;
+    }
+
+    public String getSource() {
+        return this.source;
+    }
+
+    public void setSource(String src) {
+        this.source = src;
+    }
+
+    public KnowledgeType getType() {
+        return type;
+    }
+
+    public void setType(KnowledgeType type) {
+        this.type = type;
+    }
+
+    public ResourceConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(ResourceConfiguration configuration) {
+        this.configuration = 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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -36,7 +36,6 @@
 import org.drools.base.ClassFieldAccessorCache;
 import org.drools.base.ClassFieldAccessorStore;
 import org.drools.builder.DecisionTableConfiguration;
-import org.drools.builder.DecisionTableInputType;
 import org.drools.builder.KnowledgeType;
 import org.drools.builder.ResourceConfiguration;
 import org.drools.common.InternalRuleBase;
@@ -49,6 +48,9 @@
 import org.drools.facttemplates.FactTemplateImpl;
 import org.drools.facttemplates.FieldTemplate;
 import org.drools.facttemplates.FieldTemplateImpl;
+import org.drools.io.Resource;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.io.impl.UrlResource;
 import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.FactTemplateDescr;
@@ -74,6 +76,7 @@
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
 import org.drools.spi.InternalReadAccessor;
+import org.drools.xml.XmlCompositionReader;
 import org.drools.xml.XmlPackageReader;
 import org.xml.sax.SAXException;
 
@@ -268,10 +271,17 @@
         }
     }
 
-    public void addPackageFromDrl(final URL url) throws DroolsParserException,
-                                                IOException {
-        this.url = url.toExternalForm();
-        addPackageFromDrl( new InputStreamReader( url.openStream() ) );
+    public void addPackageFromDrl(Resource resource) throws DroolsParserException,
+                                                    IOException {
+        if ( resource.hasURL() ) {
+            this.url = resource.getURL().toExternalForm();
+        }
+        final DrlParser parser = new DrlParser();
+        final PackageDescr pkg = parser.parse( resource.getInputStream() );
+        this.results.addAll( parser.getErrors() );
+        if ( !parser.hasErrors() ) {
+            addPackage( pkg );
+        }
         this.url = null;
     }
 
@@ -296,10 +306,22 @@
         addPackage( xmlReader.getPackageDescr() );
     }
 
-    public void addPackageFromXml(final URL url) throws DroolsParserException,
-                                                IOException {
-        this.url = url.toExternalForm();
-        addPackageFromXml( new InputStreamReader( url.openStream() ) );
+    public void addPackageFromXml(final Resource resource) throws DroolsParserException,
+                                                          IOException {
+        if ( resource.hasURL() ) {
+            this.url = resource.getURL().toExternalForm();
+        }
+
+        final XmlPackageReader xmlReader = new XmlPackageReader( this.configuration.getSemanticModules() );
+
+        try {
+            xmlReader.read( resource.getReader() );
+        } catch ( final SAXException e ) {
+            throw new DroolsParserException( e.toString(),
+                                             e.getCause() );
+        }
+
+        addPackage( xmlReader.getPackageDescr() );
         this.url = null;
     }
 
@@ -325,12 +347,17 @@
         }
     }
 
-    public void addPackageFromDslr(final Reader source) {
+    public void addPackageFromDslr(final Resource resource) throws DroolsParserException,
+                                                           IOException {
+        if ( resource.hasURL() ) {
+            this.url = resource.getURL().toExternalForm();
+        }
+
         final DrlParser parser = new DrlParser();
         DefaultExpander expander = getDslExpander();
 
         try {
-            String str = expander.expand( source );
+            String str = expander.expand( resource.getReader() );
             if ( expander.hasErrors() ) {
                 this.results.addAll( expander.getErrors() );
             }
@@ -340,15 +367,6 @@
             if ( !parser.hasErrors() ) {
                 addPackage( pkg );
             }
-        } catch ( Exception e ) {
-            throw new RuntimeException( e );
-        }
-    }
-
-    public void addPackageFromDslr(final URL url) {
-        this.url = url.toExternalForm();
-        try {
-            addPackageFromDslr( new InputStreamReader( url.openStream() ) );
         } catch ( IOException e ) {
             throw new RuntimeException( e );
         }
@@ -368,6 +386,21 @@
         }
     }
 
+    public void addDsl(Resource resource) throws IOException {
+        if ( resource.hasURL() ) {
+            this.url = resource.getURL().toExternalForm();
+        }
+
+        DSLTokenizedMappingFile file = new DSLTokenizedMappingFile();
+        file.parseAndLoad( resource.getReader() );
+        if ( this.dslFiles == null ) {
+            this.dslFiles = new ArrayList<DSLTokenizedMappingFile>();
+        }
+        this.dslFiles.add( file );
+
+        this.url = null;
+    }
+
     public void addDsl(URL url) {
         this.url = url.toExternalForm();
         try {
@@ -385,20 +418,14 @@
         addProcessFromXml( processSource );
     }
 
-    public void addProcessFromXml(URL processSource) {
-        this.url = processSource.toExternalForm();
-        try {
-            addProcessFromXml( new InputStreamReader( processSource.openStream() ) );
-        } catch ( IOException e ) {
-            throw new RuntimeException( e );
+    public void addProcessFromXml(Resource resource) throws IOException {
+        if ( resource.hasURL() ) {
+            this.url = resource.getURL().toExternalForm();
         }
-        this.url = null;
-    }
 
-    public void addProcessFromXml(Reader processSource) {
         ProcessBuilder processBuilder = new ProcessBuilder( this );
         try {
-            processBuilder.addProcessFromFile( processSource,
+            processBuilder.addProcessFromFile( resource.getReader(),
                                                url );
             this.results.addAll( processBuilder.getErrors() );
         } catch ( Exception e ) {
@@ -410,87 +437,82 @@
         }
 
         this.results = getResults( this.results );
+        this.url = null;
     }
 
-    public void addResource(URL url,
-                            KnowledgeType type) {
-        addResource( url,
-                     type,
-                     null );
-    }
-
-    public void addResource(URL url,
-                            KnowledgeType type,
-                            ResourceConfiguration configuration) {
+    public void addProcessFromXml(Reader processSource) {
+        ProcessBuilder processBuilder = new ProcessBuilder( this );
         try {
-            if ( type == KnowledgeType.DTABLE ) {
-                DecisionTableConfiguration dtableConfiguration = (DecisionTableConfiguration) configuration;
-
-                String string = DecisionTableFactory.loadFromInputStream( url.openStream(),
-                                                                          dtableConfiguration );
-                addPackageFromDrl( new StringReader( string ) );
-            } else {
-                addResource( new InputStreamReader( url.openStream() ),
-                             type,
-                             configuration );
+            processBuilder.addProcessFromFile( processSource,
+                                               url );
+            this.results.addAll( processBuilder.getErrors() );
+        } catch ( Exception e ) {
+            if ( e instanceof RuntimeException ) {
+                throw (RuntimeException) e;
             }
-        } catch ( DroolsParserException e ) {
-            throw new RuntimeException( e );
-        } catch ( IOException e ) {
-            throw new RuntimeException( e );
+            this.results.add( new RuleFlowLoadError( "Unable to load the rule flow.",
+                                                     e ) );
         }
-    }
 
-    public void addResource(Reader reader,
-                            KnowledgeType type) {
-        addResource( reader,
-                     type,
-                     null );
+        this.results = getResults( this.results );
     }
 
-    public void addResource(Reader reader,
-                            KnowledgeType type,
-                            ResourceConfiguration configuration) {
+    public void addKnowledgeResource(Resource resource,
+                                     KnowledgeType type,
+                                     ResourceConfiguration configuration) {
         try {
             switch ( type ) {
                 case DRL : {
-                    addPackageFromDrl( reader );
+                    addPackageFromDrl( resource );
                     break;
 
                 }
                 case DSLR : {
-                    addPackageFromDslr( reader );
+                    addPackageFromDslr( resource );
                     break;
                 }
                 case DSL : {
-                    addDsl( reader );
+                    addDsl( resource );
                     break;
                 }
                 case XDRL : {
-                    addPackageFromXml( reader );
+                    addPackageFromXml( resource );
                     break;
                 }
                 case DRF : {
-                    addProcessFromXml( reader );
+                    addProcessFromXml( resource );
                     break;
                 }
                 case DTABLE : {
                     DecisionTableConfiguration dtableConfiguration = (DecisionTableConfiguration) configuration;
-                    if ( dtableConfiguration.getInputType() == DecisionTableInputType.XLS ) {
-                        throw new IllegalArgumentException( "Use addResource(URL url, KnowledgeType type, ResourceConfiguration configuration) when adding XLS decision tables." );
-                    }
 
-                    String string = DecisionTableFactory.loadFromReader( reader,
-                                                                         dtableConfiguration );
+                    String string = DecisionTableFactory.loadFromInputStream( resource.getInputStream(),
+                                                                              dtableConfiguration );
                     addPackageFromDrl( new StringReader( string ) );
                     break;
                 }
+                case COMPOSITION : {
+                    XmlCompositionReader reader = new XmlCompositionReader( this.configuration.getSemanticModules() );
+                    KnowledgeComposition composition = reader.read( resource.getReader() );
+                    for ( KnowledgeResource kresource : composition.getResources() ) {
+                        Resource ioresource = null;
+                        String src = kresource.getSource();
+                        if ( src.trim().startsWith( "classpath:" ) ) {
+                            ioresource = new ClassPathResource( src.substring( src.indexOf( ':' ) + 1 ), this.configuration.getClassLoader() );
+                        } else {
+                            ioresource = new UrlResource( src );
+                        }
+                        addKnowledgeResource( ioresource, kresource.getType(), kresource.getConfiguration() );
+                    }
+                }
             }
+        } catch ( RuntimeException e ) {
+            throw e;
         } catch ( Exception e ) {
             throw new RuntimeException( e );
         }
     }
-
+    
     /**
      * This adds a package from a Descr/AST This will also trigger a compile, if
      * there are any generated classes to compile of course.

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -39,6 +39,7 @@
 import org.drools.util.ConfFileUtils;
 import org.drools.util.StringUtils;
 import org.drools.workflow.core.Node;
+import org.drools.xml.CompositionSemanticModule;
 import org.drools.xml.DefaultSemanticModule;
 import org.drools.xml.Handler;
 import org.drools.xml.ProcessSemanticModule;
@@ -321,6 +322,7 @@
 
         this.semanticModules.addSemanticModule( new ProcessSemanticModule() );
         this.semanticModules.addSemanticModule( new RulesSemanticModule() );
+        this.semanticModules.addSemanticModule( new CompositionSemanticModule() );
 
         // split on each space
         String locations[] = this.chainedProperties.getProperty( "semanticModules",

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLTokenizedMappingFile.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLTokenizedMappingFile.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLTokenizedMappingFile.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,9 +1,11 @@
 package org.drools.lang.dsl;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.Reader;
 import java.util.LinkedList;
 
+import org.antlr.runtime.ANTLRInputStream;
 import org.antlr.runtime.ANTLRReaderStream;
 import org.antlr.runtime.CharStream;
 import org.antlr.runtime.CommonTokenStream;
@@ -30,7 +32,7 @@
         	
 		}
 		return this.errors.isEmpty();
-    }
+    }	
 	
 	private DSLMapping buildFileMapping(Reader dsl) throws IOException, RecognitionException{
 		ANTLRReaderStream reader = new ANTLRReaderStream(dsl);

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CompositionSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CompositionSemanticModule.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CompositionSemanticModule.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package org.drools.xml;
+
+import org.drools.xml.composition.CompositionHandler;
+import org.drools.xml.composition.DecisionTableConfigurationHandler;
+import org.drools.xml.composition.ResourceHandler;
+
+public class CompositionSemanticModule  extends DefaultSemanticModule implements SemanticModule {
+
+    public CompositionSemanticModule() {
+        super( "http://drools.org/drools-4.0/composition" );
+
+        addHandler( "composition",
+                    new CompositionHandler() );
+        
+        addHandler( "resource",
+                    new ResourceHandler() );  
+        
+        addHandler( "decisiontable-conf",
+                    new DecisionTableConfigurationHandler() );             
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlCompositionReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlCompositionReader.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlCompositionReader.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,73 @@
+package org.drools.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+
+import javax.xml.parsers.SAXParser;
+
+import org.drools.compiler.KnowledgeComposition;
+import org.drools.lang.descr.PackageDescr;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+
+public class XmlCompositionReader {
+    private ExtensibleXmlParser parser;
+
+    public XmlCompositionReader(final SemanticModules modules) {
+        this( modules, null );
+    }
+
+    public XmlCompositionReader(final SemanticModules modules, final SAXParser parser) {
+        if ( parser == null ) {
+            this.parser = new ExtensibleXmlParser();
+        } else {
+            this.parser = new ExtensibleXmlParser( parser );
+        }      
+        this.parser.setSemanticModules( modules );
+    }
+    
+    public ExtensibleXmlParser getParser() {
+        return this.parser;
+    }
+
+    /**
+     * Read a <code>RuleSet</code> from a <code>Reader</code>.
+     *
+     * @param reader
+     *            The reader containing the rule-set.
+     *
+     * @return The rule-set.
+     */
+    public KnowledgeComposition read(final Reader reader) throws SAXException,
+                                                 IOException {
+        return (KnowledgeComposition) this.parser.read( reader );
+    }
+
+    /**
+     * Read a <code>RuleSet</code> from an <code>InputStream</code>.
+     *
+     * @param inputStream
+     *            The input-stream containing the rule-set.
+     *
+     * @return The rule-set.
+     */
+    public KnowledgeComposition read(final InputStream inputStream) throws SAXException,
+                                                           IOException {
+        return (KnowledgeComposition) this.parser.read( inputStream );
+    }
+
+    /**
+     * Read a <code>RuleSet</code> from an <code>InputSource</code>.
+     *
+     * @param in
+     *            The rule-set input-source.
+     *
+     * @return The rule-set.
+     */
+    public KnowledgeComposition read(final InputSource in) throws SAXException,
+                                                  IOException {
+        return (KnowledgeComposition) this.parser.read( in );
+    }
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/CompositionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/CompositionHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/CompositionHandler.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,55 @@
+package org.drools.xml.composition;
+
+import java.util.HashSet;
+
+import org.drools.compiler.KnowledgeComposition;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class CompositionHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    
+    public CompositionHandler() {
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet(1);
+            this.validParents.add(null );
+
+            this.validPeers = new HashSet(1);
+            this.validPeers.add( null );
+
+            this.allowNesting = true;
+        }        
+    }
+
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs,
+                        ExtensibleXmlParser parser) throws SAXException {
+        parser.startElementBuilder( localName,
+                                    attrs );
+        KnowledgeComposition composition = new KnowledgeComposition();
+        
+        parser.setData( composition );
+        
+        return composition;
+    }
+    
+    public Object end(String uri,
+                      String localName,
+                      ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+
+        final KnowledgeComposition composition = (KnowledgeComposition) parser.getCurrent();        
+        return composition;
+    }  
+    
+    public Class< ? > generateNodeFor() {
+        return KnowledgeComposition.class;
+    }    
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/DecisionTableConfigurationHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/DecisionTableConfigurationHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/DecisionTableConfigurationHandler.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,74 @@
+package org.drools.xml.composition;
+
+import java.util.HashSet;
+
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.impl.DecisionTableConfigurationImpl;
+import org.drools.compiler.KnowledgeComposition;
+import org.drools.compiler.KnowledgeResource;
+import org.drools.util.StringUtils;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class DecisionTableConfigurationHandler extends BaseAbstractHandler
+    implements
+    Handler {
+
+    public DecisionTableConfigurationHandler() {
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet( 1 );
+            this.validParents.add( KnowledgeResource.class );
+
+            this.validPeers = new HashSet( 1 );
+            this.validPeers.add( null );
+
+            this.allowNesting = false;
+        }
+    }
+
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs,
+                        ExtensibleXmlParser parser) throws SAXException {
+        parser.startElementBuilder( localName,
+                                    attrs );
+
+        String type = attrs.getValue( "input-type" );
+        String worksheetName = attrs.getValue( "worksheet-name" );
+
+        emptyAttributeCheck( localName,
+                             "input-type",
+                             type,
+                             parser );
+
+        DecisionTableConfiguration dtConf = new DecisionTableConfigurationImpl();
+        dtConf.setInputType( DecisionTableInputType.valueOf( type ) );
+        if ( !StringUtils.isEmpty( worksheetName ) ) {
+            dtConf.setWorksheetName( worksheetName );
+        }
+        
+        return dtConf;
+    }
+
+    public Object end(String uri,
+                      String localName,
+                      ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        final KnowledgeResource part = (KnowledgeResource) parser.getParent();
+        ResourceConfiguration dtConf = (ResourceConfiguration) parser.getCurrent();
+        part.setConfiguration( dtConf );
+        
+        return dtConf;
+    }
+
+    public Class< ? > generateNodeFor() {
+        return ResourceConfiguration.class;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/ResourceHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/ResourceHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/composition/ResourceHandler.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,79 @@
+package org.drools.xml.composition;
+
+import java.net.URLClassLoader;
+import java.util.HashSet;
+
+import org.drools.builder.KnowledgeType;
+import org.drools.compiler.KnowledgeComposition;
+import org.drools.compiler.KnowledgeResource;
+import org.drools.io.Resource;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.io.impl.UrlResource;
+import org.drools.util.StringUtils;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ResourceHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    
+    public ResourceHandler() {
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet(1);
+            this.validParents.add( KnowledgeComposition.class );
+
+            this.validPeers = new HashSet(2);
+            this.validPeers.add( null );
+            this.validPeers.add( KnowledgeResource.class );
+
+            this.allowNesting = true;
+        }        
+    }    
+    
+    public Object start(String uri,
+                        String localName,
+                        Attributes attrs,
+                        ExtensibleXmlParser parser) throws SAXException {
+        parser.startElementBuilder( localName,
+                                    attrs );      
+        
+        final KnowledgeComposition composition = (KnowledgeComposition) parser.getParent();   
+        
+        String src = attrs.getValue( "source" );
+        String type = attrs.getValue( "type" );
+        
+        emptyAttributeCheck( localName,
+                             "source",
+                             src,
+                             parser );
+        
+        emptyAttributeCheck( localName,
+                             "type",
+                             type,
+                             parser );        
+        KnowledgeResource part = new KnowledgeResource( src, KnowledgeType.valueOf( type ) );        
+        
+        return part;
+    }
+
+    public Object end(String uri,
+                      String localName,
+                      ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        
+        final KnowledgeComposition composition = (KnowledgeComposition) parser.getParent();
+        final KnowledgeResource part = ( KnowledgeResource ) parser.getCurrent();
+        composition.getResources().add( part );
+        return part;
+    }
+
+    
+    public Class< ? > generateNodeFor() {
+        return KnowledgeResource.class;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeBuilderTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeBuilderTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -11,6 +11,7 @@
 import org.drools.definition.KnowledgePackage;
 import org.drools.definition.process.Process;
 import org.drools.definition.rule.Rule;
+import org.drools.io.ResourceFactory;
 
 public class KnowledgeBuilderTest extends TestCase {
 	
@@ -32,7 +33,7 @@
 		str += "when\n";
 		str += "then\n";
 		str += "end\n";				
-		builder.addResource( new StringReader( str ), KnowledgeType.DRL );
+		builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), KnowledgeType.DRL );
 		
 		str = "package org.test2\n";
 		str += "rule rule3\n";
@@ -43,7 +44,7 @@
 		str += "when\n";
 		str += "then\n";
 		str += "end\n";			
-		builder.addResource( new StringReader( str ), KnowledgeType.DRL );
+		builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), KnowledgeType.DRL );
 		
 		Collection<KnowledgePackage> pkgs = builder.getKnowledgePackages();
 		assertNotNull( pkgs );
@@ -77,7 +78,7 @@
 		str += "  <nodes><start id=\"1\" name=\"Start\" /><end id=\"2\" name=\"End\" /></nodes>\n";
 	    str += "  <connections><connection from=\"1\" to=\"2\"/></connections>";
 	    str += "</process>";
-	    builder.addResource( new StringReader( str ), KnowledgeType.DRF );
+	    builder.add(ResourceFactory.newByteArrayResource( str.getBytes() ), KnowledgeType.DRF );
 	    
 		str = "";
 		str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
@@ -87,7 +88,7 @@
 		str += "  <nodes><start id=\"1\" name=\"Start\" /><end id=\"2\" name=\"End\" /></nodes>\n";
 	    str += "  <connections><connection from=\"1\" to=\"2\"/></connections>";
 	    str += "</process>";	
-	    builder.addResource( new StringReader( str ), KnowledgeType.DRF );
+	    builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), KnowledgeType.DRF );
 	    
 		Collection<KnowledgePackage> pkgs = builder.getKnowledgePackages();
 		assertNotNull( pkgs );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeSessionTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/api/KnowledgeSessionTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -9,6 +9,7 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 
 public class KnowledgeSessionTest extends TestCase {
 	public void testKnowledgeProviderWithRules() {
@@ -24,7 +25,7 @@
 		str += "when\n";
 		str += "then\n";
 		str += "end\n";				
-		builder.addResource( new StringReader( str ), KnowledgeType.DRL );
+		builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), KnowledgeType.DRL );
 		
 		str = "package org.test2\n";
 		str += "rule rule3\n";
@@ -35,7 +36,7 @@
 		str += "when\n";
 		str += "then\n";
 		str += "end\n";			
-		builder.addResource( new StringReader( str ), KnowledgeType.DRL );
+		builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), KnowledgeType.DRL );
 		
 		Collection<KnowledgePackage> pkgs = builder.getKnowledgePackages();
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -22,6 +22,7 @@
 import org.drools.builder.KnowledgeType;
 import org.drools.compiler.PackageBuilder;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.lang.Expander;
 import org.drools.lang.dsl.DefaultExpanderResolver;
 import org.drools.rule.Package;
@@ -53,12 +54,10 @@
     public void testWithExpanderDSL() throws Exception {
         //final PackageBuilder builder = new PackageBuilder();
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        
-        final Reader source = new InputStreamReader( getClass().getResourceAsStream( "rule_with_expander_dsl.dslr" ) );
-        final Reader dsl = new InputStreamReader( getClass().getResourceAsStream( "test_expander.dsl" ) );
-        kbuilder.addResource( dsl,
+
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_expander.dsl", getClass() ),
                               KnowledgeType.DSL );        
-        kbuilder.addResource( source,
+        kbuilder.add( ResourceFactory.newClassPathResource( "rule_with_expander_dsl.dslr", getClass() ) ,
                               KnowledgeType.DSLR );
 
         assertFalse( kbuilder.hasErrors() );
@@ -97,14 +96,12 @@
     }
 
     public void testWithExpanderMore() throws Exception {
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();        
         
-        final Reader source = new InputStreamReader( getClass().getResourceAsStream( "rule_with_expander_dsl_more.dslr" ) );
-        final Reader dsl = new InputStreamReader( getClass().getResourceAsStream( "test_expander.dsl" ) );
-        kbuilder.addResource( dsl,
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_expander.dsl", getClass() ),
                               KnowledgeType.DSL );        
-        kbuilder.addResource( source,
-                              KnowledgeType.DSLR );
+        kbuilder.add( ResourceFactory.newClassPathResource( "rule_with_expander_dsl_more.dslr", getClass() ) ,
+                              KnowledgeType.DSLR );        
 
         assertFalse( kbuilder.hasErrors() );
 
@@ -155,17 +152,15 @@
                       messages.size() );
     }
 
-    public void FIXME_estEmptyDSL() throws Exception {
+    public void FIXME_testEmptyDSL() throws Exception {
         // FIXME eterelli / mic_hat not sure what to do with this?
         final String DSL = "# This is an empty dsl file.";  // gives antlr <EOF> error
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        final Reader drlReader = new InputStreamReader( getClass().getResourceAsStream( "literal_rule.drl" ) );
-        final Reader dslReader = new StringReader( DSL );
 
-        kbuilder.addResource( dslReader,
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_expander.dsl", getClass() ),
                               KnowledgeType.DSL );        
-        kbuilder.addResource( drlReader,
-                              KnowledgeType.DSLR );
+        kbuilder.add( ResourceFactory.newReaderResource( new StringReader( DSL)  ) ,
+                              KnowledgeType.DSLR );  
 
         assertFalse( kbuilder.hasErrors() ); // trying to expand Cheese() pattern
 
@@ -191,13 +186,11 @@
     }
 
     public void testDSLWithIndividualConstraintMappings() throws Exception {
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        final Reader source = new InputStreamReader( getClass().getResourceAsStream( "test_dslWithIndividualConstraints.dslr" ) );
-        final Reader dsl = new InputStreamReader( getClass().getResourceAsStream( "test_dslWithIndividualConstraints.dsl" ) );
-        kbuilder.addResource( dsl,
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();        
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_dslWithIndividualConstraints.dsl", getClass() ),
                               KnowledgeType.DSL );        
-        kbuilder.addResource( source,
-                              KnowledgeType.DSLR );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_dslWithIndividualConstraints.dslr", getClass() ) ,
+                              KnowledgeType.DSLR );         
 
         assertFalse( kbuilder.hasErrors() );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -39,6 +39,7 @@
 import org.drools.event.ActivationCreatedEvent;
 import org.drools.event.AgendaEventListener;
 import org.drools.event.DefaultAgendaEventListener;
+import org.drools.io.ResourceFactory;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.rule.Package;
@@ -515,7 +516,7 @@
 
     public void testAgendaGroups() throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( "test_AgendaGroups.drl" ) ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_AgendaGroups.drl", getClass() ), KnowledgeType.DRL );
 
         assertFalse( kbuilder.hasErrors() );
         

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessWorkItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessWorkItemTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessWorkItemTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -14,6 +14,7 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.runtime.StatefulKnowledgeSession;
@@ -79,7 +80,7 @@
             "  </connections>\n" +
             "\n" +
             "</process>");
-        kbuilder.addResource(source, KnowledgeType.DRF );
+        kbuilder.add( ResourceFactory.newReaderResource( source ), KnowledgeType.DRF );
         
         Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -28,6 +28,7 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.definition.KnowledgePackage;
 import org.drools.impl.ParametersImpl;
+import org.drools.io.ResourceFactory;
 import org.drools.rule.Package;
 import org.drools.runtime.Parameters;
 import org.drools.runtime.StatelessKnowledgeSession;
@@ -394,7 +395,7 @@
     
     private StatelessKnowledgeSession getSession2(String fileName) throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( fileName ) ), KnowledgeType.DRL );
+        kbuilder.add(  ResourceFactory.newClassPathResource( fileName, getClass() ), KnowledgeType.DRL );
         
         if (kbuilder.hasErrors() ) {
             System.out.println( kbuilder.getErrors() );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -35,6 +35,7 @@
 import org.drools.builder.KnowledgeType;
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DroolsParserException;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
@@ -60,33 +61,33 @@
         super.tearDown();
     }
 
-    
-    private KnowledgeBase loadKnowledgeBase(final Reader reader) throws IOException,
-        DroolsParserException,
-    Exception {
+    private KnowledgeBase loadKnowledgeBase(final String fileName) throws IOException,
+                                                                  DroolsParserException,
+                                                                  Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( reader, KnowledgeType.DRL );
-        
+        kbuilder.add( ResourceFactory.newClassPathResource( fileName,
+                                                                    getClass() ),
+                              KnowledgeType.DRL );
+
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-                        
+
         return SerializationHelper.serializeObject( kbase );
     }
 
     public void testEventAssertion() throws Exception {
         // read in the source
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_EntryPoint.drl" ) );
-        KnowledgeBase kbase = loadKnowledgeBase( reader );
+        KnowledgeBase kbase = loadKnowledgeBase( "test_EntryPoint.drl" );
         //final RuleBase ruleBase = loadRuleBase( reader );
 
         KnowledgeSessionConfiguration conf = new SessionConfiguration();
-        ((SessionConfiguration)conf).setClockType( ClockType.PSEUDO_CLOCK );
+        ((SessionConfiguration) conf).setClockType( ClockType.PSEUDO_CLOCK );
         StatefulKnowledgeSession session = kbase.newStatefulSession( conf );
 
         final List results = new ArrayList();
 
         session.setGlobal( "results",
-                      results );
+                           results );
 
         StockTick tick1 = new StockTick( 1,
                                          "DROO",

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -32,6 +32,7 @@
 import org.drools.event.ObjectUpdatedEvent;
 import org.drools.event.WorkingMemoryEventListener;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.io.ResourceFactory;
 import org.drools.rule.Package;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
@@ -60,7 +61,7 @@
     
     public void testLogicalInsertionsDynamicRule() throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( getClass().getResource( "test_LogicalInsertionsDynamicRule.drl" ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_LogicalInsertionsDynamicRule.drl", getClass() ), KnowledgeType.DRL );
         
         Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
         KnowledgeBase kbase = getKnowledgeBase();
@@ -90,7 +91,7 @@
 
         // this rule will make a logical assertion for c1 too
         kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource(  getClass().getResource( "test_LogicalInsertionsDynamicRule2.drl" ), KnowledgeType.DRL );
+        kbuilder.add(  ResourceFactory.newClassPathResource( "test_LogicalInsertionsDynamicRule2.drl", getClass() ), KnowledgeType.DRL );
         Collection<KnowledgePackage> kpkgs2 = kbuilder.getKnowledgePackages();
         kbase.addKnowledgePackages( kpkgs2 );
         kbase    = SerializationHelper.serializeObject( kbase );
@@ -173,7 +174,7 @@
 
     public void testLogicalInsertions() throws Exception {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( getClass().getResource( "test_LogicalInsertions.drl" ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_LogicalInsertions.drl", getClass() ), KnowledgeType.DRL );
         Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
@@ -214,7 +215,7 @@
 
     public void testLogicalInsertionsBacking() throws Exception {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( getClass().getResource( "test_LogicalInsertionsBacking.drl" ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_LogicalInsertionsBacking.drl", getClass() ), KnowledgeType.DRL );
         Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
@@ -268,7 +269,7 @@
 
     public void testLogicalInsertionsSelfreferencing() throws Exception {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( getClass().getResource( "test_LogicalInsertionsSelfreferencing.drl" ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_LogicalInsertionsSelfreferencing.drl", getClass() ), KnowledgeType.DRL );
         Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
@@ -310,7 +311,7 @@
 
     public void testLogicalInsertionsLoop() throws Exception {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( getClass().getResource(  "test_LogicalInsertionsLoop.drl" ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_LogicalInsertionsLoop.drl", getClass() ), KnowledgeType.DRL );
         Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
@@ -790,7 +791,7 @@
         // TODO JBRULES-1804
         
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( "test_LogicalInsertionsModifySameRuleGivesDifferentLogicalInsertion.drl" ) ), KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_LogicalInsertionsModifySameRuleGivesDifferentLogicalInsertion.drl", getClass() ), KnowledgeType.DRL );
         Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
 
         KnowledgeBase kbase = getKnowledgeBase();

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/composition/CompositionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/composition/CompositionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/composition/CompositionTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,83 @@
+package org.drools.xml.composition;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+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.KnowledgeComposition;
+import org.drools.compiler.KnowledgeResource;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.xml.XmlCompositionReader;
+import org.xml.sax.SAXException;
+
+public class CompositionTest extends TestCase {
+    public void testXmlParser() throws SAXException,
+                               IOException {
+
+        PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        XmlCompositionReader xmlReader = new XmlCompositionReader( conf.getSemanticModules() );
+
+        String str = "";
+        str += "<composition ";
+        str += "xmlns='http://drools.org/drools-4.0/composition' ";
+        str += "xmlns:xs='http://www.w3.org/2001/XMLSchema-instance' ";
+        str += "xs:schemaLocation='http://drools.org/drools-4.0/composition drools-composition-4.0.xsd' >";
+        str += "    <resource source='http://www.domain.com/test.drl' type='DRL' />";
+        str += "    <resource source='http://www.domain.com/test.xls' type='DTABLE' >";
+        str += "        <decisiontable-conf worksheet-name='sheet10' input-type='XLS' />";
+        str += "    </resource>";
+        str += "</composition>";
+
+        StringReader reader = new StringReader( str );
+        KnowledgeComposition composition = xmlReader.read( reader );
+
+        assertEquals( 2,
+                      composition.getResources().size() );
+        KnowledgeResource resource = composition.getResources().get( 0 );
+        assertNull( resource.getConfiguration() );
+        assertEquals( "http://www.domain.com/test.drl",
+                      resource.getSource() );
+        assertEquals( KnowledgeType.DRL,
+                      resource.getType() );
+
+        resource = composition.getResources().get( 1 );
+        assertEquals( "http://www.domain.com/test.xls",
+                      resource.getSource() );
+        assertEquals( KnowledgeType.DTABLE,
+                      resource.getType() );
+        DecisionTableConfiguration dtConf = (DecisionTableConfiguration) resource.getConfiguration();
+        assertEquals( DecisionTableInputType.XLS,
+                      dtConf.getInputType() );
+    }
+    
+    public void testIntegregation() {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "composition1Test.xml", getClass()), KnowledgeType.COMPOSITION );
+        assertFalse( kbuilder.hasErrors() );
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        List list = new ArrayList();
+        ksession.setGlobal( "list", list );
+        ksession.fireAllRules();
+        ksession.dispose();
+        
+        assertEquals( 2, list.size() );
+        assertTrue ( list.containsAll( Arrays.asList(  new String[] { "rule1", "rule2" } ) ) );
+        
+    }
+}

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.drl	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,9 @@
+package org.drools.test
+
+global java.util.List list;
+
+rule "rule1"
+when
+then
+    list.add( "rule1" );
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition1Test.xml	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,6 @@
+<composition xmlns='http://drools.org/drools-4.0/composition'
+             xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+             xs:schemaLocation='http://drools.org/drools-4.0/composition drools-composition-4.0.xsd' >
+    <resource source='classpath:org/drools/xml/composition/composition1Test.drl' type='DRL' />
+    <resource source='classpath:org/drools/xml/composition/composition2Test.drl' type='DRL' />
+</composition>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition2Test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition2Test.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/composition/composition2Test.drl	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,9 @@
+package org.drools.test
+
+global java.util.List list;
+
+rule "rule2"
+when
+then
+    list.add( "rule2" );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-core/.classpath	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,16 +1,17 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.1-SNAPSHOT/mvel2-2.0.1-SNAPSHOT.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="src" path="/drools-api"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.4-SNAPSHOT/mvel2-2.0.4-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/.project
===================================================================
--- labs/jbossrules/trunk/drools-core/.project	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-core/.project	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,22 +1,22 @@
-<projectDescription>
-  <name>drools-core</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-api</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-    <buildCommand>
-      <name>org.drools.eclipse.droolsbuilder</name>
-    </buildCommand>
-    <buildCommand>
-      <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-    <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-core</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-api</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.drools.eclipse.droolsbuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+    <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ByteArrayResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ByteArrayResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ByteArrayResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,52 @@
+package org.drools.io.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Arrays;
+
+import org.drools.io.Resource;
+
+public class ByteArrayResource
+    implements
+    Resource {
+
+    private byte[] bytes;
+
+    public ByteArrayResource(byte[] bytes) {
+        if ( bytes == null ) {
+            throw new IllegalArgumentException( "bytes cannot be null" );
+        }
+        this.bytes = bytes;
+    }
+
+    public InputStream getInputStream() throws IOException {
+        return new ByteArrayInputStream( this.bytes );
+    }
+    
+    public Reader getReader() throws IOException {
+        return new InputStreamReader( getInputStream() );
+    }    
+    
+    public boolean hasURL() {
+        return false;
+    }
+
+    public URL getURL() throws IOException {
+        throw new FileNotFoundException( "byte[] cannot be resolved to URL" );
+    }
+
+    public boolean equals(Object object) {
+        return (object == this || (object instanceof ByteArrayResource && Arrays.equals( ((ByteArrayResource) object).bytes,
+                                                                                         this.bytes )));
+    }
+
+    public int hashCode() {
+        return (byte[].class.hashCode() * 29 * this.bytes.length);
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ClassPathResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ClassPathResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ClassPathResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,137 @@
+package org.drools.io.impl;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.io.Resource;
+
+/**
+ * Borrowed gratuitously from Spring under ASL2.0.
+ *
+ */
+
+public class ClassPathResource
+    implements
+    Resource {
+    private String      path;
+    private ClassLoader classLoader;
+    private Class       clazz;
+
+    public ClassPathResource(String path) {
+        this( path,
+              null,
+              null );
+    }
+
+    public ClassPathResource(String path,
+                             Class clazz) {
+        this( path,
+              clazz,
+              null );
+    }
+
+    public ClassPathResource(String path,
+                             ClassLoader classLoader) {
+        this( path,
+              null,
+              classLoader );
+    }
+
+    public ClassPathResource(String path,
+                             Class clazz,
+                             ClassLoader classLoader) {
+        if ( path == null ) {
+            throw new IllegalArgumentException( "path cannot be null" );
+        }
+        this.path = path;
+        this.clazz = clazz;
+        this.classLoader = classLoader;
+    }
+
+    /**
+     * This implementation opens an InputStream for the given class path resource.
+     * @see java.lang.ClassLoader#getResourceAsStream(String)
+     * @see java.lang.Class#getResourceAsStream(String)
+     */
+    public InputStream getInputStream() throws IOException {
+        InputStream is = null;
+        if ( this.clazz != null ) {
+            is = this.clazz.getResourceAsStream( this.path );
+        } else if ( this.classLoader != null ) {
+            is = this.classLoader.getResourceAsStream( this.path );
+        }
+
+        if ( is == null ) {
+            is = Thread.currentThread().getContextClassLoader().getResourceAsStream( this.path );
+        }
+
+        if ( is == null ) {
+            is = Class.class.getClassLoader().getSystemClassLoader().getResourceAsStream( this.path );
+        }
+
+        if ( is == null ) {
+            throw new FileNotFoundException( "'" + this.path + "' cannot be opened because it does not exist" );
+        }
+        return is;
+    }
+
+    /**
+     * This implementation returns a URL for the underlying class path resource.
+     * @see java.lang.ClassLoader#getResource(String)
+     * @see java.lang.Class#getResource(String)
+     */
+    public URL getURL() throws IOException {
+        URL url = null;
+        if ( this.clazz != null ) {
+            url = this.clazz.getResource( this.path );
+        } else if ( this.classLoader != null ) {
+            url = this.classLoader.getResource( this.path );
+        }
+
+        if ( url == null ) {
+            url = Thread.currentThread().getContextClassLoader().getResource( this.path );
+        }
+
+        if ( url == null ) {
+            url = Class.class.getClassLoader().getSystemClassLoader().getResource( this.path );
+        }
+
+        if ( url == null ) {
+            throw new FileNotFoundException( "'" + this.path + "' cannot be opened because it does not exist" );
+        }
+        return url;
+    }
+
+    public boolean hasURL() {
+        return true;
+    }
+
+    public Reader getReader() throws IOException {
+        return new InputStreamReader( getInputStream() );
+    }
+
+    public boolean equals(Object object) {
+        if ( object == null || !(object instanceof ClassPathResource) ) {
+            return false;
+        }
+
+        ClassPathResource other = (ClassPathResource) object;
+        if ( !this.path.equals( other.path ) ) {
+            return false;
+        }
+
+        return this.clazz == other.clazz && this.classLoader == other.classLoader;
+    }
+
+    public int hashCode() {
+        return this.path.hashCode();
+    }
+    
+    public String toString() {
+        return "[ClassPathResource path='" + this.path + "']";
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/EncodedResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/EncodedResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/EncodedResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,85 @@
+package org.drools.io.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.io.Resource;
+
+public class EncodedResource implements Resource {
+    private final Resource resource;
+
+    private final String encoding;
+
+
+    /**
+     * Create a new EncodedResource for the given Resource,
+     * not specifying a specific encoding.
+     * @param resource the Resource to hold
+     */
+    public EncodedResource(Resource resource) {
+        this(resource, null);
+    }
+
+    /**
+     * Create a new EncodedResource for the given Resource,
+     * using the specified encoding.
+     * @param resource the Resource to hold
+     * @param encoding the encoding to use for reading from the resource
+     */
+    public EncodedResource(Resource resource, String encoding) {
+        if ( resource == null ) {
+            throw new IllegalArgumentException( "resource cannot be null" );
+        }
+        this.resource = resource;
+        this.encoding = encoding;
+    }
+
+    public URL getURL() throws IOException {
+        return this.resource.getURL();
+    }
+
+    public boolean hasURL() {
+        return this.resource.hasURL();
+    }    
+    
+    /**
+     * Return the Resource held.
+     */
+    public final Resource getResource() {
+        return this.resource;
+    }
+
+    /**
+     * Return the encoding to use for reading from the resource,
+     * or <code>null</code> if none specified.
+     */
+    public final String getEncoding() {
+        return this.encoding;
+    }
+    
+    /**
+     * Open a <code>java.io.Reader</code> for the specified resource,
+     * using the specified encoding (if any).
+     * @throws IOException if opening the Reader failed
+     */
+    public Reader getReader() throws IOException {
+        if (this.encoding != null) {
+            return new InputStreamReader(this.resource.getInputStream(), this.encoding);
+        }
+        else {
+            return new InputStreamReader(this.resource.getInputStream());
+        }
+    }    
+    
+    public InputStream getInputStream() throws IOException {
+        return this.resource.getInputStream();
+    }    
+    
+    public String toString() {
+        return "[EncodedResource resource=" + this.resource + " encoding='" + this.encoding + "']";
+    }    
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/FileSystemResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/FileSystemResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/FileSystemResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,83 @@
+package org.drools.io.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.io.Resource;
+import org.drools.util.StringUtils;
+
+/**
+ * Borrowed gratuitously from Spring under ASL2.0.
+ *
+ */
+public class FileSystemResource implements Resource {
+    private File file;
+    
+    /**
+     * Create a new FileSystemResource from a File handle.
+     * <p>Note: When building relative resources via {@link #createRelative},
+     * the relative path will apply <i>at the same directory level</i>:
+     * e.g. new File("C:/dir1"), relative path "dir2" -> "C:/dir2"!
+     * If you prefer to have relative paths built underneath the given root
+     * directory, use the {@link #FileSystemResource(String) constructor with a file path}
+     * to append a trailing slash to the root path: "C:/dir1/", which
+     * indicates this directory as root for all relative paths.
+     * @param file a File handle
+     */
+    public FileSystemResource(File file) {
+        if ( file == null ) {
+            throw new IllegalArgumentException( "File must not be null" );
+        }
+        this.file = new File( StringUtils.cleanPath(file.getPath()) );
+    }
+
+    /**
+     * Create a new FileSystemResource from a file path.
+     * <p>Note: When building relative resources via {@link #createRelative},
+     * it makes a difference whether the specified resource base path here
+     * ends with a slash or not. In the case of "C:/dir1/", relative paths
+     * will be built underneath that root: e.g. relative path "dir2" ->
+     * "C:/dir1/dir2". In the case of "C:/dir1", relative paths will apply
+     * at the same directory level: relative path "dir2" -> "C:/dir2".
+     * @param path a file path
+     */
+    public FileSystemResource(String path) {
+        if ( path == null ) {
+            throw new IllegalArgumentException( "Path must not be null" );
+        }
+        this.file = new File(StringUtils.cleanPath(path));
+    }
+    
+    /**
+     * This implementation opens a FileInputStream for the underlying file.
+     * @see java.io.FileInputStream
+     */
+    public InputStream getInputStream() throws IOException {
+        return new FileInputStream(this.file);
+    }
+    
+    public Reader getReader() throws IOException {
+        return new InputStreamReader( getInputStream() );
+    }    
+
+    /**
+     * This implementation returns a URL for the underlying file.
+     * @see java.io.File#toURI()
+     */
+    public URL getURL() throws IOException {
+        return this.file.toURI().toURL();
+    }
+    
+    public boolean hasURL() {
+        return true;
+    }    
+    
+    public String toString() {
+        return "[FileResource file='" + this.file.toString() + "']";
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/InputStreamResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/InputStreamResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/InputStreamResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,38 @@
+package org.drools.io.impl;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.io.Resource;
+
+public class InputStreamResource implements Resource {
+    private InputStream stream;
+    
+    public InputStreamResource(InputStream stream) {
+        if ( stream == null ) {
+            throw new IllegalArgumentException( "stream cannot be null" );
+        }
+        this.stream = stream;
+    }
+
+    public InputStream getInputStream() throws IOException {
+        return stream;
+    }
+    
+    public Reader getReader() throws IOException {
+        return new InputStreamReader( getInputStream() );
+    }    
+
+    public URL getURL() throws IOException {
+        throw new FileNotFoundException( "InputStream cannot be resolved to URL" );
+    }
+    
+    public boolean hasURL() {
+        return false;
+    }        
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderInputStream.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderInputStream.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderInputStream.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,194 @@
+package org.drools.io.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.drools.util.StringUtils;
+
+public 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) {
+        if ( reader == null ) {
+            throw new IllegalArgumentException("reader must not be null");
+        }
+        in = reader;
+        if ( reader instanceof InputStreamReader ) {
+            // set the encoding if it's an InputStreamReader and that reader defines an encoding.
+            if ( !StringUtils.isEmpty( ((InputStreamReader) reader).getEncoding() ) ) {
+                this.encoding = ((InputStreamReader) reader).getEncoding();
+            }
+        }
+    }
+
+    /**
+     * 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) {
+                return -1;
+            } else {
+                result = buf[0];
+            }
+        }
+        return result & 0xFF;
+    }
+
+    /**
+     * 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");
+        }
+        if (len == 0) {
+            return 0;
+        }
+        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 Reader.
+     *
+     * @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;
+        }
+        return 0;
+    }
+
+    /**
+     * @return false - mark is not supported
+     */
+    public boolean markSupported () {
+        return false;   // would be imprecise
+    }
+
+    /**
+     * Resets the Reader.
+     *
+     * @exception IOException if the Reader fails to be reset
+     */
+    public synchronized void reset() throws IOException {
+        if (in == null) {
+            throw new IOException("Stream Closed");
+        }
+        slack = null;
+        in.reset();
+    }
+
+    /**
+     * Closes the Reader.
+     *
+     * @exception IOException if the original Reader fails to be closed
+     */
+    public synchronized void close() throws IOException {
+        if (in != null) {
+            in.close();
+            slack = null;
+            in = null;
+        }
+    }
+}
+

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ReaderResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,56 @@
+package org.drools.io.impl;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.io.Resource;
+
+public class ReaderResource implements Resource {
+    private Reader reader;
+    private String encoding;
+    
+    public ReaderResource(Reader reader) {
+        this(reader, null);
+    }
+    
+    public ReaderResource(Reader reader, String encoding) {
+        if ( reader == null ) {
+            throw new IllegalArgumentException( "reader cannot be null" );
+        }
+        if ( encoding == null && reader instanceof InputStreamReader ) {
+            this.encoding = ((InputStreamReader)reader).getEncoding();
+        }
+        this.reader = reader;
+
+        this.encoding = encoding;
+    }
+    
+    public URL getURL() throws IOException {
+        throw new FileNotFoundException( "byte[] cannot be resolved to URL");
+    }
+
+    public InputStream getInputStream() throws IOException {
+        if ( this.encoding != null ) {
+            return new ReaderInputStream( this.reader, this.encoding);         
+        } else {
+            return new ReaderInputStream( this.reader);
+        }
+    } 
+    
+    public Reader getReader() {
+        return this.reader;
+    }
+    
+    public String getEncoding() {
+        return this.encoding;
+    }
+    
+    public boolean hasURL() {
+        return false;
+    }        
+    
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceProviderImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceProviderImpl.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,62 @@
+package org.drools.io.impl;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URL;
+
+import org.drools.io.Resource;
+import org.drools.io.ResourceProvider;
+
+public class ResourceProviderImpl
+    implements
+    ResourceProvider {
+
+    public Resource newByteArrayResource(byte[] bytes) {
+        return new ByteArrayResource( bytes );
+    }
+
+    public Resource newClassPathResource(String path) {
+        return new ClassPathResource( path );
+    }
+
+    public Resource newClassPathResource(String path,
+                                         ClassLoader classLoader) {
+        return new ClassPathResource(path, classLoader);
+    }
+
+    public Resource newClassPathResource(String path,
+                                         Class clazz) {
+        return new ClassPathResource(path, clazz);
+    }
+
+    public Resource newFileSystemResource(File file) {
+        return new FileSystemResource( file );
+    }
+
+    public Resource newFileSystemResource(String fileName) {
+        return new FileSystemResource( fileName );
+    }
+
+    public Resource newInputStreamResource(InputStream stream) {
+        return new InputStreamResource( stream );
+    }
+
+    public Resource newReaderResource(Reader reader) {
+        return new ReaderResource( reader );
+    }
+
+    public Resource newReaderResource(Reader reader,
+                                      String encoding) {
+        return new ReaderResource( reader, encoding);
+    }
+
+    public Resource newUrlResource(URL url) {
+        return new UrlResource(url);
+    }
+
+    public Resource newUrlResource(String path) {
+        return new UrlResource( path );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/UrlResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/UrlResource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/UrlResource.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,98 @@
+package org.drools.io.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.drools.io.Resource;
+import org.drools.util.StringUtils;
+
+/**
+ * Borrowed gratuitously from Spring under ASL2.0.
+ *
+ */
+public class UrlResource implements Resource {
+    private URL url;
+
+    public UrlResource(URL url) {
+        this.url = getCleanedUrl( url,
+                                  url.toString() );
+    }
+
+    public UrlResource(String path) {
+        try {
+            this.url = getCleanedUrl( new URL( path ),
+                                      path );
+        } catch ( MalformedURLException e ) {
+            throw new IllegalArgumentException( "'" + path + "' path is malformed", e);
+        }
+    }
+    
+    /**
+     * This implementation opens an InputStream for the given URL.
+     * It sets the "UseCaches" flag to <code>false</code>,
+     * mainly to avoid jar file locking on Windows.
+     * @see java.net.URL#openConnection()
+     * @see java.net.URLConnection#setUseCaches(boolean)
+     * @see java.net.URLConnection#getInputStream()
+     */
+    public InputStream getInputStream() throws IOException {
+        URLConnection con = this.url.openConnection();
+        con.setUseCaches(false);
+        return con.getInputStream();
+    }
+    
+    public Reader getReader() throws IOException {
+        return new InputStreamReader( getInputStream() );
+    }
+    
+
+    /**
+     * Determine a cleaned URL for the given original URL.
+     * @param originalUrl the original URL
+     * @param originalPath the original URL path
+     * @return the cleaned URL
+     * @see org.springframework.util.StringUtils#cleanPath
+     */
+    private URL getCleanedUrl(URL originalUrl,
+                              String originalPath) {
+        try {
+            return new URL( StringUtils.cleanPath( originalPath ) );
+        } catch ( MalformedURLException ex ) {
+            // Cleaned URL path cannot be converted to URL
+            // -> take original URL.
+            return originalUrl;
+        }
+    }
+    
+    public URL getURL() throws IOException {
+        return this.url;
+    }
+    
+    public boolean hasURL() {
+        return true;
+    }        
+
+    /**
+     * This implementation compares the underlying URL references.
+     */
+    public boolean equals(Object obj) {
+        return (obj == this || (obj instanceof UrlResource && this.url.equals( ((UrlResource) obj).url )));
+    }
+
+    /**
+     * This implementation returns the hash code of the underlying URL reference.
+     */
+    public int hashCode() {
+        return this.url.hashCode();
+    }
+    
+    public String toString() {
+        return "[UrlResource path='" + this.url.toExternalForm() + "']";
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/StringUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/StringUtils.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/StringUtils.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -22,10 +22,13 @@
 import java.io.StringWriter;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Ripped form commons StringUtil:
+ * Ripped form commons StringUtil, unless specified:
  * 
  * <p>Operations on {@link java.lang.String} that are
  * <code>null</code> safe.</p>
@@ -196,8 +199,18 @@
      * @param str  the String to check, may be null
      * @return <code>true</code> if the String is empty or null
      */
-    public static boolean isEmpty(final String str) {
-        return str == null || str.length() == 0 || str.trim().length() == 0;
+    public static boolean isEmpty(final CharSequence str) {
+        if ( str == null || str.length() == 0 ) {
+            return true;
+        }
+        
+        for ( int i = 0, length = str.length(); i < length; i++ ){
+            if ( str.charAt( i ) != ' ' )  {
+                return false;
+            }
+        }
+        
+        return true;
     }
 
     // Padding
@@ -896,5 +909,273 @@
         }
     }
     
+    /**
+     * Apply the given relative path to the given path,
+     * assuming standard Java folder separation (i.e. "/" separators);
+     * @param path the path to start from (usually a full file path)
+     * @param relativePath the relative path to apply
+     * (relative to the full file path above)
+     * @return the full file path that results from applying the relative path
+     */
+    public static String applyRelativePath(String path, String relativePath) {
+        int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
+        if (separatorIndex != -1) {
+            String newPath = path.substring(0, separatorIndex);
+            if (!relativePath.startsWith(FOLDER_SEPARATOR)) {
+                newPath += FOLDER_SEPARATOR;
+            }
+            return newPath + relativePath;
+        }
+        else {
+            return relativePath;
+        }
+    }
+
     
+    private static final String FOLDER_SEPARATOR = "/";
+
+    private static final String WINDOWS_FOLDER_SEPARATOR = "\\";
+
+    private static final String TOP_PATH = "..";
+
+    private static final String CURRENT_PATH = ".";
+
+    private static final char EXTENSION_SEPARATOR = '.';
+
+    
+    /**
+     * Normalize the path by suppressing sequences like "path/.." and
+     * inner simple dots.
+     * <p>The result is convenient for path comparison. For other uses,
+     * notice that Windows separators ("\") are replaced by simple slashes.
+     * @param path the original path
+     * @return the normalized path
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String cleanPath(String path) {
+        if (path == null) {
+            return null;
+        }
+        String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR, FOLDER_SEPARATOR);
+
+        // Strip prefix from path to analyze, to not treat it as part of the
+        // first path element. This is necessary to correctly parse paths like
+        // "file:core/../core/io/Resource.class", where the ".." should just
+        // strip the first "core" directory while keeping the "file:" prefix.
+        int prefixIndex = pathToUse.indexOf(":");
+        String prefix = "";
+        if (prefixIndex != -1) {
+            prefix = pathToUse.substring(0, prefixIndex + 1);
+            pathToUse = pathToUse.substring(prefixIndex + 1);
+        }
+        if (pathToUse.startsWith(FOLDER_SEPARATOR)) {
+            prefix = prefix + FOLDER_SEPARATOR;
+            pathToUse = pathToUse.substring(1);
+        }
+
+        String[] pathArray = delimitedListToStringArray(pathToUse, FOLDER_SEPARATOR);
+        List pathElements = new LinkedList();
+        int tops = 0;
+
+        for (int i = pathArray.length - 1; i >= 0; i--) {
+            String element = pathArray[i];
+            if (CURRENT_PATH.equals(element)) {
+                // Points to current directory - drop it.
+            }
+            else if (TOP_PATH.equals(element)) {
+                // Registering top path found.
+                tops++;
+            }
+            else {
+                if (tops > 0) {
+                    // Merging path element with element corresponding to top path.
+                    tops--;
+                }
+                else {
+                    // Normal path element found.
+                    pathElements.add(0, element);
+                }
+            }
+        }
+
+        // Remaining top paths need to be retained.
+        for (int i = 0; i < tops; i++) {
+            pathElements.add(0, TOP_PATH);
+        }
+
+        return prefix + collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
+    }
+
+    /**
+     * Convenience method to return a Collection as a delimited (e.g. CSV)
+     * String. E.g. useful for <code>toString()</code> implementations.
+     * @param coll the Collection to display
+     * @param delim the delimiter to use (probably a ",")
+     * @param prefix the String to start each element with
+     * @param suffix the String to end each element with
+     * @return the delimited String
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String collectionToDelimitedString(Collection coll, String delim, String prefix, String suffix) {
+        if (coll == null || coll.isEmpty()) {
+            return "";
+        }
+        StringBuffer sb = new StringBuffer();
+        Iterator it = coll.iterator();
+        while (it.hasNext()) {
+            sb.append(prefix).append(it.next()).append(suffix);
+            if (it.hasNext()) {
+                sb.append(delim);
+            }
+        }
+        return sb.toString();
+    }
+    
+    /**
+     * Convenience method to return a Collection as a delimited (e.g. CSV)
+     * String. E.g. useful for <code>toString()</code> implementations.
+     * @param coll the Collection to display
+     * @param delim the delimiter to use (probably a ",")
+     * @return the delimited String
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String collectionToDelimitedString(Collection coll, String delim) {
+        return collectionToDelimitedString(coll, delim, "", "");
+    }
+    
+    
+    /**
+     * Replace all occurences of a substring within a string with
+     * another string.
+     * @param inString String to examine
+     * @param oldPattern String to replace
+     * @param newPattern String to insert
+     * @return a String with the replacements
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String replace(String inString, String oldPattern, String newPattern) {
+        if (isEmpty(inString) || isEmpty(oldPattern) || newPattern == null) {
+            return inString;
+        }
+        StringBuffer sbuf = new StringBuffer();
+        // output StringBuffer we'll build up
+        int pos = 0; // our position in the old string
+        int index = inString.indexOf(oldPattern);
+        // the index of an occurrence we've found, or -1
+        int patLen = oldPattern.length();
+        while (index >= 0) {
+            sbuf.append(inString.substring(pos, index));
+            sbuf.append(newPattern);
+            pos = index + patLen;
+            index = inString.indexOf(oldPattern, pos);
+        }
+        sbuf.append(inString.substring(pos));
+        // remember to append any characters to the right of a match
+        return sbuf.toString();
+    }
+    
+    
+    
+    /**
+     * Take a String which is a delimited list and convert it to a String array.
+     * <p>A single delimiter can consists of more than one character: It will still
+     * be considered as single delimiter string, rather than as bunch of potential
+     * delimiter characters - in contrast to <code>tokenizeToStringArray</code>.
+     * @param str the input String
+     * @param delimiter the delimiter between elements (this is a single delimiter,
+     * rather than a bunch individual delimiter characters)
+     * @return an array of the tokens in the list
+     * @see #tokenizeToStringArray
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String[] delimitedListToStringArray(String str, String delimiter) {
+        return delimitedListToStringArray(str, delimiter, null);
+    }
+
+    /**
+     * Take a String which is a delimited list and convert it to a String array.
+     * <p>A single delimiter can consists of more than one character: It will still
+     * be considered as single delimiter string, rather than as bunch of potential
+     * delimiter characters - in contrast to <code>tokenizeToStringArray</code>.
+     * @param str the input String
+     * @param delimiter the delimiter between elements (this is a single delimiter,
+     * rather than a bunch individual delimiter characters)
+     * @param charsToDelete a set of characters to delete. Useful for deleting unwanted
+     * line breaks: e.g. "\r\n\f" will delete all new lines and line feeds in a String.
+     * @return an array of the tokens in the list
+     * @see #tokenizeToStringArray
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) {
+        if (str == null) {
+            return new String[0];
+        }
+        if (delimiter == null) {
+            return new String[] {str};
+        }
+        List result = new ArrayList();
+        if ("".equals(delimiter)) {
+            for (int i = 0; i < str.length(); i++) {
+                result.add(deleteAny(str.substring(i, i + 1), charsToDelete));
+            }
+        }
+        else {
+            int pos = 0;
+            int delPos = 0;
+            while ((delPos = str.indexOf(delimiter, pos)) != -1) {
+                result.add(deleteAny(str.substring(pos, delPos), charsToDelete));
+                pos = delPos + delimiter.length();
+            }
+            if (str.length() > 0 && pos <= str.length()) {
+                // Add rest of String, but not in case of empty input.
+                result.add(deleteAny(str.substring(pos), charsToDelete));
+            }
+        }
+        return toStringArray(result);
+    }
+    
+    /**
+     * Copy the given Collection into a String array.
+     * The Collection must contain String elements only.
+     * @param collection the Collection to copy
+     * @return the String array (<code>null</code> if the passed-in
+     * Collection was <code>null</code>)
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String[] toStringArray(Collection collection) {
+        if (collection == null) {
+            return null;
+        }
+        return (String[]) collection.toArray(new String[collection.size()]);
+    }    
+    
+    /**
+     * Delete any character in a given String.
+     * @param inString the original String
+     * @param charsToDelete a set of characters to delete.
+     * E.g. "az\n" will delete 'a's, 'z's and new lines.
+     * @return the resulting String
+     * 
+     * Borrowed from Spring, under the ASL2.0 license.
+     */
+    public static String deleteAny(String inString, String charsToDelete) {
+        if (isEmpty(inString) || isEmpty(charsToDelete)) {
+            return inString;
+        }
+        StringBuffer out = new StringBuffer();
+        for (int i = 0; i < inString.length(); i++) {
+            char c = inString.charAt(i);
+            if (charsToDelete.indexOf(c) == -1) {
+                out.append(c);
+            }
+        }
+        return out.toString();
+    } 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-decisiontables/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/.classpath	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-decisiontables/.classpath	2008-11-28 06:34:07 UTC (rev 24131)
@@ -5,17 +5,18 @@
   <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="src" path="/drools-api"/>
   <classpathentry kind="src" path="/drools-compiler"/>
   <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.1-SNAPSHOT/mvel2-2.0.1-SNAPSHOT.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
   <classpathentry kind="src" path="/drools-templates"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.4-SNAPSHOT/mvel2-2.0.4-SNAPSHOT.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-decisiontables/.project
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/.project	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-decisiontables/.project	2008-11-28 06:34:07 UTC (rev 24131)
@@ -2,9 +2,9 @@
   <name>drools-decisiontables</name>
   <comment>A rule production system</comment>
   <projects>
+    <project>drools-api</project>
     <project>drools-compiler</project>
     <project>drools-core</project>
-    <project>drools-api</project>
     <project>drools-templates</project>
   </projects>
   <buildSpec>

Modified: 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	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -19,21 +19,7 @@
         return compileStream( is,
                               configuration );
     }
-
-    public String loadFromReader(Reader reader,
-                                 DecisionTableConfiguration configuration) {
-        InputStream is;
-        if ( reader instanceof InputStreamReader ) {
-            is = new ReaderInputStream( reader,
-                                        ((InputStreamReader) reader).getEncoding() );
-        } else {
-            is = new ReaderInputStream( reader );
-        }
-
-        return compileStream( is,
-                              configuration );
-    }
-
+    
     private String compileStream(InputStream is,
                                  DecisionTableConfiguration configuration) {
         SpreadsheetCompiler compiler = new SpreadsheetCompiler();

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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/acme/insurance/launcher/PricingRuleLauncher.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -21,6 +21,7 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.decisiontable.InputType;
 import org.drools.decisiontable.SpreadsheetCompiler;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 /**
@@ -39,7 +40,7 @@
         DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
         dtconf.setInputType( DecisionTableInputType.XLS );
 
-        kbuilder.addResource( getClass().getResource( "/data/ExamplePolicyPricing.xls" ),
+        kbuilder.add( ResourceFactory.newClassPathResource( "/data/ExamplePolicyPricing.xls", getClass() ),
                               KnowledgeType.DTABLE,
                               dtconf );
 

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/CompositionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/CompositionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/CompositionTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,58 @@
+package org.drools.decisiontable;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+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.KnowledgeComposition;
+import org.drools.compiler.KnowledgeResource;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.xml.XmlCompositionReader;
+import org.xml.sax.SAXException;
+
+public class CompositionTest extends TestCase {
+    
+    public void testIntegregation() {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "composition1Test.xml", getClass()), KnowledgeType.COMPOSITION );
+        assertFalse( kbuilder.hasErrors() );
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        List list = new ArrayList();
+        ksession.setGlobal( "list", list );
+        
+        ksession.insert( new Cheese( "cheddar",
+                                    42 ) );
+        ksession.insert( new Person( "michael",
+                                    "stilton",
+                                    25 ) );
+        
+        ksession.fireAllRules();
+        ksession.dispose();
+        
+        assertEquals( 3, list.size() );
+  
+        assertEquals( "Young man cheddar",
+                      list.get( 0 ) );
+        
+        assertEquals( "rule1",
+                      list.get( 1 ) );
+        assertEquals( "rule2",
+                      list.get( 2 ) );
+    }
+}

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-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetIntegrationTest.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -30,6 +30,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 public class SpreadsheetIntegrationTest extends TestCase {
@@ -40,7 +41,7 @@
         DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
         dtconf.setInputType( DecisionTableInputType.XLS );
 
-        kbuilder.addResource( getClass().getResource( "/data/IntegrationExampleTest.xls" ),
+        kbuilder.add( ResourceFactory.newClassPathResource( "/data/IntegrationExampleTest.xls", getClass() ),
                               KnowledgeType.DTABLE,
                               dtconf );
 
@@ -76,7 +77,7 @@
         dtconf.setInputType( DecisionTableInputType.XLS );
         dtconf.setWorksheetName( "Tables_2" );
 
-        kbuilder.addResource( getClass().getResource( "/data/IntegrationExampleTest.xls" ),
+        kbuilder.add( ResourceFactory.newClassPathResource( "/data/IntegrationExampleTest.xls", getClass() ),
                               KnowledgeType.DTABLE,
                               dtconf );
 

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.drl	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,10 @@
+package org.drools.test
+
+global java.util.List list;
+
+rule "rule1"
+	salience 10
+when
+then
+    list.add( "rule1" );
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.xml
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition1Test.xml	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,9 @@
+<composition xmlns='http://drools.org/drools-4.0/composition'
+             xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+             xs:schemaLocation='http://drools.org/drools-4.0/composition drools-composition-4.0.xsd' >
+    <resource source='classpath:org/drools/decisiontable/composition1Test.drl' type='DRL' />
+    <resource source='classpath:data/IntegrationExampleTest.xls' type="DTABLE">
+        <decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
+    </resource>
+    <resource source='classpath:org/drools/decisiontable/composition2Test.drl' type='DRL' />
+</composition>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition2Test.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition2Test.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/org/drools/decisiontable/composition2Test.drl	2008-11-28 06:34:07 UTC (rev 24131)
@@ -0,0 +1,10 @@
+package org.drools.test
+
+global java.util.List list;
+
+rule "rule2"
+	salience 5
+when
+then
+    list.add( "rule2" );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/.classpath	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,13 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
-	<classpathentry excluding="**/*.java" kind="src" path="src/main/rules"/>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
-	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="lib/foxtrot-2.0.jar"/>
-	<classpathentry kind="lib" path="lib/jgoodies-forms-1.0.4.jar"/>
-	<classpathentry kind="con" path="DROOLS/Drools"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/rules"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="lib" path="lib/foxtrot-2.0.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-forms-1.0.4.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-api"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-decisiontables"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-templates"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -20,169 +20,167 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
-
 public class MannersBenchmark {
-	/** Number of guests at the dinner (default: 16). */
-	private int numGuests = 16;
+    /** Number of guests at the dinner (default: 16). */
+    private int numGuests  = 16;
 
-	/** Number of seats at the table (default: 16). */
-	private int numSeats = 16;
+    /** Number of seats at the table (default: 16). */
+    private int numSeats   = 16;
 
-	/** Minimum number of hobbies each guest should have (default: 2). */
-	private int minHobbies = 2;
+    /** Minimum number of hobbies each guest should have (default: 2). */
+    private int minHobbies = 2;
 
-	/** Maximun number of hobbies each guest should have (default: 3). */
-	private int maxHobbies = 3;
+    /** Maximun number of hobbies each guest should have (default: 3). */
+    private int maxHobbies = 3;
 
-	public static void main(final String[] args) throws Exception {
-	    KnowledgeBuilderConfiguration kbuilderConfig= KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
-	    
-	    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbuilderConfig);
-	    kbuilder.addResource( new InputStreamReader(MannersBenchmark.class
-				.getResourceAsStream("manners.drl")), KnowledgeType.DRL);
-	    Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
-		
+    public static void main(final String[] args) throws Exception {
+        KnowledgeBuilderConfiguration kbuilderConfig = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( kbuilderConfig );
+        kbuilder.add( ResourceFactory.newClassPathResource( "manners.drl",
+                                                                    MannersBenchmark.class ),
+                              KnowledgeType.DRL );
+        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
         // add the package to a rulebase
-	    final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-	    kbase.addKnowledgePackages( pkgs );
+        final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( pkgs );
 
-	    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 
-		String filename;
-		if (args.length != 0) {
-			String arg = args[0];
-			filename = arg;
-		} else {
-			filename = "manners128.dat";
-		}
+        String filename;
+        if ( args.length != 0 ) {
+            String arg = args[0];
+            filename = arg;
+        } else {
+            filename = "manners128.dat";
+        }
 
-		InputStream is = MannersBenchmark.class.getResourceAsStream(filename);
-		List list = getInputObjects(is);
-		for (Iterator it = list.iterator(); it.hasNext();) {
-			Object object = it.next();
-			ksession.insert(object);
-		}
+        InputStream is = MannersBenchmark.class.getResourceAsStream( filename );
+        List list = getInputObjects( is );
+        for ( Iterator it = list.iterator(); it.hasNext(); ) {
+            Object object = it.next();
+            ksession.insert( object );
+        }
 
-		ksession.insert(new Count(1));
+        ksession.insert( new Count( 1 ) );
 
-		long start = System.currentTimeMillis();
-		ksession.fireAllRules();
-		System.err.println(System.currentTimeMillis() - start);
+        long start = System.currentTimeMillis();
+        ksession.fireAllRules();
+        System.err.println( System.currentTimeMillis() - start );
         ksession.dispose();
-	}
+    }
 
-	/**
-	 * Convert the facts from the <code>InputStream</code> to a list of
-	 * objects.
-	 */
-	protected static List getInputObjects(InputStream inputStream)
-			throws IOException {
-		List list = new ArrayList();
+    /**
+     * Convert the facts from the <code>InputStream</code> to a list of
+     * objects.
+     */
+    protected static List getInputObjects(InputStream inputStream) throws IOException {
+        List list = new ArrayList();
 
-		BufferedReader br = new BufferedReader(new InputStreamReader(
-				inputStream));
+        BufferedReader br = new BufferedReader( new InputStreamReader( inputStream ) );
 
-		String line;
-		while ((line = br.readLine()) != null) {
-			if (line.trim().length() == 0 || line.trim().startsWith(";")) {
-				continue;
-			}
-			StringTokenizer st = new StringTokenizer(line, "() ");
-			String type = st.nextToken();
+        String line;
+        while ( (line = br.readLine()) != null ) {
+            if ( line.trim().length() == 0 || line.trim().startsWith( ";" ) ) {
+                continue;
+            }
+            StringTokenizer st = new StringTokenizer( line,
+                                                      "() " );
+            String type = st.nextToken();
 
-			if ("guest".equals(type)) {
-				if (!"name".equals(st.nextToken())) {
-					throw new IOException("expected 'name' in: " + line);
-				}
-				String name = st.nextToken();
-				if (!"sex".equals(st.nextToken())) {
-					throw new IOException("expected 'sex' in: " + line);
-				}
-				String sex = st.nextToken();
-				if (!"hobby".equals(st.nextToken())) {
-					throw new IOException("expected 'hobby' in: " + line);
-				}
-				String hobby = st.nextToken();
+            if ( "guest".equals( type ) ) {
+                if ( !"name".equals( st.nextToken() ) ) {
+                    throw new IOException( "expected 'name' in: " + line );
+                }
+                String name = st.nextToken();
+                if ( !"sex".equals( st.nextToken() ) ) {
+                    throw new IOException( "expected 'sex' in: " + line );
+                }
+                String sex = st.nextToken();
+                if ( !"hobby".equals( st.nextToken() ) ) {
+                    throw new IOException( "expected 'hobby' in: " + line );
+                }
+                String hobby = st.nextToken();
 
-				Guest guest = new Guest(name, Sex.resolve(sex), Hobby
-						.resolve(hobby));
+                Guest guest = new Guest( name,
+                                         Sex.resolve( sex ),
+                                         Hobby.resolve( hobby ) );
 
-				list.add(guest);
-			}
+                list.add( guest );
+            }
 
-			if ("last_seat".equals(type)) {
-				if (!"seat".equals(st.nextToken())) {
-					throw new IOException("expected 'seat' in: " + line);
-				}
-				list.add(new LastSeat(new Integer(st.nextToken()).intValue()));
-			}
+            if ( "last_seat".equals( type ) ) {
+                if ( !"seat".equals( st.nextToken() ) ) {
+                    throw new IOException( "expected 'seat' in: " + line );
+                }
+                list.add( new LastSeat( new Integer( st.nextToken() ).intValue() ) );
+            }
 
-			if ("context".equals(type)) {
-				if (!"state".equals(st.nextToken())) {
-					throw new IOException("expected 'state' in: " + line);
-				}
-				list.add(new Context(st.nextToken()));
-			}
-		}
-		inputStream.close();
+            if ( "context".equals( type ) ) {
+                if ( !"state".equals( st.nextToken() ) ) {
+                    throw new IOException( "expected 'state' in: " + line );
+                }
+                list.add( new Context( st.nextToken() ) );
+            }
+        }
+        inputStream.close();
 
-		return list;
-	}
+        return list;
+    }
 
-	private InputStream generateData() {
-		final String LINE_SEPARATOR = System.getProperty("line.separator");
+    private InputStream generateData() {
+        final String LINE_SEPARATOR = System.getProperty( "line.separator" );
 
-		StringWriter writer = new StringWriter();
+        StringWriter writer = new StringWriter();
 
-		int maxMale = numGuests / 2;
-		int maxFemale = numGuests / 2;
+        int maxMale = numGuests / 2;
+        int maxFemale = numGuests / 2;
 
-		int maleCount = 0;
-		int femaleCount = 0;
+        int maleCount = 0;
+        int femaleCount = 0;
 
-		// init hobbies
-		List hobbyList = new ArrayList();
-		for (int i = 1; i <= maxHobbies; i++) {
-			hobbyList.add("h" + i);
-		}
+        // init hobbies
+        List hobbyList = new ArrayList();
+        for ( int i = 1; i <= maxHobbies; i++ ) {
+            hobbyList.add( "h" + i );
+        }
 
-		Random rnd = new Random();
-		for (int i = 1; i <= numGuests; i++) {
-			char sex = rnd.nextBoolean() ? 'm' : 'f';
-			if (sex == 'm' && maleCount == maxMale) {
-				sex = 'f';
-			}
-			if (sex == 'f' && femaleCount == maxFemale) {
-				sex = 'm';
-			}
-			if (sex == 'm') {
-				maleCount++;
-			}
-			if (sex == 'f') {
-				femaleCount++;
-			}
+        Random rnd = new Random();
+        for ( int i = 1; i <= numGuests; i++ ) {
+            char sex = rnd.nextBoolean() ? 'm' : 'f';
+            if ( sex == 'm' && maleCount == maxMale ) {
+                sex = 'f';
+            }
+            if ( sex == 'f' && femaleCount == maxFemale ) {
+                sex = 'm';
+            }
+            if ( sex == 'm' ) {
+                maleCount++;
+            }
+            if ( sex == 'f' ) {
+                femaleCount++;
+            }
 
-			List guestHobbies = new ArrayList(hobbyList);
+            List guestHobbies = new ArrayList( hobbyList );
 
-			int numHobbies = minHobbies
-					+ rnd.nextInt(maxHobbies - minHobbies + 1);
-			for (int j = 0; j < numHobbies; j++) {
-				int hobbyIndex = rnd.nextInt(guestHobbies.size());
-				String hobby = (String) guestHobbies.get(hobbyIndex);
-				writer.write("(guest (name n" + i + ") (sex " + sex
-						+ ") (hobby " + hobby + "))" + LINE_SEPARATOR);
-				guestHobbies.remove(hobbyIndex);
-			}
-		}
-		writer.write("(last_seat (seat " + numSeats + "))" + LINE_SEPARATOR);
+            int numHobbies = minHobbies + rnd.nextInt( maxHobbies - minHobbies + 1 );
+            for ( int j = 0; j < numHobbies; j++ ) {
+                int hobbyIndex = rnd.nextInt( guestHobbies.size() );
+                String hobby = (String) guestHobbies.get( hobbyIndex );
+                writer.write( "(guest (name n" + i + ") (sex " + sex + ") (hobby " + hobby + "))" + LINE_SEPARATOR );
+                guestHobbies.remove( hobbyIndex );
+            }
+        }
+        writer.write( "(last_seat (seat " + numSeats + "))" + LINE_SEPARATOR );
 
-		writer.write(LINE_SEPARATOR);
-		writer.write("(context (state start))" + LINE_SEPARATOR);
+        writer.write( LINE_SEPARATOR );
+        writer.write( "(context (state start))" + LINE_SEPARATOR );
 
-		return new ByteArrayInputStream(writer.getBuffer().toString()
-				.getBytes());
-	}
+        return new ByteArrayInputStream( writer.getBuffer().toString().getBytes() );
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltz/WaltzBenchmark.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltz/WaltzBenchmark.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltz/WaltzBenchmark.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -30,6 +30,7 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.WorkingMemory;
 
@@ -40,14 +41,12 @@
 
     public static void main(final String[] args) throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( WaltzBenchmark.class.getResourceAsStream( "waltz.drl" ) ),
-                             KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "waltz.drl",
+                                                                    WaltzBenchmark.class ),
+                              KnowledgeType.DRL );
         Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
-        //add the package to a rulebase
-        KnowledgeBaseConfiguration kbaseConfiguration = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
-        //conf.setAlphaMemory( true );
-        //            conf.setShadowProxy( false );
-        final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kbaseConfiguration );
+        //add the package to a kbase
+        final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( pkgs );
 
         StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltzdb/WaltzDbBenchmark.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltzdb/WaltzDbBenchmark.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/waltzdb/WaltzDbBenchmark.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -15,21 +15,28 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
+/**
+ * This example is incomplete, it run's, but is no way near correct.
+ *
+ */
 public class WaltzDbBenchmark {
     public static void main(final String[] args) throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( WaltzDbBenchmark.class.getResourceAsStream( "waltzdb.drl" ) ),
-                             KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "waltzdb.drl",
+                                                                    WaltzDbBenchmark.class ),
+                              KnowledgeType.DRL );
         Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
 
         KnowledgeBaseConfiguration kbaseConfiguration = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
-        kbaseConfiguration.setProperty( "drools.removeIdentities", "true" );
+        kbaseConfiguration.setProperty( "drools.removeIdentities",
+                                        "true" );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kbaseConfiguration );
-//                final RuleBase ruleBase = RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
-//                                                               conf );
+        //                final RuleBase ruleBase = RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+        //                                                               conf );
 
         kbase.addKnowledgePackages( pkgs );
 

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,13 +1,12 @@
 package org.drools.examples;
 
-import java.io.InputStreamReader;
-
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 public class FibonacciExample {
@@ -15,8 +14,9 @@
     public static void main(final String[] args) throws Exception {
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( FibonacciExample.class.getResourceAsStream( "Fibonacci.drl" ) ),
-                             KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "Fibonacci.drl",
+                                                                    FibonacciExample.class ),
+                              KnowledgeType.DRL );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/GolfingExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/GolfingExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/GolfingExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,15 +1,13 @@
 package org.drools.examples;
 
-import java.io.InputStreamReader;
-
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
-
 public class GolfingExample {
 
     /**
@@ -18,42 +16,44 @@
     public static void main(final String[] args) throws Exception {
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( GolfingExample.class.getResourceAsStream( "golf.drl" ) ) , KnowledgeType.DRL);
+        kbuilder.add( ResourceFactory.newClassPathResource( "golf.drl",
+                                                                    GolfingExample.class ),
+                              KnowledgeType.DRL );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
 
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-        
-        String[] names = new String[] { "Fred", "Joe", "Bob", "Tom" };
-        String[] colors = new String[] { "red", "blue", "plaid", "orange" };
-        int[] positions = new int[] { 1, 2, 3, 4 };
-        
+
+        String[] names = new String[]{"Fred", "Joe", "Bob", "Tom"};
+        String[] colors = new String[]{"red", "blue", "plaid", "orange"};
+        int[] positions = new int[]{1, 2, 3, 4};
+
         for ( int n = 0; n < names.length; n++ ) {
             for ( int c = 0; c < colors.length; c++ ) {
                 for ( int p = 0; p < positions.length; p++ ) {
-                    ksession.insert( new Golfer( names[n], colors[c], positions[p]) );
-                }                
-            }            
+                    ksession.insert( new Golfer( names[n],
+                                                 colors[c],
+                                                 positions[p] ) );
+                }
+            }
         }
 
         ksession.fireAllRules();
-        
+
         ksession.dispose();
-        
-        
+
     }
 
-
     public static class Golfer {
         private String name;
         private String color;
-        private int position;
-        
+        private int    position;
+
         public Golfer() {
-        	
+
         }
-        
+
         public Golfer(String name,
                       String color,
                       int position) {
@@ -62,26 +62,27 @@
             this.color = color;
             this.position = position;
         }
+
         /**
          * @return the color
          */
         public String getColor() {
             return this.color;
         }
+
         /**
          * @return the name
          */
         public String getName() {
             return this.name;
         }
-        
+
         /**
          * @return the name
          */
         public int getPosition() {
             return this.position;
-        }        
-        
+        }
+
     }
 }
-

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HelloWorldExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HelloWorldExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HelloWorldExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,7 +1,5 @@
 package org.drools.examples;
 
-import java.io.InputStreamReader;
-import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -13,6 +11,7 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 /**
@@ -21,14 +20,12 @@
 public class HelloWorldExample {
 
     public static final void main(final String[] args) throws Exception {
-        //read in the source
-        final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
-
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
 
         //this will parse and compile in one step
-        kbuilder.addResource( source,
-                             KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "HelloWorld.drl",
+                                                                    HelloWorldExample.class ),
+                              KnowledgeType.DRL );
 
         // Check the builder for errors
         if ( kbuilder.hasErrors() ) {
@@ -45,7 +42,7 @@
 
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         ksession.setGlobal( "list",
-                           new ArrayList() );
+                            new ArrayList() );
 
         //        session.addEventListener( new DebugAgendaEventListener() );
         //        session.addEventListener( new DebugWorkingMemoryEventListener() );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HonestPoliticianExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HonestPoliticianExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/HonestPoliticianExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,7 +1,5 @@
 package org.drools.examples;
 
-import java.io.InputStreamReader;
-
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.audit.WorkingMemoryFileLogger;
@@ -9,6 +7,7 @@
 import org.drools.builder.KnowledgeBuilderConfiguration;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 public class HonestPoliticianExample {
@@ -20,11 +19,12 @@
 
         KnowledgeBuilderConfiguration kbuilderconfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
         kbuilderconfiguration.setProperty( "drools.dump.dir",
-                          "target" );
+                                           "target" );
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( HonestPoliticianExample.class.getResourceAsStream( "HonestPolitician.drl" ) ),
-                             KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "HonestPolitician.drl",
+                                                                    HonestPoliticianExample.class ),
+                              KnowledgeType.DRL );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/NumberGuessExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/NumberGuessExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/NumberGuessExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,6 +1,5 @@
 package org.drools.examples;
 
-import java.io.InputStreamReader;
 import java.util.Random;
 
 import org.drools.KnowledgeBase;
@@ -9,16 +8,19 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 public class NumberGuessExample {
 
     public static final void main(String[] args) throws Exception {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( ShoppingExample.class.getResourceAsStream( "NumberGuess.drl" ) ),
-                             KnowledgeType.DRL );
-        kbuilder.addResource( new InputStreamReader( ShoppingExample.class.getResourceAsStream( "NumberGuess.rf" ) ),
-                             KnowledgeType.DRF );
+        kbuilder.add( ResourceFactory.newClassPathResource( "NumberGuess.drl",
+                                                                    ShoppingExample.class ),
+                              KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "NumberGuess.rf",
+                                                                    ShoppingExample.class ),
+                              KnowledgeType.DRF );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
@@ -29,7 +31,7 @@
         logger.setFileName( "log/numberguess" );
 
         ksession.insert( new GameRules( 100,
-                                       5 ) );
+                                        5 ) );
         ksession.insert( new RandomNumber() );
         ksession.insert( new Game() );
 

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PetStore.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PetStore.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PetStore.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -5,7 +5,6 @@
 import java.awt.GridLayout;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -34,23 +33,18 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
-
 public class PetStore {
 
     public static void main(String[] args) {
         try {
-            //            RuleSetLoader ruleSetLoader = new RuleSetLoader();
-            //            ruleSetLoader.addFromUrl( PetStore.class.getResource( args[0] ) );
-            //
-            //            RuleBaseLoader ruleBaseLoader = new RuleBaseLoader();
-            //            ruleBaseLoader.addFromRuleSetLoader( ruleSetLoader );
-            //            RuleBase ruleBase = ruleBaseLoader.buildRuleBase();
-
             KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-            
-            kbuilder.addResource( new InputStreamReader( PetStore.class.getResourceAsStream( "PetStore.drl" ) ) ,KnowledgeType.DRL);
+
+            kbuilder.add( ResourceFactory.newClassPathResource( "PetStore.drl",
+                                                                        PetStore.class ),
+                                  KnowledgeType.DRL );
             KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
             kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
 
@@ -374,10 +368,10 @@
      */
     public static class CheckoutCallback {
         KnowledgeBase kbase;
-        JTextArea output;
+        JTextArea     output;
 
         public CheckoutCallback(KnowledgeBase kbase) {
-            this.kbase= kbase;
+            this.kbase = kbase;
         }
 
         public void setOutput(JTextArea output) {
@@ -403,23 +397,22 @@
             }
 
             //add the JFrame to the ApplicationData to allow for user interaction
-            
+
             StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
             ksession.setGlobal( "frame",
-                                     frame );
+                                frame );
             ksession.setGlobal( "textArea",
-                                     this.output );
+                                this.output );
 
             ksession.insert( new Product( "Gold Fish",
-                                               5 ) );
+                                          5 ) );
             ksession.insert( new Product( "Fish Tank",
-                                               25 ) );
+                                          25 ) );
             ksession.insert( new Product( "Fish Food",
-                                               2 ) );
-            
+                                          2 ) );
+
             ksession.insert( new Product( "Fish Food Sample",
-                                               0 ) );            
-           
+                                          0 ) );
 
             ksession.insert( order );
             ksession.fireAllRules();
@@ -523,8 +516,7 @@
             } else if ( !product.equals( other.product ) ) return false;
             return true;
         }
-        
-        
+
     }
 
     public static class Product {
@@ -571,8 +563,7 @@
             if ( Double.doubleToLongBits( price ) != Double.doubleToLongBits( other.price ) ) return false;
             return true;
         }
-        
-        
+
     }
 
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleDTExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleDTExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleDTExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -2,6 +2,7 @@
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Arrays;
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
@@ -12,6 +13,8 @@
 import org.drools.builder.KnowledgeType;
 import org.drools.examples.decisiontable.Driver;
 import org.drools.examples.decisiontable.Policy;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ClassPathResource;
 import org.drools.runtime.StatelessKnowledgeSession;
 
 /**
@@ -31,9 +34,14 @@
 
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
 
-        kbuilder.addResource( getSpreadsheetURL(),
+        kbuilder.add( ResourceFactory.newClassPathResource( "ExamplePolicyPricing.xls", getClass() ),
                               KnowledgeType.DTABLE,
                               dtableconfiguration );
+        
+        if ( kbuilder.hasErrors() ) {
+            System.err.print( kbuilder.getErrors() );
+            return -1;
+        }
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
@@ -45,7 +53,7 @@
         Driver driver = new Driver();
         Policy policy = new Policy();
 
-        ksession.executeObject( new Object[]{driver, policy} );
+        ksession.executeIterable( Arrays.asList( new Object[]{driver, policy} ) );
 
         System.out.println( "BASE PRICE IS: " + policy.getBasePrice() );
         System.out.println( "DISCOUNT IS: " + policy.getDiscountPercent() );
@@ -54,8 +62,4 @@
 
     }
 
-    private URL getSpreadsheetURL() throws MalformedURLException {
-        return getClass().getResource( "ExamplePolicyPricing.xls" );
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleTemplateExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleTemplateExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleTemplateExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -25,6 +25,8 @@
  * 
  * Note that even though they  use the same spreadsheet, this example is just
  * concerned with the data cells and does not use any of the Decision Table data.
+ * 
+ * This example is also using unstable/experimental apis - as it is not using drools-api.
  * @author Steve
  *
  */

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ShoppingExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ShoppingExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ShoppingExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -7,6 +7,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
@@ -14,7 +15,7 @@
 
     public static final void main(String[] args) throws Exception {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( ShoppingExample.class.getResourceAsStream( "Shopping.drl" ) ),
+        kbuilder.add( ResourceFactory.newClassPathResource( "Shopping.drl", ShoppingExample.class ),
                               KnowledgeType.DRL );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/cdss/CDSSExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/cdss/CDSSExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/cdss/CDSSExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -14,6 +14,7 @@
 import org.drools.examples.cdss.data.Diagnose;
 import org.drools.examples.cdss.data.Patient;
 import org.drools.examples.cdss.service.RecommendationService;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 /**
@@ -79,20 +80,20 @@
 
     private static KnowledgeBase readRule() throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        Reader reader = new InputStreamReader( CDSSExample.class.getResourceAsStream( "/org/drools/examples/cdss/GenericRules.drl" ) );
-        kbuilder.addResource( reader,
+
+        kbuilder.add( ResourceFactory.newClassPathResource( "/org/drools/examples/cdss/GenericRules.drl", CDSSExample.class ),
                              KnowledgeType.DRL );
-        reader = new InputStreamReader( CDSSExample.class.getResourceAsStream( "/org/drools/examples/cdss/ClinicalPathwayX.drl" ) );
-        kbuilder.addResource( reader,
+
+        kbuilder.add( ResourceFactory.newClassPathResource( "/org/drools/examples/cdss/GenericRules.drl", CDSSExample.class ),
                              KnowledgeType.DRL );
-        reader = new InputStreamReader( CDSSExample.class.getResourceAsStream( "/org/drools/examples/cdss/ClinicalPathwayX.rf" ) );
-        kbuilder.addResource( reader,
+
+        kbuilder.add( ResourceFactory.newClassPathResource( "/org/drools/examples/cdss/ClinicalPathwayX.rf", CDSSExample.class ),
                              KnowledgeType.DRF );
-        reader = new InputStreamReader( CDSSExample.class.getResourceAsStream( "/org/drools/examples/cdss/TreatmentX.rf" ) );
-        kbuilder.addResource( reader,
+
+        kbuilder.add( ResourceFactory.newClassPathResource( "/org/drools/examples/cdss/TreatmentX.rf", CDSSExample.class ),
                              KnowledgeType.DRF );
-        reader = new InputStreamReader( CDSSExample.class.getResourceAsStream( "/org/drools/examples/cdss/TreatmentY.rf" ) );
-        kbuilder.addResource( reader,
+
+        kbuilder.add( ResourceFactory.newClassPathResource( "/org/drools/examples/cdss/TreatmentY.rf", CDSSExample.class ) ,
                              KnowledgeType.DRF );
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/AgendaGroupDelegate.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/AgendaGroupDelegate.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/AgendaGroupDelegate.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -12,43 +12,46 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.compiler.PackageBuilder;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
-public class AgendaGroupDelegate implements ConwayRuleDelegate {
+public class AgendaGroupDelegate
+    implements
+    ConwayRuleDelegate {
     private StatefulKnowledgeSession session;
-    
+
     public AgendaGroupDelegate() {
-        final Reader drl = new InputStreamReader( AgendaGroupDelegate.class.getResourceAsStream( "/org/drools/examples/conway/conway-agendagroup.drl" ) );
-
         try {
             KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-            kbuilder.addResource( drl, KnowledgeType.DRL );
-            
+            kbuilder.add( ResourceFactory.newClassPathResource( "conway-agendagroup.drl",
+                                                                        getClass() ),
+                                  KnowledgeType.DRL );
+
             KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
             kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-            
+
             this.session = kbase.newStatefulKnowledgeSession();
         } catch ( Exception e ) {
             throw new RuntimeException( e );
         }
     }
-    
+
     /* (non-Javadoc)
      * @see org.drools.examples.conway.ConwayRuleDelegate#getSession()
      */
     public StatefulKnowledgeSession getSession() {
         return this.session;
     }
-    
+
     /* (non-Javadoc)
      * @see org.drools.examples.conway.ConwayRuleDelegate#init()
      */
     public void init() {
         this.session.getAgenda().getAgendaGroup( "register neighbor" ).setFocus();
-        this.session.fireAllRules();     
+        this.session.fireAllRules();
         this.session.getAgenda().getAgendaGroup( "calculate" ).clear();
     }
-    
+
     /* (non-Javadoc)
      * @see org.drools.examples.conway.CellGrid#nextGeneration()
      */
@@ -62,7 +65,7 @@
         this.session.getAgenda().getAgendaGroup( "reset calculate" ).setFocus();
         this.session.getAgenda().getAgendaGroup( "rest" ).setFocus();
         this.session.getAgenda().getAgendaGroup( "evaluate" ).setFocus();
-        this.session.getAgenda().getAgendaGroup( "calculate" ).setFocus();        
+        this.session.getAgenda().getAgendaGroup( "calculate" ).setFocus();
         return session.fireAllRules() != 0;
         //return session.getAgenda().getAgendaGroup( "calculate" ).size() != 0;
     }
@@ -79,5 +82,5 @@
         this.session.getAgenda().getAgendaGroup( "calculate" ).setFocus();
         this.session.fireAllRules();
     }
-    
+
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/RuleFlowDelegate.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/RuleFlowDelegate.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/conway/RuleFlowDelegate.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -12,23 +12,19 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.compiler.PackageBuilder;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
 public class RuleFlowDelegate implements ConwayRuleDelegate {
     private StatefulKnowledgeSession session;
     
     public RuleFlowDelegate() {
-        final Reader drl = new InputStreamReader( CellGridImpl.class.getResourceAsStream( "/org/drools/examples/conway/conway-ruleflow.drl" ) );
-        final Reader generationRf = new InputStreamReader( CellGridImpl.class.getResourceAsStream( "/org/drools/examples/conway/generation.rf" ) );
-        final Reader killAllRf = new InputStreamReader( CellGridImpl.class.getResourceAsStream( "/org/drools/examples/conway/killAll.rf" ) );
-        final Reader registerNeighborRf = new InputStreamReader( CellGridImpl.class.getResourceAsStream( "/org/drools/examples/conway/registerNeighbor.rf" ) );
-
         try {
             KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-            kbuilder.addResource( drl, KnowledgeType.DRL );
-            kbuilder.addResource(  generationRf, KnowledgeType.DRF );
-            kbuilder.addResource( killAllRf, KnowledgeType.DRF );
-            kbuilder.addResource( registerNeighborRf, KnowledgeType.DRF );
+            kbuilder.add( ResourceFactory.newClassPathResource( "conway-ruleflow.drl",getClass()), KnowledgeType.DRL );
+            kbuilder.add( ResourceFactory.newClassPathResource( "generation.rf",getClass()), KnowledgeType.DRF );
+            kbuilder.add( ResourceFactory.newClassPathResource( "killAll.rf",getClass()), KnowledgeType.DRF );
+            kbuilder.add( ResourceFactory.newClassPathResource( "registerNeighbor.rf",getClass()), KnowledgeType.DRF );
             
             KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
             kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ruleflow/WorkItemExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ruleflow/WorkItemExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/ruleflow/WorkItemExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -8,6 +8,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
 import org.drools.process.instance.impl.demo.UIWorkItemHandler;
 import org.drools.runtime.StatefulKnowledgeSession;
@@ -40,9 +41,8 @@
     }
 
     private static KnowledgeBase readRule() throws Exception {
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        Reader source = new InputStreamReader( WorkItemExample.class.getResourceAsStream( "/org/drools/examples/ruleflow/workitems.rf" ) );
-        kbuilder.addResource( source,
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();        
+        kbuilder.add( ResourceFactory.newClassPathResource( "workitems.rf", WorkItemExample.class ),
                               KnowledgeType.DRF );
 
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/sudoku/rules/DroolsUtil.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/sudoku/rules/DroolsUtil.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/sudoku/rules/DroolsUtil.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -15,6 +15,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 
 public class DroolsUtil {
     private static DroolsUtil INSTANCE;
@@ -32,9 +33,6 @@
     }
 
     public KnowledgeBase readRuleBase(String drlFileName) throws Exception {
-        //read in the source
-        Reader source = new InputStreamReader( DroolsSudokuGridModel.class.getResourceAsStream( drlFileName ) );
-
         //optionally read in the DSL (if you are using it).
         //Reader dsl = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );
 
@@ -44,7 +42,7 @@
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
 
         //this will parse and compile in one step
-        kbuilder.addResource( source,
+        kbuilder.add( ResourceFactory.newClassPathResource( drlFileName,DroolsSudokuGridModel.class),
                              KnowledgeType.DRL );
 
         //Use the following instead of above if you are using a DSL:

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExample.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExample.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,13 +1,12 @@
 package org.drools.examples.troubleticket;
 
-import java.io.InputStreamReader;
-
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.audit.ThreadedWorkingMemoryFileLogger;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
@@ -19,8 +18,9 @@
     public static void main(final String[] args) throws Exception {
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( new InputStreamReader( TroubleTicketExample.class.getResourceAsStream( "TroubleTicket.drl" ) ),
-                             KnowledgeType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "TroubleTicket.drl",
+                                                                    TroubleTicketExample.class ),
+                              KnowledgeType.DRL );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
@@ -64,7 +64,7 @@
         t3.setStatus( "Done" );
 
         ksession.update( ft3,
-                        t3 );
+                         t3 );
 
         try {
             System.err.println( "[[ Sleeping 5 seconds ]]" );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExampleWithDSL.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExampleWithDSL.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketExampleWithDSL.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -9,6 +9,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
@@ -21,10 +22,12 @@
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
 
-        kbuilder.addResource( getDSL(),
-                             KnowledgeType.DSL );
-        kbuilder.addResource( getSource(),
-                             KnowledgeType.DSLR );
+        kbuilder.add( ResourceFactory.newClassPathResource( "ticketing.dsl",
+                                                                    TroubleTicketExampleWithDSL.class ),
+                              KnowledgeType.DSL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "TroubleTicketWithDSL.dslr",
+                                                                    TroubleTicketExampleWithDSL.class ),
+                              KnowledgeType.DSLR );
 
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
@@ -67,7 +70,7 @@
         t3.setStatus( "Done" );
 
         ksession.update( ft3,
-                        t3 );
+                         t3 );
 
         try {
             System.err.println( "[[ Sleeping 5 seconds ]]" );
@@ -84,14 +87,4 @@
 
         logger.writeToDisk();
     }
-
-    private static Reader getDSL() {
-        return new InputStreamReader( TroubleTicketExampleWithDSL.class.getResourceAsStream( "ticketing.dsl" ) );
-
-    }
-
-    private static InputStreamReader getSource() {
-        return new InputStreamReader( TroubleTicketExampleWithDSL.class.getResourceAsStream( "TroubleTicketWithDSL.dslr" ) );
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -11,6 +11,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
@@ -30,7 +31,7 @@
         dtableconfiguration.setInputType( DecisionTableInputType.XLS );
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.addResource( getSpreadsheetURL(),
+        kbuilder.add(  ResourceFactory.newClassPathResource( "TroubleTicket.xls", TroubleTicketWithDT.class ),
                               KnowledgeType.DTABLE,
                               dtableconfiguration );
 
@@ -93,8 +94,4 @@
 
     }
 
-    private URL getSpreadsheetURL() throws MalformedURLException {
-        return getClass().getResource( "TroubleTicket.xls" );
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/tutorials/banking/RuleRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/tutorials/banking/RuleRunner.java	2008-11-28 05:37:21 UTC (rev 24130)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/tutorials/banking/RuleRunner.java	2008-11-28 06:34:07 UTC (rev 24131)
@@ -1,6 +1,5 @@
 package org.drools.tutorials.banking;
 
-import java.io.InputStreamReader;
 import java.util.Collection;
 
 import org.drools.KnowledgeBase;
@@ -9,9 +8,9 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeType;
 import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
-
 public class RuleRunner {
 
     public RuleRunner() {
@@ -25,8 +24,10 @@
 
         for ( int i = 0; i < rules.length; i++ ) {
             String ruleFile = rules[i];
-            System.out.println( "Loading file: " + ruleFile );            
-            kbuilder.addResource( new InputStreamReader( RuleRunner.class.getResourceAsStream( ruleFile ) ), KnowledgeType.DRL );
+            System.out.println( "Loading file: " + ruleFile );
+            kbuilder.add( ResourceFactory.newClassPathResource( ruleFile,
+                                                                        RuleRunner.class ),
+                                  KnowledgeType.DRL );
         }
 
         Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();




More information about the jboss-svn-commits mailing list