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 09ded48..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
@@ -1,10 +1,11 @@
package ch.unisg.executorbase.executor.domain;
+import java.io.IOException;
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-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 33ae142..30460e6 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 {
- COMPUTATION, ROBOT;
+ COMPUTATION, 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..27ed3b6
--- /dev/null
+++ b/executor-humidity/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ 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
+ spring-boot-autoconfigure
+ 2.5.5
+ compile
+
+
+ org.springframework
+ spring-web
+ 5.3.10
+ compile
+
+
+ ch.unisg
+ executor-base
+ 0.0.1-SNAPSHOT
+ compile
+
+
+ org.eclipse.californium
+ californium-core
+ 3.0.0
+ compile
+
+
+ com.github.Interactions-HSG
+ wot-td-java
+ 0.1.1
+
+
+
+
+ 16
+ 16
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
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..b66472c
--- /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..c73e356
--- /dev/null
+++ b/executor-humidity/src/main/java/ch/unisg/executorhumidity/executor/adapter/out/GetHumidityAdapter.java
@@ -0,0 +1,78 @@
+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
+@Primary
+public class GetHumidityAdapter implements GetHumidityPort {
+
+ @Override
+ public String getHumidity() {
+
+ 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();
+
+ try {
+ 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