diff --git a/executor-pool/pom.xml b/executor-pool/pom.xml
index 512235d..e8e3774 100644
--- a/executor-pool/pom.xml
+++ b/executor-pool/pom.xml
@@ -68,6 +68,15 @@
org.eclipse.paho.client.mqttv3
1.2.5
compile
+
+
+ org.springframework.data
+ spring-data-mongodb
+ 3.2.6
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorMapper.java b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorMapper.java
new file mode 100644
index 0000000..8948522
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorMapper.java
@@ -0,0 +1,31 @@
+package ch.unisg.executorpool.adapter.out.persistence.mongodb;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.springframework.stereotype.Component;
+
+import ch.unisg.executorpool.domain.ExecutorClass;
+
+@Component
+public class ExecutorMapper {
+
+ ExecutorClass mapToDomainEntity(MongoExecutorDocument executorClass) {
+ try {
+ return new ExecutorClass(
+ new ExecutorClass.ExecutorUri(new URI(executorClass.executorUri)),
+ new ExecutorClass.ExecutorTaskType(executorClass.executorTaskType)
+ );
+ } catch (URISyntaxException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ MongoExecutorDocument mapToMongoDocument(ExecutorClass executorClass) {
+ return new MongoExecutorDocument(executorClass.getExecutorUri().getValue().toString(),
+ executorClass.getExecutorTaskType().getValue()
+ );
+ }
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorPersistenceAdapter.java b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorPersistenceAdapter.java
new file mode 100644
index 0000000..a165096
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorPersistenceAdapter.java
@@ -0,0 +1,40 @@
+package ch.unisg.executorpool.adapter.out.persistence.mongodb;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import ch.unisg.executorpool.application.port.out.AddExecutorPort;
+import ch.unisg.executorpool.application.port.out.LoadExecutorPort;
+import ch.unisg.executorpool.application.port.out.RemoveExecutorPort;
+import ch.unisg.executorpool.domain.ExecutorClass;
+import lombok.RequiredArgsConstructor;
+
+@Component
+@RequiredArgsConstructor
+public class ExecutorPersistenceAdapter implements AddExecutorPort, RemoveExecutorPort, LoadExecutorPort {
+
+ @Autowired
+ private final ExecutorRepository executorRepository;
+
+ private final ExecutorMapper executorMapper;
+
+ @Override
+ public void addExecutor(ExecutorClass executorClass) {
+ MongoExecutorDocument mongoExecutorDocument = executorMapper.mapToMongoDocument(executorClass);
+ executorRepository.save(mongoExecutorDocument);
+ }
+
+ @Override
+ public void removeExecutor(ExecutorClass executorClass) {
+ MongoExecutorDocument mongoExecutorDocument = executorMapper.mapToMongoDocument(executorClass);
+ executorRepository.delete(mongoExecutorDocument);
+ }
+
+ @Override
+ public ExecutorClass loadExecutor(ExecutorClass.ExecutorUri executorUri, ExecutorClass.ExecutorTaskType executorTaskType) {
+ MongoExecutorDocument mongoExecutorDocument = executorRepository.findByExecutorUri(executorUri.getValue().toString(), executorTaskType.getValue());
+ ExecutorClass executorClass = executorMapper.mapToDomainEntity(mongoExecutorDocument);
+ return executorClass;
+ }
+
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorRepository.java b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorRepository.java
new file mode 100644
index 0000000..36c3fd0
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/ExecutorRepository.java
@@ -0,0 +1,15 @@
+package ch.unisg.executorpool.adapter.out.persistence.mongodb;
+
+import java.util.List;
+
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ExecutorRepository extends MongoRepository {
+
+ public MongoExecutorDocument findByExecutorUri(String executorUri, String executorTaskType);
+
+ public List findByExecutorTaskType(String executorTaskType);
+
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/MongoExecutorDocument.java b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/MongoExecutorDocument.java
new file mode 100644
index 0000000..3c94ae7
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/out/persistence/mongodb/MongoExecutorDocument.java
@@ -0,0 +1,16 @@
+package ch.unisg.executorpool.adapter.out.persistence.mongodb;
+
+import lombok.Data;
+
+@Data
+public class MongoExecutorDocument {
+
+ public String executorUri;
+ public String executorTaskType;
+
+ public MongoExecutorDocument(String executorUri, String executorTaskType) {
+
+ this.executorUri = executorUri;
+ this.executorTaskType = executorTaskType;
+ }
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/AddExecutorPort.java b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/AddExecutorPort.java
new file mode 100644
index 0000000..8e280e9
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/AddExecutorPort.java
@@ -0,0 +1,9 @@
+package ch.unisg.executorpool.application.port.out;
+
+import ch.unisg.executorpool.domain.ExecutorClass;
+
+public interface AddExecutorPort {
+
+ void addExecutor(ExecutorClass executorClass);
+
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/ExecutorAddedEventPort.java b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/ExecutorAddedEventPort.java
index ad75c75..a94cf16 100644
--- a/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/ExecutorAddedEventPort.java
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/ExecutorAddedEventPort.java
@@ -1,7 +1,6 @@
package ch.unisg.executorpool.application.port.out;
import ch.unisg.executorpool.domain.ExecutorAddedEvent;
-import org.eclipse.paho.client.mqttv3.MqttException;
public interface ExecutorAddedEventPort {
void publishExecutorAddedEvent(ExecutorAddedEvent event);
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/LoadExecutorPort.java b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/LoadExecutorPort.java
new file mode 100644
index 0000000..d7cb18a
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/LoadExecutorPort.java
@@ -0,0 +1,9 @@
+package ch.unisg.executorpool.application.port.out;
+
+import ch.unisg.executorpool.domain.ExecutorClass;
+
+public interface LoadExecutorPort {
+
+ ExecutorClass loadExecutor(ExecutorClass.ExecutorUri executorUri, ExecutorClass.ExecutorTaskType executorTaskType);
+
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/RemoveExecutorPort.java b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/RemoveExecutorPort.java
new file mode 100644
index 0000000..5813891
--- /dev/null
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/application/port/out/RemoveExecutorPort.java
@@ -0,0 +1,9 @@
+package ch.unisg.executorpool.application.port.out;
+
+import ch.unisg.executorpool.domain.ExecutorClass;
+
+public interface RemoveExecutorPort {
+
+ void removeExecutor(ExecutorClass executorClass);
+
+}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/application/service/AddNewExecutorToExecutorPoolService.java b/executor-pool/src/main/java/ch/unisg/executorpool/application/service/AddNewExecutorToExecutorPoolService.java
index 393024a..5ce3ee4 100644
--- a/executor-pool/src/main/java/ch/unisg/executorpool/application/service/AddNewExecutorToExecutorPoolService.java
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/application/service/AddNewExecutorToExecutorPoolService.java
@@ -2,11 +2,11 @@ package ch.unisg.executorpool.application.service;
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolUseCase;
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand;
+import ch.unisg.executorpool.application.port.out.AddExecutorPort;
import ch.unisg.executorpool.application.port.out.ExecutorAddedEventPort;
import ch.unisg.executorpool.domain.ExecutorAddedEvent;
import ch.unisg.executorpool.domain.ExecutorClass;
import ch.unisg.executorpool.domain.ExecutorPool;
-import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import javax.transaction.Transactional;
@@ -16,9 +16,11 @@ import javax.transaction.Transactional;
public class AddNewExecutorToExecutorPoolService implements AddNewExecutorToExecutorPoolUseCase {
private final ExecutorAddedEventPort executorAddedEventPort;
+ private final AddExecutorPort addExecutorToRepositoryPort;
- public AddNewExecutorToExecutorPoolService(ExecutorAddedEventPort executorAddedEventPort){
+ public AddNewExecutorToExecutorPoolService(ExecutorAddedEventPort executorAddedEventPort, AddExecutorPort addExecutorToRepositoryPort){
this.executorAddedEventPort = executorAddedEventPort;
+ this.addExecutorToRepositoryPort = addExecutorToRepositoryPort;
}
@Override
@@ -29,6 +31,8 @@ public class AddNewExecutorToExecutorPoolService implements AddNewExecutorToExec
var executorAddedEvent = new ExecutorAddedEvent(newExecutor);
executorAddedEventPort.publishExecutorAddedEvent(executorAddedEvent);
+ addExecutorToRepositoryPort.addExecutor(newExecutor);
+
return newExecutor;
}
}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/application/service/RemoveExecutorFromExecutorPoolService.java b/executor-pool/src/main/java/ch/unisg/executorpool/application/service/RemoveExecutorFromExecutorPoolService.java
index 4d2457d..0fc724c 100644
--- a/executor-pool/src/main/java/ch/unisg/executorpool/application/service/RemoveExecutorFromExecutorPoolService.java
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/application/service/RemoveExecutorFromExecutorPoolService.java
@@ -3,10 +3,10 @@ package ch.unisg.executorpool.application.service;
import ch.unisg.executorpool.application.port.in.RemoveExecutorFromExecutorPoolCommand;
import ch.unisg.executorpool.application.port.in.RemoveExecutorFromExecutorPoolUseCase;
import ch.unisg.executorpool.application.port.out.ExecutorRemovedEventPort;
+import ch.unisg.executorpool.application.port.out.RemoveExecutorPort;
import ch.unisg.executorpool.domain.ExecutorClass;
import ch.unisg.executorpool.domain.ExecutorPool;
import ch.unisg.executorpool.domain.ExecutorRemovedEvent;
-import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import javax.transaction.Transactional;
@@ -17,9 +17,11 @@ import java.util.Optional;
public class RemoveExecutorFromExecutorPoolService implements RemoveExecutorFromExecutorPoolUseCase {
private final ExecutorRemovedEventPort executorRemovedEventPort;
+ private final RemoveExecutorPort removeExecutorFromRepositoryPort;
- public RemoveExecutorFromExecutorPoolService(ExecutorRemovedEventPort executorRemovedEventPort){
+ public RemoveExecutorFromExecutorPoolService(ExecutorRemovedEventPort executorRemovedEventPort, RemoveExecutorPort removeExecutorFromRepositoryPort){
this.executorRemovedEventPort = executorRemovedEventPort;
+ this.removeExecutorFromRepositoryPort = removeExecutorFromRepositoryPort;
}
@Override
@@ -32,6 +34,8 @@ public class RemoveExecutorFromExecutorPoolService implements RemoveExecutorFrom
executorRemovedEventPort.publishExecutorRemovedEvent(executorRemovedEvent);
}
+ removeExecutorFromRepositoryPort.removeExecutor(removedExecutor);
+
return removedExecutor;
}
}
diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/domain/ExecutorRemovedEvent.java b/executor-pool/src/main/java/ch/unisg/executorpool/domain/ExecutorRemovedEvent.java
index a038928..417e8a7 100644
--- a/executor-pool/src/main/java/ch/unisg/executorpool/domain/ExecutorRemovedEvent.java
+++ b/executor-pool/src/main/java/ch/unisg/executorpool/domain/ExecutorRemovedEvent.java
@@ -1,6 +1,5 @@
package ch.unisg.executorpool.domain;
-import ch.unisg.executorpool.domain.ExecutorClass;
import lombok.Getter;
public class ExecutorRemovedEvent {
diff --git a/roster/pom.xml b/roster/pom.xml
index 791e0d0..8596ef7 100644
--- a/roster/pom.xml
+++ b/roster/pom.xml
@@ -73,9 +73,13 @@
common
0.0.1-SNAPSHOT
+
+ org.springframework.data
+ spring-data-mongodb
+
-
+
diff --git a/roster/src/main/java/ch/unisg/roster/RosterApplication.java b/roster/src/main/java/ch/unisg/roster/RosterApplication.java
index 1b12ca3..58cd429 100644
--- a/roster/src/main/java/ch/unisg/roster/RosterApplication.java
+++ b/roster/src/main/java/ch/unisg/roster/RosterApplication.java
@@ -1,8 +1,13 @@
package ch.unisg.roster;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import ch.unisg.roster.roster.adapter.out.persistence.mongodb.RosterRepository;
+import ch.unisg.roster.roster.application.port.in.LoadRosterItemPort;
+import ch.unisg.roster.roster.domain.Roster;
+import ch.unisg.roster.roster.domain.RosterItem;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -11,19 +16,24 @@ import org.springframework.core.env.ConfigurableEnvironment;
import ch.unisg.roster.roster.adapter.common.clients.TapasMqttClient;
import ch.unisg.roster.roster.adapter.in.messaging.mqtt.ExecutorEventMqttListener;
import ch.unisg.roster.roster.adapter.in.messaging.mqtt.ExecutorEventsMqttDispatcher;
+import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@SpringBootApplication
+@EnableMongoRepositories(basePackageClasses = RosterRepository.class)
public class RosterApplication {
static Logger logger = Logger.getLogger(RosterApplication.class.getName());
private static ConfigurableEnvironment ENVIRONMENT;
+ private static final LoadRosterItemPort loadRosterItemPort;
+
public static void main(String[] args) {
SpringApplication rosterApp = new SpringApplication(RosterApplication.class);
ENVIRONMENT = rosterApp.run(args).getEnvironment();
bootstrapMarketplaceWithMqtt();
+ initialiseRoster();
}
/**
@@ -42,4 +52,9 @@ public class RosterApplication {
}
}
+ private static void initialiseRoster(){
+ List rosterItemList = loadRosterItemPort.loadAllRosterItems();
+ Roster.getInstance().initialiseRoster(rosterItemList);
+ }
+
}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/MongoRosterDocument.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/MongoRosterDocument.java
new file mode 100644
index 0000000..f0d133b
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/MongoRosterDocument.java
@@ -0,0 +1,21 @@
+package ch.unisg.roster.roster.adapter.out.persistence.mongodb;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Data
+@Document(collection="roster")
+public class MongoRosterDocument {
+
+ @Id
+ public String taskId;
+ public String taskType;
+ public String executorURI;
+
+ public MongoRosterDocument(String taskId, String taskType, String executorURI){
+ this.taskId = taskId;
+ this.taskType = taskType;
+ this.executorURI = executorURI;
+ }
+}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterMapper.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterMapper.java
new file mode 100644
index 0000000..940088f
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterMapper.java
@@ -0,0 +1,23 @@
+package ch.unisg.roster.roster.adapter.out.persistence.mongodb;
+
+
+import ch.unisg.common.valueobject.ExecutorURI;
+import ch.unisg.roster.roster.domain.RosterItem;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RosterMapper {
+
+ RosterItem maptoDomainEntity(MongoRosterDocument rosterItem) {
+ return new RosterItem(rosterItem.taskId, rosterItem.taskType,
+ new ExecutorURI(rosterItem.executorURI));
+ }
+
+ MongoRosterDocument mapToMongoDocument(RosterItem rosterItem){
+ return new MongoRosterDocument(
+ rosterItem.getTaskID(),
+ rosterItem.getTaskType(),
+ rosterItem.getExecutorURI().getValue().toString());
+ }
+}
+
diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterPersistenceAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterPersistenceAdapter.java
new file mode 100644
index 0000000..9239ff0
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterPersistenceAdapter.java
@@ -0,0 +1,50 @@
+package ch.unisg.roster.roster.adapter.out.persistence.mongodb;
+
+
+import ch.unisg.roster.roster.application.port.in.AddRosterItemPort;
+import ch.unisg.roster.roster.application.port.in.DeleteRosterItem;
+import ch.unisg.roster.roster.application.port.in.LoadRosterItemPort;
+import ch.unisg.roster.roster.domain.RosterItem;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class RosterPersistenceAdapter implements AddRosterItemPort, LoadRosterItemPort, DeleteRosterItem {
+
+ @Autowired
+ private final RosterRepository rosterRepository;
+ private final RosterMapper rosterMapper;
+
+ @Override
+ public void addRosterItem(RosterItem rosterItem){
+ MongoRosterDocument mongoRosterDocument = rosterMapper.mapToMongoDocument(rosterItem);
+ rosterRepository.save(mongoRosterDocument);
+ }
+
+ @Override
+ public RosterItem loadRosterItem(String taskId){
+ MongoRosterDocument mongoRosterDocument = rosterRepository.findByTaskId(taskId);
+ RosterItem rosterItem = rosterMapper.maptoDomainEntity(mongoRosterDocument);
+ return rosterItem;
+ }
+
+ @Override
+ public List loadAllRosterItems(){
+ List rosterList = rosterRepository.findAll();
+ List rosterItemList = new ArrayList<>();
+ for(MongoRosterDocument rosterDocument : rosterList){
+ rosterItemList.add(rosterMapper.maptoDomainEntity(rosterDocument));
+ }
+ return rosterItemList;
+ }
+
+ @Override
+ public void deleteRosterItem(String taskId){
+ rosterRepository.deleteById(taskId);
+ }
+}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterRepository.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterRepository.java
new file mode 100644
index 0000000..eff2b56
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/persistence/mongodb/RosterRepository.java
@@ -0,0 +1,9 @@
+package ch.unisg.roster.roster.adapter.out.persistence.mongodb;
+
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface RosterRepository extends MongoRepository{
+ public MongoRosterDocument findByTaskId(String taskId);
+}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/AddRosterItemPort.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/AddRosterItemPort.java
new file mode 100644
index 0000000..8b1a62e
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/AddRosterItemPort.java
@@ -0,0 +1,9 @@
+package ch.unisg.roster.roster.application.port.in;
+
+import ch.unisg.roster.roster.domain.RosterItem;
+
+public interface AddRosterItemPort {
+
+ void addRosterItem(RosterItem rosterItem);
+
+}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteRosterItem.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteRosterItem.java
new file mode 100644
index 0000000..d014e18
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteRosterItem.java
@@ -0,0 +1,8 @@
+package ch.unisg.roster.roster.application.port.in;
+
+import ch.unisg.roster.roster.domain.RosterItem;
+
+public interface DeleteRosterItem {
+
+ void deleteRosterItem(String taskId);
+}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/LoadRosterItemPort.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/LoadRosterItemPort.java
new file mode 100644
index 0000000..69ccc27
--- /dev/null
+++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/LoadRosterItemPort.java
@@ -0,0 +1,12 @@
+package ch.unisg.roster.roster.application.port.in;
+
+import ch.unisg.roster.roster.domain.RosterItem;
+
+import java.util.List;
+
+public interface LoadRosterItemPort {
+
+ RosterItem loadRosterItem(String taskId);
+
+ List loadAllRosterItems();
+}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java
index 26b75aa..897f234 100644
--- a/roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java
+++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/ApplyForTaskService.java
@@ -2,6 +2,8 @@ package ch.unisg.roster.roster.application.service;
import javax.transaction.Transactional;
+import ch.unisg.roster.roster.application.port.in.AddRosterItemPort;
+import ch.unisg.roster.roster.domain.RosterItem;
import org.springframework.stereotype.Component;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand;
@@ -18,6 +20,7 @@ import lombok.RequiredArgsConstructor;
public class ApplyForTaskService implements ApplyForTaskUseCase {
private final TaskAssignedEventPort taskAssignedEventPort;
+ private final AddRosterItemPort addRosterItemPort;
/**
* Checks if a task is available and assignes it to the executor. If task got assigned a task
@@ -31,6 +34,7 @@ public class ApplyForTaskService implements ApplyForTaskUseCase {
if (task != null) {
taskAssignedEventPort.publishTaskAssignedEvent(new TaskAssignedEvent(task.getTaskID()));
+ addRosterItemPort.addRosterItem(new RosterItem(task.getTaskID(), task.getTaskType().getValue(), command.getExecutorURI()));
}
return task;
diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java
index 69b65d1..041ccac 100644
--- a/roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java
+++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/TaskCompletedService.java
@@ -2,6 +2,7 @@ package ch.unisg.roster.roster.application.service;
import javax.transaction.Transactional;
+import ch.unisg.roster.roster.application.port.in.DeleteRosterItem;
import org.springframework.stereotype.Component;
import ch.unisg.roster.roster.application.port.in.TaskCompletedCommand;
@@ -17,6 +18,7 @@ import lombok.RequiredArgsConstructor;
public class TaskCompletedService implements TaskCompletedUseCase {
private final TaskCompletedEventPort taskCompletedEventPort;
+ private final DeleteRosterItem deleteRosterItem;
/**
* Completes the task in the roster and publishes a task completed event.
@@ -26,6 +28,7 @@ public class TaskCompletedService implements TaskCompletedUseCase {
public void taskCompleted(TaskCompletedCommand command) {
Roster.getInstance().taskCompleted(command.getTaskID());
+ deleteRosterItem.deleteRosterItem(command.getTaskID());
taskCompletedEventPort.publishTaskCompleted(new TaskCompletedEvent(command.getTaskID(),
command.getTaskStatus(), command.getTaskResult()));
diff --git a/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java b/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java
index cc9a0a6..a6b7f19 100644
--- a/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java
+++ b/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java
@@ -3,6 +3,7 @@ package ch.unisg.roster.roster.domain;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -83,4 +84,10 @@ public class Roster {
return queues.get(taskType.getValue()).removeIf(task -> task.getTaskID().equalsIgnoreCase(taskID));
}
+ public void initialiseRoster(List rosterItemList){
+ for(RosterItem rosterItem : rosterItemList){
+ rosterMap.put(rosterItem.getTaskID(), rosterItem);
+ }
+ }
+
}
diff --git a/roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java b/roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java
index cc39c6c..dbe5a87 100644
--- a/roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java
+++ b/roster/src/main/java/ch/unisg/roster/roster/domain/RosterItem.java
@@ -20,4 +20,8 @@ public class RosterItem {
this.executorURI = executorURI;
}
+ public static RosterItem withIDTypeExecutorURI(String taskId, String taskType,
+ ExecutorURI executorURI){
+ return new RosterItem(taskId, taskType, executorURI);
+ }
}