[jboss-svn-commits] JBL Code SVN: r20849 - in labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main: rules/org/drools/examples/process/order and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jun 30 20:27:21 EDT 2008
Author: KrisVerlaenen
Date: 2008-06-30 20:27:21 -0400 (Mon, 30 Jun 2008)
New Revision: 20849
Added:
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dsl
labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dslr
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/rules/org/drools/examples/process/order/RuleSetExample.rf
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/workflow_rules.drl
Log:
- Order example
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-06-30 20:58:23 UTC (rev 20848)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/process/order/OrderExample.java 2008-07-01 00:27:21 UTC (rev 20849)
@@ -1,11 +1,27 @@
package org.drools.examples.process.order;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.WindowConstants;
+
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
@@ -15,13 +31,119 @@
import org.drools.process.instance.impl.demo.UIWorkItemHandler;
import org.drools.rule.Package;
-public class OrderExample {
+public class OrderExample extends JFrame {
+ private static final long serialVersionUID = 4L;
+
+ private RuleBase ruleBase;
+ private StatefulSession session;
+ private WorkingMemoryFileLogger logger;
+ private int orderCounter;
+
+ private JComboBox itemComboBox;
+ private JTextField amountTextField;
+ private JTextField customerIdTextField;
+
public static void main(String[] args) {
+ new OrderExample().setVisible(true);
+ }
+
+ public OrderExample() {
+ setSize(new Dimension(400, 220));
+ setTitle("Order Example");
+ setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ createWorkingMemory();
+ initializeComponent();
+ }
+
+ private void initializeComponent() {
+ JPanel panel = new JPanel();
+ panel.setLayout(new GridBagLayout());
+ getRootPane().setLayout(new BorderLayout());
+ getRootPane().add(panel, BorderLayout.CENTER);
+
+ JLabel label = new JLabel("CustomerId");
+ GridBagConstraints c = new GridBagConstraints();
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(label, c);
+
+ customerIdTextField = new JTextField("A-12345");
+ c = new GridBagConstraints();
+ c.gridx = 1;
+ c.weightx = 1;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(customerIdTextField, c);
+
+ label = new JLabel("Item");
+ c = new GridBagConstraints();
+ c.gridy = 1;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(label, c);
+
+ itemComboBox = new JComboBox(new Object[] {
+ new ItemInfo("PC game", "I-9876", 50.0D),
+ new ItemInfo("Laptop", "I-5432", 500.0D),
+ new ItemInfo("Book", "Unknown", 5.0D),
+ });
+ c = new GridBagConstraints();
+ c.gridx = 1;
+ c.weightx = 1;
+ c.gridy = 1;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(itemComboBox, c);
+
+ label = new JLabel("Amount");
+ c = new GridBagConstraints();
+ c.gridy = 2;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(label, c);
+
+ amountTextField = new JTextField("1");
+ c = new GridBagConstraints();
+ c.gridx = 1;
+ c.weightx = 1;
+ c.gridy = 2;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(amountTextField, c);
+
+ JButton createOrderButton = new JButton("Create");
+ createOrderButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ createOrder();
+ }
+ });
+ c = new GridBagConstraints();
+ c.gridy = 3;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(createOrderButton, c);
+
+ final JCheckBox checkBox = new JCheckBox("Debugging output");
+ checkBox.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (checkBox.isSelected()) {
+ addDebugRules();
+ } else {
+ removeDebugRules();
+ }
+ }
+ });
+ c = new GridBagConstraints();
+ c.gridwidth = 2;
+ c.gridy = 4;
+ c.weightx = 1;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ panel.add(checkBox, c);
+ }
+
+ private void createWorkingMemory() {
try {
- RuleBase ruleBase = createKnowledgeBase();
- StatefulSession session = ruleBase.newStatefulSession();
- WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger(session);
+ ruleBase = createKnowledgeBase();
+ session = ruleBase.newStatefulSession();
+ logger = new WorkingMemoryFileLogger(session);
CustomerService customerService = new DefaultCustomerService();
Customer c = new Customer("A-12345");
@@ -35,31 +157,61 @@
ItemCatalog itemCatalog = new DefaultItemCatalog();
Item i = new Item("I-9876");
- i.setName("Rampage !!! PC game");
+ i.setName("PC game");
i.setMinimalAge(18);
- //itemCatalog.addItem(i);
+ itemCatalog.addItem(i);
+ i = new Item("I-5432");
+ i.setName("Laptop");
+ 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();
-
- logger.writeToDisk();
} catch (Throwable t) {
t.printStackTrace();
}
}
+
+ private void addDebugRules() {
+ try {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new InputStreamReader(
+ OrderExample.class.getResourceAsStream("logging.drl"));
+ builder.addPackageFromDrl(source);
+ for (Package p: builder.getPackages()) {
+ if (!p.isValid()) {
+ System.err.println("Invalid package " + p.getName() + ": " + p.getErrorSummary());
+ }
+ ruleBase.addPackage(p);
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+
+ private void removeDebugRules() {
+ ruleBase.removePackage("org.drools.examples.process.order.logging");
+ }
+
+ public void dispose() {
+ super.dispose();
+ logger.writeToDisk();
+ }
+
+ private void createOrder() {
+ Order order = new Order();
+ order.setOrderId("Order-" + ++orderCounter);
+ order.setCustomerId(customerIdTextField.getText());
+ ItemInfo itemInfo = (ItemInfo) itemComboBox.getSelectedItem();
+ order.addOrderItem(itemInfo.getItemId(), new Integer(amountTextField.getText()), itemInfo.getPrice());
+ 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();
+ }
private static RuleBase createKnowledgeBase() throws Exception {
PackageBuilder builder = new PackageBuilder();
@@ -73,8 +225,10 @@
OrderExample.class.getResourceAsStream("validation.drl"));
builder.addPackageFromDrl(source);
source = new InputStreamReader(
- OrderExample.class.getResourceAsStream("logging.drl"));
- builder.addPackageFromDrl(source);
+ OrderExample.class.getResourceAsStream("assignment.dslr"));
+ Reader dsl = new InputStreamReader(
+ OrderExample.class.getResourceAsStream("assignment.dsl"));
+ builder.addPackageFromDrl(source, dsl);
RuleBaseConfiguration configuration = new RuleBaseConfiguration();
configuration.setAdvancedProcessRuleIntegration(true);
RuleBase ruleBase = RuleBaseFactory.newRuleBase(configuration);
@@ -86,4 +240,27 @@
}
return ruleBase;
}
+
+ private class ItemInfo {
+ private String name;
+ private String itemId;
+ private double price;
+ public ItemInfo(String name, String itemId, double price) {
+ this.name = name;
+ this.itemId = itemId;
+ this.price = price;
+ }
+ public String getName() {
+ return name;
+ }
+ public String getItemId() {
+ return itemId;
+ }
+ public double getPrice() {
+ return price;
+ }
+ public String toString() {
+ return name;
+ }
+ }
}
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-06-30 20:58:23 UTC (rev 20848)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/RuleSetExample.rf 2008-07-01 00:27:21 UTC (rev 20849)
@@ -23,8 +23,8 @@
<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="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="6" toType="DROOLS_DEFAULT" name="default" priority="3" type="rule" dialect="mvel" >eval(true)</constraint>
</constraints>
</split>
Added: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dsl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dsl (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dsl 2008-07-01 00:27:21 UTC (rev 20849)
@@ -0,0 +1,7 @@
+[condition][HumanTaskWorkItem]- with actor id "{actorId}"=parameters['ActorId'] == "{actorId}"
+[condition][HumanTaskWorkItem]- without actor id=parameters['ActorId'] == null
+[condition][HumanTaskWorkItem]- with task name "{taskName}"=parameters['TaskName'] == "{taskName}"
+[condition][HumanTaskWorkItem]There is a human task=workItemNodeInstance: WorkItemNodeInstance( ) workItem: WorkItemImpl( name == "Human Task" ) from workItemNodeInstance.workItem
+[consequence][]Set actor id "{actorId}"=workItem.setParameter("ActorId", "{actorId}"); update(workItemNodeInstance);
+[condition][HumanTaskWorkItem]- with priority {priority}=parameters['Priority'] == {priority}
+[condition][HumanTaskWorkItem]Process "{processId}" contains a human task=workItemNodeInstance: WorkItemNodeInstance( processInstance.processId == "{processId}" ) workItem: WorkItemImpl( name == "Human Task" ) from workItemNodeInstance.workItem
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/assignment.dslr 2008-07-01 00:27:21 UTC (rev 20849)
@@ -0,0 +1,28 @@
+package org.drools.examples.process.order
+
+import org.drools.process.instance.impl.WorkItemImpl
+import org.drools.workflow.instance.node.WorkItemNodeInstance
+
+expander assignment.dsl
+
+/********** Generic assignment rules **********/
+
+rule "Assign 'Correct Order' to any sales representative" salience 30
+ when
+ There is a human task
+ - with task name "Correct Order"
+ - without actor id
+ then
+ Set actor id "Sales Representative"
+end
+
+/********** Assignment rules for the RuleSetExample process **********/
+
+rule "Assign 'Follow-up Order' to a senior sales representative" salience 40
+ when
+ Process "org.drools.examples.process.ruleset.RuleSetExample" contains a human task
+ - with task name "Follow-up Order"
+ - without actor id
+ then
+ Set actor id "Senior Sales Representative"
+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-06-30 20:58:23 UTC (rev 20848)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/logging.drl 2008-07-01 00:27:21 UTC (rev 20849)
@@ -5,9 +5,9 @@
import org.drools.process.core.context.variable.VariableScope
import org.drools.process.instance.context.variable.VariableScopeInstance
-rule "WorkItemLogging" salience 30
+rule "WorkItemLogging" salience 25
when
- workItemNodeInstance: WorkItemNodeInstance( workItemId == -1, node.name == "Correct Order" )
+ 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);
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/workflow_rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/workflow_rules.drl 2008-06-30 20:58:23 UTC (rev 20848)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/process/order/workflow_rules.drl 2008-07-01 00:27:21 UTC (rev 20849)
@@ -5,7 +5,7 @@
rule "Execute Pending Work Item" salience 20
when
- workItemNodeInstance: WorkItemNodeInstance( workItemId == -1 )
+ workItemNodeInstance: WorkItemNodeInstance( workItemId <= 0 )
workItem: WorkItemImpl( state == WorkItemImpl.PENDING ) from workItemNodeInstance.getWorkItem()
then
workItemNodeInstance.getProcessInstance().getWorkingMemory()
More information about the jboss-svn-commits
mailing list