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