[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