Grega Bremec пре 2 година
родитељ
комит
148ea1209b
1 измењених фајлова са 119 додато и 2 уклоњено
  1. 119 2
      src/main/java/com/redhat/training/claims/ClarificationTaskHandler.java

+ 119 - 2
src/main/java/com/redhat/training/claims/ClarificationTaskHandler.java

@@ -1,7 +1,15 @@
 package com.redhat.training.claims;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Map;
 
+import com.redhat.training.claims.model.Claim;
+import com.redhat.training.claims.model.ClaimClarificationRequests;
+import com.redhat.training.claims.model.Vehicle;
+
 import org.drools.core.process.instance.WorkItemHandler;
 
 import org.kie.api.runtime.process.WorkItem;
@@ -10,18 +18,127 @@ import org.kie.api.runtime.process.WorkItemManager;
 public class ClarificationTaskHandler implements WorkItemHandler {
     @Override
     public void executeWorkItem(WorkItem wi, WorkItemManager wim) {
-        System.out.println("In executeWorkItem()!");
+        System.out.println("executeWorkItem for " + wi.getId() + " " +
+                            "(" + wi.getName() + ", PID:" + wi.getProcessInstanceId() + ", " +
+                            "Nod:" + wi.getParameter("NodeName") + ", " +
+                            "Tsk:" + wi.getParameter("TaskName") + ", " +
+                            "Skp:" + wi.getParameter("Skippable") +
+                            ")");
 
         Map<String, Object> params = wi.getParameters();
         for (String key : params.keySet()) {
             System.out.println("Got parameter: " + key + " of type " + params.get(key).getClass().getName());
         }
 
+        switch((String)wi.getParameter("TaskName")) {
+            case "Clarify":
+                Claim c = (Claim)wi.getParameter("tClaim");
+                ClaimClarificationRequests ccr = (ClaimClarificationRequests)wi.getParameter("tClaimClarificationRequests");
+
+                System.out.println("Processing Claim no. " + c.getId() + " there are several clarification requests:");
+                for (String reason : ccr.getRequests()) {
+                    System.out.println(" - " + reason);
+                }
+                System.out.println("Please provide clarifications below.\n\n" +
+                                    "Claim ID " + c.getId() + "\n" +
+                                    "=================================");
+
+                Vehicle newVehicle = new Vehicle();
+                if (c.getVehicle() == null)
+                    c.setVehicle(newVehicle);
+
+                try {
+                    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+                    System.out.print("Reason [" + c.getReason() + "]: ");
+                    String newReason = br.readLine();
+                    if (newReason.length() > 0)
+                        c.setReason(newReason);
+
+                    System.out.print("Amount [" + c.getAmount() + "]: ");
+                    String newAmountStr = br.readLine();
+                    if (newAmountStr.length() > 0) {
+                        c.setAmount(Double.parseDouble(newAmountStr));
+                    }
+
+                    System.out.print("Date Filed [" + (c.getDateFiled() != null ? (new SimpleDateFormat("dd.MM.yyyy")).format(c.getDateFiled()) : null) + "]: ");
+                    String newDateFiledStr = br.readLine();
+                    if (newDateFiledStr.length() > 0) {
+                        try {
+                            Date newDateFiled = (new SimpleDateFormat("dd.MM.yyyy")).parse(newDateFiledStr);
+                            c.setDateFiled(newDateFiled);
+                        } catch (java.text.ParseException pe) {
+                            throw new RuntimeException("Error parsing parameter 'Date Filed'", pe);
+                        }
+                    }
+
+                    System.out.print("Date of Event [" + (c.getDateOfEvent() != null ? (new SimpleDateFormat("dd.MM.yyyy")).format(c.getDateOfEvent()) : null) + "]: ");
+                    String newDateOfEventStr = br.readLine();
+                    if (newDateOfEventStr.length() > 0) {
+                        try {
+                            Date newDateOfEvent = (new SimpleDateFormat("dd.MM.yyyy")).parse(newDateOfEventStr);
+                            c.setDateOfEvent(newDateOfEvent);
+                        } catch (java.text.ParseException pe) {
+                            throw new RuntimeException("Error parsing parameter 'Date of Event'", pe);
+                        }
+                    }
+
+                    System.out.println("Vehicle [" + c.getVehicle().getMark() + " " + c.getVehicle().getModel() + "]:");
+                    System.out.print(" - Make [" + c.getVehicle().getMark() + "]: ");
+                    String newMake = br.readLine();
+                    newVehicle.setMark(newMake.length() > 0 ? newMake : c.getVehicle().getMark());
+
+                    System.out.print(" - Model [" + c.getVehicle().getModel() + "]: ");
+                    String newModel = br.readLine();
+                    newVehicle.setModel(newModel.length() > 0 ? newModel : c.getVehicle().getModel());
+
+                    System.out.print(" - VIN [" + c.getVehicle().getVin() + "]: ");
+                    String newVin = br.readLine();
+                    newVehicle.setVin(newVin.length() > 0 ? newVin : c.getVehicle().getVin());
+
+                    Date currProdDate = c.getVehicle().getProductionDate();
+                    System.out.print(" - Prod Date [" + (currProdDate != null ? new SimpleDateFormat("dd.MM.yyyy").format(currProdDate) : null) + "]: ");
+                    String newProdDateStr = br.readLine();
+                    if (newProdDateStr.length() > 0) {
+                        newVehicle.setProductionDate(new SimpleDateFormat("dd.MM.yyyy").parse(newProdDateStr));
+                    } else {
+                        newVehicle.setProductionDate(currProdDate);
+                    }
+
+                    System.out.print(" - Mileage [" + c.getVehicle().getMileage() + "]: ");
+                    String newMileageStr = br.readLine();
+                    if (newMileageStr.length() > 0) {
+                        newVehicle.setMileage(Integer.parseInt(newMileageStr));
+                    } else {
+                        newVehicle.setMileage(c.getVehicle().getMileage());
+                    }
+                    System.out.print(" - Reg Number [" + c.getVehicle().getRegistrationNumber() + "]: ");
+                    String newRegNumber = br.readLine();
+                    newVehicle.setRegistrationNumber(newRegNumber.length() > 0 ? newRegNumber : c.getVehicle().getRegistrationNumber());
+                } catch (java.io.IOException ioe) {
+                    throw new RuntimeException("Error while gathering clarifications", ioe);
+                } catch (java.text.ParseException pe) {
+                    throw new RuntimeException("Error parsing parameters", pe);
+                }
+
+                System.out.println("=================================\n");
+
+                break;
+
+            default:
+                System.out.println("Unknown task! ABORTING!");
+                wim.abortWorkItem(wi.getId());
+        }
+
+        System.out.println("Completing WorkItem " + wi.getId());
+        wim.completeWorkItem(wi.getId(), params);
+
         System.out.println("Leaving executeWorkItem()!");
     }
 
     @Override
-    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+    public void abortWorkItem(WorkItem wi, WorkItemManager wim) {
         System.out.println("Aborting WorkItem!");
+        wim.abortWorkItem(wi.getId());
     }
 }