[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 &gt; 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