From c08c156dcb2f81ea39e424263ff802e003d03909 Mon Sep 17 00:00:00 2001
From: midebar <midebar@gmail.com>
Date: Mon, 21 Feb 2022 01:19:20 +0700
Subject: [PATCH]  Implemeneted Tracking

---
 .../controller/TrackingController.java        |  9 ++++----
 .../tutorial1/tracking/core/Courier.java      | 19 +++++++++++----
 .../tutorial1/tracking/core/DragoHunter.java  | 23 +++++++++++++++----
 .../tutorial1/tracking/core/DragoMonitor.java | 10 ++++++--
 .../tutorial1/tracking/core/EventMonitor.java |  2 ++
 .../tracking/core/SweetsMonitor.java          | 10 ++++++--
 .../tracking/service/TrackingServiceImpl.java |  6 ++++-
 7 files changed, 60 insertions(+), 19 deletions(-)

diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java
index 8ad41af..3c94cbc 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java
@@ -32,19 +32,18 @@ public class TrackingController {
     @RequestMapping(path = "/new-drago-location", method = RequestMethod.POST)
     public String handleNewDrago(Model model, 
                                 @RequestParam(value = "dragoLocation", required = true) String dragoLocation) {
-        
-    
-        // TODO: implement drago location handler
 
+        // TODO: implement drago location handler
+        trackingService.handleNewEventLocation("Moving Drago",dragoLocation);
         return "redirect:/tracking";
     }
 
     @RequestMapping(path = "/new-sweets-location", method = RequestMethod.POST)
     public String handleNewSweets(Model model, 
                                 @RequestParam(value = "sweetsLocation", required = true) String sweetsLocation) {
-        
-    
+
         // TODO: implement sweets location handler
+        trackingService.handleNewEventLocation("Moving Sweets", sweetsLocation);
         return "redirect:/tracking";
     }
 }
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java
index b244054..da0b544 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java
@@ -5,32 +5,41 @@ import java.util.List;
 public class Courier implements RoadUser {
 
     private String name;
+    private  int speed;
+    private List<String> allowedRoutes;
 
     /*
         speed: the speed of the courier
         allowedRoutes: name of all possible routes this courier can visit
     */
     public Courier(String name, int speed, List<String> allowedRoutes) {
-        
         this.name = name;
+        this.speed = speed;
+        this.allowedRoutes = allowedRoutes;
         // TODO complete me
     }
 
     @Override
     public void handleNotification(String notificationFrom, String location) {
         // TODO complete me
-        
+        if(notificationFrom.equals("Drago Monitor")){
+            int indexLocationDrago = allowedRoutes.indexOf(location);
+            allowedRoutes.remove(indexLocationDrago);
+        }else if(notificationFrom.equals("Sweets Monitor")){
+            int indexLocationSweets = allowedRoutes.indexOf(location);
+            allowedRoutes.add(0,location);
+            allowedRoutes.remove(indexLocationSweets+1);
+        }
     }
 
     @Override
     public int getSpeed() {
         // TODO complete me
-        return 0;
+        return this.speed;
     }
 
     @Override
     public String getName() {
-        return name;
+        return this.name;
     }
-    
 }
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java
index b039240..b4549d4 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java
@@ -5,30 +5,45 @@ import java.util.List;
 public class DragoHunter implements RoadUser {
 
     private String name;
+    private  int speed;
+    private List<String> allowedRoutes;
+
     /*
         speed: the speed of the courier
         allowedRoutes: name of all possible routes this courier can visit
     */
     public DragoHunter(String name, int speed, List<String> allowedRoutes) {
-        this.name = name; 
+        this.name = name;
+        this.speed = speed;
+        this.allowedRoutes = allowedRoutes;
         // TODO complete me
     }
 
     @Override
     public void handleNotification(String notificationFrom, String location) {
         // TODO complete me
-        
+        //Diasumsikan bahwa Drago Hunter akan memprioritaskan drago daripada sweets
+        //Prioritas tidak dijelaskan pada requirement
+        if(notificationFrom.equals("Drago Monitor")){
+            int indexLocationDrago = allowedRoutes.indexOf(location);
+            allowedRoutes.add(0,location);
+            allowedRoutes.remove(indexLocationDrago+1);
+        }else if(notificationFrom.equals("Sweets Monitor")){
+            int indexLocationSweets = allowedRoutes.indexOf(location);
+            allowedRoutes.add(0,location);
+            allowedRoutes.remove(indexLocationSweets+1);
+        }
     }
 
     @Override
     public int getSpeed() {
         // TODO complete me
-        return 0;
+        return this.speed;
     }
 
     @Override
     public String getName() {
-        return name;
+        return this.name;
     }
     
 }
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java
index 0c443de..dfa2a98 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java
@@ -1,17 +1,23 @@
 package id.ac.ui.cs.advprog.tutorial1.tracking.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class DragoMonitor implements EventMonitor {
 
+    List<RoadUser> roadUsers = new ArrayList<>();
     @Override
     public void addRoadUser(RoadUser roadUser) {
         // TODO Auto-generated method stub
-        
+        this.roadUsers.add(roadUser);
     }
 
     @Override
     public void notifyRoadUsers(String newDragoLocation) {
         // TODO Auto-generated method stub
-        
+        for (RoadUser roadUser: roadUsers) {
+            roadUser.handleNotification(this.getName(), newDragoLocation);
+        }
     }
 
     @Override
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java
index d71cb40..4a5c143 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java
@@ -1,5 +1,7 @@
 package id.ac.ui.cs.advprog.tutorial1.tracking.core;
 
+import java.util.List;
+
 public interface EventMonitor {
     
     void addRoadUser(RoadUser roadUser);
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java
index 707e87b..e32d807 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java
@@ -1,17 +1,23 @@
 package id.ac.ui.cs.advprog.tutorial1.tracking.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class SweetsMonitor implements EventMonitor {
 
+    List<RoadUser> roadUsers = new ArrayList<>();
     @Override
     public void addRoadUser(RoadUser roadUser) {
         // TODO Auto-generated method stub
-        
+        this.roadUsers.add(roadUser);
     }
 
     @Override
     public void notifyRoadUsers(String newSweetsLocation) {
         // TODO Auto-generated method stub
-        
+        for (RoadUser roadUser: roadUsers) {
+            roadUser.handleNotification(this.getName(), newSweetsLocation);
+        }
     }
 
     @Override
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java
index 57c3582..fc15023 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java
@@ -27,7 +27,11 @@ public class TrackingServiceImpl implements TrackingService {
     @Override
     public void handleNewEventLocation(String eventName, String location) {
         // TODO Auto-generated method stub
-        
+        if(eventName.equals("Moving Drago")){
+            eventMonitorRepository.findByName("Drago Monitor").notifyRoadUsers(location);
+        }else if(eventName.equals("Moving Sweets")){
+            eventMonitorRepository.findByName("Sweets Monitor").notifyRoadUsers(location);
+        }
     }
     
 }
-- 
GitLab