[jboss-svn-commits] JBL Code SVN: r17512 - in labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services: rules and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 2 20:11:17 EST 2008


Author: jeffdelong
Date: 2008-01-02 20:11:17 -0500 (Wed, 02 Jan 2008)
New Revision: 17512

Added:
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java
   labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java
Log:


Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,28 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * This is a simple fact class to mark something as approved.
+ * @author Michael Neale
+ *
+ */
+public class Approve implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+    
+	private String reason;
+
+	public Approve(String reason) {
+		this.reason = reason;
+	}
+
+	public String getReason() {
+		return reason;
+	}
+
+	public void setReason(String reason) {
+		this.reason = reason;
+	}
+
+}

Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated 
+ * by the @authors tag. All rights reserved. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package org.jboss.soa.esb.services.rules;
+
+/**
+ * @author
+ */
+public class Customer implements java.io.Serializable{
+
+	/**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+    private String name;
+    
+    private int discount;
+        
+    public Customer(String name,
+                    int discount) {
+        this.name = name;
+        this.discount = discount;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(int discount) {
+        this.discount = discount;
+    }
+
+    public String toString() {
+    	return name;
+    }
+	
+
+}

Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,44 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * This represents obviously a driver who is applying for an insurance Policy.
+ * @author Michael Neale
+ *
+ */
+public class Driver implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+	private String name = "Mr Joe Blogs";
+	private Integer age = new Integer(30);
+	private Integer priorClaims = new Integer(0);	
+	private String  locationRiskProfile = "LOW";
+	
+	public Integer getAge() {
+		return age;
+	}
+	public void setAge(Integer age) {
+		this.age = age;
+	}
+	public String getLocationRiskProfile() {
+		return locationRiskProfile;
+	}
+	public void setLocationRiskProfile(String locationRiskProfile) {
+		this.locationRiskProfile = locationRiskProfile;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Integer getPriorClaims() {
+		return priorClaims;
+	}
+	public void setPriorClaims(Integer priorClaims) {
+		this.priorClaims = priorClaims;
+	}
+	
+	
+}

Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,642 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.soa.esb.services.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.jboss.internal.soa.esb.services.rules.DroolsRuleService;
+import org.jboss.internal.soa.esb.services.rules.RuleServiceException;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.message.mapping.ObjectMapper;
+import org.jboss.soa.esb.message.mapping.ObjectMappingException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * 
+ * @author jdelong at redhat.com
+ *
+ */
+public class DroolsRuleServiceUnitTest
+{
+	
+	Message message;
+	Message message1;
+	Message message2;
+	Message message3;
+	Message message4;
+	Message message5;
+	Message message6;
+	Message message7;
+	Message message8;
+	Message message9;
+	Message message10;
+
+	Order order;	
+	Order order1;
+	Order order2;
+	Order order3;
+	Order order4;
+	Order order5;
+	Order order6;
+	Order order7;
+	Order order8;
+	Order order9;
+	Order order10;
+	
+    Customer customer = new Customer( "mark", 0 );
+    Customer customer1 = new Customer( "michael", 0 );
+    Customer customer2 = new Customer( "tirelli", 0 );
+
+	
+    List<Order> orders = new ArrayList();
+	
+	List<Object> objectList;
+	List<Object> objectList1;
+	List<Object> objectList2;
+	List<Object> objectList3;
+	List<Object> objectList4;
+	List<Object> objectList5;
+	List<Object> objectList6;
+	List<Object> objectList7;
+	List<Object> objectList8;
+	List<Object> objectList9;
+	List<Object> objectList10;
+	
+	Driver driver = new Driver();
+	Policy policy = new Policy();
+
+	
+	@Before
+	public void setUpSingleOrder()
+	{	
+		try {
+		    //new message and order
+			message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+			order = new Order();
+			order.setOrderId(0);
+			order.setQuantity(20);
+		    order.setUnitPrice(new Float("20.0"));
+			message.getBody().add("Order", order);
+		
+			//  extract the order from the message, so the drools can process it
+		    List<String> messagePathList = new ArrayList<String>();
+		    messagePathList.add("body.Order");
+		    ObjectMapper mapper = new ObjectMapper();
+		    objectList = mapper.createObjectList(message, messagePathList);
+		} catch (ObjectMappingException ome) {
+			System.out.println("Caught ObjectMappingException" + ome.getMessage());
+		}	
+	}
+
+	
+	@Before
+	public void setUpMultipleOrders()
+	{	
+		try {
+		    //new message and orders
+			message1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+			order1 = new Order();
+			order1.setOrderId(1);
+		    order1.setQuantity(20);
+		    order1.setUnitPrice(new Float("50.0"));
+			message1.getBody().add("Order1", order1);
+		    
+		    order2 = new Order();
+			order2.setOrderId(2);
+		    order2.setQuantity(5);
+		    order2.setUnitPrice(new Float("50.0"));
+			message1.getBody().add("Order2", order2);
+		
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList = new ArrayList<String>();
+		    messagePathList.add("body.Order1");
+		    messagePathList.add("body.Order2");
+		    ObjectMapper mapper = new ObjectMapper();
+		    objectList1 = mapper.createObjectList(message1, messagePathList);
+		    //System.out.println("objectList1 has " + objectList1.size() + " elements: " + objectList1.toString());
+		} catch (ObjectMappingException ome) {
+			System.out.println("Caught ObjectMappingException" + ome.getMessage());
+		}
+	}
+
+
+	@Before
+	public void setUpOrderCollection()
+	{	
+		try {
+		    //new messages
+			message2 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+			order1 = new Order();
+			order1.setOrderId(1);
+		    order1.setQuantity(20);
+		    order1.setUnitPrice(new Float("50.0"));
+		    
+		    order2 = new Order();
+			order2.setOrderId(2);
+		    order2.setQuantity(5);
+		    order2.setUnitPrice(new Float("50.0"));
+
+		    order3 = new Order();
+			order3.setOrderId(3);
+		    order3.setQuantity(9);
+		    order3.setUnitPrice(new Float("50.0"));
+
+		    order4 = new Order();
+			order4.setOrderId(4);
+		    order4.setQuantity(25);
+		    order4.setUnitPrice(new Float("50.0"));
+
+		    orders.add(order1);
+		    orders.add(order2);
+		    orders.add(order3);
+		    orders.add(order4);
+		    		    		    
+			message2.getBody().add("Orders", orders);
+
+		    
+			//  extract the order from the message, so the drools can process it
+		    List<String> messagePathList = new ArrayList<String>();
+		    messagePathList.add("body.Orders");
+		    ObjectMapper mapper = new ObjectMapper();
+		    objectList2 = mapper.createObjectList(message2, messagePathList);
+		   // System.out.println("objectList2 has " + objectList2.size() + " elements: " + objectList2.toString());
+		} catch (ObjectMappingException ome) {
+			System.out.println("Caught ObjectMappingException" + ome.getMessage());
+		}
+	
+	}
+
+	
+	@Test
+	public void drlStateless() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatelessRules("drl/OrderDiscount.drl", null, false, message, objectList);
+            assertEquals(order.getDiscount(),10.0);
+            assertEquals("10%",message.getBody().get("DiscountObject0"));
+            System.out.println("test drlStateless passed");
+           
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+
+	@Test
+	public void drlStateful() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatefulRules("drl/OrderDiscount.drl", null, false, true, message, objectList);
+            assertEquals(order.getDiscount(),10.0);
+            assertEquals("10%",message.getBody().get("DiscountObject0"));
+            Order orderFromMessage = (Order) message.getBody().get("Order");
+            assertEquals(orderFromMessage.getDiscount(),10.0);
+            System.out.println("test drlStateful passed");
+                                 
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+
+	
+	@Test
+	public void drlStatelessMultipleObjects() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatelessRules("drl/OrderDiscount.drl", null, false, message1, objectList1);
+            assertEquals(order1.getDiscount(),10.0);
+            assertEquals(order2.getDiscount(),0.0);
+            assertEquals("10%",message1.getBody().get("DiscountObject1"));
+            assertEquals("0%",message1.getBody().get("DiscountObject2"));
+            Order order1FromMessage = (Order) message1.getBody().get("Order1");
+            assertEquals(order1FromMessage.getDiscount(),10.0);
+            Order order2FromMessage = (Order) message1.getBody().get("Order2");
+            assertEquals(order2FromMessage.getDiscount(),0.0);
+            System.out.println("test drlStatelessMultipleObjects passed");
+                                  
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+
+	
+	@Test
+	public void drlStatefulMultipleObjects() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatefulRules("drl/OrderDiscount.drl", null, false, true, message1, objectList1);
+            assertEquals(order1.getDiscount(),10.0);
+            assertEquals(order2.getDiscount(),0.0);
+            assertEquals("10%",message1.getBody().get("DiscountObject1"));
+            assertEquals("0%",message1.getBody().get("DiscountObject2"));
+            Order order1FromMessage = (Order) message1.getBody().get("Order1");
+            assertEquals(order1FromMessage.getDiscount(),10.0);
+            Order order2FromMessage = (Order) message1.getBody().get("Order2");
+            assertEquals(order2FromMessage.getDiscount(),0.0);
+            System.out.println("test drlStatefulMultipleObjects passed");
+                     
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+
+	@Test
+	public void drlStatelfulCollection() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatefulRules("drl/OrderDiscountWithCollections.drl", null, false, true, message2, objectList2);
+            assertEquals("10%",message2.getBody().get("DiscountObject1"));
+            assertEquals("0%",message2.getBody().get("DiscountObject2"));
+            assertEquals("0%",message2.getBody().get("DiscountObject3"));
+            assertEquals("10%",message2.getBody().get("DiscountObject4"));
+            // use arrays because we can control which element is where
+            // making it easy to compare in this test case
+            Order[] updatedOrders = (Order[]) message2.getBody().get("UpdatedOrders");
+            Order order1FromMessage = (Order) updatedOrders[0];
+            Order order2FromMessage = (Order) updatedOrders[1];
+            Order order3FromMessage = (Order) updatedOrders[2];
+            Order order4FromMessage = (Order) updatedOrders[3];
+
+            assertEquals(order1FromMessage.getDiscount(),10.0);
+            assertEquals(order2FromMessage.getDiscount(),0.0);
+            assertEquals(order3FromMessage.getDiscount(),0.0);
+            assertEquals(order4FromMessage.getDiscount(),10.0);
+            System.out.println("test drlStatefulCollections passed");
+                      
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+	
+	@Before
+	public void setUpInsurance()
+	{	
+		try {
+		    //new messages
+			message3 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+			driver = new Driver();
+			policy = new Policy();
+			driver.setAge(30);
+			policy.setDriver(driver);
+			message3.getBody().add("Driver", driver);
+			message3.getBody().add("Policy", policy);
+		
+			//  extract the order from the message, so the drools can process it
+		    List<String> messagePathList = new ArrayList<String>();
+		    messagePathList.add("body.Driver");
+		    messagePathList.add("body.Policy");
+		    ObjectMapper mapper = new ObjectMapper();
+		    objectList3 = mapper.createObjectList(message3, messagePathList);
+		} catch (ObjectMappingException ome) {
+			System.out.println("Caught ObjectMappingException" + ome.getMessage());
+		}	
+	}
+
+	
+	@Test
+	public void decisionTableStateless() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatelessRulesFromDecisionTable("decisionTable/PolicyPricing.xls",false, message3, objectList3);
+            Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+            assertEquals(policyFromMessage.getBasePrice(),120);
+            System.out.println("test decisionTableStateless passed");
+
+           
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+
+	
+	@Test
+	public void decisionTableStateful() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatefulRulesFromDecisionTable("decisionTable/PolicyPricing.xls",false, true, message3, objectList3);
+            Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+            assertEquals(policyFromMessage.getBasePrice(),120);
+            System.out.println("test decisionTableStateful passed");
+          
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+	
+	@Test
+	public void dslStateless() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+    		droolsRuleService.executeStatelessRules("dsl/approval.dslr", "dsl/acme.dsl", false, message3, objectList3);
+    		//Rejection rejectionFromMessage = (Rejection) message3.getBody().get("Rejection");
+    		Approve approveFromMessage = (Approve) message3.getBody().get("Approve");
+            assertEquals(approveFromMessage.getReason(), "Driver is safe and mature.");
+            System.out.println("test dslStateless passed");
+  
+           
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+
+	
+	@Test
+	public void dslStateful() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+        	droolsRuleService.executeStatefulRules("dsl/approval.dslr", "dsl/acme.dsl", false, true, message3, objectList3);
+      		// Rejection rejectionFromMessage = (Rejection) message3.getBody().get("Rejection");
+       		Approve approveFromMessage = (Approve) message3.getBody().get("Approve");
+            assertEquals(approveFromMessage.getReason(), "Driver is safe and mature.");
+            System.out.println("test dslStateful passed");
+          
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+	
+	@Test
+	public void ruleAgentStateless() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+        	droolsRuleService.executeStatelessRulesFromRuleAgent("ruleAgent/brmsdeployedrules.properties", message3, objectList3);       	
+            Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+            assertEquals(policyFromMessage.getBasePrice(),120);
+            System.out.println("test ruleAgentStateful passed");
+          
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+	
+	@Test
+	public void ruleAgentStateful() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+        	droolsRuleService.executeStatefulRulesFromRuleAgent("ruleAgent/brmsdeployedrules.properties", true, message3, objectList3);
+            Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+            assertEquals(policyFromMessage.getBasePrice(),120);
+            System.out.println("test ruleAgentStateful passed");
+          
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+	
+	
+	@Before
+	public void setUpMultipleOrdersForStatefulOverTime()
+	{	
+		try {
+		    //new message with just customer
+			message4 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+			message4.getBody().add("Customer", customer);
+
+			//  extract the customer from the message, so drools can process it
+		    List<String> messagePathList4 = new ArrayList<String>();
+		    messagePathList4.add("body.Customer");
+		    ObjectMapper mapper4 = new ObjectMapper();
+		    objectList4 = mapper4.createObjectList(message4, messagePathList4);
+		    //System.out.println("objectList4 has " + objectList4.size() + " elements: " + objectList4.toString());
+
+			
+			//new message and orders
+			message5 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+			order5 = new Order();
+			order5.setOrderId(5);
+		    order5.setQuantity(5);
+		    order5.setUnitPrice(new Float("50.0"));
+		    order5.setTotalPrice(order5.calculateTotalPrice());
+		    order5.setCustomer(customer);
+			message5.getBody().add("Order", order5);
+			
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList5 = new ArrayList<String>();
+		    messagePathList5.add("body.Order");
+		    messagePathList5.add("body.Customer");
+		    ObjectMapper mapper5 = new ObjectMapper();
+		    objectList5 = mapper5.createObjectList(message5, messagePathList5);
+		    //System.out.println("objectList5 has " + objectList5.size() + " elements: " + objectList5.toString());
+		    
+			message6 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+		    order6 = new Order();
+			order6.setOrderId(6);
+		    order6.setQuantity(10);
+		    order6.setUnitPrice(new Float("80.0"));
+		    order6.setTotalPrice(order6.calculateTotalPrice());
+		    order6.setCustomer(customer);
+			message6.getBody().add("Order", order6);
+
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList6 = new ArrayList<String>();
+		    messagePathList6.add("body.Order");
+		    ObjectMapper mapper6 = new ObjectMapper();
+		    objectList6 = mapper6.createObjectList(message6, messagePathList6);
+		    //System.out.println("objectList6 has " + objectList6.size() + " elements: " + objectList6.toString());
+
+			message7 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+		    order7 = new Order();
+			order7.setOrderId(7);
+		    order7.setQuantity(5);
+		    order7.setUnitPrice(new Float("60.0"));
+		    order7.setTotalPrice(order7.calculateTotalPrice());
+		    order7.setCustomer(customer1);
+			message7.getBody().add("Order", order7);
+			message7.getBody().add("Customer", customer1);
+
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList7 = new ArrayList<String>();
+		    messagePathList7.add("body.Order");
+		    messagePathList7.add("body.Customer");
+		    ObjectMapper mapper7 = new ObjectMapper();
+		    objectList7 = mapper7.createObjectList(message7, messagePathList7);
+		    //System.out.println("objectList7 has " + objectList7.size() + " elements: " + objectList7.toString());
+
+			message8 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+		    order8 = new Order();
+			order8.setOrderId(8);
+		    order8.setQuantity(5);
+		    order8.setUnitPrice(new Float("60.0"));
+		    order8.setTotalPrice(order8.calculateTotalPrice());
+		    order8.setCustomer(customer);
+			message8.getBody().add("Order", order8);
+
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList8 = new ArrayList<String>();
+		    messagePathList8.add("body.Order");
+		    ObjectMapper mapper8 = new ObjectMapper();
+		    objectList8 = mapper8.createObjectList(message8, messagePathList8);
+		    //System.out.println("objectList8 has " + objectList8.size() + " elements: " + objectList8.toString());
+
+			message9 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+		    order9 = new Order();
+			order9.setOrderId(9);
+		    order9.setQuantity(20);
+		    order9.setUnitPrice(new Float("60.0"));
+		    order9.setTotalPrice(order9.calculateTotalPrice());
+		    order9.setCustomer(customer1);
+			message9.getBody().add("Order", order9);
+
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList9 = new ArrayList<String>();
+		    messagePathList9.add("body.Order");
+		    ObjectMapper mapper9 = new ObjectMapper();
+		    objectList9 = mapper9.createObjectList(message9, messagePathList9);
+		    //System.out.println("objectList9 has " + objectList9.size() + " elements: " + objectList9.toString());
+
+			message10 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+		    order10 = new Order();
+			order10.setOrderId(10);
+		    order10.setQuantity(30);
+		    order10.setUnitPrice(new Float("60.0"));
+		    order10.setTotalPrice(order10.calculateTotalPrice());
+		    order10.setCustomer(customer2);
+			message10.getBody().add("Order", order10);
+			message10.getBody().add("Customer", customer2);
+
+			//  extract the order from the message, so drools can process it
+		    List<String> messagePathList10 = new ArrayList<String>();
+		    messagePathList10.add("body.Order");
+		    messagePathList10.add("body.Customer");
+		    ObjectMapper mapper10 = new ObjectMapper();
+		    objectList10 = mapper10.createObjectList(message10, messagePathList10);
+		    //System.out.println("objectList10 has " + objectList10.size() + " elements: " + objectList10.toString());
+
+		} catch (ObjectMappingException ome) {
+			System.out.println("Caught ObjectMappingException" + ome.getMessage());
+		}
+	}
+
+	@Test
+	public void drlStatefulOverTime() throws ObjectMappingException
+	{
+ 		DroolsRuleService droolsRuleService = new DroolsRuleService();
+        try {
+        	System.out.println("first send in customer mark");
+       		droolsRuleService.executeStatefulRules("drl/OrderDiscountOnMultipleOrders.drl", null, false, false, message4, objectList4);
+ 
+        	System.out.println("next send order 5 for customer mark ");
+  
+        	droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message5, objectList5);
+            Customer customerFromMessage5 = (Customer) message5.getBody().get("Customer");
+            assertNull(customerFromMessage5);
+            assertEquals(order5.getDiscount(), 0.0);
+ 
+           	System.out.println("next send order 6 for customer mark ");
+ 
+       		droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message6, objectList6);
+            Customer customerFromMessage6 = (Customer) message6.getBody().get("Customer");
+            assertEquals(customerFromMessage6.getDiscount(), 10);
+            assertEquals(order6.getDiscount(), 10.0);
+ 
+          	System.out.println("next send order 7 for customer michael ");
+  
+       		droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message7, objectList7);
+            Customer customerFromMessage7 = (Customer) message7.getBody().get("Customer");
+            assertEquals(customerFromMessage7.getDiscount(), 0);  
+            assertEquals(order7.getDiscount(), 0.0);
+ 
+          	System.out.println("next send order 8 for customer mark ");
+  
+      		droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message8, objectList8);
+            Customer customerFromMessage8 = (Customer) message8.getBody().get("Customer");
+            assertEquals(customerFromMessage8.getDiscount(), 10);
+            assertEquals(order8.getDiscount(), 10.0);
+ 
+        	System.out.println("next send order 9 for customer michael ");
+   
+     		droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message9, objectList9);
+            Customer customerFromMessage9 = (Customer) message9.getBody().get("Customer");
+            assertEquals(customerFromMessage9.getDiscount(), 10);
+            assertEquals(order9.getDiscount(), 10.0);
+  
+        	System.out.println("next send order 10 for customer tirelli ");
+  
+     		droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", true, message10, objectList10);
+            Customer customerFromMessage10 = (Customer) message10.getBody().get("Customer");
+            assertEquals(customerFromMessage10.getDiscount(), 10);
+            assertEquals(order10.getDiscount(), 10.0);
+            
+            System.out.println("test drlStateful with continuation passed");
+                                 
+        } catch (RuleServiceException rse) {
+            System.out.println("Exception was thrown.");
+            rse.printStackTrace();
+            assertTrue(false);
+        }
+	}
+
+
+	
+	public static junit.framework.Test suite() {
+		return new JUnit4TestAdapter(DroolsRuleServiceUnitTest.class);
+	}
+
+}

Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,81 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated 
+ * by the @authors tag. All rights reserved. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2007
+ */
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author kstam
+ *
+ */
+public class Order implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+    private int orderId;
+    private int quantity;
+    private Float unitPrice;
+    private double discount;
+    private Float totalPrice;
+    private Customer customer;
+    
+    public double getDiscount() {
+        return discount;
+    }
+    public void setDiscount(double discount) {
+        this.discount = discount;
+    }
+    public int getQuantity() {
+        return quantity;
+    }
+    public void setQuantity(int quantity) {
+        this.quantity = quantity;
+    }
+    public Float getTotalPrice() {
+         this.totalPrice = calculateTotalPrice();
+         return totalPrice;
+    }
+    public void setTotalPrice(Float totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+    public Float getUnitPrice() {
+        return unitPrice;
+    }
+    public void setUnitPrice(Float unitPrice) {
+        this.unitPrice = unitPrice;
+    }
+	public int getOrderId() {
+		return orderId;
+	}
+	public void setOrderId(int orderId) {
+		this.orderId = orderId;
+	}
+	public Customer getCustomer() {
+		return customer;
+	}
+	public void setCustomer(Customer customer) {
+		this.customer = customer;
+	}
+	
+	public Float calculateTotalPrice() {
+		return quantity * unitPrice;
+	}
+
+}

Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,59 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * This represents a policy that a driver is applying for. 
+ * 
+ * Obviously in the real world, there are actuaries to mess things up, but lets just pretend there is
+ * some simple base price and discount that we can calculate with relatively simple rules !
+ * 
+ * @author Michael Neale
+ */
+public class Policy implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+	private String type = "COMPREHENSIVE";
+	private boolean approved = false;
+	private int discountPercent = 0;
+	private int basePrice;
+	private Driver driver;
+
+	public boolean isApproved() {
+		return approved;
+	}
+	public void setApproved(boolean approved) {
+		this.approved = approved;
+	}
+	public int getDiscountPercent() {
+		return discountPercent;
+	}
+	public void setDiscountPercent(int discountPercent) {
+		this.discountPercent = discountPercent;
+	}
+	
+	public String getType() {
+		return type;
+	}
+	
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public void applyDiscount(int discount) {
+		discountPercent += discount;
+	}
+	public int getBasePrice() {
+		return basePrice;
+	}
+	public void setBasePrice(int basePrice) {
+		this.basePrice = basePrice;
+	}
+	public Driver getDriver() {
+		return driver;
+	}
+	public void setDriver(Driver driver) {
+		this.driver = driver;
+	}
+	
+}

Added: labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/JBESB_4_2_1_GA_CP/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java	2008-01-03 01:11:17 UTC (rev 17512)
@@ -0,0 +1,27 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * @author Michael Neale
+ */
+public class Rejection implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+    
+	private String reason;
+
+	public Rejection(String reason) {
+		this.reason = reason;
+	}
+
+	public String getReason() {
+		return reason;
+	}
+
+	public void setReason(String reason) {
+		this.reason = reason;
+	}
+	
+}




More information about the jboss-svn-commits mailing list