Implemented the following points:
- Roster/Auctionhouse send initial getExecutors request - Remove executor (made DELETE endpoint in executor pool)
This commit is contained in:
parent
6c17b20c55
commit
cab63d6b76
|
@ -40,7 +40,7 @@ public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort {
|
||||||
|
|
||||||
HttpClient client = HttpClient.newHttpClient();
|
HttpClient client = HttpClient.newHttpClient();
|
||||||
HttpRequest request = HttpRequest.newBuilder()
|
HttpRequest request = HttpRequest.newBuilder()
|
||||||
.uri(URI.create(server+"/executor-pool/AddExecutor"))
|
.uri(URI.create(server+"/executor-pool/executors"))
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.POST(HttpRequest.BodyPublishers.ofString(body))
|
.POST(HttpRequest.BodyPublishers.ofString(body))
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class AddNewExecutorToExecutorPoolWebController {
|
||||||
this.addNewExecutorToExecutorPoolUseCase = addNewExecutorToExecutorPoolUseCase;
|
this.addNewExecutorToExecutorPoolUseCase = addNewExecutorToExecutorPoolUseCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(path = "/executor-pool/AddExecutor", consumes = {ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE})
|
@PostMapping(path = "/executor-pool/executors", consumes = {ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE})
|
||||||
public ResponseEntity<String> addNewExecutorToExecutorPool(@RequestBody ExecutorJsonRepresentation payload){
|
public ResponseEntity<String> addNewExecutorToExecutorPool(@RequestBody ExecutorJsonRepresentation payload){
|
||||||
try {
|
try {
|
||||||
AddNewExecutorToExecutorPoolCommand command = new AddNewExecutorToExecutorPoolCommand(
|
AddNewExecutorToExecutorPoolCommand command = new AddNewExecutorToExecutorPoolCommand(
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class GetAllExecutorsInExecutorPoolWebController {
|
||||||
this.getAllExecutorsInExecutorPoolUseCase = getAllExecutorsInExecutorPoolUseCase;
|
this.getAllExecutorsInExecutorPoolUseCase = getAllExecutorsInExecutorPoolUseCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(path = "executor-pool/GetAllExecutorsinExecutorPool")
|
@GetMapping(path = "executor-pool/GetAllExecutorsInExecutorPool")
|
||||||
public ResponseEntity<String> getAllExecutorsInExecutorPool(){
|
public ResponseEntity<String> getAllExecutorsInExecutorPool(){
|
||||||
List<ExecutorClass> executorClassList = getAllExecutorsInExecutorPoolUseCase.getAllExecutorsInExecutorPool();
|
List<ExecutorClass> executorClassList = getAllExecutorsInExecutorPoolUseCase.getAllExecutorsInExecutorPool();
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,7 @@ import ch.unisg.executorpool.domain.ExecutorClass;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
@ -23,10 +21,10 @@ public class RemoveExecutorFromExecutorPoolWebController {
|
||||||
this.removeExecutorFromExecutorPoolUseCase = removeExecutorFromExecutorPoolUseCase;
|
this.removeExecutorFromExecutorPoolUseCase = removeExecutorFromExecutorPoolUseCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(path = "/executor-pool/RemoveExecutor", consumes = {ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE})
|
@DeleteMapping(path = "/executor-pool/executors/{executorUri}")
|
||||||
public ResponseEntity<String> removeExecutorFromExecutorPool(@RequestBody ExecutorJsonRepresentation executorJsonRepresentation){
|
public ResponseEntity<String> removeExecutorFromExecutorPool(@PathVariable("executorUri") String executorUri){
|
||||||
RemoveExecutorFromExecutorPoolCommand command = new RemoveExecutorFromExecutorPoolCommand(
|
RemoveExecutorFromExecutorPoolCommand command = new RemoveExecutorFromExecutorPoolCommand(
|
||||||
new ExecutorClass.ExecutorUri(URI.create(executorJsonRepresentation.getExecutorUri()))
|
new ExecutorClass.ExecutorUri(URI.create(executorUri))
|
||||||
);
|
);
|
||||||
Optional<ExecutorClass> removedExecutor = removeExecutorFromExecutorPoolUseCase.removeExecutorFromExecutorPool(command);
|
Optional<ExecutorClass> removedExecutor = removeExecutorFromExecutorPoolUseCase.removeExecutorFromExecutorPool(command);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
import ch.unisg.roster.roster.adapter.out.persistence.mongodb.RosterRepository;
|
import ch.unisg.roster.roster.adapter.out.persistence.mongodb.RosterRepository;
|
||||||
import ch.unisg.roster.roster.application.port.in.LoadRosterItemPort;
|
import ch.unisg.roster.roster.application.port.in.LoadRosterItemPort;
|
||||||
|
import ch.unisg.roster.roster.application.service.GetExecutorsService;
|
||||||
import ch.unisg.roster.roster.domain.Roster;
|
import ch.unisg.roster.roster.domain.Roster;
|
||||||
import ch.unisg.roster.roster.domain.RosterItem;
|
import ch.unisg.roster.roster.domain.RosterItem;
|
||||||
import org.eclipse.paho.client.mqttv3.MqttException;
|
import org.eclipse.paho.client.mqttv3.MqttException;
|
||||||
|
@ -36,6 +37,8 @@ public class RosterApplication {
|
||||||
SpringApplication rosterApp = new SpringApplication(RosterApplication.class);
|
SpringApplication rosterApp = new SpringApplication(RosterApplication.class);
|
||||||
ENVIRONMENT = rosterApp.run(args).getEnvironment();
|
ENVIRONMENT = rosterApp.run(args).getEnvironment();
|
||||||
bootstrapMarketplaceWithMqtt();
|
bootstrapMarketplaceWithMqtt();
|
||||||
|
var getExecutorsService = new GetExecutorsService();
|
||||||
|
getExecutorsService.getExecutorsFromExecutorPool();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
package ch.unisg.roster.roster.adapter.out.web;
|
||||||
|
|
||||||
|
import ch.unisg.roster.roster.domain.ExecutorInfo;
|
||||||
|
import org.apache.logging.log4j.Level;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
|
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.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
public class GetExecutorsInExecutorPoolWebAdapter {
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(GetExecutorsInExecutorPoolWebAdapter.class);
|
||||||
|
|
||||||
|
// TODO get from config
|
||||||
|
String server = "http://localhost:8083";
|
||||||
|
|
||||||
|
public List<ExecutorInfo> getExecutorsInExecutorPool(){
|
||||||
|
var client = HttpClient.newHttpClient();
|
||||||
|
var request = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create(server + "/executor-pool/GetAllExecutorsInExecutorPool"))
|
||||||
|
.GET()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
if(response.statusCode() != HttpStatus.OK.value()){
|
||||||
|
LOGGER.log(Level.INFO, "Could not get executors from Executor Pool");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.log(Level.INFO, "Executors received from ExecutorPool: " + response.body());
|
||||||
|
|
||||||
|
var jsonExecutorArray = new JSONArray(response.body());
|
||||||
|
var executorList = new LinkedList<ExecutorInfo>();
|
||||||
|
|
||||||
|
for(int i = 0; i < jsonExecutorArray.length(); i++){
|
||||||
|
var jsonExecutorObject = jsonExecutorArray.getJSONObject(i);
|
||||||
|
var executorURI = jsonExecutorObject.getString("executorUri");
|
||||||
|
var executorType = jsonExecutorObject.getString("executorTaskType");
|
||||||
|
executorList.add(new ExecutorInfo(executorURI, executorType));
|
||||||
|
}
|
||||||
|
|
||||||
|
return executorList;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package ch.unisg.roster.roster.application.service;
|
||||||
|
|
||||||
|
import ch.unisg.roster.roster.adapter.out.web.GetExecutorsInExecutorPoolWebAdapter;
|
||||||
|
import ch.unisg.roster.roster.domain.ExecutorRegistry;
|
||||||
|
|
||||||
|
// TODO should this implement a port in the Hexagonal architecture?
|
||||||
|
public class GetExecutorsService {
|
||||||
|
|
||||||
|
public boolean getExecutorsFromExecutorPool(){
|
||||||
|
var getExecutorsAdapter = new GetExecutorsInExecutorPoolWebAdapter();
|
||||||
|
var executors = getExecutorsAdapter.getExecutorsInExecutorPool();
|
||||||
|
if(executors == null){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var executorRegistry = ExecutorRegistry.getInstance();
|
||||||
|
return executorRegistry.addExecutors(executors);
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,8 @@ import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
public class ExecutorInfo {
|
public class ExecutorInfo {
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@ -13,4 +15,9 @@ public class ExecutorInfo {
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private ExecutorType executorType;
|
private ExecutorType executorType;
|
||||||
|
|
||||||
|
public ExecutorInfo(String executorURI, String executorType){
|
||||||
|
this.executorURI = new ExecutorURI(executorURI);
|
||||||
|
this.executorType = new ExecutorType(executorType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,8 @@ public class ExecutorRegistry {
|
||||||
/**
|
/**
|
||||||
* Adds an executor to the registry for a given task type.
|
* Adds an executor to the registry for a given task type.
|
||||||
*
|
*
|
||||||
* @param taskType the type of the task
|
* @param executorType the type of the task
|
||||||
* @param executorIdentifier the identifier of the executor (can be any string)
|
* @param executorURI the identifier of the executor (can be any string)
|
||||||
* @return true unless a runtime exception occurs
|
* @return true unless a runtime exception occurs
|
||||||
*/
|
*/
|
||||||
public boolean addExecutor(ExecutorType executorType, ExecutorURI executorURI) {
|
public boolean addExecutor(ExecutorType executorType, ExecutorURI executorURI) {
|
||||||
|
@ -44,6 +44,15 @@ public class ExecutorRegistry {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean addExecutors(List<ExecutorInfo> executors){
|
||||||
|
for (var executor : executors) {
|
||||||
|
if(!addExecutor(executor.getExecutorType(), executor.getExecutorURI())){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes an executor from the registry. The executor is disassociated from all known task types.
|
* Removes an executor from the registry. The executor is disassociated from all known task types.
|
||||||
*
|
*
|
||||||
|
|
|
@ -69,6 +69,12 @@
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.unisg</groupId>
|
||||||
|
<artifactId>common</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -3,6 +3,7 @@ package ch.unisg.tapas;
|
||||||
import ch.unisg.tapas.auctionhouse.adapter.common.clients.TapasMqttClient;
|
import ch.unisg.tapas.auctionhouse.adapter.common.clients.TapasMqttClient;
|
||||||
import ch.unisg.tapas.auctionhouse.adapter.in.messaging.mqtt.AuctionEventsMqttDispatcher;
|
import ch.unisg.tapas.auctionhouse.adapter.in.messaging.mqtt.AuctionEventsMqttDispatcher;
|
||||||
import ch.unisg.tapas.auctionhouse.adapter.common.clients.WebSubSubscriber;
|
import ch.unisg.tapas.auctionhouse.adapter.common.clients.WebSubSubscriber;
|
||||||
|
import ch.unisg.tapas.auctionhouse.application.service.GetExecutorsService;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.eclipse.paho.client.mqttv3.MqttException;
|
import org.eclipse.paho.client.mqttv3.MqttException;
|
||||||
|
@ -31,6 +32,8 @@ public class TapasAuctionHouseApplication {
|
||||||
// We will use these bootstrap methods in Week 6:
|
// We will use these bootstrap methods in Week 6:
|
||||||
// bootstrapMarketplaceWithWebSub();
|
// bootstrapMarketplaceWithWebSub();
|
||||||
bootstrapMarketplaceWithMqtt();
|
bootstrapMarketplaceWithMqtt();
|
||||||
|
var getExecutorsService = new GetExecutorsService();
|
||||||
|
getExecutorsService.getExecutorsFromExecutorPool();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Discovers auction houses and subscribes to WebSub notifications
|
* Discovers auction houses and subscribes to WebSub notifications
|
||||||
|
|
|
@ -4,6 +4,7 @@ import ch.unisg.tapas.auctionhouse.application.handler.ExecutorAddedHandler;
|
||||||
import ch.unisg.tapas.auctionhouse.application.port.in.ExecutorAddedEvent;
|
import ch.unisg.tapas.auctionhouse.application.port.in.ExecutorAddedEvent;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.Auction;
|
import ch.unisg.tapas.auctionhouse.domain.Auction;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
||||||
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
@ -34,7 +35,7 @@ public class ExecutorAddedEventListenerMqttAdapter extends AuctionEventMqttListe
|
||||||
String executorTaskType = data.get("executorTaskType").asText();
|
String executorTaskType = data.get("executorTaskType").asText();
|
||||||
|
|
||||||
ExecutorAddedEvent executorAddedEvent = new ExecutorAddedEvent(
|
ExecutorAddedEvent executorAddedEvent = new ExecutorAddedEvent(
|
||||||
new ExecutorRegistry.ExecutorUri(URI.create(executorUri)),
|
new ExecutorURI(executorUri),
|
||||||
new Auction.AuctionedTaskType(executorTaskType)
|
new Auction.AuctionedTaskType(executorTaskType)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package ch.unisg.tapas.auctionhouse.adapter.in.messaging.mqtt;
|
||||||
|
|
||||||
import ch.unisg.tapas.auctionhouse.application.handler.ExecutorRemovedHandler;
|
import ch.unisg.tapas.auctionhouse.application.handler.ExecutorRemovedHandler;
|
||||||
import ch.unisg.tapas.auctionhouse.application.port.in.ExecutorRemovedEvent;
|
import ch.unisg.tapas.auctionhouse.application.port.in.ExecutorRemovedEvent;
|
||||||
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.Auction;
|
import ch.unisg.tapas.auctionhouse.domain.Auction;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
@ -33,7 +34,7 @@ public class ExecutorRemovedEventListenerMqttAdapter extends AuctionEventMqttLis
|
||||||
String executorUri = data.get("executorUri").asText();
|
String executorUri = data.get("executorUri").asText();
|
||||||
|
|
||||||
ExecutorRemovedEvent executorRemovedEvent = new ExecutorRemovedEvent(
|
ExecutorRemovedEvent executorRemovedEvent = new ExecutorRemovedEvent(
|
||||||
new ExecutorRegistry.ExecutorUri(URI.create(executorUri))
|
new ExecutorURI(executorUri)
|
||||||
);
|
);
|
||||||
|
|
||||||
ExecutorRemovedHandler newExecutorHandler = new ExecutorRemovedHandler();
|
ExecutorRemovedHandler newExecutorHandler = new ExecutorRemovedHandler();
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.adapter.out.web;
|
||||||
|
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.ExecutorInfo;
|
||||||
|
import org.apache.logging.log4j.Level;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
|
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.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GetExecutorsFromExecutorPoolWebAdapter {
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(GetExecutorsFromExecutorPoolWebAdapter.class);
|
||||||
|
|
||||||
|
// TODO get from config
|
||||||
|
String server = "http://localhost:8083";
|
||||||
|
|
||||||
|
public List<ExecutorInfo> getExecutorsInExecutorPool(){
|
||||||
|
var client = HttpClient.newHttpClient();
|
||||||
|
var request = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create(server + "/executor-pool/GetAllExecutorsInExecutorPool"))
|
||||||
|
.GET()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
if(response.statusCode() != HttpStatus.OK.value()){
|
||||||
|
LOGGER.log(Level.INFO, "Could not get executors from Executor Pool");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.log(Level.INFO, "Executors received from ExecutorPool: " + response.body());
|
||||||
|
|
||||||
|
var jsonExecutorArray = new JSONArray(response.body());
|
||||||
|
var executorList = new LinkedList<ExecutorInfo>();
|
||||||
|
|
||||||
|
for(int i = 0; i < jsonExecutorArray.length(); i++){
|
||||||
|
var jsonExecutorObject = jsonExecutorArray.getJSONObject(i);
|
||||||
|
var executorURI = jsonExecutorObject.getString("executorUri");
|
||||||
|
var executorType = jsonExecutorObject.getString("executorTaskType");
|
||||||
|
executorList.add(new ExecutorInfo(executorURI, executorType));
|
||||||
|
}
|
||||||
|
|
||||||
|
return executorList;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ package ch.unisg.tapas.auctionhouse.application.port.in;
|
||||||
|
|
||||||
import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionedTaskType;
|
import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionedTaskType;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry.ExecutorUri;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.tapas.common.SelfValidating;
|
import ch.unisg.tapas.common.SelfValidating;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull;
|
||||||
@Value
|
@Value
|
||||||
public class ExecutorAddedEvent extends SelfValidating<ExecutorAddedEvent> {
|
public class ExecutorAddedEvent extends SelfValidating<ExecutorAddedEvent> {
|
||||||
@NotNull
|
@NotNull
|
||||||
private final ExecutorRegistry.ExecutorUri executorUri;
|
private final ExecutorURI executorUri;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final AuctionedTaskType taskType;
|
private final AuctionedTaskType taskType;
|
||||||
|
@ -24,7 +24,7 @@ public class ExecutorAddedEvent extends SelfValidating<ExecutorAddedEvent> {
|
||||||
*
|
*
|
||||||
* @param executorUri the identifier of the executor that was added to this TAPAS application
|
* @param executorUri the identifier of the executor that was added to this TAPAS application
|
||||||
*/
|
*/
|
||||||
public ExecutorAddedEvent(ExecutorUri executorUri, AuctionedTaskType taskType) {
|
public ExecutorAddedEvent(ExecutorURI executorUri, AuctionedTaskType taskType) {
|
||||||
this.executorUri = executorUri;
|
this.executorUri = executorUri;
|
||||||
this.taskType = taskType;
|
this.taskType = taskType;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package ch.unisg.tapas.auctionhouse.application.port.in;
|
package ch.unisg.tapas.auctionhouse.application.port.in;
|
||||||
|
|
||||||
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry.ExecutorUri;
|
|
||||||
import ch.unisg.tapas.common.SelfValidating;
|
import ch.unisg.tapas.common.SelfValidating;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
|
@ -13,14 +13,14 @@ import javax.validation.constraints.NotNull;
|
||||||
@Value
|
@Value
|
||||||
public class ExecutorRemovedEvent extends SelfValidating<ExecutorRemovedEvent> {
|
public class ExecutorRemovedEvent extends SelfValidating<ExecutorRemovedEvent> {
|
||||||
@NotNull
|
@NotNull
|
||||||
private final ExecutorUri executorUri;
|
private final ExecutorURI executorUri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an executor removed event.
|
* Constructs an executor removed event.
|
||||||
*
|
*
|
||||||
* @param executorUri
|
* @param executorUri
|
||||||
*/
|
*/
|
||||||
public ExecutorRemovedEvent(ExecutorUri executorUri) {
|
public ExecutorRemovedEvent(ExecutorURI executorUri) {
|
||||||
this.executorUri = executorUri;
|
this.executorUri = executorUri;
|
||||||
this.validateSelf();
|
this.validateSelf();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.application.service;
|
||||||
|
|
||||||
|
import ch.unisg.tapas.auctionhouse.adapter.out.web.GetExecutorsFromExecutorPoolWebAdapter;
|
||||||
|
import ch.unisg.tapas.auctionhouse.domain.ExecutorRegistry;
|
||||||
|
|
||||||
|
public class GetExecutorsService {
|
||||||
|
|
||||||
|
public boolean getExecutorsFromExecutorPool(){
|
||||||
|
var getExecutorsAdapter = new GetExecutorsFromExecutorPoolWebAdapter();
|
||||||
|
var executors = getExecutorsAdapter.getExecutorsInExecutorPool();
|
||||||
|
if(executors == null){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var executorRegistry = ExecutorRegistry.getInstance();
|
||||||
|
return executorRegistry.addExecutors(executors);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package ch.unisg.tapas.auctionhouse.domain;
|
||||||
|
|
||||||
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
public class ExecutorInfo {
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private ExecutorURI executorURI;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private Auction.AuctionedTaskType executorType;
|
||||||
|
|
||||||
|
public ExecutorInfo(String executorURI, String executorType){
|
||||||
|
this.executorURI = new ExecutorURI(executorURI);
|
||||||
|
this.executorType = new Auction.AuctionedTaskType(executorType);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package ch.unisg.tapas.auctionhouse.domain;
|
package ch.unisg.tapas.auctionhouse.domain;
|
||||||
|
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -14,7 +15,7 @@ import java.util.*;
|
||||||
public class ExecutorRegistry {
|
public class ExecutorRegistry {
|
||||||
private static ExecutorRegistry registry;
|
private static ExecutorRegistry registry;
|
||||||
|
|
||||||
private final Map<Auction.AuctionedTaskType, Set<ExecutorUri>> executors;
|
private final Map<Auction.AuctionedTaskType, Set<ExecutorURI>> executors;
|
||||||
|
|
||||||
private ExecutorRegistry() {
|
private ExecutorRegistry() {
|
||||||
this.executors = new Hashtable<>();
|
this.executors = new Hashtable<>();
|
||||||
|
@ -35,8 +36,8 @@ public class ExecutorRegistry {
|
||||||
* @param executorUri the executor's URI
|
* @param executorUri the executor's URI
|
||||||
* @return true unless a runtime exception occurs
|
* @return true unless a runtime exception occurs
|
||||||
*/
|
*/
|
||||||
public boolean addExecutor(Auction.AuctionedTaskType taskType, ExecutorUri executorUri) {
|
public boolean addExecutor(Auction.AuctionedTaskType taskType, ExecutorURI executorUri) {
|
||||||
Set<ExecutorUri> taskTypeExecs = executors.getOrDefault(taskType,
|
Set<ExecutorURI> taskTypeExecs = executors.getOrDefault(taskType,
|
||||||
Collections.synchronizedSet(new HashSet<>()));
|
Collections.synchronizedSet(new HashSet<>()));
|
||||||
|
|
||||||
taskTypeExecs.add(executorUri);
|
taskTypeExecs.add(executorUri);
|
||||||
|
@ -45,18 +46,27 @@ public class ExecutorRegistry {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean addExecutors(List<ExecutorInfo> executors){
|
||||||
|
for (var executor : executors) {
|
||||||
|
if(!addExecutor(executor.getExecutorType(), executor.getExecutorURI())){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes an executor from the registry. The executor is disassociated from all known task types.
|
* Removes an executor from the registry. The executor is disassociated from all known task types.
|
||||||
*
|
*
|
||||||
* @param executorUri the executor's URI
|
* @param executorUri the executor's URI
|
||||||
* @return true unless a runtime exception occurs
|
* @return true unless a runtime exception occurs
|
||||||
*/
|
*/
|
||||||
public boolean removeExecutor(ExecutorUri executorUri) {
|
public boolean removeExecutor(ExecutorURI executorUri) {
|
||||||
Iterator<Auction.AuctionedTaskType> iterator = executors.keySet().iterator();
|
Iterator<Auction.AuctionedTaskType> iterator = executors.keySet().iterator();
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Auction.AuctionedTaskType taskType = iterator.next();
|
Auction.AuctionedTaskType taskType = iterator.next();
|
||||||
Set<ExecutorUri> set = executors.get(taskType);
|
Set<ExecutorURI> set = executors.get(taskType);
|
||||||
|
|
||||||
set.remove(executorUri);
|
set.remove(executorUri);
|
||||||
|
|
||||||
|
@ -78,10 +88,4 @@ public class ExecutorRegistry {
|
||||||
public boolean containsTaskType(Auction.AuctionedTaskType taskType) {
|
public boolean containsTaskType(Auction.AuctionedTaskType taskType) {
|
||||||
return executors.containsKey(taskType);
|
return executors.containsKey(taskType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value Object for the executor identifier
|
|
||||||
@Value
|
|
||||||
public static class ExecutorUri {
|
|
||||||
URI value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user