[jboss-svn-commits] JBL Code SVN: r20796 - in labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main: java/org/drools/examples/process and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jun 26 05:29:47 EDT 2008
Author: KrisVerlaenen
Date: 2008-06-26 05:29:47 -0400 (Thu, 26 Jun 2008)
New Revision: 20796
Added:
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Customer.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/CustomerService.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultCustomerService.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultItemCatalog.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Item.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ItemCatalog.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Order.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/RuleSetExample.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/RuleSetExample.rf
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/validation.drl
Log:
JBRULES-1551: Workflow human tasks
- adding process example
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Customer.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Customer.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Customer.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,60 @@
+package org.drools.examples.process.order;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public class Customer {
+
+ private String customerId;
+ private String firstName;
+ private String lastName;
+ private Date birthday;
+
+ public Customer(String customerId) {
+ this.customerId = customerId;
+ }
+
+ public String getCustomerId() {
+ return customerId;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public Date getBirthday() {
+ return birthday;
+ }
+
+ public void setBirthday(Date birthday) {
+ this.birthday = birthday;
+ }
+
+ public int getAge() {
+ if (birthday == null) {
+ return -1;
+ }
+ Calendar today = Calendar.getInstance();
+ Calendar dateOfBirth = Calendar.getInstance();
+ dateOfBirth.setTime(birthday);
+ int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);
+ dateOfBirth.add(Calendar.YEAR, age);
+ if (today.before(dateOfBirth)) {
+ age--;
+ }
+ return age;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/CustomerService.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/CustomerService.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/CustomerService.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,9 @@
+package org.drools.examples.process.order;
+
+public interface CustomerService {
+
+ Customer getCustomer(String customerId);
+
+ void addCustomer(Customer customer);
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultCustomerService.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultCustomerService.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultCustomerService.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,18 @@
+package org.drools.examples.process.order;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DefaultCustomerService implements CustomerService {
+
+ private Map<String, Customer> customers = new HashMap<String, Customer>();
+
+ public Customer getCustomer(String customerId) {
+ return customers.get(customerId);
+ }
+
+ public void addCustomer(Customer customer) {
+ this.customers.put(customer.getCustomerId(), customer);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultItemCatalog.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultItemCatalog.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/DefaultItemCatalog.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,18 @@
+package org.drools.examples.process.order;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DefaultItemCatalog implements ItemCatalog {
+
+ private Map<String, Item> items = new HashMap<String, Item>();
+
+ public Item getItem(String itemId) {
+ return items.get(itemId);
+ }
+
+ public void addItem(Item item) {
+ this.items.put(item.getItemId(), item);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Item.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Item.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Item.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,42 @@
+package org.drools.examples.process.order;
+
+public class Item {
+
+ private String itemId;
+ private String name;
+ private String description;
+ private int minimalAge;
+
+ public Item(String itemId) {
+ this.itemId = itemId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public int getMinimalAge() {
+ return minimalAge;
+ }
+
+ public void setMinimalAge(int minimalAge) {
+ this.minimalAge = minimalAge;
+ }
+
+ public String getItemId() {
+ return itemId;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ItemCatalog.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ItemCatalog.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ItemCatalog.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,9 @@
+package org.drools.examples.process.order;
+
+public interface ItemCatalog {
+
+ Item getItem(String itemId);
+
+ void addItem(Item item);
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Order.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Order.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Order.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,82 @@
+package org.drools.examples.process.order;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Order {
+
+ private String orderId;
+ private String customerId;
+ private List<OrderItem> orderItems = new ArrayList<OrderItem>();
+ private List<String> errorList;
+
+ public String getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(String orderId) {
+ this.orderId = orderId;
+ }
+
+ public String getCustomerId() {
+ return customerId;
+ }
+
+ public void setCustomerId(String customerId) {
+ this.customerId = customerId;
+ }
+
+ public List<OrderItem> getOrderItems() {
+ return orderItems;
+ }
+
+ public void addOrderItem(String itemId, int amount, double price) {
+ orderItems.add(new OrderItem(itemId, amount, price));
+ }
+
+ public double getPrice() {
+ double price = 0;
+ for (OrderItem item: orderItems) {
+ price += item.getAmount() * item.getPrice();
+ }
+ return price;
+ }
+
+ public List<String> getErrorList() {
+ return errorList;
+ }
+
+ public void addError(String error) {
+ if (errorList == null) {
+ errorList = new ArrayList<String>();
+ }
+ errorList.add(error);
+ }
+
+ public class OrderItem {
+
+ private String itemId;
+ private int amount;
+ private double price;
+
+ public OrderItem(String itemId, int amount, double price) {
+ this.itemId = itemId;
+ this.amount = amount;
+ this.price = price;
+ }
+
+ public String getItemId() {
+ return itemId;
+ }
+
+ public int getAmount() {
+ return amount;
+ }
+
+ public double getPrice() {
+ return price;
+ }
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/RuleSetExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/RuleSetExample.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/RuleSetExample.java 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,70 @@
+package org.drools.examples.process.order;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.PackageBuilder;
+import org.drools.process.instance.impl.demo.UIWorkItemHandler;
+
+public class RuleSetExample {
+
+ public static void main(String[] args) {
+ try {
+ RuleBase ruleBase = createKnowledgeBase();
+ StatefulSession session = ruleBase.newStatefulSession();
+
+ CustomerService customerService = new DefaultCustomerService();
+ Customer c = new Customer("A-12345");
+ Calendar birthday = Calendar.getInstance();
+ birthday.set(1982, 1, 1);
+ c.setBirthday(birthday.getTime());
+ c.setFirstName("John");
+ c.setLastName("Doe");
+ customerService.addCustomer(c);
+ session.setGlobal("customerService", customerService);
+
+ ItemCatalog itemCatalog = new DefaultItemCatalog();
+ Item i = new Item("I-9876");
+ i.setName("Rampage !!! PC game");
+ i.setMinimalAge(18);
+ itemCatalog.addItem(i);
+ session.setGlobal("itemCatalog", itemCatalog);
+
+ UIWorkItemHandler handler = new UIWorkItemHandler();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
+ handler.setVisible(true);
+
+ Order order = new Order();
+ order.setOrderId("O-ABCDE");
+ order.setCustomerId("A-12345");
+ order.addOrderItem("I-9876", 3, 50.0D);
+ session.insert(order);
+
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("orderId", order.getOrderId());
+ session.startProcess("org.drools.examples.process.ruleset.RuleSetExample", parameters);
+ session.fireAllRules();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+
+ private static RuleBase createKnowledgeBase() throws Exception {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new InputStreamReader(
+ RuleSetExample.class.getResourceAsStream("RuleSetExample.rf"));
+ builder.addProcessFromXml(source);
+ source = new InputStreamReader(
+ RuleSetExample.class.getResourceAsStream("validation.drl"));
+ builder.addPackageFromDrl(source);
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(builder.getPackage());
+ return ruleBase;
+ }
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/RuleSetExample.rf
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/RuleSetExample.rf (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/RuleSetExample.rf 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://drools.org/drools-4.0/process"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd"
+ type="RuleFlow" name="RuleSetExample" id="org.drools.examples.process.ruleset.RuleSetExample" package-name="org.drools.examples.process.order" version="1" >
+
+ <header>
+ <imports>
+ <import name="org.drools.examples.process.order.Order" />
+ </imports>
+ <variables>
+ <variable name="orderId" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </variable>
+ </variables>
+ <swimlanes>
+ <swimlane name="SalesRepresentative" />
+ </swimlanes>
+ </header>
+
+ <nodes>
+ <start id="1" name="Start" x="88" y="16" width="80" height="40" />
+ <ruleSet id="2" name="Validate Order" x="88" y="88" width="80" height="40" ruleFlowGroup="validate" />
+ <split id="5" name="XOR" x="116" y="160" width="26" height="23" type="2" >
+ <constraints>
+ <constraint toNodeId="10" toType="DROOLS_DEFAULT" name="large order" priority="2" type="rule" dialect="mvel" >Order( price > 1000 )</constraint>
+ <constraint toNodeId="9" toType="DROOLS_DEFAULT" name="invalid order" priority="1" type="rule" dialect="mvel" >Order( errorList != null )</constraint>
+ <constraint toNodeId="6" toType="DROOLS_DEFAULT" name="default" priority="3" type="rule" dialect="mvel" >eval(true)</constraint>
+ </constraints>
+ </split>
+ <join id="6" name="" x="118" y="287" width="20" height="23" type="2" />
+ <ruleSet id="7" name="Process Order" x="88" y="414" width="80" height="40" ruleFlowGroup="process" />
+ <end id="8" name="End" x="88" y="486" width="80" height="40" />
+ <humanTask id="9" name="Correct Order" x="16" y="215" width="96" height="40" swimlane="SalesRepresentative" >
+ <work name="Human Task" >
+ <parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" >Correct Order</parameter>
+ <parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >Invalid order ${orderId}, needs to be corrected (contact customer if necessary)</parameter>
+ </work>
+ </humanTask>
+ <humanTask id="10" name="Follow-up Order" x="144" y="215" width="106" height="40" swimlane="SalesRepresentative" >
+ <work name="Human Task" >
+ <parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" >Follow-up Order</parameter>
+ <parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >This is a large order, follow up this order manually</parameter>
+ </work>
+ </humanTask>
+ <humanTask id="11" name="Human Task" x="72" y="340" width="111" height="40" >
+ <work name="Human Task" >
+ <parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </work>
+ </humanTask>
+ </nodes>
+
+ <connections>
+ <connection from="1" to="2" />
+ <connection from="2" to="5" />
+ <connection from="9" to="6" />
+ <connection from="10" to="6" />
+ <connection from="5" to="6" />
+ <connection from="11" to="7" />
+ <connection from="7" to="8" />
+ <connection from="5" to="9" />
+ <connection from="5" to="10" />
+ <connection from="6" to="11" />
+ </connections>
+
+</process>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/validation.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/validation.drl (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/validation.drl 2008-06-26 09:29:47 UTC (rev 20796)
@@ -0,0 +1,42 @@
+package org.drools.examples.process.order
+
+global CustomerService customerService
+global ItemCatalog itemCatalog
+
+rule "Invalid customer id" ruleflow-group "validate" lock-on-active true
+ when
+ o: Order( )
+ not (Customer( ) from customerService.getCustomer(o.getCustomerId()))
+ then
+ System.out.println("Invalid customer id found!");
+ o.addError("Invalid customer id");
+end
+
+rule "Invalid item id" ruleflow-group "validate" lock-on-active true
+ when
+ o: Order( )
+ i: Order.OrderItem( ) from o.getOrderItems()
+ not (Item( ) from itemCatalog.getItem(i.getItemId()))
+ then
+ System.out.println("Invalid item id found!");
+ o.addError("Invalid item id " + i.getItemId());
+end
+
+rule "Minimal age" ruleflow-group "validate" lock-on-active true
+ when
+ o: Order( )
+ c: Customer( ) from customerService.getCustomer(o.getCustomerId())
+ oi: Order.OrderItem( ) from o.getOrderItems()
+ i: Item( minimalAge > (c.getAge()) ) from itemCatalog.getItem(oi.getItemId())
+ then
+ System.out.println("Minimal age violated!");
+ o.addError("Minimal age not met for item " + i.getItemId());
+end
+
+rule "Update order " ruleflow-group "validate"
+ lock-on-active true salience -1
+ when
+ o: Order( )
+ then
+ update(o);
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list