[jboss-svn-commits] JBL Code SVN: r20894 - in labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main: resources and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jul 3 04:26:28 EDT 2008
Author: KrisVerlaenen
Date: 2008-07-03 04:26:27 -0400 (Thu, 03 Jul 2008)
New Revision: 20894
Added:
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ShippingWorkItemHandler.java
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/OrderWorkDefinitions.conf
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/drools.rulebase.conf
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/icons/
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/icons/shipping.GIF
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/discount.drl
Modified:
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/OrderExample.java
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/assignment.dslr
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/logging.drl
Log:
- Order example
Modified: 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 2008-07-03 07:29:13 UTC (rev 20893)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/Order.java 2008-07-03 08:26:27 UTC (rev 20894)
@@ -1,15 +1,23 @@
package org.drools.examples.process.order;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
public class Order {
private String orderId;
private String customerId;
+ private int discountPercentage;
+ private Date date;
private List<OrderItem> orderItems = new ArrayList<OrderItem>();
private List<String> errorList;
+ private String trackingId;
+ public Order() {
+ date = new Date();
+ }
+
public String getOrderId() {
return orderId;
}
@@ -30,6 +38,18 @@
return orderItems;
}
+ public int getDiscountPercentage() {
+ return discountPercentage;
+ }
+
+ public void setDiscountPercentage(int discountPercentage) {
+ this.discountPercentage = discountPercentage;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
public void addOrderItem(String itemId, int amount, double price) {
orderItems.add(new OrderItem(itemId, amount, price));
}
@@ -53,6 +73,18 @@
errorList.add(error);
}
+ public String getTrackingId() {
+ return trackingId;
+ }
+
+ public void setTrackingId(String trackingId) {
+ this.trackingId = trackingId;
+ }
+
+ public String toString() {
+ return "Order " + orderId;
+ }
+
public class OrderItem {
private String itemId;
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/OrderExample.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/OrderExample.java 2008-07-03 07:29:13 UTC (rev 20893)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/OrderExample.java 2008-07-03 08:26:27 UTC (rev 20894)
@@ -28,6 +28,9 @@
import org.drools.StatefulSession;
import org.drools.audit.WorkingMemoryFileLogger;
import org.drools.compiler.PackageBuilder;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.impl.demo.UIWorkItemHandler;
import org.drools.rule.Package;
@@ -43,6 +46,7 @@
private JComboBox itemComboBox;
private JTextField amountTextField;
private JTextField customerIdTextField;
+ private JTextField emailTextField;
public static void main(String[] args) {
new OrderExample().setVisible(true);
@@ -109,6 +113,21 @@
c.insets = new Insets(5, 5, 5, 5);
panel.add(amountTextField, c);
+ label = new JLabel("Email");
+ c = new GridBagConstraints();
+ c.gridy = 3;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(label, c);
+
+ emailTextField = new JTextField();
+ c = new GridBagConstraints();
+ c.gridx = 1;
+ c.weightx = 1;
+ c.gridy = 3;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(emailTextField, c);
+
JButton createOrderButton = new JButton("Create");
createOrderButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -116,7 +135,7 @@
}
});
c = new GridBagConstraints();
- c.gridy = 3;
+ c.gridy = 4;
c.insets = new Insets(5, 5, 5, 5);
panel.add(createOrderButton, c);
@@ -132,7 +151,7 @@
});
c = new GridBagConstraints();
c.gridwidth = 2;
- c.gridy = 4;
+ c.gridy = 5;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
@@ -165,9 +184,28 @@
itemCatalog.addItem(i);
session.setGlobal("itemCatalog", itemCatalog);
+ session.getWorkItemManager().registerWorkItemHandler("Shipping", new ShippingWorkItemHandler(session));
+
+ session.getWorkItemManager().registerWorkItemHandler("Email", new WorkItemHandler() {
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ System.out.println("***********************************************************");
+ System.out.println("Sending email:");
+ System.out.println("From: " + workItem.getParameter("From"));
+ System.out.println("To: " + workItem.getParameter("To"));
+ System.out.println("Subject: " + workItem.getParameter("Subject"));
+ System.out.println("Text: ");
+ System.out.println(workItem.getParameter("Text"));
+ System.out.println("***********************************************************");
+ manager.completeWorkItem(workItem.getId(), null);
+ }
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+ });
+
UIWorkItemHandler handler = new UIWorkItemHandler();
session.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
handler.setVisible(true);
+
} catch (Throwable t) {
t.printStackTrace();
}
@@ -208,7 +246,8 @@
session.insert(order);
Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put("orderId", order.getOrderId());
+ parameters.put("order", order);
+ parameters.put("email", emailTextField.getText());
session.startProcess("org.drools.examples.process.ruleset.RuleSetExample", parameters);
session.fireAllRules();
}
@@ -229,6 +268,9 @@
Reader dsl = new InputStreamReader(
OrderExample.class.getResourceAsStream("assignment.dsl"));
builder.addPackageFromDrl(source, dsl);
+ source = new InputStreamReader(
+ OrderExample.class.getResourceAsStream("discount.drl"));
+ builder.addPackageFromDrl(source);
RuleBaseConfiguration configuration = new RuleBaseConfiguration();
configuration.setAdvancedProcessRuleIntegration(true);
RuleBase ruleBase = RuleBaseFactory.newRuleBase(configuration);
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ShippingWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ShippingWorkItemHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/ShippingWorkItemHandler.java 2008-07-03 08:26:27 UTC (rev 20894)
@@ -0,0 +1,33 @@
+package org.drools.examples.process.order;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.WorkingMemory;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+
+public class ShippingWorkItemHandler implements WorkItemHandler {
+
+ private WorkingMemory workingMemory;
+ private int trackingCounter;
+
+ public ShippingWorkItemHandler(WorkingMemory workingMemory) {
+ this.workingMemory = workingMemory;
+ }
+
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ Order order = (Order) workItem.getParameter("order");
+ System.out.println("Shipping order " + order.getOrderId());
+ order.setTrackingId("Tracking-" + ++trackingCounter);
+ workingMemory.update(workingMemory.getFactHandle(order), order);
+ Map<String, Object> results = new HashMap<String, Object>();
+ results.put("trackingId", order.getTrackingId());
+ manager.completeWorkItem(workItem.getId(), results);
+ }
+
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+
+}
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/OrderWorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/OrderWorkDefinitions.conf (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/OrderWorkDefinitions.conf 2008-07-03 08:26:27 UTC (rev 20894)
@@ -0,0 +1,23 @@
+// We use MVEL to return a List of work definitions
+// The properties of the work definitions are specified as a Map<String, Object>
+// The allowed properties are name, parameters, displayName, icon and customEditor
+// The returned result should thus be of type List<Map<String, Object>>
+import org.drools.process.core.datatype.impl.type.StringDataType;
+import org.drools.process.core.datatype.impl.type.DateDataType;
+
+[
+
+ [
+ "name" : "Shipping",
+ "parameters" : [
+ "orderId" : new StringDataType(),
+ ],
+ "results" : [
+ "trackerId" : new StringDataType(),
+ ],
+ "displayName" : "Shipping",
+ "icon" : "icons/shipping.gif",
+ "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+ ]
+
+]
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/drools.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/drools.rulebase.conf (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/META-INF/drools.rulebase.conf 2008-07-03 08:26:27 UTC (rev 20894)
@@ -0,0 +1 @@
+drools.workDefinitions = WorkDefinitions.conf OrderWorkDefinitions.conf
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/icons/shipping.GIF
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/resources/icons/shipping.GIF
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: 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 2008-07-03 07:29:13 UTC (rev 20893)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/RuleSetExample.rf 2008-07-03 08:26:27 UTC (rev 20894)
@@ -9,9 +9,15 @@
<import name="org.drools.examples.process.order.Order" />
</imports>
<variables>
- <variable name="orderId" >
+ <variable name="order" >
+ <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
+ </variable>
+ <variable name="trackingId" >
<type name="org.drools.process.core.datatype.impl.type.StringDataType" />
</variable>
+ <variable name="email" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </variable>
</variables>
<swimlanes>
<swimlane name="SalesRepresentative" />
@@ -19,55 +25,81 @@
</header>
<nodes>
+ <humanTask id="17" name="Verify Order" x="73" y="505" width="114" height="40" swimlane="SalesRepresentative" >
+ <work name="Human Task" >
+ <parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" >Verify Order</parameter>
+ <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >#{order} has been shipped, verify that it reaches its destination correctly</parameter>
+ <parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </work>
+ </humanTask>
<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" />
+ <join id="16" name="" x="117" y="73" width="21" height="18" type="2" />
+ <ruleSet id="2" name="Validate Order" x="88" y="104" 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="1" type="rule" dialect="mvel" >Order( price > 1000 )</constraint>
- <constraint toNodeId="9" toType="DROOLS_DEFAULT" name="invalid order" priority="2" type="rule" dialect="mvel" >Order( errorList != null )</constraint>
+ <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" >
+ <join id="6" name="" x="119" y="262" width="20" height="23" type="2" />
+ <ruleSet id="7" name="Calculate Discount" x="74" y="312" width="108" height="40" ruleFlowGroup="discount" />
+ <end id="8" name="End" x="90" y="565" width="80" height="40" />
+ <humanTask id="9" name="Correct Order" x="185" y="104" width="96" height="40" swimlane="SalesRepresentative" >
<work name="Human Task" >
- <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >Invalid order #{orderId}, needs to be corrected (contact customer if necessary)</parameter>
<parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
<parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" >Correct Order</parameter>
+ <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >Invalid #{order}, needs to be corrected (contact customer if necessary)</parameter>
<parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
</work>
</humanTask>
- <humanTask id="10" name="Follow-up Order" x="144" y="215" width="106" height="40" swimlane="SalesRepresentative" >
+ <humanTask id="10" name="Follow-up Order" x="8" y="204" width="106" height="40" swimlane="SalesRepresentative" >
<work name="Human Task" >
- <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >This is a large order, follow up this order manually</parameter>
<parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
<parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" >Follow-up Order</parameter>
+ <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" >#{order} is a large order, follow up manually</parameter>
<parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
</work>
</humanTask>
- <humanTask id="11" name="Human Task" x="72" y="340" width="111" height="40" >
- <work name="Human Task" >
- <parameter name="Comment" type="org.drools.process.core.datatype.impl.type.StringDataType" />
- <parameter name="Priority" type="org.drools.process.core.datatype.impl.type.StringDataType" />
- <parameter name="TaskName" type="org.drools.process.core.datatype.impl.type.StringDataType" />
- <parameter name="ActorId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <workItem id="12" name="Email" x="89" y="441" width="80" height="40" >
+ <work name="Email" >
+ <parameter name="Text" type="org.drools.process.core.datatype.impl.type.StringDataType" >Dear customer,
+
+#{order} is being shipped.
+You can track your shipment at our website using tracking id #{trackingId}.
+
+John Johnsson,
+Sales departement manager
+MyCompany.com</parameter>
+ <parameter name="To" type="org.drools.process.core.datatype.impl.type.StringDataType" >#{email}</parameter>
+ <parameter name="Subject" type="org.drools.process.core.datatype.impl.type.StringDataType" >#{order}</parameter>
+ <parameter name="From" type="org.drools.process.core.datatype.impl.type.StringDataType" >orders at mycompany.com</parameter>
</work>
- </humanTask>
+ </workItem>
+ <workItem id="13" name="Shipping" x="88" y="376" width="80" height="40" >
+ <work name="Shipping" >
+ <parameter name="orderId" type="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </work>
+ <mapping type="in" from="order" to="order" />
+ <mapping type="out" from="trackingId" to="trackingId" />
+ </workItem>
</nodes>
<connections>
- <connection from="1" to="2" />
+ <connection from="12" to="17" />
+ <connection from="1" to="16" />
+ <connection from="9" to="16" bendpoints="[233,81]" />
+ <connection from="16" to="2" />
<connection from="2" to="5" />
- <connection from="9" to="6" />
- <connection from="10" to="6" />
+ <connection from="10" to="6" bendpoints="[60,273]" />
<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" />
+ <connection from="6" to="7" />
+ <connection from="17" to="8" />
+ <connection from="5" to="9" bendpoints="[232,171]" />
+ <connection from="5" to="10" bendpoints="[60,171]" />
+ <connection from="13" to="12" />
+ <connection from="7" to="13" />
</connections>
</process>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dslr
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dslr 2008-07-03 07:29:13 UTC (rev 20893)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dslr 2008-07-03 08:26:27 UTC (rev 20894)
@@ -25,4 +25,11 @@
- without actor id
then
Set actor id "Senior Sales Representative"
-end
\ No newline at end of file
+end
+
+rule "RuleName"
+ when
+ // conditions
+ then
+ // actions
+end
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/discount.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/discount.drl (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/discount.drl 2008-07-03 08:26:27 UTC (rev 20894)
@@ -0,0 +1,20 @@
+package org.drools.examples.process.order
+
+import java.util.Date
+import java.util.Calendar
+
+function int getHourOfDate(Date date) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ return calendar.get(Calendar.HOUR_OF_DAY);
+}
+
+rule "5% discount if order includes laptop and order after 18h" ruleflow-group "discount"
+ when
+ o: Order( date: date )
+ eval( getHourOfDate(date) >= 18 )
+ Order.OrderItem( itemId == "I-5432" ) from o.getOrderItems()
+ then
+ System.out.println("Applying a 5% discount");
+ o.setDiscountPercentage(5);
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/logging.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/logging.drl 2008-07-03 07:29:13 UTC (rev 20893)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/logging.drl 2008-07-03 08:26:27 UTC (rev 20894)
@@ -5,11 +5,12 @@
import org.drools.process.core.context.variable.VariableScope
import org.drools.process.instance.context.variable.VariableScopeInstance
-rule "WorkItemLogging" salience 25
+rule "Log the execution of 'Correct Order'" salience 25
when
workItemNodeInstance: WorkItemNodeInstance( workItemId <= 0, node.name == "Correct Order" )
workItem: WorkItemImpl( state == WorkItemImpl.PENDING ) from workItemNodeInstance.getWorkItem()
then
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) workItemNodeInstance.getProcessInstance().getContextInstance(VariableScope.VARIABLE_SCOPE);
- System.out.println("LOGGING: Requesting the correction of order " + variableScopeInstance.getVariable("orderId"));
+ VariableScopeInstance variableScopeInstance =
+ (VariableScopeInstance) workItemNodeInstance.getProcessInstance().getContextInstance(VariableScope.VARIABLE_SCOPE);
+ System.out.println("LOGGING: Requesting the correction of " + variableScopeInstance.getVariable("order"));
end
More information about the jboss-svn-commits
mailing list