From c87a732e2af370e48fdee72fd478c62fe36ac78e Mon Sep 17 00:00:00 2001 From: "julius.lautz" Date: Sat, 11 Dec 2021 18:36:23 +0100 Subject: [PATCH 1/4] added executor-humidity --- .../service/NotifyExecutorPoolService.java | 2 +- .../executor/domain/ExecutorType.java | 4 +- executor-humidity/pom.xml | 36 ++++++++++++++++++ .../ExecutorhumidityApplication.java | 16 ++++++++ .../in/web/TaskAvailableController.java | 38 +++++++++++++++++++ .../adapter/out/GetHumidityAdapter.java | 17 +++++++++ .../application/port/out/GetHumidityPort.java | 5 +++ .../service/TaskAvailableService.java | 27 +++++++++++++ .../executor/domain/Executor.java | 22 +++++++++++ 9 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 executor-humidity/pom.xml create mode 100644 executor-humidity/src/main/java/ch/unisg/executorhumidity/ExecutorhumidityApplication.java create mode 100644 executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java create mode 100644 executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java create mode 100644 executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java create mode 100644 executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/service/TaskAvailableService.java create mode 100644 executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java index aee3142..64b6d23 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java @@ -1,4 +1,4 @@ -package ch.unisg.executorbase.executor.application.service; +package ch.unisg.executorBase.executor.application.service; import ch.unisg.common.valueobject.ExecutorURI; import ch.unisg.executorbase.executor.application.port.out.NotifyExecutorPoolPort; diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorType.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorType.java index ca9533a..8905baa 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorType.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorType.java @@ -1,11 +1,11 @@ package ch.unisg.executorbase.executor.domain; public enum ExecutorType { - ADDITION, ROBOT; + ADDITION, ROBOT, HUMIDITY; /** * Checks if the give executor type exists. - * @return Wheter the given executor type exists + * @return Whether the given executor type exists **/ public static boolean contains(String test) { diff --git a/executor-humidity/pom.xml b/executor-humidity/pom.xml new file mode 100644 index 0000000..3c07d0c --- /dev/null +++ b/executor-humidity/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + org.example + executor-miro + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-autoconfigure + 2.5.5 + compile + + + org.springframework.boot + spring-boot-autoconfigure + 2.5.5 + compile + + + ch.unisg + executor-base + 0.0.1-SNAPSHOT + compile + + + + + 16 + 16 + + + diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/ExecutorhumidityApplication.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/ExecutorhumidityApplication.java new file mode 100644 index 0000000..181cfeb --- /dev/null +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/ExecutorhumidityApplication.java @@ -0,0 +1,16 @@ +package ch.unisg.executorhumidity; + + +import ch.unisg.executorhumidity.executor.domain.Executor; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ExecutorhumidityApplication { + + public static void main(String[] args) { + SpringApplication.run(ExecutorhumidityApplication.class, args); + Executor.getExecutor(); + } + +} diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java new file mode 100644 index 0000000..be85ab8 --- /dev/null +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java @@ -0,0 +1,38 @@ +package ch.unisg.executorhumidity.executor.adapter.in.web; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import ch.unisg.executorbase.executor.application.port.in.TaskAvailableCommand; +import ch.unisg.executorbase.executor.application.port.in.TaskAvailableUseCase; +import ch.unisg.executorbase.executor.domain.ExecutorType; + +import java.util.concurrent.CompletableFuture; + +@RestController +public class TaskAvailableController { + private final TaskAvailableUseCase taskAvailableUseCase; + + public TaskAvailableController(TaskAvailableUseCase taskAvailableUseCase) { + this.taskAvailableUseCase = taskAvailableUseCase; + } + + @GetMapping(path="/newtask/{taskType}") + public ResponseEntity retrieveTaskfromTaskList(@PathVariable("taskType") String taskType) { + + if (ExecutorType.contains(taskType.toUpperCase())) { + TaskAvailableCommand command = new TaskAvailableCommand( + ExecutorType.valueOf(taskType.toUpperCase())); + CompletableFuture.runAsync(() -> taskAvailableUseCase.newTaskAvailable(command); + } + + // Add the content type as a response header + HttpHeaders responseHeaders = new HttpHeaders(); + + return new ResponseEntity<>("OK", responseHeaders, HttpStatus.OK); + } +} diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java new file mode 100644 index 0000000..88f440d --- /dev/null +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java @@ -0,0 +1,17 @@ +package ch.unisg.executorhumidity.executor.adapter.out; + +import ch.unisg.executorhumidity.executor.application.port.out.GetHumidityPort; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +@Component +@Primary +public class GetHumidityAdapter implements GetHumidityPort { + + @Override + public boolean getHumidity(String key) { + + CoapClient client1 = new CoapClient("coap://130.82.171.10:5683/humidity") + + } +} diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java new file mode 100644 index 0000000..b865cfd --- /dev/null +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java @@ -0,0 +1,5 @@ +package ch.unisg.executorhumidity.executor.application.port.out; + +public interface GetHumidityPort { + boolean getHumidity(String key); +} diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/service/TaskAvailableService.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/service/TaskAvailableService.java new file mode 100644 index 0000000..0e467c4 --- /dev/null +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/service/TaskAvailableService.java @@ -0,0 +1,27 @@ +package ch.unisg.executorhumidity.executor.application.service; + +import ch.unisg.executorbase.executor.domain.ExecutorStatus; +import ch.unisg.executorhumidity.executor.domain.Executor; +import org.springframework.stereotype.Component; +import ch.unisg.executorbase.executor.application.port.in.TaskAvailableCommand; +import ch.unisg.executorbase.executor.application.port.in.TaskAvailableUseCase; +import lombok.RequiredArgsConstructor; + +import javax.transaction.Transactional; + +@RequiredArgsConstructor +@Component +@Transactional +public class TaskAvailableService implements TaskAvailableUseCase { + + @Override + public void newTaskAvailable(TaskAvailableCommand command) { + + Executor executor = Executor.getExecutor(); + + if(executor.getExecutorType() == command.getTaskType() && + executor.getStatus() == ExecutorStatus.IDLING) { + executor.getAssignment(); + } + } +} diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java new file mode 100644 index 0000000..2a8cd3c --- /dev/null +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java @@ -0,0 +1,22 @@ +package ch.unisg.executorhumidity.executor.domain; + +import ch.unisg.executorbase.executor.domain.ExecutorBase; +import ch.unisg.executorbase.executor.domain.ExecutorType; + +public class Executor extends ExecutorBase{ + + private static final Executor executor = new Exec(ExecutorType.HUMIDITY); + // TODO: Add the necessary ports + + + private Executor(ExecutorType executorType) {super(executorType);} + + public static Executor getExecutor() {return executor;} + + + @Override + protected + String execution(String input) { + //TODO: Fill + } +} -- 2.45.1 From aaffb0371e30790eacc334ea47b0127dcb8760ab Mon Sep 17 00:00:00 2001 From: "julius.lautz" Date: Sat, 11 Dec 2021 19:09:34 +0100 Subject: [PATCH 2/4] made changes to executor-humidity --- .../executor/domain/ExecutorBase.java | 3 +- executor-humidity/pom.xml | 13 +++++--- .../adapter/out/GetHumidityAdapter.java | 19 +++++++++-- .../application/port/out/GetHumidityPort.java | 6 +++- .../executor/domain/Executor.java | 12 ++++++- executor-robot/pom.xml | 32 ++++++++++++++++++- 6 files changed, 75 insertions(+), 10 deletions(-) diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java index 09ded48..5f125f2 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java @@ -1,5 +1,6 @@ package ch.unisg.executorbase.executor.domain; +import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,6 +89,6 @@ public abstract class ExecutorBase { * Implementation of the actual execution method of an executor * @return the execution result **/ - protected abstract String execution(String input); + protected abstract String execution(String input) throws ConnectorException, IOException, ConnectorException; } diff --git a/executor-humidity/pom.xml b/executor-humidity/pom.xml index 3c07d0c..6828a7d 100644 --- a/executor-humidity/pom.xml +++ b/executor-humidity/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.example - executor-miro + executor-humidity 1.0-SNAPSHOT @@ -15,9 +15,9 @@ compile - org.springframework.boot - spring-boot-autoconfigure - 2.5.5 + org.springframework + spring-web + 5.3.10 compile @@ -26,6 +26,11 @@ 0.0.1-SNAPSHOT compile + + org.eclipse.californium + californium-core + 3.0.0 + diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java index 88f440d..5cf9c88 100644 --- a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java @@ -1,17 +1,32 @@ package ch.unisg.executorhumidity.executor.adapter.out; import ch.unisg.executorhumidity.executor.application.port.out.GetHumidityPort; +import org.eclipse.californium.core.CoapClient; +import org.eclipse.californium.elements.exception.ConnectorException; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; +import java.io.IOException; + + @Component @Primary public class GetHumidityAdapter implements GetHumidityPort { @Override - public boolean getHumidity(String key) { + public String getHumidity() { - CoapClient client1 = new CoapClient("coap://130.82.171.10:5683/humidity") + CoapClient client1 = new CoapClient("coap://130.82.171.10:5683/humidity"); + String result = null; + try { + result = client1.get().getResponseText(); + } catch (ConnectorException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + return result; } } diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java index b865cfd..d2cda18 100644 --- a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/application/port/out/GetHumidityPort.java @@ -1,5 +1,9 @@ package ch.unisg.executorhumidity.executor.application.port.out; +import org.eclipse.californium.elements.exception.ConnectorException; + +import java.io.IOException; + public interface GetHumidityPort { - boolean getHumidity(String key); + String getHumidity(); } diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java index 2a8cd3c..703881f 100644 --- a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java @@ -2,11 +2,17 @@ package ch.unisg.executorhumidity.executor.domain; import ch.unisg.executorbase.executor.domain.ExecutorBase; import ch.unisg.executorbase.executor.domain.ExecutorType; +import ch.unisg.executorhumidity.executor.adapter.out.GetHumidityAdapter; +import ch.unisg.executorhumidity.executor.application.port.out.GetHumidityPort; +import org.eclipse.californium.elements.exception.ConnectorException; + +import java.io.IOException; public class Executor extends ExecutorBase{ - private static final Executor executor = new Exec(ExecutorType.HUMIDITY); + private static final Executor executor = new Executor(ExecutorType.HUMIDITY); // TODO: Add the necessary ports + private final GetHumidityPort getHumidityPort = new GetHumidityAdapter(); private Executor(ExecutorType executorType) {super(executorType);} @@ -18,5 +24,9 @@ public class Executor extends ExecutorBase{ protected String execution(String input) { //TODO: Fill + + String result = getHumidityPort.getHumidity(); + + return result; } } diff --git a/executor-robot/pom.xml b/executor-robot/pom.xml index ca95edf..67fe35b 100644 --- a/executor-robot/pom.xml +++ b/executor-robot/pom.xml @@ -45,7 +45,37 @@ executor-base 0.0.1-SNAPSHOT - + + ch.unisg + executor-base + 0.0.1-SNAPSHOT + compile + + + ch.unisg + executor-base + 0.0.1-SNAPSHOT + compile + + + ch.unisg + executor-base + 0.0.1-SNAPSHOT + compile + + + ch.unisg + executor-base + 0.0.1-SNAPSHOT + compile + + + ch.unisg + executor-base + 0.0.1-SNAPSHOT + compile + + -- 2.45.1 From 99e60f656c3ffd6d5199400694d1a69dbe3f8bdb Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 12 Dec 2021 20:40:22 +0100 Subject: [PATCH 3/4] small bugfixes --- .../executor/application/service/NotifyExecutorPoolService.java | 2 +- .../ch/unisg/executorBase/executor/domain/ExecutorBase.java | 2 +- .../executor/adapter/in/web/TaskAvailableController.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java index 64b6d23..aee3142 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/application/service/NotifyExecutorPoolService.java @@ -1,4 +1,4 @@ -package ch.unisg.executorBase.executor.application.service; +package ch.unisg.executorbase.executor.application.service; import ch.unisg.common.valueobject.ExecutorURI; import ch.unisg.executorbase.executor.application.port.out.NotifyExecutorPoolPort; diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java index 5f125f2..50acce0 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java @@ -89,6 +89,6 @@ public abstract class ExecutorBase { * Implementation of the actual execution method of an executor * @return the execution result **/ - protected abstract String execution(String input) throws ConnectorException, IOException, ConnectorException; + protected abstract String execution(String input); } diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java index be85ab8..b66472c 100644 --- a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/in/web/TaskAvailableController.java @@ -27,7 +27,7 @@ public class TaskAvailableController { if (ExecutorType.contains(taskType.toUpperCase())) { TaskAvailableCommand command = new TaskAvailableCommand( ExecutorType.valueOf(taskType.toUpperCase())); - CompletableFuture.runAsync(() -> taskAvailableUseCase.newTaskAvailable(command); + CompletableFuture.runAsync(() -> taskAvailableUseCase.newTaskAvailable(command)); } // Add the content type as a response header -- 2.45.1 From b1b94336b29f3d3181722966ef2a9528afc2dd88 Mon Sep 17 00:00:00 2001 From: "julius.lautz" Date: Tue, 14 Dec 2021 21:13:49 +0100 Subject: [PATCH 4/4] added td discovery for humidity and robot executor --- .../in/web/TaskAvailableController.java | 2 +- .../web/ExecutionFinishedEventAdapter.java | 2 +- .../executor/domain/ExecutorBase.java | 2 +- executor-humidity/pom.xml | 40 ++++++++- .../adapter/out/GetHumidityAdapter.java | 60 +++++++++++-- .../executor/domain/Executor.java | 3 +- executor-robot/pom.xml | 12 +++ .../out/DeleteUserFromRobotAdapter.java | 10 +-- .../out/InstructionToRobotAdapter.java | 87 ++++++++++++++++-- .../adapter/out/UserToRobotAdapter.java | 90 +++++++++++++++++-- 10 files changed, 276 insertions(+), 32 deletions(-) diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java index 66ef496..32f3486 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java @@ -1,4 +1,4 @@ -package ch.unisg.executorbase.executor.adapter.in.web; +package ch.unisg.executorBase.executor.adapter.in.web; import java.util.logging.Logger; diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java index f683b81..5d832db 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java @@ -1,4 +1,4 @@ -package ch.unisg.executorbase.executor.adapter.out.web; +package ch.unisg.executorBase.executor.adapter.out.web; import java.io.IOException; import java.net.URI; diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java index 50acce0..be5ddd6 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java @@ -5,7 +5,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import ch.unisg.common.valueobject.ExecutorURI; -import ch.unisg.executorbase.executor.adapter.out.web.ExecutionFinishedEventAdapter; +import ch.unisg.executorBase.executor.adapter.out.web.ExecutionFinishedEventAdapter; import ch.unisg.executorbase.executor.adapter.out.web.GetAssignmentAdapter; import ch.unisg.executorbase.executor.adapter.out.web.NotifyExecutorPoolAdapter; import ch.unisg.executorbase.executor.application.port.out.ExecutionFinishedEventPort; diff --git a/executor-humidity/pom.xml b/executor-humidity/pom.xml index 6828a7d..27ed3b6 100644 --- a/executor-humidity/pom.xml +++ b/executor-humidity/pom.xml @@ -3,10 +3,23 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - org.example + + org.springframework.boot + spring-boot-starter-parent + 2.5.5 + + + org.unisg executor-humidity 1.0-SNAPSHOT + executor-humidity + Demo project for Spring Boot + + + jitpack.io + https://jitpack.io + + org.springframework.boot @@ -30,6 +43,12 @@ org.eclipse.californium californium-core 3.0.0 + compile + + + com.github.Interactions-HSG + wot-td-java + 0.1.1 @@ -38,4 +57,21 @@ 16 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java index 5cf9c88..c73e356 100644 --- a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java @@ -1,12 +1,26 @@ package ch.unisg.executorhumidity.executor.adapter.out; import ch.unisg.executorhumidity.executor.application.port.out.GetHumidityPort; +import ch.unisg.ics.interactions.wot.td.ThingDescription; +import ch.unisg.ics.interactions.wot.td.affordances.Form; +import ch.unisg.ics.interactions.wot.td.affordances.PropertyAffordance; +import ch.unisg.ics.interactions.wot.td.clients.TDCoapRequest; +import ch.unisg.ics.interactions.wot.td.clients.TDCoapResponse; +import ch.unisg.ics.interactions.wot.td.io.TDGraphReader; +import ch.unisg.ics.interactions.wot.td.schemas.ObjectSchema; +import ch.unisg.ics.interactions.wot.td.vocabularies.TD; import org.eclipse.californium.core.CoapClient; import org.eclipse.californium.elements.exception.ConnectorException; 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.Map; +import java.util.Optional; @Component @@ -16,17 +30,49 @@ public class GetHumidityAdapter implements GetHumidityPort { @Override public String getHumidity() { - CoapClient client1 = new CoapClient("coap://130.82.171.10:5683/humidity"); + String endpoint = "https://api.interactions.ics.unisg.ch/search/searchEngine"; + + String input = "@prefix dct: . select ?title where { ?title dct:title 'Mirogate' }"; + + var httpRequest = HttpRequest.newBuilder() + .uri(URI.create(endpoint)) + .header("Content-Type", "application/sparql-query") + .POST(HttpRequest.BodyPublishers.ofString(input)) + .build(); + + var client = HttpClient.newHttpClient(); - String result = null; try { - result = client1.get().getResponseText(); - } catch (ConnectorException e) { - e.printStackTrace(); + String description = client.send(httpRequest, HttpResponse.BodyHandlers.ofString()).body(); + + // Parse a TD from a string + ThingDescription td = TDGraphReader.readFromString(ThingDescription.TDFormat.RDF_TURTLE, description); + + Optional humidity = td.getPropertyByName("humidity"); + + if (humidity.isPresent()) { + Optional
form = humidity.get().getFirstFormForOperationType(TD.readProperty); + + if (form.isPresent()) { + TDCoapRequest request = new TDCoapRequest(form.get(), TD.readProperty); + try { + TDCoapResponse response = request.execute(); + + Map payload = response.getPayloadAsObject((ObjectSchema) humidity.get().getDataSchema()); + Object result = payload.get("https://interactions.ics.unisg.ch/mirogate#HumidityValue"); + return result.toString(); + + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } catch (IOException e) { e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); } - - return result; + return null; } } diff --git a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java index 703881f..ac73e65 100644 --- a/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java +++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/domain/Executor.java @@ -11,9 +11,8 @@ import java.io.IOException; public class Executor extends ExecutorBase{ private static final Executor executor = new Executor(ExecutorType.HUMIDITY); - // TODO: Add the necessary ports - private final GetHumidityPort getHumidityPort = new GetHumidityAdapter(); + private final GetHumidityPort getHumidityPort = new GetHumidityAdapter(); private Executor(ExecutorType executorType) {super(executorType);} diff --git a/executor-robot/pom.xml b/executor-robot/pom.xml index 67fe35b..570bd18 100644 --- a/executor-robot/pom.xml +++ b/executor-robot/pom.xml @@ -18,6 +18,12 @@ scs-asse-fs21-group1 https://sonarcloud.io + + + jitpack.io + https://jitpack.io + + org.springframework.boot @@ -75,6 +81,12 @@ 0.0.1-SNAPSHOT compile + + com.github.Interactions-HSG + wot-td-java + 0.1.1 + compile + diff --git a/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/DeleteUserFromRobotAdapter.java b/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/DeleteUserFromRobotAdapter.java index 157bc3e..37b605a 100644 --- a/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/DeleteUserFromRobotAdapter.java +++ b/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/DeleteUserFromRobotAdapter.java @@ -17,16 +17,16 @@ public class DeleteUserFromRobotAdapter implements DeleteUserFromRobotPort { @Override public boolean deleteUserFromRobot(String key) { - String url = "https://api.interactions.ics.unisg.ch/leubot1/v1.3.0/user/" + key; - + String url = "https://api.interactions.ics.unisg.ch/leubot1/v1.3.4/user/" + key; + var request = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Content-Type", "application/json") .DELETE() .build(); - + var client = HttpClient.newHttpClient(); - + try { var response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); @@ -38,5 +38,5 @@ public class DeleteUserFromRobotAdapter implements DeleteUserFromRobotPort { } return false; } - + } diff --git a/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/InstructionToRobotAdapter.java b/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/InstructionToRobotAdapter.java index c7507e4..531b5eb 100644 --- a/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/InstructionToRobotAdapter.java +++ b/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/InstructionToRobotAdapter.java @@ -4,7 +4,21 @@ import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import ch.unisg.ics.interactions.wot.td.ThingDescription; +import ch.unisg.ics.interactions.wot.td.affordances.ActionAffordance; +import ch.unisg.ics.interactions.wot.td.affordances.Form; +import ch.unisg.ics.interactions.wot.td.clients.TDHttpRequest; +import ch.unisg.ics.interactions.wot.td.clients.TDHttpResponse; +import ch.unisg.ics.interactions.wot.td.io.TDGraphReader; +import ch.unisg.ics.interactions.wot.td.schemas.DataSchema; +import ch.unisg.ics.interactions.wot.td.schemas.ObjectSchema; +import ch.unisg.ics.interactions.wot.td.schemas.StringSchema; +import ch.unisg.ics.interactions.wot.td.security.APIKeySecurityScheme; +import ch.unisg.ics.interactions.wot.td.vocabularies.TD; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @@ -16,9 +30,70 @@ public class InstructionToRobotAdapter implements InstructionToRobotPort { @Override public boolean instructionToRobot(String key) { - + + String endpoint = "https://api.interactions.ics.unisg.ch/search/searchEngine"; + + String input = "@prefix dct: . select ?title where { ?title dct:title 'Mirogate' }"; + + var httpRequest = HttpRequest.newBuilder() + .uri(URI.create(endpoint)) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(input)) + .build(); + + var client = HttpClient.newHttpClient(); + + try { + var description = client.send(httpRequest, HttpResponse.BodyHandlers.ofString()).body(); + + // Parse a TD from a string + ThingDescription td = TDGraphReader.readFromString(ThingDescription.TDFormat.RDF_TURTLE, description); + + // Create the payload to be sent with the Http request + Map elbowPayload = new HashMap<>(); + elbowPayload.put("http://www.w3.org/2001/XMLSchema#int", 400); + + // Get the affordance "setElbow" from the TD + Optional action = td.getActionByName("setElbow"); + + // Get the first form + if (action.isPresent()) { + Optional form = action.get().getFirstForm(); + + // Retrieve the input data schema from the action affordance + Optional inputSchema = action.get().getInputSchema(); + + // If a form is found, use it to create and execute the Http request + if (form.isPresent()) { + TDHttpRequest request = new TDHttpRequest(form.get(), TD.invokeAction); + + if (inputSchema.isPresent()) { + request.setObjectPayload((ObjectSchema) inputSchema.get(), elbowPayload); + + try { + TDHttpResponse response = request.execute(); + System.out.println("Received response with status code: " + response.getStatusCode()); + return true; + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return false; + + + + + /* String putEndpoint = "https://api.interactions.ics.unisg.ch/leubot1/v1.3.0/elbow"; - + String inputJson = "{ \"value\": 400}"; var request = HttpRequest.newBuilder() .uri(URI.create(putEndpoint)) @@ -26,9 +101,9 @@ public class InstructionToRobotAdapter implements InstructionToRobotPort { .header("X-API-KEY", key) .PUT(HttpRequest.BodyPublishers.ofString(inputJson)) .build(); - + var client = HttpClient.newHttpClient(); - + try { var response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); @@ -40,7 +115,7 @@ public class InstructionToRobotAdapter implements InstructionToRobotPort { e.printStackTrace(); } return false; - + */ } - + } diff --git a/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/UserToRobotAdapter.java b/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/UserToRobotAdapter.java index 92ca8c1..7c20616 100644 --- a/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/UserToRobotAdapter.java +++ b/executor-robot/src/main/java/ch/unisg/executorrobot/executor/adapter/out/UserToRobotAdapter.java @@ -4,7 +4,20 @@ import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import ch.unisg.ics.interactions.wot.td.ThingDescription; +import ch.unisg.ics.interactions.wot.td.affordances.ActionAffordance; +import ch.unisg.ics.interactions.wot.td.affordances.Form; +import ch.unisg.ics.interactions.wot.td.clients.TDHttpRequest; +import ch.unisg.ics.interactions.wot.td.clients.TDHttpResponse; +import ch.unisg.ics.interactions.wot.td.io.TDGraphReader; +import ch.unisg.ics.interactions.wot.td.schemas.DataSchema; +import ch.unisg.ics.interactions.wot.td.schemas.ObjectSchema; +import ch.unisg.ics.interactions.wot.td.vocabularies.TD; +import org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @@ -16,17 +29,77 @@ public class UserToRobotAdapter implements UserToRobotPort { @Override public String userToRobot() { - String postEndpoint = "https://api.interactions.ics.unisg.ch/leubot1/v1.3.0/user"; - + + String endpoint = "https://api.interactions.ics.unisg.ch/search/searchEngine"; + + String input = "@prefix dct: . select ?title where { ?title dct:title 'Mirogate' }"; + + var httpRequest = HttpRequest.newBuilder() + .uri(URI.create(endpoint)) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(input)) + .build(); + + var client = HttpClient.newHttpClient(); + + try { + var description = client.send(httpRequest, HttpResponse.BodyHandlers.ofString()).body(); + + // Parse a TD from a string + ThingDescription td = TDGraphReader.readFromString(ThingDescription.TDFormat.RDF_TURTLE, description); + + // Create the payload to be sent with the HTTP request + Map logInPayload = new HashMap<>(); + logInPayload.put("http://xmlns.com/foaf/0.1/Name", "keanu rahimian"); + logInPayload.put("http://xmlns.com/foaf/0.1/Mbox", "keanu.rahimian@student.unisg.ch"); + + // Get the affordance "Log-In" from the TD + Optional action = td.getActionByName("logIn"); + + // Get the first form + if (action.isPresent()) { + Optional form = action.get().getFirstForm(); + + // Retrieve the input data schema from the action affordance + Optional inputSchema = action.get().getInputSchema(); + + // If a form is found, use it to create and execute the HTTP request + if (form.isPresent()) { + TDHttpRequest request = new TDHttpRequest(form.get(), TD.invokeAction); + + if (inputSchema.isPresent()) { + request.setObjectPayload((ObjectSchema) inputSchema.get(), logInPayload); + + try { + TDHttpResponse response = request.execute(); + System.out.println("Received response with status code: " + response.getStatusCode()); + + // TODO: Get the key from the response and return it + // Not exactly sure how to get the headers from the payload, as we need them + // to get the key + + return null; + + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + /* String inputJson = "{ \"name\":\"keanu rahimian\", \"email\":\"keanu.rahimian@student.unisg.ch\"}"; var request = HttpRequest.newBuilder() .uri(URI.create(postEndpoint)) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(inputJson)) .build(); - - var client = HttpClient.newHttpClient(); - + try { var response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); @@ -40,7 +113,10 @@ public class UserToRobotAdapter implements UserToRobotPort { e.printStackTrace(); } return null; - + */ + + + return null; } - + } -- 2.45.1