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