diff --git a/tapas-tasks/pom.xml b/tapas-tasks/pom.xml
index 0118cf9..a815cef 100644
--- a/tapas-tasks/pom.xml
+++ b/tapas-tasks/pom.xml
@@ -75,6 +75,12 @@
org.eclipse.paho.client.mqttv3
1.2.0
+
+ com.vaadin.external.google
+ android-json
+ 0.0.20131108.vaadin1
+ compile
+
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java
index 536b72c..ec2b7b0 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java
@@ -1,8 +1,10 @@
package ch.unisg.tapastasks.tasks.adapter.in.web;
+import ch.unisg.tapastasks.tasks.adapter.in.formats.TaskJsonRepresentation;
import ch.unisg.tapastasks.tasks.application.port.in.CompleteTaskCommand;
import ch.unisg.tapastasks.tasks.application.port.in.CompleteTaskUseCase;
import ch.unisg.tapastasks.tasks.domain.Task;
+import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -21,7 +23,7 @@ public class CompleteTaskWebController {
this.completeTaskUseCase = completeTaskUseCase;
}
- @PostMapping(path = "/tasks/completeTask", consumes = {TaskMediaType.TASK_MEDIA_TYPE})
+ @PostMapping(path = "/tasks/completeTask", consumes = {TaskJsonRepresentation.MEDIA_TYPE})
public ResponseEntity completeTask (@RequestBody Task task){
try {
@@ -32,10 +34,12 @@ public class CompleteTaskWebController {
Task updateATask = completeTaskUseCase.completeTask(command);
HttpHeaders responseHeaders = new HttpHeaders();
- responseHeaders.add(HttpHeaders.CONTENT_TYPE, TaskMediaType.TASK_MEDIA_TYPE);
+ responseHeaders.add(HttpHeaders.CONTENT_TYPE, TaskJsonRepresentation.MEDIA_TYPE);
- return new ResponseEntity<>(TaskMediaType.serialize(updateATask), responseHeaders, HttpStatus.ACCEPTED);
- } catch(ConstraintViolationException e){
+ return new ResponseEntity<>(TaskJsonRepresentation.serialize(updateATask), responseHeaders, HttpStatus.ACCEPTED);
+ } catch (JsonProcessingException e) {
+ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
+ } catch (ConstraintViolationException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage());
}
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java
index af721d1..ef79e6a 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java
@@ -1,9 +1,11 @@
package ch.unisg.tapastasks.tasks.adapter.in.web;
+import ch.unisg.tapastasks.tasks.adapter.in.formats.TaskJsonRepresentation;
import ch.unisg.tapastasks.tasks.application.port.in.DeleteTaskCommand;
import ch.unisg.tapastasks.tasks.application.port.in.DeleteTaskUseCase;
import ch.unisg.tapastasks.tasks.domain.Task;
+import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -23,26 +25,27 @@ public class DeleteTaskWebController {
this.deleteClassUseCase = deleteClassUseCase;
}
- @PostMapping(path="/tasks/deleteTask", consumes = {TaskMediaType.TASK_MEDIA_TYPE})
+ @PostMapping(path="/tasks/deleteTask", consumes = {TaskJsonRepresentation.MEDIA_TYPE})
public ResponseEntity deleteTask (@RequestBody Task task){
try {
- DeleteTaskCommand command = new DeleteTaskCommand(task.getTaskId());
+ DeleteTaskCommand command = new DeleteTaskCommand(task.getTaskId(), task.getOriginalTaskUri());
Optional deleteATask = deleteClassUseCase.deleteTask(command);
// Check if the task with the given identifier exists
if (deleteATask.isEmpty()) {
-
// If not, through a 404 Not Found status code
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
HttpHeaders responseHeaders = new HttpHeaders();
- responseHeaders.add(HttpHeaders.CONTENT_TYPE, TaskMediaType.TASK_MEDIA_TYPE);
+ responseHeaders.add(HttpHeaders.CONTENT_TYPE, TaskJsonRepresentation.MEDIA_TYPE);
- return new ResponseEntity<>(TaskMediaType.serialize(deleteATask.get()), responseHeaders, HttpStatus.ACCEPTED);
- } catch(ConstraintViolationException e){
+ return new ResponseEntity<>(TaskJsonRepresentation.serialize(deleteATask.get()), responseHeaders, HttpStatus.ACCEPTED);
+ } catch (JsonProcessingException e) {
+ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
+ } catch (ConstraintViolationException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage());
}
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskAssignedWebController.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskAssignedWebController.java
index 9dfa6a2..b58d159 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskAssignedWebController.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskAssignedWebController.java
@@ -1,8 +1,10 @@
package ch.unisg.tapastasks.tasks.adapter.in.web;
+import ch.unisg.tapastasks.tasks.adapter.in.formats.TaskJsonRepresentation;
import ch.unisg.tapastasks.tasks.application.port.in.TaskAssignedCommand;
import ch.unisg.tapastasks.tasks.application.port.in.TaskAssignedUseCase;
import ch.unisg.tapastasks.tasks.domain.Task;
+import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -21,7 +23,7 @@ public class TaskAssignedWebController {
this.taskAssignedUseCase = taskAssignedUseCase;
}
- @PostMapping(path="/tasks/assignTask", consumes= {TaskMediaType.TASK_MEDIA_TYPE})
+ @PostMapping(path="/tasks/assignTask", consumes= {TaskJsonRepresentation.MEDIA_TYPE})
public ResponseEntity assignTask(@RequestBody Task task){
try{
TaskAssignedCommand command = new TaskAssignedCommand(
@@ -31,10 +33,12 @@ public class TaskAssignedWebController {
Task updateATask = taskAssignedUseCase.assignTask(command);
HttpHeaders responseHeaders = new HttpHeaders();
- responseHeaders.add(HttpHeaders.CONTENT_TYPE, TaskMediaType.TASK_MEDIA_TYPE);
+ responseHeaders.add(HttpHeaders.CONTENT_TYPE, TaskJsonRepresentation.MEDIA_TYPE);
- return new ResponseEntity<>(TaskMediaType.serialize(updateATask), responseHeaders, HttpStatus.ACCEPTED);
- } catch (ConstraintViolationException e){
+ return new ResponseEntity<>(TaskJsonRepresentation.serialize(updateATask), responseHeaders, HttpStatus.ACCEPTED);
+ } catch (JsonProcessingException e) {
+ throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
+ } catch (ConstraintViolationException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage());
}
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskMediaType.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskMediaType.java
deleted file mode 100644
index d9a0a46..0000000
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/TaskMediaType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package ch.unisg.tapastasks.tasks.adapter.in.web;
-
-import ch.unisg.tapastasks.tasks.domain.Task;
-import ch.unisg.tapastasks.tasks.domain.TaskList;
-import org.json.JSONObject;
-
-final public class TaskMediaType {
- public static final String TASK_MEDIA_TYPE = "application/json";
-
- public static String serialize(Task task) {
- JSONObject payload = new JSONObject();
-
- payload.put("taskId", task.getTaskId().getValue());
- payload.put("taskName", task.getTaskName().getValue());
- payload.put("taskType", task.getTaskType().getValue());
- payload.put("taskState", task.getTaskState().getValue());
- payload.put("taskListName", TaskList.getTapasTaskList().getTaskListName().getValue());
- payload.put("taskResult", task.getTaskResult().getValue());
- return payload.toString();
- }
-
- private TaskMediaType() { }
-}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java
new file mode 100644
index 0000000..5061e3d
--- /dev/null
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java
@@ -0,0 +1,59 @@
+package ch.unisg.tapastasks.tasks.adapter.out.web;
+
+
+import ch.unisg.tapastasks.tasks.application.port.out.CanTaskBeDeletedPort;
+import ch.unisg.tapastasks.tasks.domain.DeleteTaskEvent;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.HashMap;
+
+@Component
+@Primary
+public class CanTaskBeDeletedWebAdapter implements CanTaskBeDeletedPort {
+
+ // Base URI of the service interested in this event
+ //Todo: Add the right IP address
+ String server = null;
+
+ @Override
+ public void canTaskBeDeletedEvent(DeleteTaskEvent event){
+
+ var values = new HashMap<> () {{
+ put("taskId", event.taskId);
+ put("taskUri", event.taskUri);
+ }};
+
+ var objectMapper = new ObjectMapper();
+ String requestBody = null;
+ try {
+ requestBody = objectMapper.writeValueAsString(values);
+ } catch (JsonProcessingException e){
+ e.printStackTrace();
+ }
+
+ //Todo: Question: How do we include the URI from the DeleteTaskEvent? Do we even need it?
+ HttpClient client = HttpClient.newHttpClient();
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(URI.create(server+"task"))
+ .header("Content-Type", "application/task+json")
+ .POST(HttpRequest.BodyPublishers.ofString(requestBody))
+ .build();
+
+ //Todo: The following parameters probably need to be changed to get the right error code
+ try {
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ } catch (IOException e){
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java
index d642eca..569b1e9 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java
@@ -42,7 +42,7 @@ public class PublishNewTaskAddedEventWebAdapter implements NewTaskAddedEventPort
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(server+"/task"))
- .header("Content-Type", "application/json")
+ .header("Content-Type", "application/task+json")
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/in/DeleteTaskCommand.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/in/DeleteTaskCommand.java
index 24acbb8..b57c719 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/in/DeleteTaskCommand.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/in/DeleteTaskCommand.java
@@ -2,6 +2,7 @@ package ch.unisg.tapastasks.tasks.application.port.in;
import ch.unisg.tapastasks.common.SelfValidating;
import ch.unisg.tapastasks.tasks.domain.Task.TaskId;
+import ch.unisg.tapastasks.tasks.domain.Task.OriginalTaskUri;
import lombok.Value;
import javax.validation.constraints.NotNull;
@@ -11,8 +12,12 @@ public class DeleteTaskCommand extends SelfValidating {
@NotNull
private final TaskId taskId;
- public DeleteTaskCommand(TaskId taskId){
+ @NotNull
+ private final OriginalTaskUri taskUri;
+
+ public DeleteTaskCommand(TaskId taskId, OriginalTaskUri taskUri){
this.taskId=taskId;
+ this.taskUri = taskUri;
this.validateSelf();
}
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java
new file mode 100644
index 0000000..67bde16
--- /dev/null
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java
@@ -0,0 +1,7 @@
+package ch.unisg.tapastasks.tasks.application.port.out;
+
+import ch.unisg.tapastasks.tasks.domain.DeleteTaskEvent;
+
+public interface CanTaskBeDeletedPort {
+ void canTaskBeDeletedEvent(DeleteTaskEvent event);
+}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/CompleteTaskService.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/CompleteTaskService.java
index bade832..0e7f817 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/CompleteTaskService.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/CompleteTaskService.java
@@ -19,17 +19,13 @@ public class CompleteTaskService implements CompleteTaskUseCase {
@Override
public Task completeTask(CompleteTaskCommand command){
- // TODO Retrieve the task based on ID
TaskList taskList = TaskList.getTapasTaskList();
Optional updatedTask = taskList.retrieveTaskById(command.getTaskId());
- // TODO Update the status and result (and save?)
Task newTask = updatedTask.get();
newTask.taskResult = new TaskResult(command.getTaskResult().getValue());
- newTask.taskState = new TaskState(Task.State.EXECUTED);
+ newTask.taskStatus = new TaskStatus(Task.Status.EXECUTED);
-
- // TODO return the updated task
return newTask;
}
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java
index cfebcd6..f865f4c 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java
@@ -19,10 +19,15 @@ public class DeleteTaskService implements DeleteTaskUseCase {
@Override
public Optional deleteTask(DeleteTaskCommand command){
- // TODO check with assignment service if we can delte
-
TaskList taskList = TaskList.getTapasTaskList();
- return taskList.deleteTaskById(command.getTaskId());
+ Optional updatedTask = taskList.retrieveTaskById(command.getTaskId());
+ Task newTask = updatedTask.get();
+ // TODO: Fill in the right condition into the if-statement and the else-statement
+ if (/*the task can be deleted*/){
+ return taskList.deleteTaskById(command.getTaskId());
+ } else {
+ /*send message back to TaskList that the task cannot be deleted*/
+ }
}
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/TaskAssignedService.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/TaskAssignedService.java
index baa6059..6c580e4 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/TaskAssignedService.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/TaskAssignedService.java
@@ -24,7 +24,7 @@ public class TaskAssignedService implements TaskAssignedUseCase {
// update the status to assigned
Task updatedTask = task.get();
- updatedTask.taskState = new TaskState(State.ASSIGNED);
+ updatedTask.taskStatus = new TaskStatus(Status.ASSIGNED);
return updatedTask;
}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/DeleteTaskEvent.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/DeleteTaskEvent.java
new file mode 100644
index 0000000..16e803b
--- /dev/null
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/DeleteTaskEvent.java
@@ -0,0 +1,11 @@
+package ch.unisg.tapastasks.tasks.domain;
+
+public class DeleteTaskEvent {
+ public String taskId;
+ public String taskUri;
+
+ public DeleteTaskEvent(String taskId, String taskUri){
+ this.taskId = taskId;
+ this.taskUri = taskUri;
+ }
+}
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/Task.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/Task.java
index ebe9d1c..4444beb 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/Task.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/Task.java
@@ -21,40 +21,33 @@ public class Task {
@Getter
private final TaskType taskType;
- @Getter
- public TaskState taskState; // had to make public for CompleteTaskService
+ @Getter @Setter
+ public TaskStatus taskStatus; // had to make public for CompleteTaskService
@Getter
public TaskResult taskResult; // same as above
- // private final OriginalTaskUri originalTaskUri;
+ @Getter
+ private final OriginalTaskUri originalTaskUri;
- // @Getter @Setter
- // private TaskStatus taskStatus;
+ @Getter @Setter
+ private ServiceProvider provider;
- // @Getter @Setter
- // private ServiceProvider provider;
+ @Getter @Setter
+ private InputData inputData;
- // @Getter @Setter
- // private InputData inputData;
-
- // @Getter @Setter
- // private OutputData outputData;
+ @Getter @Setter
+ private OutputData outputData;
public Task(TaskName taskName, TaskType taskType, OriginalTaskUri taskUri) {
- this.taskId = new TaskId(UUID.randomUUID().toString());
-
this.taskName = taskName;
this.taskType = taskType;
- this.taskState = new TaskState(State.OPEN);
+ this.taskStatus = new TaskStatus(Status.OPEN);
this.taskId = new TaskId(UUID.randomUUID().toString());
this.taskResult = new TaskResult("");
- // this.originalTaskUri = taskUri;
-
- // this.taskStatus = new TaskStatus(Status.OPEN);
-
- // this.inputData = null;
- // this.outputData = null;
+ this.originalTaskUri = taskUri;
+ this.inputData = null;
+ this.outputData = null;
}
protected static Task createTaskWithNameAndType(TaskName name, TaskType type) {
diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/TaskList.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/TaskList.java
index 7a4e70f..e07bcd8 100644
--- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/TaskList.java
+++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/domain/TaskList.java
@@ -67,50 +67,51 @@ public class TaskList {
}
public Optional deleteTaskById(Task.TaskId id) {
- for (Task task: listOfTasks.value){
- if(task.getTaskId().getValue().equalsIgnoreCase(id.getValue())){
+ for (Task task : listOfTasks.value) {
+ if (task.getTaskId().getValue().equalsIgnoreCase(id.getValue())) {
listOfTasks.value.remove(task);
return Optional.of(task);
}
}
return Optional.empty();
- // public Task changeTaskStatusToAssigned(Task.TaskId id, Optional serviceProvider)
- // throws TaskNotFoundException {
- // return changeTaskStatus(id, new Task.TaskStatus(Task.Status.ASSIGNED), serviceProvider, Optional.empty());
- // }
-
- // public Task changeTaskStatusToRunning(Task.TaskId id, Optional serviceProvider)
- // throws TaskNotFoundException {
- // return changeTaskStatus(id, new Task.TaskStatus(Task.Status.RUNNING), serviceProvider, Optional.empty());
- // }
-
- // public Task changeTaskStatusToExecuted(Task.TaskId id, Optional serviceProvider,
- // Optional outputData) throws TaskNotFoundException {
- // return changeTaskStatus(id, new Task.TaskStatus(Task.Status.EXECUTED), serviceProvider, outputData);
- // }
-
- // private Task changeTaskStatus(Task.TaskId id, Task.TaskStatus status, Optional serviceProvider,
- // Optional outputData) {
- // Optional taskOpt = retrieveTaskById(id);
-
- // if (taskOpt.isEmpty()) {
- // throw new TaskNotFoundException();
- // }
-
- // Task task = taskOpt.get();
- // task.setTaskStatus(status);
-
- // if (serviceProvider.isPresent()) {
- // task.setProvider(serviceProvider.get());
- // }
-
- // if (outputData.isPresent()) {
- // task.setOutputData(outputData.get());
- // }
-
- // return task;
}
+ public Task changeTaskStatusToAssigned(Task.TaskId id, Optional serviceProvider)
+ throws TaskNotFoundException {
+ return changeTaskStatus(id, new Task.TaskStatus(Task.Status.ASSIGNED), serviceProvider, Optional.empty());
+ }
+
+ public Task changeTaskStatusToRunning(Task.TaskId id, Optional serviceProvider)
+ throws TaskNotFoundException {
+ return changeTaskStatus(id, new Task.TaskStatus(Task.Status.RUNNING), serviceProvider, Optional.empty());
+ }
+
+ public Task changeTaskStatusToExecuted(Task.TaskId id, Optional serviceProvider,
+ Optional outputData) throws TaskNotFoundException {
+ return changeTaskStatus(id, new Task.TaskStatus(Task.Status.EXECUTED), serviceProvider, outputData);
+ }
+
+ private Task changeTaskStatus(Task.TaskId id, Task.TaskStatus status, Optional serviceProvider,
+ Optional outputData) {
+ Optional taskOpt = retrieveTaskById(id);
+
+ if (taskOpt.isEmpty()) {
+ throw new TaskNotFoundException();
+ }
+
+ Task task = taskOpt.get();
+ task.setTaskStatus(status);
+
+ if (serviceProvider.isPresent()) {
+ task.setProvider(serviceProvider.get());
+ }
+
+ if (outputData.isPresent()) {
+ task.setOutputData(outputData.get());
+ }
+
+ return task;
+ }
@Value
public static class TaskListName {