[jboss-svn-commits] JBL Code SVN: r34319 - in labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main: resources/org/drools/examples and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 29 14:02:09 EDT 2010


Author: eaa
Date: 2010-07-29 14:02:08 -0400 (Thu, 29 Jul 2010)
New Revision: 34319

Added:
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/BasePricing.drt
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/Cheese.drt
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/ExampleCheese.xls
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/ExamplePolicyPricing.xls
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/PromotionalPricing.drt
Removed:
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/BasePricing.drt
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/Cheese.drt
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/ExampleCheese.xls
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/ExamplePolicyPricing.xls
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/PromotionalPricing.drt
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/PricingRuleTemplateExample.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/SimpleRuleTemplateExample.java
Log:
Updated Decision Tables using templates examples to use drools-api

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	2010-07-29 17:15:57 UTC (rev 34318)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleDTExample.java	2010-07-29 18:02:08 UTC (rev 34319)
@@ -47,7 +47,7 @@
 
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
 
-        kbuilder.add( ResourceFactory.newClassPathResource( "ExamplePolicyPricing.xls",
+        kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/examples/ExamplePolicyPricing.xls",
                                                             getClass() ),
                       ResourceType.DTABLE,
                       dtableconfiguration );

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	2010-07-29 17:15:57 UTC (rev 34318)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/PricingRuleTemplateExample.java	2010-07-29 18:02:08 UTC (rev 34319)
@@ -13,26 +13,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.drools.examples;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Iterator;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
 
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.PackageBuilder;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
 import org.drools.decisiontable.ExternalSpreadsheetCompiler;
-import org.drools.decisiontable.InputType;
 import org.drools.examples.decisiontable.Driver;
 import org.drools.examples.decisiontable.Policy;
