[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