[jboss-svn-commits] JBL Code SVN: r14661 - in labs/jbossrules/trunk/experimental: src and 28 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Aug 27 15:29:57 EDT 2007
Author: fmeyer
Date: 2007-08-27 15:29:57 -0400 (Mon, 27 Aug 2007)
New Revision: 14661
Added:
labs/jbossrules/trunk/experimental/pom.xml
labs/jbossrules/trunk/experimental/src/
labs/jbossrules/trunk/experimental/src/java/
labs/jbossrules/trunk/experimental/src/java/org/
labs/jbossrules/trunk/experimental/src/java/org/acme/
labs/jbossrules/trunk/experimental/src/java/org/acme/insurance/
labs/jbossrules/trunk/experimental/src/java/org/acme/insurance/base/
labs/jbossrules/trunk/experimental/src/java/org/acme/insurance/web/
labs/jbossrules/trunk/experimental/src/main/
labs/jbossrules/trunk/experimental/src/main/java/
labs/jbossrules/trunk/experimental/src/main/java/org/
labs/jbossrules/trunk/experimental/src/main/java/org/acme/
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/AccessoriesCoverage.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Approve.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Driver.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/DriverAdditionalInfo.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Policy.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Rejection.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/SupplementalInfo.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/DroolsBusiness.java
labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/InsuranceServlet.java
labs/jbossrules/trunk/experimental/src/main/rules/
labs/jbossrules/trunk/experimental/src/main/rules/approval/
labs/jbossrules/trunk/experimental/src/main/rules/approval/approval.drl
labs/jbossrules/trunk/experimental/src/main/rules/approval/calculateInsurance.drl
labs/jbossrules/trunk/experimental/src/main/rules/approval/raw.drl
labs/jbossrules/trunk/experimental/src/main/rules/legacy/
labs/jbossrules/trunk/experimental/src/main/rules/legacy/Marginal-age.drl
labs/jbossrules/trunk/experimental/src/main/rules/legacy/acme.dsl
labs/jbossrules/trunk/experimental/src/main/rules/legacy/approvalDSL.drl
labs/jbossrules/trunk/experimental/src/main/rules/legacy/technical.drl
labs/jbossrules/trunk/experimental/src/main/webapp/
labs/jbossrules/trunk/experimental/src/main/webapp/META-INF/
labs/jbossrules/trunk/experimental/src/main/webapp/META-INF/MANIFEST.MF
labs/jbossrules/trunk/experimental/src/main/webapp/WEB-INF/
labs/jbossrules/trunk/experimental/src/main/webapp/WEB-INF/lib/
labs/jbossrules/trunk/experimental/src/main/webapp/WEB-INF/web.xml
labs/jbossrules/trunk/experimental/src/main/webapp/drools.css
labs/jbossrules/trunk/experimental/src/main/webapp/images/
labs/jbossrules/trunk/experimental/src/main/webapp/images/droolslogo.png
labs/jbossrules/trunk/experimental/src/main/webapp/images/header-bg.100x42.png
labs/jbossrules/trunk/experimental/src/main/webapp/index.jsp
labs/jbossrules/trunk/experimental/src/test/
labs/jbossrules/trunk/experimental/src/test/java/
labs/jbossrules/trunk/experimental/src/test/java/org/
labs/jbossrules/trunk/experimental/src/test/java/org/acme/
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverAdditionalInfoTest.java
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverTest.java
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceCalculateTest.java
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceTestHelper.java
labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/SupplementalInfoTest.java
labs/jbossrules/trunk/experimental/src/test/org/
labs/jbossrules/trunk/experimental/src/test/org/acme/
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverAdditionalInfoTest.java
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverTest.java
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceCalculateTest.java
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceTestHelper.java
labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/SupplementalInfoTest.java
Log:
Adding new drools-insurance under maven structure
Added: labs/jbossrules/trunk/experimental/pom.xml
===================================================================
--- labs/jbossrules/trunk/experimental/pom.xml (rev 0)
+++ labs/jbossrules/trunk/experimental/pom.xml 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.acme.insurance</groupId>
+ <artifactId>insurance</artifactId>
+ <packaging>war</packaging>
+ <name>Tabudrool</name>
+ <version>0.1.0-SNAPSHOT</version>
+ <description>
+ </description>
+
+ <issueManagement/>
+ <ciManagement/>
+ <inceptionYear>2006</inceptionYear>
+ <mailingLists/>
+
+ <contributors/>
+
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <scm/>
+
+ <build>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>src/main/rules</directory>
+ </resource>
+ </resources>
+
+
+ <pluginManagement>
+ <plugins>
+ <!--
+ Last time synchronized with the latest plugin releases:
+ 2006-06-21
+ See http://news.gmane.org/gmane.comp.apache.maven.announce
+ -->
+
+ <!-- Building -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-help-plugin</artifactId>
+ <version>2.0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.1</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <testFailureIgnore>true</testFailureIgnore>
+ </configuration>
+ </plugin>
+
+ <!-- Packaging -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.0</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-archetype-plugin</artifactId>
+ <version>1.0-alpha-4</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.0-beta-4</version>
+ <configuration>
+ <!--<tagBase>-->
+ <!--https://taseree.svn.sourceforge.net/svnroot/taseree/tags-->
+ <!--</tagBase>-->
+ </configuration>
+ </plugin>
+
+ <!-- IDE -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-idea-plugin</artifactId>
+ <version>2.0</version>
+ <configuration>
+ <downloadSources>true</downloadSources>
+ </configuration>
+ </plugin>
+
+ <!--Site -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <version>2.0-beta-5</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>2.0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <version>2.0</version>
+ </plugin>
+ <!--<plugin>-->
+ <!--<groupId>org.codehaus.mojo</groupId>-->
+ <!--<artifactId>taglist-maven-plugin</artifactId>-->
+ <!--<version>???</version>-->
+ <!--</plugin>-->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <version>2.0</version>
+ </plugin>
+ <!--
+ TODO checkstyle rules must be configured so it no longer
+ generates a 4 mb file which is hard to site-deploy...
+ -->
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-checkstyle-plugin</artifactId>-->
+ <!--<version>2.1</version>-->
+ <!--</plugin>-->
+ <!--
+ TODO Changelog is unfinished:
+ - has also a problem with the netbeans (cvs)lib dependency
+ - is moving from mojo.codehaus.org to maven.apache.org
+ -->
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-changelog-plugin</artifactId>-->
+ <!--<version>???</version>-->
+ <!--</plugin>-->
+
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-checkstyle-plugin</artifactId>-->
+ <!--</plugin>-->
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-changelog-plugin</artifactId>-->
+ <!--</plugin>-->
+ </plugins>
+ </reporting>
+
+ <profiles>
+ <profile>
+ <id>fast</id>
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ </properties>
+ </profile>
+ </profiles>
+
+ <modules/>
+
+ <repositories>
+ <repository>
+ <id>jbossRepository</id>
+ <name>JBoss repository</name>
+ <url>http://repository.jboss.com/maven2</url>
+ </repository>
+ </repositories>
+ <pluginRepositories/>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.3</version>
+ </dependency>
+
+ <!-- Testing -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Lang -->
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.3</version>
+ </dependency>
+
+ <!-- Logging -->
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.12</version>
+ <!--<scope>runtime</scope> for the examples -->
+ </dependency>
+
+ <!-- Drools -->
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+ <version>4.0.1.SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+ <version>4.0.1.SNAPSHOT</version>
+ </dependency>
+
+ <!-- Xstream -->
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies/>
+ </dependencyManagement>
+
+ <distributionManagement>
+ <!--<site>-->
+ <!--<id>shell.sourceforge.net</id>-->
+ <!--<url>-->
+ <!--scp://shell.sourceforge.net/home/groups/t/ta/taseree/htdocs/-->
+ <!--</url>-->
+ <!--</site>-->
+ </distributionManagement>
+
+</project>
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/AccessoriesCoverage.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/AccessoriesCoverage.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/AccessoriesCoverage.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,39 @@
+package org.acme.insurance.base;
+
+public class AccessoriesCoverage {
+
+ private int driverId;
+
+ private Double soundSystemValue;
+ private Double armorValue;
+ private Double alarmSystemValue;
+
+ public Double getArmorValue() {
+ return armorValue;
+ }
+ public void setArmorValue(Double armorValue) {
+ this.armorValue = armorValue;
+ }
+
+ public Double getSoundSystemValue() {
+ return soundSystemValue;
+ }
+ public void setSoundSystemValue(Double soundSystemValue) {
+ this.soundSystemValue = soundSystemValue;
+ }
+ public Double getAlarmSystemValue() {
+ return alarmSystemValue;
+ }
+ public void setAlarmSystemValue(Double alarmSystemValue) {
+ this.alarmSystemValue = alarmSystemValue;
+ }
+ public int getDriverId() {
+ return driverId;
+ }
+ public void setDriverId(int driverId) {
+ this.driverId = driverId;
+ }
+
+
+
+}
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Approve.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Approve.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Approve.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,24 @@
+package org.acme.insurance.base;
+
+/**
+ * This is a simple fact class to mark something as approved.
+ * @author Michael Neale
+ *
+ */
+public class Approve {
+
+ 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/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Driver.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Driver.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Driver.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,105 @@
+package org.acme.insurance.base;
+
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * This represents obviously a driver who is applying for an insurance Policy.
+ */
+public class Driver {
+
+ public static final int MALE = 0;
+ public static final int FEMALE = 1;
+
+ public static final int SINGLE = 0;
+ public static final int MARRIED = 1;
+
+ private int id;
+
+ private String name;
+ private Date birhDate;
+ private Integer licenceYears;
+
+ private Integer priorClaims;
+ private Integer maritalState;
+ private boolean hasChildren;
+ private Integer genre;
+
+ private Double insuranceFactor = 1.0;
+
+ public Double getInsuranceFactor(){
+ return insuranceFactor;
+ }
+
+ public void updateInsuranceFactor(Double factor) {
+ this.insuranceFactor *= factor;
+ }
+
+ public int getGenre() {
+ return genre;
+ }
+
+ public void setGenre(int genre) {
+ this.genre = genre;
+ }
+
+ public int getAge() throws ParseException {
+ return (int) (((new Date()).getTime() - birhDate.getTime()) / 86400000L / 360);
+ }
+
+ public Date getBirhDate() {
+ return birhDate;
+ }
+
+ public void setBirhDate(Date birhDate) {
+ this.birhDate = birhDate;
+ }
+
+ public boolean getHasChildren() {
+ return hasChildren;
+ }
+
+ public void setHasChildren(boolean hasChildren) {
+ this.hasChildren = hasChildren;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Integer getLicenceYears() {
+ return licenceYears;
+ }
+
+ public void setLicenceYears(Integer licenceYears) {
+ this.licenceYears = licenceYears;
+ }
+
+ public Integer getMaritalState() {
+ return maritalState;
+ }
+
+ public void setMaritalState(Integer maritalState) {
+ this.maritalState = maritalState;
+ }
+
+ 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/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/DriverAdditionalInfo.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/DriverAdditionalInfo.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/DriverAdditionalInfo.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,64 @@
+package org.acme.insurance.base;
+
+public class DriverAdditionalInfo {
+
+ public static final int STREET = 0;
+ public static final int GARAGE = 1;
+ public static final int PUBLICPARKING = 2;
+
+ public static final int RENTEDHOME = 0;
+ public static final int OWNHOME = 1;
+
+ public static final int UNEMPLOYED = 0;
+ public static final int STUDENT = 1;
+ public static final int GOVERNMENTEMPLOYEE = 2;
+ public static final int PRIVATEEMPLOYEE = 3;
+ public static final int BUSINESSOWNER = 4;
+
+ private int driverId;
+ private Integer dayVehiclePlace;
+ private Integer nightVehiclePlace;
+ private Integer jobStatus;
+ private Integer residenceStatus;
+
+ public Integer getDayVehiclePlace() {
+ return dayVehiclePlace;
+ }
+
+ public void setDayVehiclePlace(Integer dayVehiclePlace) {
+ this.dayVehiclePlace = dayVehiclePlace;
+ }
+
+ public int getDriverId() {
+ return driverId;
+ }
+
+ public void setDriverId(int driverId) {
+ this.driverId = driverId;
+ }
+
+ public Integer getJobStatus() {
+ return jobStatus;
+ }
+
+ public void setJobStatus(Integer jobStatus) {
+ this.jobStatus = jobStatus;
+ }
+
+ public Integer getNightVehiclePlace() {
+ return nightVehiclePlace;
+ }
+
+ public void setNightVehiclePlace(Integer nightVehiclePlace) {
+ this.nightVehiclePlace = nightVehiclePlace;
+ }
+
+ public Integer getResidenceStatus() {
+ return residenceStatus;
+ }
+
+ public void setResidenceStatus(Integer residenceStatus) {
+ this.residenceStatus = residenceStatus;
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Policy.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Policy.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Policy.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,49 @@
+package org.acme.insurance.base;
+
+/**
+ * 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 !
+ *
+ */
+public class Policy {
+
+ private int driverId;
+
+ private boolean approved = false;
+ private int discountPercent = 0;
+ private double basePrice;
+ private double insurancePrice;
+
+ public double getInsurancePrice() {
+ return insurancePrice;
+ }
+ public void setInsurancePrice(double insurancePrice) {
+ this.insurancePrice = insurancePrice;
+ }
+ public boolean isApproved() {
+ return approved;
+ }
+ public void setApproved(boolean approved) {
+ this.approved = approved;
+ }
+ public double getBasePrice() {
+ return basePrice;
+ }
+ public void setBasePrice(double basePrice) {
+ this.basePrice = basePrice;
+ }
+ public int getDiscountPercent() {
+ return discountPercent;
+ }
+ public void setDiscountPercent(int discountPercent) {
+ this.discountPercent = discountPercent;
+ }
+ public int getDriverId() {
+ return driverId;
+ }
+ public void setDriverId(int driverId) {
+ this.driverId = driverId;
+ }
+}
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Rejection.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Rejection.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/Rejection.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,19 @@
+package org.acme.insurance.base;
+
+public class Rejection {
+
+ private String reason;
+
+ public Rejection(String reason) {
+ this.reason = reason;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/SupplementalInfo.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/SupplementalInfo.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/base/SupplementalInfo.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,52 @@
+package org.acme.insurance.base;
+
+public class SupplementalInfo {
+
+ private int driverId;
+
+ private boolean extraCar;
+ private boolean extraAssistence;
+ private boolean glassCoverage;
+ private boolean nonRelatedExpenses;
+
+
+ public int getDriverId() {
+ return driverId;
+ }
+
+ public void setDriverId(int driverId) {
+ this.driverId = driverId;
+ }
+
+ public boolean isExtraAssistence() {
+ return extraAssistence;
+ }
+
+ public void setExtraAssistence(boolean extraAssistence) {
+ this.extraAssistence = extraAssistence;
+ }
+
+ public boolean isExtraCar() {
+ return extraCar;
+ }
+
+ public void setExtraCar(boolean extraCar) {
+ this.extraCar = extraCar;
+ }
+
+ public boolean isGlassCoverage() {
+ return glassCoverage;
+ }
+
+ public void setGlassCoverage(boolean glassCoverage) {
+ this.glassCoverage = glassCoverage;
+ }
+
+ public boolean isNonRelatedExpenses() {
+ return nonRelatedExpenses;
+ }
+
+ public void setNonRelatedExpenses(boolean nonRelatedExpenses) {
+ this.nonRelatedExpenses = nonRelatedExpenses;
+ }
+}
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/DroolsBusiness.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/DroolsBusiness.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/DroolsBusiness.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,165 @@
+package org.acme.insurance.web;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.acme.insurance.base.AccessoriesCoverage;
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.DriverAdditionalInfo;
+import org.acme.insurance.base.Policy;
+import org.acme.insurance.base.SupplementalInfo;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+
+public class DroolsBusiness {
+
+ private DriverAdditionalInfo driverAdit = new DriverAdditionalInfo();
+ private SupplementalInfo suppinfo = new SupplementalInfo();
+ private AccessoriesCoverage accessCov = new AccessoriesCoverage();
+ private Driver driverMale = new Driver();
+ private SimpleDateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy");
+ private Date defaultBirthday;
+ private Policy policy = new Policy();
+
+ private RuleBase rulebase;
+ private StatefulSession session;
+
+ public boolean isApproved() {
+ return policy.isApproved();
+ }
+
+ public Double getBasePrice() {
+ return policy.getBasePrice();
+ }
+
+ public Double getRiskFactor() {
+ return driverMale.getInsuranceFactor();
+ }
+
+ public Double getInsurancePrice() {
+ return policy.getInsurancePrice();
+ }
+
+ private RuleBase loadRuleBase() throws Exception {
+
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl(getTechnicalRules("/approval/raw.drl"));
+ builder.addPackageFromDrl(getTechnicalRules("/approval/approval.drl"));
+ builder.addPackageFromDrl(getTechnicalRules("/approval/calculateInsurance.drl"));
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(builder.getPackage());
+ return ruleBase;
+ }
+
+ private Reader getTechnicalRules(String name) {
+
+ InputStream stream = this.getClass().getResourceAsStream(
+ name);
+
+ return new InputStreamReader(stream);
+
+ }
+
+
+ protected void setUp() throws Exception {
+
+ rulebase = loadRuleBase();
+ session = rulebase.newStatefulSession();
+
+ session.setFocus("risk assessment");
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy");
+ defaultBirthday = df.parse("18/09/1983");
+
+ }
+
+
+ public void execute(HttpServletRequest request) throws Exception {
+
+ setUp();
+
+ defaultBirthday = df
+ .parse(Integer.parseInt(request
+ .getParameter("data_nascimento_dia"))
+ + "/"
+ + Integer.parseInt(request
+ .getParameter("data_nascimento_mes"))
+ + "/"
+ + Integer.parseInt(request
+ .getParameter("data_nascimento_ano")));
+
+ policy.setBasePrice(500.00);
+
+ driverMale.setBirhDate(defaultBirthday);
+
+ driverMale.setId(400);
+ driverMale.setGenre(Integer.parseInt(request.getParameter("sexo")));
+ driverMale.setMaritalState(Integer.parseInt(request
+ .getParameter("estadoCivil")));
+ driverMale.setHasChildren(Boolean.parseBoolean(request
+ .getParameter("temFilhos")));
+ driverMale.setPriorClaims(Integer.parseInt(request
+ .getParameter("sinistros")));
+ driverMale.setLicenceYears(Integer.parseInt(request
+ .getParameter("habilitacao")));
+
+ driverAdit.setDriverId(driverMale.getId());
+ driverAdit.setDayVehiclePlace(Integer.parseInt(request
+ .getParameter("garagemDia")));
+ driverAdit.setNightVehiclePlace(Integer.parseInt(request
+ .getParameter("garagemNoite")));
+ driverAdit.setJobStatus(Integer.parseInt(request
+ .getParameter("profissao")));
+ driverAdit.setResidenceStatus(Integer.parseInt(request
+ .getParameter("condicaoImovel")));
+
+ suppinfo.setDriverId(driverMale.getId());
+ suppinfo.setExtraAssistence(Boolean.parseBoolean(request
+ .getParameter("assistencia24h")));
+ suppinfo.setExtraCar(Boolean.parseBoolean(request
+ .getParameter("carroReserva")));
+ suppinfo.setGlassCoverage(Boolean.parseBoolean(request
+ .getParameter("vidros")));
+ suppinfo.setNonRelatedExpenses(Boolean.parseBoolean(request
+ .getParameter("despExtra")));
+
+ accessCov.setDriverId(driverMale.getId());
+
+ accessCov.setAlarmSystemValue(Double.parseDouble(request
+ .getParameter("sistemaSom")));
+ accessCov.setArmorValue(Double.parseDouble(request
+ .getParameter("blindagem")));
+ accessCov.setSoundSystemValue(Double.parseDouble(request
+ .getParameter("sistemaSom")));
+
+ policy.setApproved(false);
+
+ session.insert(policy);
+ session.insert(driverMale);
+ session.insert(driverAdit);
+ session.insert(suppinfo);
+ session.insert(accessCov);
+
+ session.setFocus("risk assessment");
+
+ session.fireAllRules();
+
+ System.out.println("Insurance Factor: " + driverMale.getInsuranceFactor());
+ System.out.println("Is Approved : " + policy.isApproved());
+ System.out.println("Insurance Price :" + policy.getInsurancePrice());
+
+
+
+
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/InsuranceServlet.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/InsuranceServlet.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/java/org/acme/insurance/web/InsuranceServlet.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,50 @@
+package org.acme.insurance.web;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class for Servlet: InsuranceServlet
+ *
+ */
+public class InsuranceServlet extends javax.servlet.http.HttpServlet implements
+ javax.servlet.Servlet {
+ static final long serialVersionUID = 1L;
+
+ /*
+ * (non-Java-doc)
+ *
+ * @see javax.servlet.http.HttpServlet#HttpServlet()
+ */
+ public InsuranceServlet() {
+ super();
+ }
+
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+
+ DroolsBusiness business = new DroolsBusiness();
+ try {
+ business.execute(request);
+
+ String redirectURL = "index.jsp";
+ redirectURL += "?calculo=sim";
+ redirectURL += "&aprovado=" + business.isApproved();
+ redirectURL += "&fatorrisco=" + business.getRiskFactor();
+ redirectURL += "&base=" + business.getBasePrice();
+ redirectURL += "&valor=" + business.getInsurancePrice();
+
+ response.sendRedirect(redirectURL);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+ // TODO Auto-generated method stub
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/experimental/src/main/rules/approval/approval.drl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/approval/approval.drl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/approval/approval.drl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,25 @@
+package org.acme.insurance;
+
+rule "approve"
+ agenda-group "risk assessment"
+ salience -1
+ when
+ not Rejection()
+ $policy : Policy( approved == false )
+ then
+ System.out.println("approve: " + $policy.getInsurancePrice() );
+ $policy.setApproved(true);
+ update($policy);
+ drools.setFocus("insurancecalcule");
+end
+
+rule "rejection"
+ agenda-group "rejection"
+ auto-focus
+ when
+ Rejection()
+ then
+ drools.halt();
+ System.out.println("rejection: ");
+end
+
Added: labs/jbossrules/trunk/experimental/src/main/rules/approval/calculateInsurance.drl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/approval/calculateInsurance.drl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/approval/calculateInsurance.drl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,32 @@
+#created on: Aug 14, 2007
+package org.acme.insurance
+
+// After approved insurance calcule the value
+rule "Insurance extra itens percent"
+ agenda-group "insurancecalcule"
+ salience 20
+ when
+ not Rejection()
+ driver : Driver ( driverID : id )
+ access : AccessoriesCoverage ( driverId == driverID)
+ policy : Policy( approved == true )
+ then
+ policy.setInsurancePrice( policy.getInsurancePrice() +
+ (access.getAlarmSystemValue() * 0.10) +
+ (access.getArmorValue() * 0.20) +
+ (access.getSoundSystemValue() * 0.30 ));
+
+ System.out.println("Insurance extra itens percent: " + policy.getInsurancePrice() );
+end
+
+rule "Insurance Calcule"
+ agenda-group "insurancecalcule"
+ salience 10
+ when
+ not Rejection()
+ driver : Driver()
+ policy : Policy( approved == true )
+ then
+ policy.setInsurancePrice(policy.getBasePrice() * driver.getInsuranceFactor() + policy.getInsurancePrice());
+ System.out.println("Insurance Calcule: " + policy.getInsurancePrice() );
+end
Added: labs/jbossrules/trunk/experimental/src/main/rules/approval/raw.drl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/approval/raw.drl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/approval/raw.drl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,124 @@
+package org.acme.insurance
+
+import org.acme.insurance.base.Rejection;
+import org.acme.insurance.base.Policy;
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.DriverAdditionalInfo;
+import org.acme.insurance.base.AccessoriesCoverage;
+import org.acme.insurance.base.SupplementalInfo;
+
+
+rule "Driver is underage"
+ agenda-group "risk assessment"
+ when
+ not Rejection()
+ driver : Driver ( age < 18)
+ then
+ driver.updateInsuranceFactor(0.0);
+ insert(new Rejection("Driver is Underage"));
+ System.out.println("Driver is Underage");
+end
+
+
+rule "New licenced Driver"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( licenceYears < 3 )
+ then
+ driver.updateInsuranceFactor(1.2);
+ System.out.println("New Licenced driver " + driver.getInsuranceFactor());
+end
+
+rule "Driver Single Young Male Driver factor"
+ agenda-group "risk assessment"
+ when
+ driver : Driver( genre == Driver.MALE, age < 25, maritalState == Driver.SINGLE )
+ then
+ driver.updateInsuranceFactor(1.6);
+ System.out.println("Driver Single Young Male Driver factor: " + driver.getInsuranceFactor());
+end
+
+rule "Driver Mature Married With Young Child factor"
+ agenda-group "risk assessment"
+ when
+ driver : Driver( genre == Driver.MALE, age > 40, maritalState == Driver.MARRIED, hasChildren == true )
+ then
+ driver.updateInsuranceFactor(1.5);
+ System.out.println("Driver Mature Married With Young Child factor: " + driver.getInsuranceFactor());
+end
+
+rule "Priory Claimed Driver"
+ agenda-group "risk assessment"
+ when
+ $driver : Driver ( $prior : priorClaims > 2 )
+ then
+ $driver.updateInsuranceFactor((0.2 * $prior) + 1);
+ System.out.println("Priory Claimed Driver + 20% for each previous problem " + $driver.getInsuranceFactor());
+end
+
+rule "Day Vehicle Place"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( driverID : id )
+ daddit : DriverAdditionalInfo ( driverId == driverID, dayVehiclePlace == DriverAdditionalInfo.STREET )
+ then
+ driver.updateInsuranceFactor( 1.15 );
+ System.out.println("Day Vehicle Place: " + driver.getInsuranceFactor());
+end
+
+rule "Night Vehicle Place"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( driverID : id )
+ daddit : DriverAdditionalInfo ( driverId == driverID, nightVehiclePlace == DriverAdditionalInfo.STREET )
+ then
+ driver.updateInsuranceFactor(1.44); // streets are very dangerous dangerous at night ;)
+ System.out.println("Night Vehicle Place: " + driver.getInsuranceFactor());
+end
+
+// Supplemental itens insurance
+
+rule "Driver wants an extra Car"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( driverID : id )
+ supple : SupplementalInfo ( driverId == driverID, extraCar == true)
+
+ then
+ driver.updateInsuranceFactor( 1.05 );
+ System.out.println("Driver wants an extra Car: " + driver.getInsuranceFactor());
+end
+
+rule "Driver wants extra assistence"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( driverID : id )
+ supple : SupplementalInfo ( driverId == driverID, extraAssistence == true)
+
+ then
+ driver.updateInsuranceFactor( 1.05 );
+ System.out.println("Driver wants extra assistence: " + driver.getInsuranceFactor());
+end
+
+
+rule "Driver wants glass coverage"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( driverID : id )
+ supple : SupplementalInfo ( driverId == driverID, glassCoverage == true)
+
+ then
+ driver.updateInsuranceFactor( 1.05 );
+ System.out.println("Driver wants glass coverage: " + driver.getInsuranceFactor());
+end
+
+rule "Driver wants non related expenses coverage"
+ agenda-group "risk assessment"
+ when
+ driver : Driver ( driverID : id )
+ supple : SupplementalInfo ( driverId == driverID, nonRelatedExpenses == true)
+
+ then
+ driver.updateInsuranceFactor( 1.05 );
+ System.out.println("Driver wants non related expenses coverage: " + driver.getInsuranceFactor());
+end
Added: labs/jbossrules/trunk/experimental/src/main/rules/legacy/Marginal-age.drl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/legacy/Marginal-age.drl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/legacy/Marginal-age.drl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,17 @@
+package org.acme.insurance
+expander acme.dsl
+
+#
+# Sometimes it may make sense to manage one rule per file.
+#
+
+rule "Driver is in marginal age"
+ #remember, don't leave any blank lines in between expressions
+ when
+ There is a Driver
+ - age is between 18 and 24 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+ then
+ Reject Policy with explanation : 'No accidents allowed if in marginal age group'
+end
Added: labs/jbossrules/trunk/experimental/src/main/rules/legacy/acme.dsl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/legacy/acme.dsl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/legacy/acme.dsl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,13 @@
+[condition][]There is a Driver=Driver()
+[condition][]- age less than {age} years old=age < {age}
+[condition][]- age is equal to {age} years old=age == {age}
+[condition][]- age greater than {age} years old=age > {age}
+[condition][]- has had more than {number} prior claims=priorClaims > {number}
+[condition][]- has a location risk profile of '{risk}'=locationRiskProfile == "{risk}"
+[condition][]- age is at least {age}=age >= {age}
+[condition][]- age is between {lower} and {upper} years old=age >= {lower}, age <= {upper}
+[condition][]- has had exactly {number} prior claims=priorClaims == {number}
+[condition][]Policy type is '{type}'=Policy(type == "{type}")
+[consequence][]Reject Policy with explanation : '{reason}'=insert(new Rejection("{reason}"));
+[condition][]Policy has not been rejected=not Rejection()
+[consequence][]Approve Policy with the reason : '{reason}'=insert(new Approve("{reason}"));
Added: labs/jbossrules/trunk/experimental/src/main/rules/legacy/approvalDSL.drl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/legacy/approvalDSL.drl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/legacy/approvalDSL.drl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,101 @@
+#created on: 23/05/2006
+package org.acme.insurance
+expander acme.dsl
+
+#
+# These rules are mostly "negative" in the sense that
+# a driver has to not be rejected. There is
+# one rule that allows immediate approval however.
+#
+
+rule "Driver has had too many accidents"
+
+ when
+ There is a Driver
+ - has had more than 3 prior claims
+ then
+ Reject Policy with explanation : 'Too many accidents'
+end
+
+
+rule "Driver is 45"
+
+ when
+ There is a Driver
+ - age is equal to 45 years old
+ then
+ Reject Policy with explanation : 'Too old'
+end
+
+
+rule "Driver is underage"
+
+ when
+ There is a Driver
+ - age less than 18 years old
+ then
+ Reject Policy with explanation : 'Driver is underage. Try another insurer'
+
+end
+
+rule "Driver is in marginal age"
+ when
+ There is a Driver
+ - age is between 18 and 24 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+ then
+ Reject Policy with explanation : 'No accidents allowed if in marginal age group'
+end
+
+rule "Driver in unsafe area for marginal age"
+ when
+ Policy type is 'COMPREHENSIVE'
+ There is a Driver
+ - age less than 25 years old
+ - has a location risk profile of 'HIGH'
+ then
+ Reject Policy with explanation : 'Marginal age driver in high risk area'
+end
+
+rule "Driver in unsafe area with priors"
+ when
+ There is a Driver
+ - has a location risk profile of 'MED'
+ - age less than 25 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+
+ then
+ Reject Policy with explanation : 'Driver in that area is too risky - given past accidents and age.'
+end
+
+rule "Driver unsafe for third party"
+ when
+ Policy type is 'THIRD_PARTY'
+ There is a Driver
+ - has had more than 2 prior claims
+ then
+ Reject Policy with explanation : 'Too many priors for third party'
+
+end
+
+rule "Driver in bad area for theft"
+ when
+ Policy type is 'FIRE_THEFT'
+ There is a Driver
+ - has a location risk profile of 'HIGH'
+ then
+ Reject Policy with explanation : 'Unsafe area for theft'
+end
+
+rule "Quick approval - safe driver, any policy type"
+ when
+ Policy has not been rejected
+ There is a Driver
+ - age is at least 30
+ - has had exactly 0 prior claims
+ then
+ Approve Policy with the reason : 'Driver is safe and mature.'
+end
+
Added: labs/jbossrules/trunk/experimental/src/main/rules/legacy/technical.drl
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/rules/legacy/technical.drl (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/rules/legacy/technical.drl 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,44 @@
+package org.acme.insurance
+
+rule "DemoRule"
+ salience 10
+ dialect "mvel"
+ when
+ d : Driver( age > 65 )
+ then
+ insert(new Rejection(" too old "));
+end
+
+rule "Approve policy affirmative"
+ salience 100 #this can short circuit any processing
+ when
+ a : Approve()
+ p : Policy()
+ then
+ p.setApproved(true);
+ System.out.println("APPROVED: "
+ + a.getReason());
+ drools.halt();
+end
+
+rule "Approve if not rejected"
+ salience -100 #approve if there are no objections
+ when
+ not Rejection()
+ p : Policy(approved == false)
+ then
+ System.out.println("APPROVED: due to no objections.");
+ p.setApproved(true);
+end
+
+rule "Reject application"
+ salience 100 #this can short circuit any other processing
+ when
+ r : Rejection()
+ d : Driver()
+ p : Policy()
+ then
+ System.out.println("REJECTED: " + r.getReason());
+ p.setApproved(false);
+ retract(d); #effectively halts the rules
+end
Added: labs/jbossrules/trunk/experimental/src/main/webapp/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/webapp/META-INF/MANIFEST.MF (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/webapp/META-INF/MANIFEST.MF 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
Added: labs/jbossrules/trunk/experimental/src/main/webapp/WEB-INF/web.xml
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/webapp/WEB-INF/web.xml (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/webapp/WEB-INF/web.xml 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+ <display-name>droolsinsurance</display-name>
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>default.html</welcome-file>
+ <welcome-file>default.htm</welcome-file>
+ <welcome-file>default.jsp</welcome-file>
+ </welcome-file-list>
+ <servlet>
+ <description></description>
+ <display-name>InsuranceServlet</display-name>
+ <servlet-name>InsuranceServlet</servlet-name>
+ <servlet-class>org.acme.insurance.web.InsuranceServlet</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>InsuranceServlet</servlet-name>
+ <url-pattern>/InsuranceServlet</url-pattern>
+ </servlet-mapping>
+</web-app>
\ No newline at end of file
Added: labs/jbossrules/trunk/experimental/src/main/webapp/drools.css
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/webapp/drools.css (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/webapp/drools.css 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,96 @@
+body {
+ background-color: #333333;
+ color: #333333;
+ text-align: center;
+ margin: 0 0 0 0;
+ padding: 0 0 0 0;
+}
+
+body, p, ol, ul, td {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ line-height: 18px;
+}
+
+pre {
+ background-color: #eee;
+ padding: 10px;
+ font-size: 11px;
+}
+
+a {
+ color: #000000;
+}
+
+a:hover {
+ color: #FFFFFF;
+ background-color: #000000;
+}
+
+.clear {
+ clear: both;
+}
+
+li.clear {
+ display: none;
+ clear: both;
+}
+
+#header {
+ width: 100%;
+ height: 84px;
+ display: block;
+ background: url(images/header-bg.100x42.png) repeat-x;
+ text-align: center;
+}
+
+#header div.area {
+ width: 676px;
+ text-align: left;
+ margin: 0 auto 0 auto;
+}
+
+#header a.logo span {
+ display: none;
+}
+
+#header a.logo {
+ display: block;
+ float: left;
+ width: 160px;
+ height: 84px;
+ background: url(images/droolslogo.png);
+ margin: 1px 10px 0 0;
+}
+
+#header div.column {
+ float: left;
+}
+
+#header ul.options {
+ display: block;
+ list-style: none;
+ margin: 0 0 0 0;
+ padding: 2px 0 0 0;
+}
+
+#header ul.options li {
+ list-style: none;
+ display: block;
+ float: left;
+}
+
+#header ul.options li a {
+ display: block;
+ text-decoration: none;
+ font-size: 12pt;
+ color: white;
+ font-weight: bold;
+ padding: 12px 20px 6px 4px;
+ letter-spacing: 0.03em;
+}
+
+#header ul.options li a:hover {
+ background: none;
+ text-decoration: underline;
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/experimental/src/main/webapp/images/droolslogo.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/experimental/src/main/webapp/images/droolslogo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/experimental/src/main/webapp/images/header-bg.100x42.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/experimental/src/main/webapp/images/header-bg.100x42.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/experimental/src/main/webapp/index.jsp
===================================================================
--- labs/jbossrules/trunk/experimental/src/main/webapp/index.jsp (rev 0)
+++ labs/jbossrules/trunk/experimental/src/main/webapp/index.jsp 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,386 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
+
+<html>
+<head>
+<title>Calculo de seguro</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="drools.css" media="screen" rel="Stylesheet" type="text/css">
+</head>
+
+<body>
+<div id="header">
+<div class="area">
+<div class="column">
+<ul class="options">
+ <li class="new"><a href="#"><span>Drools Insurance
+ Company</span></a></li>
+</ul>
+</div>
+</div>
+</div>
+
+<form action="InsuranceServlet" method="get" accept-charset="utf-8">
+
+<table align="center">
+ <tr>
+ <td>
+ <table width="600" height="236" border="0" align="center"
+ cellpadding="0" cellspacing="2" bgcolor="#999999"
+ class="seucorretor6">
+ <tbody>
+ <tr class="seucorretor6">
+ <td class="seucorretor2" align="center">
+ <div align="left"><b>Dados do condutor principal</b></div>
+ </td>
+ </tr>
+
+ <tr>
+ <td align="center" bgcolor="#FFFFFF" valign="top">
+ <div align="left"><br>
+
+ <table border="0" cellpadding="3" cellspacing="0" width="584">
+ <tbody>
+ <tr>
+ <td width="162" class="c1">Sexo:</td>
+
+ <td width="363"><select name="sexo">
+ <option value=0 selected="selected"> Masculino</option>
+ <option value=1>Feminino</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Data Nascimento:</td>
+
+ <td><input size="2" name="data_nascimento_dia"
+ maxlength="2" value="01" type="text" width="2"> / <input
+ size="2" name="data_nascimento_mes" maxlength="2" value="01"
+ type="text"> / <input size="4"
+ name="data_nascimento_ano" maxlength="4" value="1900"
+ type="text"> <span class="c2"> (dd/mm/aaaa
+ )</span></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Tempo de Habilitacao:</td>
+
+ <td><input name="habilitacao" size="2" maxlength="2"
+ value="0" type="text"> <span class="c2">Anos</span></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Estado Civil:</td>
+
+ <td><select name="estadoCivil">
+ <option value="0" selected="selected" >Solteiro/Divorciado</option>
+ <option value="1">Casado/Uniao Estavel Viuvo</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Tem filhos?</td>
+
+ <td><select name="temFilhos">
+ <option value="1">Sim, até 17 anos.</option>
+ <option value="2">Sim, entre 17 e 25 anos.</option>
+ <option value="3">Sim, até 30 anos.</option>
+ <option value="0" selected="selected" >Não ou Nenhuma das anteriores</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Escolaridade:</td>
+
+ <td><select name="escolaridade">
+ <option value="1" selected="selected" >1 Grau</option>
+ <option value="2">2 Grau</option>
+ <option value="3">3 Grau (Univ.)</option>
+ <option value="4">Pós Graduação</option>
+ </select></td>
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td>
+ <table width="600" border="0" align="center" cellpadding="0"
+ cellspacing="2" bgcolor="#999999" class="seucorretor6">
+ <tbody>
+ <tr class="seucorretor6">
+ <td class="seucorretor2" align="center">
+ <div align="left"><b>Informacoes adicionais do condutor
+ principal</b></div>
+ </td>
+ </tr>
+
+ <tr>
+ <td valign="top" bgcolor="#FFFFFF">
+ <div align="left"><br>
+
+ <table width="98%" height="188" border="0" align="center"
+ cellpadding="4" cellspacing="2">
+ <tbody>
+ <tr>
+ <td width="296" class="c1">Guarda do veiculo de dia:</td>
+
+ <td width="266"><select name="garagemDia">
+ <option value="1">Garagem fechada</option>
+ <option value="2">Estacionamento</option>
+ <option value="0" selected="selected" >Não informado ou na rua</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Guarda do veículo de noite:</td>
+
+ <td><select name="garagemNoite">
+ <option value="1">Garagem fechada</option>
+ <option value="2">Estacionamento</option>
+ <option value="0" selected="selected" >Não informado ou na rua</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Residência atual:</td>
+
+ <td><select name="condicaoImovel">
+ <option value="1">Própria/Familia</option>
+ <option value="0" selected="selected">Alugada</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Emprego atual:</td>
+
+ <td><select name="profissao">
+ <option value="0" selected="selected" >Desempregado</option>
+ <option value="1">Proprietário de Empresa ou Negócio</option>
+ <option value="2">Funcionario Publico</option>
+ <option value="3">Funcionario Privado</option>
+ <option value="4">Estudante</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Reside em:</td>
+
+ <td><select name="tipoResidencia">
+ <option value="0" selected="selected" >Casa</option>
+ <option value="1">Casa em condomínio fechado</option>
+ <option value="2">Apartamento</option>
+ </select></td>
+ </tr>
+
+ <tr>
+ <td class="c1">Quantos sinistros indenizados ?</td>
+
+ <td><select name="sinistros">
+ <option value="0" selected="selected">Nenhum</option>
+ <option value="1">1</option>
+ <option value="2">2</option>
+ <option value="3">3</option>
+ <option value="4">4</option>
+ <option value="5">5</option>
+ <option value="6">6</option>
+ <option value="7">7</option>
+ <option value="8">8</option>
+ <option value="9">mais de 8</option>
+ </select></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <table width="600" border="0" align="center" cellpadding="0"
+ cellspacing="2" bgcolor="#999999" class="seucorretor6">
+ <tbody>
+ <tr class="seucorretor6">
+ <td align="center" bordercolor="#000000" class="seucorretor2">
+ <div align="left"><span class="seucorretor2 seucorretor2"><b>Clausulas
+ complementares</b></span></div>
+ </td>
+ </tr>
+
+ <tr>
+ <td valign="top" bordercolor="#000000" bgcolor="#FFFFFF">
+ <div align="left"><br>
+
+ <table align="center" border="0" cellpadding="2" cellspacing="2"
+ width="95%">
+ <tbody>
+ <tr>
+ <td class="c1" width="50%">Quer Carro Reserva?</td>
+
+ <td width="50%"><select name="carroReserva">
+ <option value="1">Sim</option>
+ <option value="0" selected="selected" >Não</option>
+ </select> </td>
+ </tr>
+
+ <tr>
+ <td class="c1" width="50%">Quer Assistência 24 horas?</td>
+ <td width="50%"><select name="assistencia24h">
+ <option value="1">Sim</option>
+ <option value="0" selected="selected" >Não</option>
+ </select> </td>
+ </tr>
+
+ <tr>
+ <td class="c1" width="50%">Quer Cobertura de vidros?</td>
+
+ <td width="50%"><select name="vidros">
+ <option value="1">Sim</option>
+ <option value="0" selected="selected" >Não</option>
+ </select> </td>
+ </tr>
+
+ <tr>
+ <td class="c1" width="50%">Despesas Extraordinárias:</td>
+
+ <td width="50%"><select name="despExtra">
+ <option value="1">Sim</option>
+ <option value="0" selected="selected" >Não</option>
+ </select> </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+
+ <td>
+ <table width="600" border="0" align="center" cellpadding="0"
+ cellspacing="2" bgcolor="#999999" class="seucorretor6">
+ <tbody>
+ <tr class="seucorretor6">
+ <td align="center" bordercolor="#000000" class="seucorretor2">
+ <div align="left"><span class="seucorretor1"><b>Cobertura
+ de Acessórios:</b></span></div>
+ </td>
+ </tr>
+
+ <tr>
+ <td valign="top" bordercolor="#000000" bgcolor="#FFFFFF">
+ <div align="left"><br>
+
+ <table align="center" border="0" cellpadding="2" cellspacing="2"
+ width="95%">
+ <tbody>
+ <tr>
+ <td class="c5" width="50%">Descrição</td>
+
+ <td class="c5" width="50%">Valor (R$)</td>
+ </tr>
+
+ <tr>
+ <td class="c1" width="50%">Alarme:</td>
+
+ <td width="50%"><input size="12" name="alarme" value="0.00"
+ type="text"> </td>
+ </tr>
+
+ <tr>
+ <td class="c1" width="50%">Sistema de Som:</td>
+
+ <td width="50%"><input size="12" name="sistemaSom"
+ value="0.00" type="text"> </td>
+ </tr>
+
+ <tr>
+ <td class="c1" width="50%">Blindagem:</td>
+
+ <td width="50%"><input size="12" name="blindagem"
+ value="0.00" type="text"> </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+
+</table>
+
+
+
+
+<p> </p>
+<p><input name="Reset" type="reset" value="Reset"> <input
+ type="submit" value="Continue"></p>
+</form>
+
+
+<%
+ try {
+ if ( request.getParameter("calculo") != null ) {
+%>
+ tabe
+ <table width="600" border="0" align="center" cellpadding="0"
+ cellspacing="2" bgcolor="#999999" class="seucorretor6">
+ <tbody>
+ <tr class="seucorretor6">
+ <td align="center" bordercolor="#000000" class="seucorretor2"><div align="left"><span class="seucorretor2 seucorretor2"><b>Calculo de Seguro</b></span></div></td>
+ </tr>
+ <tr>
+ <td valign="top" bordercolor="#000000" bgcolor="#FFFFFF"><div align="left"><br>
+ <table align="center" border="0" cellpadding="2" cellspacing="2"
+ width="95%">
+ <tbody>
+ <tr>
+ <td class="c1" width="50%">Seguro aprovado</td>
+ <td width="50%"><% out.print(request.getParameter("aprovado")); %></td>
+ </tr>
+ <tr>
+ <td class="c1" width="50%">Fator risco</td>
+ <td width="50%"><% out.print(request.getParameter("fatorrisco"));%></td>
+ </tr>
+ <tr>
+ <td class="c1" width="50%">Preco Base Apolice</td>
+ <td width="50%"><% out.print(request.getParameter("base")); %></td>
+ </tr>
+ <tr>
+ <td class="c1" width="50%">Valor do Seguro</td>
+ <td width="50%"><% out.print(request.getParameter("valor")); %></td>
+ </tr>
+ </tbody>
+ </table>
+ </div></td>
+ </tr>
+ </tbody>
+ </table>
+<%
+ }
+ } catch (Exception e) {
+%>
+
+ <%
+ }
+%>
+
+
+<p> </p>
+
+<p><br>
+</p>
+</body>
+</html>
Added: labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverAdditionalInfoTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverAdditionalInfoTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverAdditionalInfoTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,71 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.DriverAdditionalInfo;
+import org.acme.insurance.base.Policy;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+
+public class DriverAdditionalInfoTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testDriveVehiclePlace() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ DriverAdditionalInfo driverAdditional = new DriverAdditionalInfo();
+ driverAdditional.setDayVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setNightVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( driverAdditional );
+
+ session.fireAllRules();
+
+ assertEquals( 1.656 , driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/DriverTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,184 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.Policy;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+
+public class DriverTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testDriverGenreFactor() throws DroolsParserException,
+ IOException,
+ Exception {
+ Driver driverMale = new Driver();
+ driverMale.setGenre( Driver.MALE );
+ driverMale.setBirhDate( defaultBirthday );
+ driverMale.setMaritalState( Driver.SINGLE );
+ driverMale.setLicenceYears( 2 );
+
+ Driver driverFemale = new Driver();
+ driverFemale.setGenre( Driver.FEMALE );
+ driverFemale.setBirhDate( defaultBirthday );
+ driverFemale.setMaritalState( Driver.MARRIED );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverMale );
+ session.fireAllRules();
+
+ assertEquals( 1.92,
+ driverMale.getInsuranceFactor() );
+
+ policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverFemale );
+ session.fireAllRules();
+
+ assertEquals( 1.0,
+ driverFemale.getInsuranceFactor() );
+
+ }
+
+ public void testMatureDriverWithChildFactor() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1959" );
+
+ Driver driverMale = new Driver();
+ driverMale.setGenre( Driver.MALE );
+ driverMale.setBirhDate( defaultBirthday );
+ driverMale.setMaritalState( Driver.MARRIED );
+ driverMale.setHasChildren( true );
+ driverMale.setLicenceYears(10);
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverMale );
+ session.fireAllRules();
+
+ assertEquals( 1.5,
+ driverMale.getInsuranceFactor() );
+
+ }
+
+ public void testDriverUnderAgeRejection() throws ParseException {
+ Driver driver = new Driver();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ Date birhDate = df.parse( "18/09/1996" );
+
+ driver.setGenre( Driver.MALE );
+ driver.setMaritalState( Driver.SINGLE );
+ driver.setHasChildren( false );
+ driver.setBirhDate( birhDate );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( driver );
+ session.insert( policy );
+
+ session.fireAllRules();
+
+ assertEquals( 0.0,
+ driver.getInsuranceFactor() );
+
+ assertFalse( policy.isApproved() );
+ }
+
+ public void testYoungProblematicDriver() {
+ Driver driverMale = new Driver();
+ driverMale.setGenre( Driver.MALE );
+ driverMale.setBirhDate( defaultBirthday );
+ driverMale.setMaritalState( Driver.SINGLE );
+ driverMale.setLicenceYears( 2 );
+ driverMale.setPriorClaims( 5 );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverMale );
+ session.fireAllRules();
+
+ assertEquals( 3.84,
+ driverMale.getInsuranceFactor() );
+
+ }
+
+ public void testEmptyDriver() {
+ Driver driver = new Driver();
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ try {
+ session.insert( driver );
+ session.insert( policy );
+ session.fireAllRules();
+ fail("should throw exception");
+ } catch ( Exception e ) {
+ // OK
+ }
+ }
+
+ public void testProblematicDriver() throws ParseException {
+ Driver driver = new Driver();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ Date birhDate = df.parse( "18/09/1960" );
+
+ driver.setGenre( Driver.MALE );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setHasChildren( false );
+ driver.setBirhDate( birhDate );
+ driver.setPriorClaims( 5 );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( driver );
+ session.insert( policy );
+
+ session.fireAllRules();
+
+ assertEquals( 2.0,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceCalculateTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceCalculateTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceCalculateTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,156 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.AccessoriesCoverage;
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.DriverAdditionalInfo;
+import org.acme.insurance.base.Policy;
+import org.acme.insurance.base.SupplementalInfo;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.DroolsParserException;
+
+public class InsuranceCalculateTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testHasExtraCar() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.SINGLE );
+ driver.setLicenceYears( 2 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setExtraCar( true );
+ suppinfo.setExtraAssistence( true );
+ suppinfo.setGlassCoverage( true );
+ suppinfo.setNonRelatedExpenses( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ policy.setBasePrice( 1000.00 );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 2.333772,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+
+ assertEquals( 2333.7720000000004,
+ policy.getInsurancePrice() );
+ }
+
+ public void testDriveVehiclePlace() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ DriverAdditionalInfo driverAdditional = new DriverAdditionalInfo();
+ driverAdditional.setDayVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setNightVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ policy.setBasePrice( 500.00 );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( driverAdditional );
+
+ session.fireAllRules();
+
+ assertEquals( 1.656,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+ assertEquals( 828.00,
+ policy.getInsurancePrice() );
+ }
+
+ public void testAccessoriesValue() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ DriverAdditionalInfo driverAdditional = new DriverAdditionalInfo();
+ driverAdditional.setDayVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setNightVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setDriverId( driver.getId() );
+
+ AccessoriesCoverage accessories = new AccessoriesCoverage();
+
+ accessories.setAlarmSystemValue( 350.00 );
+ accessories.setArmorValue( 1500.00 );
+ accessories.setSoundSystemValue( 700.00 );
+ accessories.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ policy.setBasePrice( 500.00 );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( driverAdditional );
+ session.insert( accessories );
+
+ session.fireAllRules();
+
+ assertEquals( 1.656,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+ assertEquals( 1373.00,
+ policy.getInsurancePrice() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceTestHelper.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceTestHelper.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/InsuranceTestHelper.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,53 @@
+package org.acme.insurance.test;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.audit.WorkingMemoryLogger;
+import org.drools.compiler.PackageBuilder;
+
+public class InsuranceTestHelper {
+ private RuleBase rulebase;
+ private StatefulSession session;
+
+ public StatefulSession getSession() {
+ try {
+ rulebase = loadRuleBase();
+ session = rulebase.newStatefulSession();
+
+ session.setFocus("risk assessment");
+
+ return session;
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private RuleBase loadRuleBase() throws Exception {
+
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl(getTechnicalRules("/approval/raw.drl"));
+ builder.addPackageFromDrl(getTechnicalRules("/approval/approval.drl"));
+ builder.addPackageFromDrl(getTechnicalRules("/approval/calculateInsurance.drl"));
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(builder.getPackage());
+ return ruleBase;
+ }
+
+ private Reader getTechnicalRules(String name) {
+
+ InputStream stream = this.getClass().getResourceAsStream(
+ name);
+
+ return new InputStreamReader(stream);
+
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/SupplementalInfoTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/SupplementalInfoTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/java/org/acme/insurance/test/SupplementalInfoTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,197 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.Policy;
+import org.acme.insurance.base.SupplementalInfo;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+
+public class SupplementalInfoTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testHasExtraCar() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setExtraCar( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.setFocus("risk assessment");
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeHasExtraAssistence() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setExtraAssistence( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeGlassCoverage() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setGlassCoverage( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeNonRelatedExpenses() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setNonRelatedExpenses( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeSupplementalInfoMix() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setNonRelatedExpenses( true );
+ suppinfo.setGlassCoverage( true );
+ suppinfo.setExtraAssistence( true );
+ suppinfo.setExtraCar( true );
+
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.2155062500000002,
+ driver.getInsuranceFactor());
+
+
+ assertTrue( policy.isApproved() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverAdditionalInfoTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverAdditionalInfoTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverAdditionalInfoTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,71 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.DriverAdditionalInfo;
+import org.acme.insurance.base.Policy;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+
+public class DriverAdditionalInfoTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testDriveVehiclePlace() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ DriverAdditionalInfo driverAdditional = new DriverAdditionalInfo();
+ driverAdditional.setDayVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setNightVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( driverAdditional );
+
+ session.fireAllRules();
+
+ assertEquals( 1.656 , driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/DriverTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,184 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.Policy;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+
+public class DriverTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testDriverGenreFactor() throws DroolsParserException,
+ IOException,
+ Exception {
+ Driver driverMale = new Driver();
+ driverMale.setGenre( Driver.MALE );
+ driverMale.setBirhDate( defaultBirthday );
+ driverMale.setMaritalState( Driver.SINGLE );
+ driverMale.setLicenceYears( 2 );
+
+ Driver driverFemale = new Driver();
+ driverFemale.setGenre( Driver.FEMALE );
+ driverFemale.setBirhDate( defaultBirthday );
+ driverFemale.setMaritalState( Driver.MARRIED );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverMale );
+ session.fireAllRules();
+
+ assertEquals( 1.92,
+ driverMale.getInsuranceFactor() );
+
+ policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverFemale );
+ session.fireAllRules();
+
+ assertEquals( 1.0,
+ driverFemale.getInsuranceFactor() );
+
+ }
+
+ public void testMatureDriverWithChildFactor() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1959" );
+
+ Driver driverMale = new Driver();
+ driverMale.setGenre( Driver.MALE );
+ driverMale.setBirhDate( defaultBirthday );
+ driverMale.setMaritalState( Driver.MARRIED );
+ driverMale.setHasChildren( true );
+ driverMale.setLicenceYears(10);
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverMale );
+ session.fireAllRules();
+
+ assertEquals( 1.5,
+ driverMale.getInsuranceFactor() );
+
+ }
+
+ public void testDriverUnderAgeRejection() throws ParseException {
+ Driver driver = new Driver();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ Date birhDate = df.parse( "18/09/1996" );
+
+ driver.setGenre( Driver.MALE );
+ driver.setMaritalState( Driver.SINGLE );
+ driver.setHasChildren( false );
+ driver.setBirhDate( birhDate );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( driver );
+ session.insert( policy );
+
+ session.fireAllRules();
+
+ assertEquals( 0.0,
+ driver.getInsuranceFactor() );
+
+ assertFalse( policy.isApproved() );
+ }
+
+ public void testYoungProblematicDriver() {
+ Driver driverMale = new Driver();
+ driverMale.setGenre( Driver.MALE );
+ driverMale.setBirhDate( defaultBirthday );
+ driverMale.setMaritalState( Driver.SINGLE );
+ driverMale.setLicenceYears( 2 );
+ driverMale.setPriorClaims( 5 );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ session.insert( policy );
+
+ session.insert( driverMale );
+ session.fireAllRules();
+
+ assertEquals( 3.84,
+ driverMale.getInsuranceFactor() );
+
+ }
+
+ public void testEmptyDriver() {
+ Driver driver = new Driver();
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ try {
+ session.insert( driver );
+ session.insert( policy );
+ session.fireAllRules();
+ fail("should throw exception");
+ } catch ( Exception e ) {
+ // OK
+ }
+ }
+
+ public void testProblematicDriver() throws ParseException {
+ Driver driver = new Driver();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ Date birhDate = df.parse( "18/09/1960" );
+
+ driver.setGenre( Driver.MALE );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setHasChildren( false );
+ driver.setBirhDate( birhDate );
+ driver.setPriorClaims( 5 );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( driver );
+ session.insert( policy );
+
+ session.fireAllRules();
+
+ assertEquals( 2.0,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceCalculateTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceCalculateTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceCalculateTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,156 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.AccessoriesCoverage;
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.DriverAdditionalInfo;
+import org.acme.insurance.base.Policy;
+import org.acme.insurance.base.SupplementalInfo;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.DroolsParserException;
+
+public class InsuranceCalculateTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testHasExtraCar() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.SINGLE );
+ driver.setLicenceYears( 2 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setExtraCar( true );
+ suppinfo.setExtraAssistence( true );
+ suppinfo.setGlassCoverage( true );
+ suppinfo.setNonRelatedExpenses( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ policy.setBasePrice( 1000.00 );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 2.333772,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+
+ assertEquals( 2333.7720000000004,
+ policy.getInsurancePrice() );
+ }
+
+ public void testDriveVehiclePlace() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ DriverAdditionalInfo driverAdditional = new DriverAdditionalInfo();
+ driverAdditional.setDayVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setNightVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ policy.setBasePrice( 500.00 );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( driverAdditional );
+
+ session.fireAllRules();
+
+ assertEquals( 1.656,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+ assertEquals( 828.00,
+ policy.getInsurancePrice() );
+ }
+
+ public void testAccessoriesValue() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ DriverAdditionalInfo driverAdditional = new DriverAdditionalInfo();
+ driverAdditional.setDayVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setNightVehiclePlace( DriverAdditionalInfo.STREET );
+ driverAdditional.setDriverId( driver.getId() );
+
+ AccessoriesCoverage accessories = new AccessoriesCoverage();
+
+ accessories.setAlarmSystemValue( 350.00 );
+ accessories.setArmorValue( 1500.00 );
+ accessories.setSoundSystemValue( 700.00 );
+ accessories.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+ policy.setBasePrice( 500.00 );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( driverAdditional );
+ session.insert( accessories );
+
+ session.fireAllRules();
+
+ assertEquals( 1.656,
+ driver.getInsuranceFactor() );
+
+ assertTrue( policy.isApproved() );
+ assertEquals( 1373.00,
+ policy.getInsurancePrice() );
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceTestHelper.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceTestHelper.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/InsuranceTestHelper.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,53 @@
+package org.acme.insurance.test;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.audit.WorkingMemoryLogger;
+import org.drools.compiler.PackageBuilder;
+
+public class InsuranceTestHelper {
+ private RuleBase rulebase;
+ private StatefulSession session;
+
+ public StatefulSession getSession() {
+ try {
+ rulebase = loadRuleBase();
+ session = rulebase.newStatefulSession();
+
+ session.setFocus("risk assessment");
+
+ return session;
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private RuleBase loadRuleBase() throws Exception {
+
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl(getTechnicalRules("/approval/raw.drl"));
+ builder.addPackageFromDrl(getTechnicalRules("/approval/approval.drl"));
+ builder.addPackageFromDrl(getTechnicalRules("/approval/calculateInsurance.drl"));
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(builder.getPackage());
+ return ruleBase;
+ }
+
+ private Reader getTechnicalRules(String name) {
+
+ InputStream stream = this.getClass().getResourceAsStream(
+ name);
+
+ return new InputStreamReader(stream);
+
+ }
+
+}
Added: labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/SupplementalInfoTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/SupplementalInfoTest.java (rev 0)
+++ labs/jbossrules/trunk/experimental/src/test/org/acme/insurance/test/SupplementalInfoTest.java 2007-08-27 19:29:57 UTC (rev 14661)
@@ -0,0 +1,197 @@
+package org.acme.insurance.test;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.acme.insurance.base.Driver;
+import org.acme.insurance.base.Policy;
+import org.acme.insurance.base.SupplementalInfo;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsParserException;
+
+public class SupplementalInfoTest extends TestCase {
+ private StatefulSession session;
+ private Date defaultBirthday;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ session = (new InsuranceTestHelper()).getSession();
+
+ SimpleDateFormat df = new java.text.SimpleDateFormat( "dd/MM/yyyy" );
+ defaultBirthday = df.parse( "18/09/1983" );
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ session.dispose();
+ }
+
+ public void testHasExtraCar() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setExtraCar( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.setFocus("risk assessment");
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeHasExtraAssistence() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setExtraAssistence( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeGlassCoverage() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setGlassCoverage( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeNonRelatedExpenses() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setNonRelatedExpenses( true );
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.05,
+ driver.getInsuranceFactor() );
+ assertTrue( policy.isApproved() );
+ }
+
+ public void testeSupplementalInfoMix() throws DroolsParserException,
+ IOException,
+ Exception {
+
+ Driver driver = new Driver();
+
+ driver.setGenre( Driver.MALE );
+ driver.setBirhDate( defaultBirthday );
+ driver.setMaritalState( Driver.MARRIED );
+ driver.setLicenceYears( 10 );
+ driver.setId( 400 );
+
+ SupplementalInfo suppinfo = new SupplementalInfo();
+
+ suppinfo.setNonRelatedExpenses( true );
+ suppinfo.setGlassCoverage( true );
+ suppinfo.setExtraAssistence( true );
+ suppinfo.setExtraCar( true );
+
+ suppinfo.setDriverId( driver.getId() );
+
+ Policy policy = new Policy();
+ policy.setApproved( false );
+
+ session.insert( policy );
+ session.insert( driver );
+ session.insert( suppinfo );
+
+ session.fireAllRules();
+
+ assertEquals( 1.2155062500000002,
+ driver.getInsuranceFactor());
+
+
+ assertTrue( policy.isApproved() );
+ }
+
+}
More information about the jboss-svn-commits
mailing list