-import org.drools.template.parser.DataListener;
-import org.drools.template.parser.TemplateDataListener;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ByteArrayResource;
+import org.drools.runtime.StatefulKnowledgeSession;
 
 /**
  * This shows off a rule template where the data provider is a spreadsheet.
@@ -42,78 +40,96 @@
  * 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
  *
  */
 public class PricingRuleTemplateExample {
+
     public static void main(String[] args) throws Exception {
         PricingRuleTemplateExample launcher = new PricingRuleTemplateExample();
-        launcher.executeExample();        
+        launcher.executeExample();
     }
 
     private int executeExample() throws Exception {
-        
-        //first we compile the decision table into a whole lot of rules.
-        final ExternalSpreadsheetCompiler converter = new ExternalSpreadsheetCompiler();
-        final List<DataListener> listeners = new ArrayList<DataListener>();
-        TemplateDataListener l1 = new TemplateDataListener(10, 3, getBasePricingRulesStream());
-        listeners.add(l1);
-        TemplateDataListener l2 = new TemplateDataListener(30, 3, getPromotionalPricingRulesStream());
-        listeners.add(l2);
-        converter.compile(getSpreadsheetStream(), InputType.XLS, listeners);
 
-        String baseRules = l1.renderDRL();
-        //Uncomment to see the base pricing rules
-        //System.out.println(baseRules);
-        String promotionalRules = l2.renderDRL();
-        //Uncomment to see the promotional pricing rules
-        //System.out.println(promotionalRules);
-        //BUILD RULEBASE
-        final RuleBase rb = buildRuleBase(baseRules, promotionalRules);
+        //BUILD THE KBASE
+        KnowledgeBase kbase = this.buildKBase();
 
-        WorkingMemory wm = rb.newStatefulSession();
-        
+        //GET A KSESSION
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
         //now create some test data
         Driver driver = new Driver();
         Policy policy = new Policy();
-        
-        wm.insert(driver);
-        wm.insert(policy);
-        
-        wm.fireAllRules();
-        
+
+        ksession.insert(driver);
+        ksession.insert(policy);
+
+        ksession.fireAllRules();
+
         System.out.println("BASE PRICE IS: " + policy.getBasePrice());
-        System.out.println("DISCOUNT IS: " + policy.getDiscountPercent( ));
-        
+        System.out.println("DISCOUNT IS: " + policy.getDiscountPercent());
+
+
+        ksession.dispose();
+
         return policy.getBasePrice();
+
     }
 
-    /** Build the rule base from the generated DRL */
-    private RuleBase buildRuleBase(String... drls) throws DroolsParserException, IOException, Exception {
-        //now we build the rule package and rulebase, as if they are normal rules
-        PackageBuilder builder = new PackageBuilder();
-        for ( String drl : drls ) {
-            builder.addPackageFromDrl( new StringReader( drl ) );
+    /**
+     * Creates a new kbase containing the rules generated from the xls file and
+     * the templates.
+     * @return
+     * @throws IOException
+     */
+    private KnowledgeBase buildKBase() throws IOException {
+        //first we compile the decision table into a whole lot of rules.
+        final ExternalSpreadsheetCompiler converter = new ExternalSpreadsheetCompiler();
+
+        //the data we are interested in starts at row 10, column 3
+        String basePricingDRL = converter.compile(getSpreadsheetStream(), getBasePricingRulesStream(), 10, 3);
+        //the data we are interested in starts at row 30, column 3
+        String promotionalPricingDRL = converter.compile(getSpreadsheetStream(), getPromotionalPricingRulesStream(), 30, 3);
+
+        //compile the drls
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add(new ByteArrayResource(basePricingDRL.getBytes()), ResourceType.DRL);
+        kbuilder.add(new ByteArrayResource(promotionalPricingDRL.getBytes()), ResourceType.DRL);
+
+        //compilation errors?
+        if (kbuilder.hasErrors()) {
+            System.out.println("Error compiling resources:");
+            Iterator<KnowledgeBuilderError> errors = kbuilder.getErrors().iterator();
+            while (errors.hasNext()) {
+                System.out.println("\t" + errors.next().getMessage());
+            }
+            throw new IllegalStateException("Error compiling resources");
         }
-        
-        //add the package to a rulebase (deploy the rule package).
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        ruleBase.addPackage( builder.getPackage() );
-        return ruleBase;
+
+
+        //Uncomment to see the base pricing rules
+        //System.out.println(basePricingDRL);
+        //Uncomment to see the promotional pricing rules
+        //System.out.println(promotionalPricingDRL);
+
+        //BUILD KBASE
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+        return kbase;
+
     }
 
-    private InputStream getSpreadsheetStream() {
-        return this.getClass().getResourceAsStream("ExamplePolicyPricing.xls");
+    private InputStream getSpreadsheetStream() throws IOException {
+        return ResourceFactory.newClassPathResource("org/drools/examples/ExamplePolicyPricing.xls").getInputStream();
     }
-    
-    private InputStream getBasePricingRulesStream() {
-        return this.getClass().getResourceAsStream("BasePricing.drt");
+
+    private InputStream getBasePricingRulesStream() throws IOException {
+        return ResourceFactory.newClassPathResource("org/drools/examples/BasePricing.drt").getInputStream();
     }
-    
-    private InputStream getPromotionalPricingRulesStream() {
-        return this.getClass().getResourceAsStream("PromotionalPricing.drt");
+
+    private InputStream getPromotionalPricingRulesStream() throws IOException {
+        return ResourceFactory.newClassPathResource("org/drools/examples/PromotionalPricing.drt").getInputStream();
     }
-
-
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/SimpleRuleTemplateExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/SimpleRuleTemplateExample.java	2010-07-29 17:15:57 UTC (rev 34318)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/SimpleRuleTemplateExample.java	2010-07-29 18:02:08 UTC (rev 34319)
@@ -18,18 +18,22 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.StringReader;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
 
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.PackageBuilder;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
 import org.drools.decisiontable.ExternalSpreadsheetCompiler;
 import org.drools.examples.templates.Cheese;
 import org.drools.examples.templates.Person;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ByteArrayResource;
+import org.drools.runtime.StatefulKnowledgeSession;
 
 /**
  * This shows off a very simple rule template where the data provider is a spreadsheet.
@@ -39,60 +43,78 @@
 public class SimpleRuleTemplateExample {
     public static void main(String[] args) throws Exception {
         SimpleRuleTemplateExample launcher = new SimpleRuleTemplateExample();
-        launcher.executeExample();        
+        launcher.executeExample();
     }
 
     private void executeExample() throws Exception {
-        
-        //first we compile the spreadsheet with the template
-        //to create a whole lot of rules.
-        final ExternalSpreadsheetCompiler converter = new ExternalSpreadsheetCompiler();
-        //the data we are interested in starts at row 2, column 2 (e.g. B2)
-        final String drl = converter.compile(getSpreadsheetStream(), getRulesStream(), 2, 2);
 
-        //Uncomment to see rules
-        //System.out.println( drl );
-        //BUILD RULEBASE
-        final RuleBase rb = buildRuleBase(drl);
+        //BUILD THE KBASE
+        final KnowledgeBase kbase = this.buildKBase();
 
-        WorkingMemory wm = rb.newStatefulSession();
-        
+        //GET A KSESSION
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
         //now create some test data
-        wm.insert( new Cheese( "stilton",
+        ksession.insert( new Cheese( "stilton",
                                42 ) );
-        wm.insert( new Person( "michael",
+        ksession.insert( new Person( "michael",
                                "stilton",
                                42 ) );
         final List<String> list = new ArrayList<String>();
-        wm.setGlobal( "list",
+        ksession.setGlobal( "list",
                       list );
-        
-        wm.fireAllRules();
-        
+
+        ksession.fireAllRules();
+
         System.out.println(list);
-        
+
+        ksession.dispose();
     }
 
-    /** Build the rule base from the generated DRL */
-    private RuleBase buildRuleBase(String... drls) throws DroolsParserException, IOException, Exception {
-        //now we build the rule package and rulebase, as if they are normal rules
-        PackageBuilder builder = new PackageBuilder();
-        for ( String drl : drls ) {
-            builder.addPackageFromDrl( new StringReader( drl ) );
+     /**
+     * Creates a new kbase containing the rules generated from the xls file and
+     * the template.
+     * @return
+     * @throws IOException
+     */
+    private KnowledgeBase buildKBase() throws IOException {
+        //first we compile the decision table into a whole lot of rules.
+        final ExternalSpreadsheetCompiler converter = new ExternalSpreadsheetCompiler();
+
+        //the data we are interested in starts at row 2, column 2 (e.g. B2)
+        String drl = converter.compile(getSpreadsheetStream(), getRulesStream(), 2, 2);
+
+        //compile the drl
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add(new ByteArrayResource(drl.getBytes()), ResourceType.DRL);
+
+        //compilation errors?
+        if (kbuilder.hasErrors()) {
+            System.out.println("Error compiling resources:");
+            Iterator<KnowledgeBuilderError> errors = kbuilder.getErrors().iterator();
+            while (errors.hasNext()) {
+                System.out.println("\t" + errors.next().getMessage());
+            }
+            throw new IllegalStateException("Error compiling resources");
         }
-        
-        //add the package to a rulebase (deploy the rule package).
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        ruleBase.addPackage( builder.getPackage() );
-        return ruleBase;
+
+        //Uncomment to see the rules
+        //System.out.println(drl);
+
+        //BUILD KBASE
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+        return kbase;
+
     }
 
-    private InputStream getSpreadsheetStream() {
-        return this.getClass().getResourceAsStream("ExampleCheese.xls");
+    private InputStream getSpreadsheetStream() throws IOException {
+        return ResourceFactory.newClassPathResource("org/drools/examples/ExampleCheese.xls").getInputStream();
     }
-    
-    private InputStream getRulesStream() {
-        return this.getClass().getResourceAsStream("Cheese.drt");
+
+    private InputStream getRulesStream() throws IOException {
+        return ResourceFactory.newClassPathResource("org/drools/examples/Cheese.drt").getInputStream();
     }
-    
+
 }

Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/BasePricing.drt
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/BasePricing.drt	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/BasePricing.drt	2010-07-29 18:02:08 UTC (rev 34319)
@@ -0,0 +1,28 @@
+template header
+age[]
+profile
+priorClaims
+policyType
+base
+reason
+
+package org.drools.examples.decisiontable;
+
+template "Pricing bracket"
+age
+policyType
+base
+
+rule "Pricing bracket_@{row.rowNumber}"
+	
+	when
+		Driver(age >= @{age0}, age <= @{age1}
+			, priorClaims == "@{priorClaims}"
+			, locationRiskProfile == "@{profile}"
+		)
+		policy: Policy(type == "@{policyType}")
+	then
+		policy.setBasePrice(@{base});
+		System.out.println("@{reason}");
+end
+end template

Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/Cheese.drt
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/Cheese.drt	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/Cheese.drt	2010-07-29 18:02:08 UTC (rev 34319)
@@ -0,0 +1,19 @@
+template header
+age
+type
+log
+
+package org.drools.examples.templates;
+
+global java.util.List list;
+
+template "cheesefans"
+
+rule "Cheese fans_@{row.rowNumber}"
+	when
+		Person(age == @{age})
+		Cheese(type == "@{type}")
+	then
+		list.add("@{log}");
+end
+end template
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/ExampleCheese.xls
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/ExampleCheese.xls
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/ExamplePolicyPricing.xls
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/ExamplePolicyPricing.xls
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/PromotionalPricing.drt
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/PromotionalPricing.drt	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/org/drools/examples/PromotionalPricing.drt	2010-07-29 18:02:08 UTC (rev 34319)
@@ -0,0 +1,23 @@
+template header
+age[]
+priorClaims
+policyType
+discount
+
+package org.drools.examples.decisiontable;
+
+template "discounts"
+age
+priorClaims
+policyType
+discount
+
+rule "Discounts_@{row.rowNumber}"
+	
+	when
+		Driver(age >= @{age0}, age <= @{age1}, priorClaims == "@{priorClaims}")
+		policy: Policy(type == "@{policyType}")
+	then
+		policy.applyDiscount(@{discount});
+end
+end template

Deleted: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/BasePricing.drt
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/BasePricing.drt	2010-07-29 17:15:57 UTC (rev 34318)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/BasePricing.drt	2010-07-29 18:02:08 UTC (rev 34319)
@@ -1,28 +0,0 @@
-template header
-age[]
-profile
-priorClaims
-policyType
-base
-reason
-
-package org.drools.examples.decisiontable;
-
-template "Pricing bracket"
-age
-policyType
-base
-
-rule "Pricing bracket_@{row.rowNumber}"
-	
-	when
-		Driver(age >= @{age0}, age <= @{age1}
-			, priorClaims == "@{priorClaims}"
-			, locationRiskProfile == "@{profile}"
-		)
-		policy: Policy(type == "@{policyType}")
-	then
-		policy.setBasePrice(@{base});
-		System.out.println("@{reason}");
-end
-end template

Deleted: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/Cheese.drt
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/Cheese.drt	2010-07-29 17:15:57 UTC (rev 34318)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/Cheese.drt	2010-07-29 18:02:08 UTC (rev 34319)
@@ -1,19 +0,0 @@
-template header
-age
-type
-log
-
-package org.drools.examples.templates;
-
-global java.util.List list;
-
-template "cheesefans"
-
-rule "Cheese fans_@{row.rowNumber}"
-	when
-		Person(age == @{age})
-		Cheese(type == "@{type}")
-	then
-		list.add("@{log}");
-end
-end template
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/ExampleCheese.xls
===================================================================
(Binary files differ)

Deleted: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/ExamplePolicyPricing.xls
===================================================================
(Binary files differ)

Deleted: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/PromotionalPricing.drt
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/PromotionalPricing.drt	2010-07-29 17:15:57 UTC (rev 34318)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/PromotionalPricing.drt	2010-07-29 18:02:08 UTC (rev 34319)
@@ -1,23 +0,0 @@
-template header
-age[]
-priorClaims
-policyType
-discount
-
-package org.drools.examples.decisiontable;
-
-template "discounts"
-age
-priorClaims
-policyType
-discount
-
-rule "Discounts_@{row.rowNumber}"
-	
-	when
-		Driver(age >= @{age0}, age <= @{age1}, priorClaims == "@{priorClaims}")
-		policy: Policy(type == "@{policyType}")
-	then
-		policy.applyDiscount(@{discount});
-end
-end template



More information about the jboss-svn-commits mailing list