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 8ad41af9ea02426b509e8b1da0d22d8475b29efb..3c94cbcb7bc9d92b8b3ec9baa07bc9b1ffe2c039 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 b244054b1a2de29f5d1f0b1523635b50535970b4..da0b5445571468a31430d9591133745c7181187b 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 b03924051a64fdc850120dec1918970862f520ee..b4549d4deae30c1ff666e6740a070ad6dae56060 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 0c443de55d5d97562ab31e7fcd05cdfc3b4c8b2a..dfa2a982a92100ef7c121f6a4172114e86dda6f9 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 d71cb402a25af2caa36478f5b6c13b8a275fa4ce..4a5c143bee431b865b6e887666ec1cf0da4c63c3 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 707e87b49a283b927f48462c4ffb7c912277557f..e32d80735325a2294a7771e35c0c557be6c37928 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 57c3582b0e214fb8b336fe1e446780e091e36fbf..fc15023392af3b6e2c540d480fccf123f2282093 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); + } } }