Ver Fonte

initial version

Grega Bremec há 2 anos atrás
pai
commit
7144cfacc0

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+.*.sw?
+target/

+ 12 - 0
pom.xml

@@ -22,6 +22,18 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+      <version>7.59.0.Final-redhat-00006</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-mvel</artifactId>
+      <version>7.59.0.Final-redhat-00006</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
       <groupId>org.optaplanner</groupId>
       <artifactId>optaplanner-core</artifactId>
       <version>7.59.0.Final-redhat-00006</version>

+ 0 - 0
src/main/java/com/acme/claims/.gitkeep → src/main/java/com/redhat/training/claims/.gitkeep


+ 60 - 0
src/main/java/com/redhat/training/claims/model/Claim.java

@@ -0,0 +1,60 @@
+package com.redhat.training.claims.model;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Claim {
+    private int id;
+    private String reason;
+    private Date dateOfEvent;
+    private Date dateFiled;
+    private double amount;
+    private Vehicle vehicle;
+    private ArrayList<Person> involvedPersons;
+    public Claim() {
+        this.involvedPersons = new ArrayList<Person>();
+    }
+    public int getId() {
+        return id;
+    }
+    public void setId(int id) {
+        this.id = id;
+    }
+    public Date getDateOfEvent() {
+        return dateOfEvent;
+    }
+    public void setDateOfEvent(Date dateOfEvent) {
+        this.dateOfEvent = dateOfEvent;
+    }
+    public Date getDateFiled() {
+        return dateFiled;
+    }
+    public void setDateFiled(Date dateFiled) {
+        this.dateFiled = dateFiled;
+    }
+    public ArrayList<Person> getInvolvedPersons() {
+        return involvedPersons;
+    }
+    public void setInvolvedPersons(ArrayList<Person> involvedPersons) {
+        this.involvedPersons = involvedPersons;
+    }
+    public String getReason() {
+        return reason;
+    }
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+    public double getAmount() {
+        return amount;
+    }
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+    public Vehicle getVehicle() {
+        return vehicle;
+    }
+    public void setVehicle(Vehicle vehicle) {
+        this.vehicle = vehicle;
+    }
+    
+}

+ 27 - 0
src/main/java/com/redhat/training/claims/model/ClaimResults.java

@@ -0,0 +1,27 @@
+package com.redhat.training.claims.model;
+
+import java.util.ArrayList;
+
+public class ClaimResults {
+    private int claimId;
+    private boolean approved;
+    private ArrayList<String> reasons;
+    public int getClaimId() {
+        return claimId;
+    }
+    public void setClaimId(int claimId) {
+        this.claimId = claimId;
+    }
+    public boolean isApproved() {
+        return approved;
+    }
+    public void setApproved(boolean approved) {
+        this.approved = approved;
+    }
+    public ArrayList<String> getReasons() {
+        return reasons;
+    }
+    public void setReasons(ArrayList<String> reasons) {
+        this.reasons = reasons;
+    }
+}

+ 19 - 0
src/main/java/com/redhat/training/claims/model/Claimant.java

@@ -0,0 +1,19 @@
+package com.redhat.training.claims.model;
+
+import java.util.ArrayList;
+
+public class Claimant extends Person {
+    private ArrayList<Claim> claims;
+
+    public Claimant() {
+        this.claims = new ArrayList<Claim>();
+    }
+
+    public ArrayList<Claim> getClaims() {
+        return claims;
+    }
+
+    public void setClaims(ArrayList<Claim> claims) {
+        this.claims = claims;
+    }
+}

+ 6 - 0
src/main/java/com/redhat/training/claims/model/Gender.java

@@ -0,0 +1,6 @@
+package com.redhat.training.claims.model;
+
+public enum Gender {
+    MALE,
+    FEMALE;
+}

+ 28 - 0
src/main/java/com/redhat/training/claims/model/Person.java

