From 5c445a2f667d2969d86a6e25f5c4812dbf2f513b Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 8 Nov 2021 14:23:27 +0100 Subject: [PATCH] rename assignment to roster & added executor registry to roster --- .../port/in/ApplyForTaskUseCase.java | 7 -- {assignment => roster}/.gitignore | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 {assignment => roster}/Dockerfile | 0 {assignment => roster}/mvnw | 0 {assignment => roster}/mvnw.cmd | 0 {assignment => roster}/pom.xml | 6 ++ .../ch/unisg/roster/RosterApplication.java | 6 +- .../common/clients/TapasMqttClient.java | 94 ++++++++++++++++++ .../mqtt/AuctionEventMqttListener.java | 11 ++ .../mqtt/AuctionEventsMqttDispatcher.java | 52 ++++++++++ ...ExecutorAddedEventListenerMqttAdapter.java | 44 ++++++++ ...ecutorRemovedEventListenerMqttAdapter.java | 41 ++++++++ .../in/web/ApplyForTaskController.java | 10 +- .../adapter/in/web/DeleteTaskController.java | 8 +- .../adapter/in/web/NewTaskController.java | 8 +- .../in/web/TaskCompletedController.java | 8 +- .../in/web/WebControllerExceptionHandler.java | 2 +- ...llExecutorInExecutorPoolByTypeAdapter.java | 6 +- .../out/web/PublishNewTaskEventAdapter.java | 6 +- .../web/PublishTaskAssignedEventAdapter.java | 6 +- .../web/PublishTaskCompletedEventAdapter.java | 6 +- .../handler/ExecutorAddedHandler.java | 16 +++ .../handler/ExecutorRemovedHandler.java | 19 ++++ .../port/in/ApplyForTaskCommand.java | 4 +- .../port/in/ApplyForTaskUseCase.java | 7 ++ .../port/in/DeleteTaskCommand.java | 4 +- .../port/in/DeleteTaskUseCase.java | 2 +- .../port/in/ExecutorAddedEvent.java | 33 ++++++ .../port/in/ExecutorAddedEventHandler.java | 6 ++ .../port/in/ExecutorRemovedEvent.java | 27 +++++ .../port/in/ExecutorRemovedEventHandler.java | 6 ++ .../application/port/in/NewTaskCommand.java | 4 +- .../application/port/in/NewTaskUseCase.java | 2 +- .../port/in/TaskCompletedCommand.java | 2 +- .../port/in/TaskCompletedUseCase.java | 2 +- ...etAllExecutorInExecutorPoolByTypePort.java | 4 +- .../port/out/NewTaskEventPort.java | 4 +- .../port/out/TaskAssignedEventPort.java | 4 +- .../port/out/TaskCompletedEventPort.java | 4 +- .../service/ApplyForTaskService.java | 14 +-- .../service/DeleteTaskService.java | 8 +- .../application/service/NewTaskService.java | 24 ++--- .../service/TaskCompletedService.java | 12 +-- .../roster/roster}/domain/ExecutorInfo.java | 4 +- .../roster/domain/ExecutorRegistry.java | 92 +++++++++++++++++ .../unisg/roster/roster}/domain/Roster.java | 4 +- .../roster/roster}/domain/RosterItem.java | 2 +- .../ch/unisg/roster/roster}/domain/Task.java | 4 +- .../roster}/domain/event/NewTaskEvent.java | 4 +- .../domain/event/TaskAssignedEvent.java | 2 +- .../domain/event/TaskCompletedEvent.java | 2 +- .../domain/valueobject/ExecutorType.java | 2 +- .../src/main/resources/application.properties | 0 .../unisg/roster/RosterApplicationTests.java | 4 +- 57 files changed, 548 insertions(+), 101 deletions(-) delete mode 100644 assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskUseCase.java rename {assignment => roster}/.gitignore (100%) rename {assignment => roster}/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename {assignment => roster}/.mvn/wrapper/maven-wrapper.jar (100%) rename {assignment => roster}/.mvn/wrapper/maven-wrapper.properties (100%) rename {assignment => roster}/Dockerfile (100%) rename {assignment => roster}/mvnw (100%) rename {assignment => roster}/mvnw.cmd (100%) rename {assignment => roster}/pom.xml (94%) rename assignment/src/main/java/ch/unisg/assignment/AssignmentApplication.java => roster/src/main/java/ch/unisg/roster/RosterApplication.java (60%) create mode 100644 roster/src/main/java/ch/unisg/roster/roster/adapter/common/clients/TapasMqttClient.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventMqttListener.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventsMqttDispatcher.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorRemovedEventListenerMqttAdapter.java rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/in/web/ApplyForTaskController.java (73%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/in/web/DeleteTaskController.java (79%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/in/web/NewTaskController.java (81%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/in/web/TaskCompletedController.java (79%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/in/web/WebControllerExceptionHandler.java (93%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java (89%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/out/web/PublishNewTaskEventAdapter.java (91%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/out/web/PublishTaskAssignedEventAdapter.java (88%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/adapter/out/web/PublishTaskCompletedEventAdapter.java (89%) create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorAddedHandler.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorRemovedHandler.java rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/ApplyForTaskCommand.java (82%) create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskUseCase.java rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/DeleteTaskCommand.java (80%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/DeleteTaskUseCase.java (62%) create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEvent.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEventHandler.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEvent.java create mode 100644 roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEventHandler.java rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/NewTaskCommand.java (80%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/NewTaskUseCase.java (62%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/TaskCompletedCommand.java (91%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/in/TaskCompletedUseCase.java (64%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java (63%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/out/NewTaskEventPort.java (56%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/out/TaskAssignedEventPort.java (60%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/port/out/TaskCompletedEventPort.java (58%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/service/ApplyForTaskService.java (65%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/service/DeleteTaskService.java (67%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/service/NewTaskService.java (53%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/application/service/TaskCompletedService.java (63%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/ExecutorInfo.java (67%) create mode 100644 roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorRegistry.java rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/Roster.java (95%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/RosterItem.java (90%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/Task.java (82%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/event/NewTaskEvent.java (56%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/event/TaskAssignedEvent.java (74%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/event/TaskCompletedEvent.java (85%) rename {assignment/src/main/java/ch/unisg/assignment/assignment => roster/src/main/java/ch/unisg/roster/roster}/domain/valueobject/ExecutorType.java (74%) rename {assignment => roster}/src/main/resources/application.properties (100%) rename assignment/src/test/java/ch/unisg/assignment/AssignmentApplicationTests.java => roster/src/test/java/ch/unisg/roster/RosterApplicationTests.java (70%) diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskUseCase.java b/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskUseCase.java deleted file mode 100644 index 1e7180a..0000000 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package ch.unisg.assignment.assignment.application.port.in; - -import ch.unisg.assignment.assignment.domain.Task; - -public interface ApplyForTaskUseCase { - Task applyForTask(ApplyForTaskCommand applyForTaskCommand); -} diff --git a/assignment/.gitignore b/roster/.gitignore similarity index 100% rename from assignment/.gitignore rename to roster/.gitignore diff --git a/assignment/.mvn/wrapper/MavenWrapperDownloader.java b/roster/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from assignment/.mvn/wrapper/MavenWrapperDownloader.java rename to roster/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/assignment/.mvn/wrapper/maven-wrapper.jar b/roster/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from assignment/.mvn/wrapper/maven-wrapper.jar rename to roster/.mvn/wrapper/maven-wrapper.jar diff --git a/assignment/.mvn/wrapper/maven-wrapper.properties b/roster/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from assignment/.mvn/wrapper/maven-wrapper.properties rename to roster/.mvn/wrapper/maven-wrapper.properties diff --git a/assignment/Dockerfile b/roster/Dockerfile similarity index 100% rename from assignment/Dockerfile rename to roster/Dockerfile diff --git a/assignment/mvnw b/roster/mvnw similarity index 100% rename from assignment/mvnw rename to roster/mvnw diff --git a/assignment/mvnw.cmd b/roster/mvnw.cmd similarity index 100% rename from assignment/mvnw.cmd rename to roster/mvnw.cmd diff --git a/assignment/pom.xml b/roster/pom.xml similarity index 94% rename from assignment/pom.xml rename to roster/pom.xml index b4650de..f51bff7 100644 --- a/assignment/pom.xml +++ b/roster/pom.xml @@ -56,6 +56,12 @@ 1.2 + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.5 + + org.json json diff --git a/assignment/src/main/java/ch/unisg/assignment/AssignmentApplication.java b/roster/src/main/java/ch/unisg/roster/RosterApplication.java similarity index 60% rename from assignment/src/main/java/ch/unisg/assignment/AssignmentApplication.java rename to roster/src/main/java/ch/unisg/roster/RosterApplication.java index 30d7782..dd57a5d 100644 --- a/assignment/src/main/java/ch/unisg/assignment/AssignmentApplication.java +++ b/roster/src/main/java/ch/unisg/roster/RosterApplication.java @@ -1,13 +1,13 @@ -package ch.unisg.assignment; +package ch.unisg.roster; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class AssignmentApplication { +public class RosterApplication { public static void main(String[] args) { - SpringApplication.run(AssignmentApplication.class, args); + SpringApplication.run(RosterApplication.class, args); } } diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/common/clients/TapasMqttClient.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/common/clients/TapasMqttClient.java new file mode 100644 index 0000000..8b5411b --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/common/clients/TapasMqttClient.java @@ -0,0 +1,94 @@ +package ch.unisg.roster.roster.adapter.common.clients; + +import ch.unisg.roster.roster.adapter.in.messaging.mqtt.AuctionEventsMqttDispatcher; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; + +import java.nio.charset.StandardCharsets; +import java.util.UUID; + +/** + * MQTT client for your TAPAS application. This class is defined as a singleton, but it does not have + * to be this way. This class is only provided as an example to help you bootstrap your project. + * You are welcomed to change this class as you see fit. + */ +public class TapasMqttClient { + private static final Logger LOGGER = LogManager.getLogger(TapasMqttClient.class); + + private static TapasMqttClient tapasClient = null; + + private MqttClient mqttClient; + private final String mqttClientId; + private final String brokerAddress; + + private final MessageReceivedCallback messageReceivedCallback; + + private final AuctionEventsMqttDispatcher dispatcher; + + private TapasMqttClient(String brokerAddress, AuctionEventsMqttDispatcher dispatcher) { + this.mqttClientId = UUID.randomUUID().toString(); + this.brokerAddress = brokerAddress; + + this.messageReceivedCallback = new MessageReceivedCallback(); + + this.dispatcher = dispatcher; + } + + public static synchronized TapasMqttClient getInstance(String brokerAddress, + AuctionEventsMqttDispatcher dispatcher) { + + if (tapasClient == null) { + tapasClient = new TapasMqttClient(brokerAddress, dispatcher); + } + + return tapasClient; + } + + public void startReceivingMessages() throws MqttException { + mqttClient = new org.eclipse.paho.client.mqttv3.MqttClient(brokerAddress, mqttClientId, new MemoryPersistence()); + mqttClient.connect(); + mqttClient.setCallback(messageReceivedCallback); + + subscribeToAllTopics(); + } + + public void stopReceivingMessages() throws MqttException { + mqttClient.disconnect(); + } + + private void subscribeToAllTopics() throws MqttException { + for (String topic : dispatcher.getAllTopics()) { + subscribeToTopic(topic); + } + } + + private void subscribeToTopic(String topic) throws MqttException { + mqttClient.subscribe(topic); + } + + private void publishMessage(String topic, String payload) throws MqttException { + MqttMessage message = new MqttMessage(payload.getBytes(StandardCharsets.UTF_8)); + mqttClient.publish(topic, message); + } + + private class MessageReceivedCallback implements MqttCallback { + + @Override + public void connectionLost(Throwable cause) { } + + @Override + public void messageArrived(String topic, MqttMessage message) { + LOGGER.info("Received new MQTT message for topic " + topic + ": " + + new String(message.getPayload())); + + if (topic != null && !topic.isEmpty()) { + dispatcher.dispatchEvent(topic, message); + } + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) { } + } +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventMqttListener.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventMqttListener.java new file mode 100644 index 0000000..6eb109f --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventMqttListener.java @@ -0,0 +1,11 @@ +package ch.unisg.roster.roster.adapter.in.messaging.mqtt; + +import org.eclipse.paho.client.mqttv3.MqttMessage; + +/** + * Abstract MQTT listener for auction-related events + */ +public abstract class AuctionEventMqttListener { + + public abstract boolean handleEvent(MqttMessage message); +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventsMqttDispatcher.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventsMqttDispatcher.java new file mode 100644 index 0000000..d19c803 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/AuctionEventsMqttDispatcher.java @@ -0,0 +1,52 @@ +package ch.unisg.roster.roster.adapter.in.messaging.mqtt; + +import org.eclipse.paho.client.mqttv3.*; + +import java.util.Hashtable; +import java.util.Map; +import java.util.Set; + +/** + * Dispatches MQTT messages for known topics to associated event listeners. Used in conjunction with + * {@link ch.unisg.tapas.auctionhouse.adapter.common.clients.TapasMqttClient}. + * + * This is where you would define MQTT topics and map them to event listeners (see + * {@link AuctionEventsMqttDispatcher#initRouter()}). + * + * This class is only provided as an example to help you bootstrap the project. You are welcomed to + * change this class as you see fit. + */ +public class AuctionEventsMqttDispatcher { + private final Map router; + + public AuctionEventsMqttDispatcher() { + this.router = new Hashtable<>(); + initRouter(); + } + + // TODO: Register here your topics and event listener adapters + private void initRouter() { + router.put("ch/unisg/tapas-group-tutors/executors/added", new ExecutorAddedEventListenerMqttAdapter()); + router.put("ch/unisg/tapas-group-tutors/executors/removed", new ExecutorRemovedEventListenerMqttAdapter()); + } + + /** + * Returns all topics registered with this dispatcher. + * + * @return the set of registered topics + */ + public Set getAllTopics() { + return router.keySet(); + } + + /** + * Dispatches an event received via MQTT for a given topic. + * + * @param topic the topic for which the MQTT message was received + * @param message the received MQTT message + */ + public void dispatchEvent(String topic, MqttMessage message) { + AuctionEventMqttListener listener = router.get(topic); + listener.handleEvent(message); + } +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java new file mode 100644 index 0000000..dd9257e --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java @@ -0,0 +1,44 @@ +package ch.unisg.roster.roster.adapter.in.messaging.mqtt; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import ch.unisg.common.valueobject.ExecutorURI; +import ch.unisg.roster.roster.application.handler.ExecutorAddedHandler; +import ch.unisg.roster.roster.application.port.in.ExecutorAddedEvent; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; + +public class ExecutorAddedEventListenerMqttAdapter extends AuctionEventMqttListener { + private static final Logger LOGGER = LogManager.getLogger(ExecutorAddedEventListenerMqttAdapter.class); + + @Override + public boolean handleEvent(MqttMessage message) { + String payload = new String(message.getPayload()); + + try { + // Note: this messge representation is provided only as an example. You should use a + // representation that makes sense in the context of your application. + JsonNode data = new ObjectMapper().readTree(payload); + + String taskType = data.get("taskType").asText(); + String executorId = data.get("executorURI").asText(); + + ExecutorAddedEvent executorAddedEvent = new ExecutorAddedEvent( + new ExecutorURI(executorId), + new ExecutorType(taskType) + ); + + ExecutorAddedHandler newExecutorHandler = new ExecutorAddedHandler(); + newExecutorHandler.handleNewExecutorEvent(executorAddedEvent); + } catch (JsonProcessingException | NullPointerException e) { + LOGGER.error(e.getMessage(), e); + return false; + } + + return true; + } +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorRemovedEventListenerMqttAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorRemovedEventListenerMqttAdapter.java new file mode 100644 index 0000000..d7b5067 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorRemovedEventListenerMqttAdapter.java @@ -0,0 +1,41 @@ +package ch.unisg.roster.roster.adapter.in.messaging.mqtt; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import ch.unisg.common.valueobject.ExecutorURI; +import ch.unisg.roster.roster.application.handler.ExecutorRemovedHandler; +import ch.unisg.roster.roster.application.port.in.ExecutorRemovedEvent; + +public class ExecutorRemovedEventListenerMqttAdapter extends AuctionEventMqttListener { + private static final Logger LOGGER = LogManager.getLogger(ExecutorRemovedEventListenerMqttAdapter.class); + + @Override + public boolean handleEvent(MqttMessage message) { + String payload = new String(message.getPayload()); + + try { + // Note: this messge representation is provided only as an example. You should use a + // representation that makes sense in the context of your application. + JsonNode data = new ObjectMapper().readTree(payload); + + String executorId = data.get("executorURI").asText(); + + ExecutorRemovedEvent executorRemovedEvent = new ExecutorRemovedEvent( + new ExecutorURI(executorId)); + + ExecutorRemovedHandler executorRemovedHandler = new ExecutorRemovedHandler(); + executorRemovedHandler.handleExecutorRemovedEvent(executorRemovedEvent); + + } catch (JsonProcessingException | NullPointerException e) { + LOGGER.error(e.getMessage(), e); + return false; + } + + return true; + } +} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/ApplyForTaskController.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/ApplyForTaskController.java similarity index 73% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/ApplyForTaskController.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/ApplyForTaskController.java index 7b8331c..28170f0 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/ApplyForTaskController.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/ApplyForTaskController.java @@ -1,13 +1,13 @@ -package ch.unisg.assignment.assignment.adapter.in.web; +package ch.unisg.roster.roster.adapter.in.web; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskCommand; -import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskUseCase; -import ch.unisg.assignment.assignment.domain.ExecutorInfo; -import ch.unisg.assignment.assignment.domain.Task; +import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand; +import ch.unisg.roster.roster.application.port.in.ApplyForTaskUseCase; +import ch.unisg.roster.roster.domain.ExecutorInfo; +import ch.unisg.roster.roster.domain.Task; @RestController public class ApplyForTaskController { diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/DeleteTaskController.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java similarity index 79% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/DeleteTaskController.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java index b34e6db..eef8b71 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/DeleteTaskController.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.in.web; +package ch.unisg.roster.roster.adapter.in.web; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -6,9 +6,9 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import ch.unisg.assignment.assignment.application.port.in.DeleteTaskCommand; -import ch.unisg.assignment.assignment.application.port.in.DeleteTaskUseCase; -import ch.unisg.assignment.assignment.domain.Task; +import ch.unisg.roster.roster.application.port.in.DeleteTaskCommand; +import ch.unisg.roster.roster.application.port.in.DeleteTaskUseCase; +import ch.unisg.roster.roster.domain.Task; @RestController public class DeleteTaskController { diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/NewTaskController.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java similarity index 81% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/NewTaskController.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java index 9faf2ec..af01346 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/NewTaskController.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.in.web; +package ch.unisg.roster.roster.adapter.in.web; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -6,9 +6,9 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import ch.unisg.assignment.assignment.application.port.in.NewTaskCommand; -import ch.unisg.assignment.assignment.application.port.in.NewTaskUseCase; -import ch.unisg.assignment.assignment.domain.Task; +import ch.unisg.roster.roster.application.port.in.NewTaskCommand; +import ch.unisg.roster.roster.application.port.in.NewTaskUseCase; +import ch.unisg.roster.roster.domain.Task; @RestController public class NewTaskController { diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/TaskCompletedController.java similarity index 79% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/TaskCompletedController.java index df89c7f..f81db32 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/TaskCompletedController.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.in.web; +package ch.unisg.roster.roster.adapter.in.web; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -6,9 +6,9 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import ch.unisg.assignment.assignment.application.port.in.TaskCompletedCommand; -import ch.unisg.assignment.assignment.application.port.in.TaskCompletedUseCase; -import ch.unisg.assignment.assignment.domain.Task; +import ch.unisg.roster.roster.application.port.in.TaskCompletedCommand; +import ch.unisg.roster.roster.application.port.in.TaskCompletedUseCase; +import ch.unisg.roster.roster.domain.Task; @RestController public class TaskCompletedController { diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/WebControllerExceptionHandler.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/WebControllerExceptionHandler.java similarity index 93% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/WebControllerExceptionHandler.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/WebControllerExceptionHandler.java index 19cce0d..f0a4974 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/WebControllerExceptionHandler.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/WebControllerExceptionHandler.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.in.web; +package ch.unisg.roster.roster.adapter.in.web; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java similarity index 89% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java index 1c02839..df444ca 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.out.web; +package ch.unisg.roster.roster.adapter.out.web; import java.io.IOException; import java.net.URI; @@ -14,8 +14,8 @@ import org.springframework.context.annotation.Primary; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.out.GetAllExecutorInExecutorPoolByTypePort; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.application.port.out.GetAllExecutorInExecutorPoolByTypePort; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; @Component @Primary diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java similarity index 91% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java index 10638d3..6a6b7f7 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.out.web; +package ch.unisg.roster.roster.adapter.out.web; import java.io.IOException; import java.net.URI; @@ -12,8 +12,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.out.NewTaskEventPort; -import ch.unisg.assignment.assignment.domain.event.NewTaskEvent; +import ch.unisg.roster.roster.application.port.out.NewTaskEventPort; +import ch.unisg.roster.roster.domain.event.NewTaskEvent; @Component @Primary diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishTaskAssignedEventAdapter.java similarity index 88% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishTaskAssignedEventAdapter.java index 45a10f3..c71e306 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishTaskAssignedEventAdapter.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.out.web; +package ch.unisg.roster.roster.adapter.out.web; import java.io.IOException; import java.net.URI; @@ -13,8 +13,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.out.TaskAssignedEventPort; -import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent; +import ch.unisg.roster.roster.application.port.out.TaskAssignedEventPort; +import ch.unisg.roster.roster.domain.event.TaskAssignedEvent; @Component @Primary diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskCompletedEventAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishTaskCompletedEventAdapter.java similarity index 89% rename from assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskCompletedEventAdapter.java rename to roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishTaskCompletedEventAdapter.java index e9c4944..7038291 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskCompletedEventAdapter.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishTaskCompletedEventAdapter.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.adapter.out.web; +package ch.unisg.roster.roster.adapter.out.web; import java.io.IOException; import java.net.URI; @@ -13,8 +13,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.out.TaskCompletedEventPort; -import ch.unisg.assignment.assignment.domain.event.TaskCompletedEvent; +import ch.unisg.roster.roster.application.port.out.TaskCompletedEventPort; +import ch.unisg.roster.roster.domain.event.TaskCompletedEvent; @Component @Primary diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorAddedHandler.java b/roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorAddedHandler.java new file mode 100644 index 0000000..9545c07 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorAddedHandler.java @@ -0,0 +1,16 @@ +package ch.unisg.roster.roster.application.handler; + +import ch.unisg.roster.roster.application.port.in.ExecutorAddedEvent; +import ch.unisg.roster.roster.application.port.in.ExecutorAddedEventHandler; +import ch.unisg.roster.roster.domain.ExecutorRegistry; +import org.springframework.stereotype.Component; + +@Component +public class ExecutorAddedHandler implements ExecutorAddedEventHandler { + + @Override + public boolean handleNewExecutorEvent(ExecutorAddedEvent executorAddedEvent) { + return ExecutorRegistry.getInstance().addExecutor(executorAddedEvent.getExecutorType(), + executorAddedEvent.getExecutorURI()); + } +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorRemovedHandler.java b/roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorRemovedHandler.java new file mode 100644 index 0000000..c6e3f68 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/handler/ExecutorRemovedHandler.java @@ -0,0 +1,19 @@ +package ch.unisg.roster.roster.application.handler; + +import ch.unisg.roster.roster.application.port.in.ExecutorRemovedEvent; +import ch.unisg.roster.roster.application.port.in.ExecutorRemovedEventHandler; +import ch.unisg.roster.roster.domain.ExecutorRegistry; +import org.springframework.stereotype.Component; + +/** + * Handler for executor removed events. It removes the executor from this roster's executor + * registry. + */ +@Component +public class ExecutorRemovedHandler implements ExecutorRemovedEventHandler { + + @Override + public boolean handleExecutorRemovedEvent(ExecutorRemovedEvent executorRemovedEvent) { + return ExecutorRegistry.getInstance().removeExecutor(executorRemovedEvent.getExecutorURI()); + } +} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskCommand.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskCommand.java similarity index 82% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskCommand.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskCommand.java index bdc16d9..f03ef5f 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/ApplyForTaskCommand.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskCommand.java @@ -1,8 +1,8 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; import javax.validation.constraints.NotNull; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; import ch.unisg.common.validation.SelfValidating; import ch.unisg.common.valueobject.ExecutorURI; import lombok.EqualsAndHashCode; diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskUseCase.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskUseCase.java new file mode 100644 index 0000000..61b7bd4 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ApplyForTaskUseCase.java @@ -0,0 +1,7 @@ +package ch.unisg.roster.roster.application.port.in; + +import ch.unisg.roster.roster.domain.Task; + +public interface ApplyForTaskUseCase { + Task applyForTask(ApplyForTaskCommand applyForTaskCommand); +} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/DeleteTaskCommand.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java similarity index 80% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/DeleteTaskCommand.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java index 7239acc..9f59dc3 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/DeleteTaskCommand.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java @@ -1,8 +1,8 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; import javax.validation.constraints.NotNull; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; import ch.unisg.common.validation.SelfValidating; import lombok.EqualsAndHashCode; import lombok.Value; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/DeleteTaskUseCase.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskUseCase.java similarity index 62% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/DeleteTaskUseCase.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskUseCase.java index e890e8b..2acfc63 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/DeleteTaskUseCase.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskUseCase.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; public interface DeleteTaskUseCase { boolean deleteTask(DeleteTaskCommand deleteTaskCommand); diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEvent.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEvent.java new file mode 100644 index 0000000..0e10b8e --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEvent.java @@ -0,0 +1,33 @@ +package ch.unisg.roster.roster.application.port.in; + +import lombok.Value; + +import javax.validation.constraints.NotNull; + +import ch.unisg.common.validation.SelfValidating; +import ch.unisg.common.valueobject.ExecutorURI; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; + +/** + * Event that notifies the auction house that an executor has been added to this TAPAS application. + */ +@Value +public class ExecutorAddedEvent extends SelfValidating { + @NotNull + private final ExecutorURI executorURI; + + @NotNull + private final ExecutorType executorType; + + /** + * Constructs an executor added event. + * + * @param executorURI the identifier of the executor that was added to this TAPAS application + */ + public ExecutorAddedEvent(ExecutorURI executorURI, ExecutorType executorType) { + this.executorURI = executorURI; + this.executorType = executorType; + + this.validateSelf(); + } +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEventHandler.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEventHandler.java new file mode 100644 index 0000000..c7a9076 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorAddedEventHandler.java @@ -0,0 +1,6 @@ +package ch.unisg.roster.roster.application.port.in; + +public interface ExecutorAddedEventHandler { + + boolean handleNewExecutorEvent(ExecutorAddedEvent executorAddedEvent); +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEvent.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEvent.java new file mode 100644 index 0000000..8753683 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEvent.java @@ -0,0 +1,27 @@ +package ch.unisg.roster.roster.application.port.in; + +import lombok.Value; + +import javax.validation.constraints.NotNull; + +import ch.unisg.common.validation.SelfValidating; +import ch.unisg.common.valueobject.ExecutorURI; + +/** + * Event that notifies the auction house that an executor has been removed from this TAPAS application. + */ +@Value +public class ExecutorRemovedEvent extends SelfValidating { + @NotNull + private final ExecutorURI executorURI; + + /** + * Constructs an executor removed event. + * + * @param executorURI the identifier of the executor that was removed from this TAPAS application + */ + public ExecutorRemovedEvent(ExecutorURI executorURI) { + this.executorURI = executorURI; + this.validateSelf(); + } +} diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEventHandler.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEventHandler.java new file mode 100644 index 0000000..79ee6a7 --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/ExecutorRemovedEventHandler.java @@ -0,0 +1,6 @@ +package ch.unisg.roster.roster.application.port.in; + +public interface ExecutorRemovedEventHandler { + + boolean handleExecutorRemovedEvent(ExecutorRemovedEvent executorRemovedEvent); +} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/NewTaskCommand.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/NewTaskCommand.java similarity index 80% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/NewTaskCommand.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/NewTaskCommand.java index f06798b..92a7403 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/NewTaskCommand.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/NewTaskCommand.java @@ -1,8 +1,8 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; import javax.validation.constraints.NotNull; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; import ch.unisg.common.validation.SelfValidating; import lombok.EqualsAndHashCode; import lombok.Value; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/NewTaskUseCase.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/NewTaskUseCase.java similarity index 62% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/NewTaskUseCase.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/NewTaskUseCase.java index 21f084e..f1bd733 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/NewTaskUseCase.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/NewTaskUseCase.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; public interface NewTaskUseCase { boolean addNewTaskToQueue(NewTaskCommand newTaskCommand); diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/TaskCompletedCommand.java similarity index 91% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/TaskCompletedCommand.java index 08dc8eb..b7438c0 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/TaskCompletedCommand.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; import javax.validation.constraints.NotNull; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedUseCase.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/TaskCompletedUseCase.java similarity index 64% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedUseCase.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/in/TaskCompletedUseCase.java index 1902952..51b305a 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedUseCase.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/TaskCompletedUseCase.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.application.port.in; +package ch.unisg.roster.roster.application.port.in; public interface TaskCompletedUseCase { void taskCompleted(TaskCompletedCommand taskCompletedCommand); diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java similarity index 63% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java index 9f6c824..f32a3f5 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.application.port.out; +package ch.unisg.roster.roster.application.port.out; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; public interface GetAllExecutorInExecutorPoolByTypePort { /** diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/NewTaskEventPort.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/NewTaskEventPort.java similarity index 56% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/NewTaskEventPort.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/out/NewTaskEventPort.java index 243c7f2..75fda6d 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/NewTaskEventPort.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/NewTaskEventPort.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.application.port.out; +package ch.unisg.roster.roster.application.port.out; -import ch.unisg.assignment.assignment.domain.event.NewTaskEvent; +import ch.unisg.roster.roster.domain.event.NewTaskEvent; public interface NewTaskEventPort { /** diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/TaskAssignedEventPort.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/TaskAssignedEventPort.java similarity index 60% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/TaskAssignedEventPort.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/out/TaskAssignedEventPort.java index 5f55ec8..2bcb2ae 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/TaskAssignedEventPort.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/TaskAssignedEventPort.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.application.port.out; +package ch.unisg.roster.roster.application.port.out; -import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent; +import ch.unisg.roster.roster.domain.event.TaskAssignedEvent; public interface TaskAssignedEventPort { /** diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/TaskCompletedEventPort.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/TaskCompletedEventPort.java similarity index 58% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/TaskCompletedEventPort.java rename to roster/src/main/java/ch/unisg/roster/roster/application/port/out/TaskCompletedEventPort.java index 83ad179..a8c11ef 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/TaskCompletedEventPort.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/out/TaskCompletedEventPort.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.application.port.out; +package ch.unisg.roster.roster.application.port.out; -import ch.unisg.assignment.assignment.domain.event.TaskCompletedEvent; +import ch.unisg.roster.roster.domain.event.TaskCompletedEvent; public interface TaskCompletedEventPort { /** diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/ApplyForTaskService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java similarity index 65% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/service/ApplyForTaskService.java rename to roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java index dfb70e0..26b75aa 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/ApplyForTaskService.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java @@ -1,15 +1,15 @@ -package ch.unisg.assignment.assignment.application.service; +package ch.unisg.roster.roster.application.service; import javax.transaction.Transactional; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskCommand; -import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskUseCase; -import ch.unisg.assignment.assignment.application.port.out.TaskAssignedEventPort; -import ch.unisg.assignment.assignment.domain.Roster; -import ch.unisg.assignment.assignment.domain.Task; -import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent; +import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand; +import ch.unisg.roster.roster.application.port.in.ApplyForTaskUseCase; +import ch.unisg.roster.roster.application.port.out.TaskAssignedEventPort; +import ch.unisg.roster.roster.domain.Roster; +import ch.unisg.roster.roster.domain.Task; +import ch.unisg.roster.roster.domain.event.TaskAssignedEvent; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/DeleteTaskService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java similarity index 67% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/service/DeleteTaskService.java rename to roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java index 7d67e4a..a6b4841 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/DeleteTaskService.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java @@ -1,12 +1,12 @@ -package ch.unisg.assignment.assignment.application.service; +package ch.unisg.roster.roster.application.service; import javax.transaction.Transactional; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.in.DeleteTaskCommand; -import ch.unisg.assignment.assignment.application.port.in.DeleteTaskUseCase; -import ch.unisg.assignment.assignment.domain.Roster; +import ch.unisg.roster.roster.application.port.in.DeleteTaskCommand; +import ch.unisg.roster.roster.application.port.in.DeleteTaskUseCase; +import ch.unisg.roster.roster.domain.Roster; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java similarity index 53% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java rename to roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java index d240a4b..588ed04 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java @@ -1,16 +1,16 @@ -package ch.unisg.assignment.assignment.application.service; +package ch.unisg.roster.roster.application.service; import javax.transaction.Transactional; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.in.NewTaskCommand; -import ch.unisg.assignment.assignment.application.port.in.NewTaskUseCase; -import ch.unisg.assignment.assignment.application.port.out.GetAllExecutorInExecutorPoolByTypePort; -import ch.unisg.assignment.assignment.application.port.out.NewTaskEventPort; -import ch.unisg.assignment.assignment.domain.Roster; -import ch.unisg.assignment.assignment.domain.Task; -import ch.unisg.assignment.assignment.domain.event.NewTaskEvent; +import ch.unisg.roster.roster.application.port.in.NewTaskCommand; +import ch.unisg.roster.roster.application.port.in.NewTaskUseCase; +import ch.unisg.roster.roster.application.port.out.NewTaskEventPort; +import ch.unisg.roster.roster.domain.ExecutorRegistry; +import ch.unisg.roster.roster.domain.Roster; +import ch.unisg.roster.roster.domain.Task; +import ch.unisg.roster.roster.domain.event.NewTaskEvent; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @@ -19,7 +19,6 @@ import lombok.RequiredArgsConstructor; public class NewTaskService implements NewTaskUseCase { private final NewTaskEventPort newTaskEventPort; - private final GetAllExecutorInExecutorPoolByTypePort getAllExecutorInExecutorPoolByTypePort; /** * Checks if we can execute the give task, if yes the task gets added to the task queue and return true. @@ -29,9 +28,10 @@ public class NewTaskService implements NewTaskUseCase { @Override public boolean addNewTaskToQueue(NewTaskCommand command) { - // if (!getAllExecutorInExecutorPoolByTypePort.doesExecutorTypeExist(command.getTaskType())) { - // return false; - // } + ExecutorRegistry executorRegistry = ExecutorRegistry.getInstance(); + if (!executorRegistry.containsTaskType(command.getTaskType())) { + return false; + } Task task = new Task(command.getTaskID(), command.getTaskType()); diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/TaskCompletedService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java similarity index 63% rename from assignment/src/main/java/ch/unisg/assignment/assignment/application/service/TaskCompletedService.java rename to roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java index 7c3e7f6..69b65d1 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/TaskCompletedService.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java @@ -1,14 +1,14 @@ -package ch.unisg.assignment.assignment.application.service; +package ch.unisg.roster.roster.application.service; import javax.transaction.Transactional; import org.springframework.stereotype.Component; -import ch.unisg.assignment.assignment.application.port.in.TaskCompletedCommand; -import ch.unisg.assignment.assignment.application.port.in.TaskCompletedUseCase; -import ch.unisg.assignment.assignment.application.port.out.TaskCompletedEventPort; -import ch.unisg.assignment.assignment.domain.Roster; -import ch.unisg.assignment.assignment.domain.event.TaskCompletedEvent; +import ch.unisg.roster.roster.application.port.in.TaskCompletedCommand; +import ch.unisg.roster.roster.application.port.in.TaskCompletedUseCase; +import ch.unisg.roster.roster.application.port.out.TaskCompletedEventPort; +import ch.unisg.roster.roster.domain.Roster; +import ch.unisg.roster.roster.domain.event.TaskCompletedEvent; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/ExecutorInfo.java b/roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorInfo.java similarity index 67% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/ExecutorInfo.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorInfo.java index 58b47dc..eb32ec0 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/ExecutorInfo.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorInfo.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.domain; +package ch.unisg.roster.roster.domain; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; import ch.unisg.common.valueobject.ExecutorURI; import lombok.Getter; import lombok.Setter; diff --git a/roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorRegistry.java b/roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorRegistry.java new file mode 100644 index 0000000..4ddba0f --- /dev/null +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/ExecutorRegistry.java @@ -0,0 +1,92 @@ +package ch.unisg.roster.roster.domain; + +import java.util.*; + +import ch.unisg.common.valueobject.ExecutorURI; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; + +/** + * Registry that keeps a track of executors internal to the TAPAS application and the types of tasks + * they can achieve. One executor may correspond to multiple task types. + * This class is a singleton. + */ +public class ExecutorRegistry { + private static ExecutorRegistry registry; + + private final Map> executors; + + private ExecutorRegistry() { + this.executors = new Hashtable<>(); + } + + public static synchronized ExecutorRegistry getInstance() { + if (registry == null) { + registry = new ExecutorRegistry(); + } + + return registry; + } + + /** + * Adds an executor to the registry for a given task type. + * + * @param taskType the type of the task + * @param executorIdentifier the identifier of the executor (can be any string) + * @return true unless a runtime exception occurs + */ + public boolean addExecutor(ExecutorType executorType, ExecutorURI executorURI) { + Set taskTypeExecs = executors.getOrDefault(executorType, + Collections.synchronizedSet(new HashSet<>())); + + taskTypeExecs.add(executorURI); + executors.put(executorType, taskTypeExecs); + + return true; + } + + /** + * Removes an executor from the registry. The executor is disassociated from all known task types. + * + * @param executorURI the identifier of the executor + * @return true unless a runtime exception occurs + */ + public boolean removeExecutor(ExecutorURI executorURI) { + Iterator iterator = executors.keySet().iterator(); + + while (iterator.hasNext()) { + ExecutorType executorType = iterator.next(); + Set set = executors.get(executorType); + + set.remove(executorURI); + + if (set.isEmpty()) { + iterator.remove(); + } + } + + return true; + } + + /** + * Checks if the registry contains an executor for a given task type. Used during task creation + * to decide if a task can be executed. + * + * @param taskType the task type being auctioned + * @return + */ + public boolean containsTaskType(ExecutorType taskType) { + return executors.containsKey(taskType); + } + + /** + * Adds a list of executors to current executor list. Should only be used on startup to + * add all available executors from the executor pool to the registry. + * + * @param executors the initial executors + * @return + */ + public void init(Map> executors) { + this.executors.putAll(executors); + } + +} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/Roster.java b/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java similarity index 95% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/Roster.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java index fb259c1..cc9a0a6 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/Roster.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.domain; +package ch.unisg.roster.roster.domain; import java.util.ArrayList; import java.util.Arrays; @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; import ch.unisg.common.valueobject.ExecutorURI; public class Roster { diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/RosterItem.java b/roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java similarity index 90% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/RosterItem.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java index b405f44..cc39c6c 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/RosterItem.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.domain; +package ch.unisg.roster.roster.domain; import ch.unisg.common.valueobject.ExecutorURI; import lombok.Getter; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/Task.java b/roster/src/main/java/ch/unisg/roster/roster/domain/Task.java similarity index 82% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/Task.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/Task.java index 7daa738..40ef9fa 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/Task.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/Task.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.domain; +package ch.unisg.roster.roster.domain; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; import lombok.Getter; import lombok.Setter; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/NewTaskEvent.java b/roster/src/main/java/ch/unisg/roster/roster/domain/event/NewTaskEvent.java similarity index 56% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/NewTaskEvent.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/event/NewTaskEvent.java index 34e7f0b..1457f1d 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/NewTaskEvent.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/event/NewTaskEvent.java @@ -1,6 +1,6 @@ -package ch.unisg.assignment.assignment.domain.event; +package ch.unisg.roster.roster.domain.event; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; +import ch.unisg.roster.roster.domain.valueobject.ExecutorType; public class NewTaskEvent { public final ExecutorType taskType; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/TaskAssignedEvent.java b/roster/src/main/java/ch/unisg/roster/roster/domain/event/TaskAssignedEvent.java similarity index 74% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/TaskAssignedEvent.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/event/TaskAssignedEvent.java index d0178d4..9c57270 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/TaskAssignedEvent.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/event/TaskAssignedEvent.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.domain.event; +package ch.unisg.roster.roster.domain.event; public class TaskAssignedEvent { public final String taskID; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/TaskCompletedEvent.java b/roster/src/main/java/ch/unisg/roster/roster/domain/event/TaskCompletedEvent.java similarity index 85% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/TaskCompletedEvent.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/event/TaskCompletedEvent.java index 432a8f0..926f601 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/event/TaskCompletedEvent.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/event/TaskCompletedEvent.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.domain.event; +package ch.unisg.roster.roster.domain.event; public class TaskCompletedEvent { public final String taskID; diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/valueobject/ExecutorType.java b/roster/src/main/java/ch/unisg/roster/roster/domain/valueobject/ExecutorType.java similarity index 74% rename from assignment/src/main/java/ch/unisg/assignment/assignment/domain/valueobject/ExecutorType.java rename to roster/src/main/java/ch/unisg/roster/roster/domain/valueobject/ExecutorType.java index bc5f467..72368e3 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/domain/valueobject/ExecutorType.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/valueobject/ExecutorType.java @@ -1,4 +1,4 @@ -package ch.unisg.assignment.assignment.domain.valueobject; +package ch.unisg.roster.roster.domain.valueobject; import lombok.Value; diff --git a/assignment/src/main/resources/application.properties b/roster/src/main/resources/application.properties similarity index 100% rename from assignment/src/main/resources/application.properties rename to roster/src/main/resources/application.properties diff --git a/assignment/src/test/java/ch/unisg/assignment/AssignmentApplicationTests.java b/roster/src/test/java/ch/unisg/roster/RosterApplicationTests.java similarity index 70% rename from assignment/src/test/java/ch/unisg/assignment/AssignmentApplicationTests.java rename to roster/src/test/java/ch/unisg/roster/RosterApplicationTests.java index 9da24b5..5ee712b 100644 --- a/assignment/src/test/java/ch/unisg/assignment/AssignmentApplicationTests.java +++ b/roster/src/test/java/ch/unisg/roster/RosterApplicationTests.java @@ -1,10 +1,10 @@ -package ch.unisg.assignment; +package ch.unisg.roster; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class AssignmentApplicationTests { +class RosterApplicationTests { @Test void contextLoads() {