From 5819f1d8cc9eb8e3c4e82046e9c646000012d922 Mon Sep 17 00:00:00 2001 From: soimugeowb Date: Wed, 15 Jan 2025 13:21:09 +0200 Subject: [PATCH] added GetParentThatIsLinearizationPathParentCommandHandler --- ...LinearizationPathParentCommandHandler.java | 59 +++++++++++++++++++ ...tThatIsLinearizationPathParentRequest.java | 29 +++++++++ ...ThatIsLinearizationPathParentResponse.java | 14 +++++ 3 files changed, 102 insertions(+) create mode 100644 src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentCommandHandler.java create mode 100644 src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentRequest.java create mode 100644 src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentResponse.java diff --git a/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentCommandHandler.java b/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentCommandHandler.java new file mode 100644 index 0000000..10c8fe5 --- /dev/null +++ b/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentCommandHandler.java @@ -0,0 +1,59 @@ +package edu.stanford.protege.webprotege.linearizationservice.handlers; + +import edu.stanford.protege.webprotege.ipc.CommandHandler; +import edu.stanford.protege.webprotege.ipc.ExecutionContext; +import edu.stanford.protege.webprotege.ipc.WebProtegeHandler; +import edu.stanford.protege.webprotege.linearizationservice.model.WhoficEntityLinearizationSpecification; +import edu.stanford.protege.webprotege.linearizationservice.services.LinearizationEventsProcessorService; +import edu.stanford.protege.webprotege.linearizationservice.services.LinearizationHistoryService; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.Collections; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@WebProtegeHandler +public class GetParentThatIsLinearizationPathParentCommandHandler implements CommandHandler { + + private final LinearizationHistoryService linearizationHistoryService; + private final LinearizationEventsProcessorService linearizationEventsProcessor; + + + public GetParentThatIsLinearizationPathParentCommandHandler(LinearizationHistoryService linearizationHistoryService, + LinearizationEventsProcessorService linearizationEventsProcessor) { + this.linearizationHistoryService = linearizationHistoryService; + this.linearizationEventsProcessor = linearizationEventsProcessor; + } + + @NotNull + @Override + public String getChannelName() { + return GetParentThatIsLinearizationPathParentRequest.CHANNEL; + } + + @Override + public Class getRequestClass() { + return GetParentThatIsLinearizationPathParentRequest.class; + } + + @Override + public Mono handleRequest(GetParentThatIsLinearizationPathParentRequest request, ExecutionContext executionContext) { + + WhoficEntityLinearizationSpecification processedSpec = + this.linearizationHistoryService.getExistingHistoryOrderedByRevision(request.currentEntityIri(), request.projectId()) + .map(linearizationEventsProcessor::processHistory) + .orElseGet(() -> new WhoficEntityLinearizationSpecification(request.currentEntityIri(), null, Collections.emptyList())); + + var linearizationParents = processedSpec.linearizationSpecifications() + .stream() + .map(spec -> Stream.of(spec.getLinearizationParent())) + .collect(Collectors.toSet()); + var matchingParent = request.parentEntityIris() + .stream() + .filter(linearizationParents::contains) + .findAny(); + + return Mono.just(new GetParentThatIsLinearizationPathParentResponse(matchingParent)); + } +} diff --git a/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentRequest.java b/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentRequest.java new file mode 100644 index 0000000..1a4e84f --- /dev/null +++ b/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentRequest.java @@ -0,0 +1,29 @@ +package edu.stanford.protege.webprotege.linearizationservice.handlers; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; +import edu.stanford.protege.webprotege.common.ProjectId; +import edu.stanford.protege.webprotege.common.Request; +import org.semanticweb.owlapi.model.IRI; + +import java.util.Set; + +@JsonTypeName(GetParentThatIsLinearizationPathParentRequest.CHANNEL) +public record GetParentThatIsLinearizationPathParentRequest( + @JsonProperty("currentEntityIri") IRI currentEntityIri, + @JsonProperty("parentEntityIris") Set parentEntityIris, + @JsonProperty("projectId") ProjectId projectId +) implements Request { + + public final static String CHANNEL = "webprotege.linearization.GetParentThatIsLinearizationPathParent"; + + @Override + public String getChannel() { + return CHANNEL; + } + + public static GetParentThatIsLinearizationPathParentRequest create(IRI currentEntityIri, Set parentEntityIris, ProjectId projectId) { + return new GetParentThatIsLinearizationPathParentRequest(currentEntityIri, parentEntityIris, projectId); + } + +} diff --git a/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentResponse.java b/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentResponse.java new file mode 100644 index 0000000..f6ed56b --- /dev/null +++ b/src/main/java/edu/stanford/protege/webprotege/linearizationservice/handlers/GetParentThatIsLinearizationPathParentResponse.java @@ -0,0 +1,14 @@ +package edu.stanford.protege.webprotege.linearizationservice.handlers; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; +import edu.stanford.protege.webprotege.common.Response; +import org.semanticweb.owlapi.model.IRI; + +import java.util.Optional; + +@JsonTypeName(GetParentThatIsLinearizationPathParentRequest.CHANNEL) +public record GetParentThatIsLinearizationPathParentResponse( + @JsonProperty("parentAsLinearizationPathParent") Optional parentAsLinearizationPathParent +) implements Response { +}