@@ -0,0 +1,28 @@
+package com.redhat.training.claims.model;
+
+import java.util.Date;
+
+public class Person {
+    private String name;
+    private Date birthdate;
+    private Gender gender;
+
+    public String getName() {
+        return name;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+    public Date getBirthdate() {
+        return birthdate;
+    }
+    public void setBirthdate(Date birthdate) {
+        this.birthdate = birthdate;
+    }
+    public Gender getGender() {
+        return gender;
+    }
+    public void setGender(Gender gender) {
+        this.gender = gender;
+    }
+}

+ 56 - 0
src/main/java/com/redhat/training/claims/model/Vehicle.java

@@ -0,0 +1,56 @@
+package com.redhat.training.claims.model;
+
+import java.util.Date;
+
+public class Vehicle {
+    private String vin;
+    private String mark;
+    private String model;
+    private Date productionDate;
+    private String registrationNumber;
+    private Person lastKnownOwner;
+    public String getVin() {
+        return vin;
+    }
+    public void setVin(String vin) {
+        this.vin = vin;
+    }
+    public Person getLastKnownOwner() {
+        return lastKnownOwner;
+    }
+    public void setLastKnownOwner(Person lastKnownOwner) {
+        this.lastKnownOwner = lastKnownOwner;
+    }
+    private int mileage;
+    public String getMark() {
+        return mark;
+    }
+    public void setMark(String mark) {
+        this.mark = mark;
+    }
+    public String getModel() {
+        return model;
+    }
+    public void setModel(String model) {
+        this.model = model;
+    }
+    public Date getProductionDate() {
+        return productionDate;
+    }
+    public void setProductionDate(Date productionDate) {
+        this.productionDate = productionDate;
+    }
+    public String getRegistrationNumber() {
+        return registrationNumber;
+    }
+    public void setRegistrationNumber(String registrationNumber) {
+        this.registrationNumber = registrationNumber;
+    }
+    public int getMileage() {
+        return mileage;
+    }
+    public void setMileage(int mileage) {
+        this.mileage = mileage;
+    }
+    
+}

+ 0 - 0
src/main/resources/com/acme/claims/.gitkeep → src/main/resources/com/redhat/training/claims/.gitkeep


+ 36 - 0
src/main/resources/com/redhat/training/claims/sanity.drl

@@ -0,0 +1,36 @@
+package com.redhat.training.claims
+
+import com.redhat.training.claims.model.*
+
+query "Get ClaimResults"
+    cr: ClaimResult()
+end
+
+rule "Check whether Claimant is not Involved"
+when
+    claimant: Claimant()
+    claim: Claim(!(involvedPersons contains claimant))
+    Claimant(this == claimant, claims contains claim)
+then
+    ClaimResult r = new ClaimResult();
+    r.setClaimId(claim.getId());
+    r.setApproved(false);
+    r.getReasons().add("Can't file claim on behalf of someone else.");
+    insert(r);
+    System.out.println("Claimant " + claimant.getName() + " not involved " +
+                        "in claim " + claim.getId() + "!");
+end
+
+rule "Check that Claimant is Involved"
+when
+    claimant: Claimant()
+    claim: Claim(involvedPersons contains claimant)
+    Claimant(this == claimant, claims contains claim)
+then
+    ClaimResult r = new ClaimResult();
+    r.setClaimId(claim.getId());
+    r.getReasons().add("Claim owner properly listed as involved.");
+    insert(r);
+    System.out.println("Claimant " + claimant.getName() + " is involved " +
+                        "in claim " + claim.getId() + "!");
+end

+ 0 - 0
src/test/java/com/acme/claims/.gitkeep → src/test/java/com/redhat/training/claims/.gitkeep


+ 152 - 0
src/test/java/com/redhat/training/claims/ClaimantInvolvedTest.java

@@ -0,0 +1,152 @@
+package com.redhat.training.claims;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+
+import com.redhat.training.claims.model.Claim;
+import com.redhat.training.claims.model.ClaimResults;
+import com.redhat.training.claims.model.Claimant;
+import com.redhat.training.claims.model.Gender;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.kie.api.KieServices;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.kie.api.runtime.rule.QueryResults;
+import org.kie.api.runtime.rule.QueryResultsRow;
+
+public class ClaimantInvolvedTest {
+    KieSession session;
+
+    @Before
+    public void setup() {
+        KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
+        session = kc.newKieSession();
+        System.out.println("Created new session...");
+    }
+    @After
+    public void tearDown() {
+        if (session != null) {
+            session.dispose();
+        }
+        System.out.println("Destroyed session after test.");
+    }
+    @Test
+    public void testClaimantInvolved() {
+        System.out.println("Running testClaimantInvolved...");
+        Claimant c = new Claimant();
+        c.setName("John Doe");
+        c.setGender(Gender.MALE);
+
+        Claim cl = new Claim();
+        cl.setId(123);
+        cl.setAmount(1000.00);
+        cl.setReason("Crash");
+        cl.getInvolvedPersons().add(c);
+
+        c.getClaims().add(cl);
+
+        session.insert(c);
+        session.insert(cl);
+
+        session.fireAllRules();
+
+        ArrayList<ClaimResults> crs = new ArrayList<ClaimResults>();
+        QueryResults qr = session.getQueryResults("Get ClaimResults");
+        for (QueryResultsRow qrr : qr) {
+            ClaimResults cr = (ClaimResults)qrr.get("cr");
+            crs.add(cr);
+        }
+        assertTrue("Unexpected number of claim results", crs.size() == 1);
+        assertTrue("Expected reason not in claim result", crs.get(0).getReasons().contains("Claim owner properly listed as involved."));
+    }
+    @Test
+    public void testClaimantNotInvolved() {
+        System.out.println("Running testClaimantNotInvolved...");
+        Claimant c = new Claimant();
+        c.setName("John Doe");
+        c.setGender(Gender.MALE);
+
+        Claim cl = new Claim();
+        cl.setId(123);
+        cl.setAmount(1000.00);
+        cl.setReason("Crash");
+        //cl.getInvolvedPersons().add(c);
+
+        c.getClaims().add(cl);
+
+        session.insert(c);
+        session.insert(cl);
+
+        session.fireAllRules();
+    }
+
+    @Test
+    public void testMultipleClaimsOneClaimant() {
+        System.out.println("Running testMultipleClaimsOneClaimant...");
+        Claimant c = new Claimant();
+        c.setName("John Doe");
+        c.setGender(Gender.MALE);
+
+        Claim cl1 = new Claim();
+        cl1.setId(123);
+        cl1.setAmount(1000.00);
+        cl1.setReason("Crash");
+        cl1.getInvolvedPersons().add(c);
+
+        Claim cl2 = new Claim();
+        cl2.setId(234);
+        cl2.setAmount(1000.00);
+        cl2.setReason("Crash");
+        //cl.getInvolvedPersons().add(c);
+
+        c.getClaims().add(cl1);
+        c.getClaims().add(cl2);
+
+        session.insert(c);
+        session.insert(cl1);
+        session.insert(cl2);
+
+        session.fireAllRules();
+    }
+
+    @Test
+    public void testMultipleClaimsMultiClaimants() {
+        System.out.println("Running testMultipleClaimsMultiClaimants...");
+        Claimant c1 = new Claimant();
+        c1.setName("John Doe");
+        c1.setGender(Gender.MALE);
+
+        Claim cl1 = new Claim();
+        cl1.setId(123);
+        cl1.setAmount(1000.00);
+        cl1.setReason("Crash");
+        cl1.getInvolvedPersons().add(c1);
+
+        c1.getClaims().add(cl1);
+
+        session.insert(c1);
+        session.insert(cl1);
+
+        Claimant c2 = new Claimant();
+        c2.setName("Jane Doe");
+        c2.setGender(Gender.FEMALE);
+
+        Claim cl2 = new Claim();
+        cl2.setId(234);
+        cl2.setAmount(2000.00);
+        cl2.setReason("Breakdown");
+        cl2.getInvolvedPersons().add(c2);
+
+        c2.getClaims().add(cl2);
+
+        session.insert(c2);
+        session.insert(cl2);
+
+        session.fireAllRules();
+    }
+}

+ 0 - 0
src/test/resources/com/acme/claims/.gitkeep → src/test/resources/com/redhat/training/claims/.gitkeep