diff --git a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/connectiongenerator/InstanceLink.java b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/connectiongenerator/InstanceLink.java index 5ae5bc8e6..96ef072fe 100644 --- a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/connectiongenerator/InstanceLink.java +++ b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/connectiongenerator/InstanceLink.java @@ -1,6 +1,7 @@ /* Licensed under MIT 2021-2024. */ package edu.kit.kastel.mcse.ardoco.core.api.connectiongenerator; +import java.io.Serializable; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Objects; @@ -10,7 +11,6 @@ import org.eclipse.collections.api.list.MutableList; import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.architecture.legacy.ModelInstance; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.EndpointTuple; import edu.kit.kastel.mcse.ardoco.core.api.recommendationgenerator.RecommendedInstance; import edu.kit.kastel.mcse.ardoco.core.api.textextraction.NounMapping; import edu.kit.kastel.mcse.ardoco.core.architecture.Deterministic; @@ -24,7 +24,7 @@ */ @Deterministic @Internal -public class InstanceLink extends EndpointTuple { +public class InstanceLink implements Serializable { private static final long serialVersionUID = -8630933950725516269L; @@ -39,7 +39,6 @@ public class InstanceLink extends EndpointTuple implements Serializable { - private static final long serialVersionUID = -3671983559151147055L; - - private final E1 firstEndpoint; - private final E2 secondEndpoint; - - /** - * @param firstEndpoint the architecture endpoint of the endpoint tuple to be created - * @param secondEndpoint the code endpoint of the endpoint tuple to be created - */ - public EndpointTuple(E1 firstEndpoint, E2 secondEndpoint) { - this.firstEndpoint = firstEndpoint; - this.secondEndpoint = secondEndpoint; - } - - public Entity getOtherEndpoint(Entity endpoint) { - if (this.firstEndpoint.equals(endpoint)) { - return this.secondEndpoint; - } - if (this.secondEndpoint.equals(endpoint)) { - return this.firstEndpoint; - } - throw new IllegalArgumentException("Endpoint tuple must contain given endpoint"); - } - - public boolean hasEndpoint(Entity endpoint) { - return this.firstEndpoint.equals(endpoint) || this.secondEndpoint.equals(endpoint); - } - - public boolean hasEndpoint(EndpointTuple endpointTuple) { - return this.firstEndpoint.equals(endpointTuple.firstEndpoint) || this.secondEndpoint.equals(endpointTuple.secondEndpoint); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof EndpointTuple other)) { - return false; - } - return Objects.equals(this.firstEndpoint, other.firstEndpoint) && Objects.equals(this.secondEndpoint, other.secondEndpoint); - } - - @Override - public String toString() { - return "First Endpoint: " + this.firstEndpoint + ", Second Endpoint: " + this.secondEndpoint; - } - - public E1 firstEndpoint() { - return this.firstEndpoint; - } - - public E2 secondEndpoint() { - return this.secondEndpoint; - } - - @Override - public int hashCode() { - return Objects.hash(this.firstEndpoint, this.secondEndpoint); - } - -} diff --git a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/SamCodeTraceLink.java b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/SamCodeTraceLink.java index 46ca1512a..3ca8d58fd 100644 --- a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/SamCodeTraceLink.java +++ b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/SamCodeTraceLink.java @@ -29,7 +29,7 @@ public SamCodeTraceLink(ArchitectureItem architectureEndpoint, CodeCompilationUn @Override public int hashCode() { - return Objects.hash(this.getEndpointTuple()); + return Objects.hash(this.asPair()); } @Override @@ -40,11 +40,11 @@ public boolean equals(Object obj) { if (!(obj instanceof SamCodeTraceLink other)) { return false; } - return Objects.equals(this.getEndpointTuple(), other.getEndpointTuple()); + return Objects.equals(this.asPair(), other.asPair()); } @Override public String toString() { - return this.getEndpointTuple().toString(); + return this.asPair().toString(); } } diff --git a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TraceLink.java b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TraceLink.java index 8a40b689f..00a54797d 100644 --- a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TraceLink.java +++ b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TraceLink.java @@ -6,6 +6,7 @@ import java.util.Objects; import edu.kit.kastel.mcse.ardoco.core.api.models.entity.Entity; +import edu.kit.kastel.mcse.ardoco.core.common.tuple.Pair; public abstract class TraceLink implements Serializable { @Serial @@ -24,8 +25,8 @@ protected TraceLink(E1 firstEndpoint, E2 secondEndpoint) { * * @return the endpoint tuple of this trace link */ - public EndpointTuple getEndpointTuple() { - return new EndpointTuple<>(this.endpoint1, this.endpoint2); + public Pair asPair() { + return new Pair<>(this.endpoint1, this.endpoint2); } public E1 getFirstEndpoint() { @@ -54,6 +55,6 @@ public boolean equals(Object obj) { @Override public String toString() { - return this.getEndpointTuple().toString(); + return this.asPair().toString(); } } diff --git a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TransitiveTraceLink.java b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TransitiveTraceLink.java index 8f9b0affa..b49c15552 100644 --- a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TransitiveTraceLink.java +++ b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/api/models/tracelinks/TransitiveTraceLink.java @@ -28,8 +28,8 @@ public static Optional firstTraceLink, TraceLink secondTraceLink) { - var secondEndpointOfFirstTl = firstTraceLink.getEndpointTuple().secondEndpoint().getId(); - var firstEndpointOfSecondTl = secondTraceLink.getEndpointTuple().firstEndpoint().getId(); + var secondEndpointOfFirstTl = firstTraceLink.asPair().second().getId(); + var firstEndpointOfSecondTl = secondTraceLink.asPair().first().getId(); return secondEndpointOfFirstTl.equals(firstEndpointOfSecondTl); } @@ -43,7 +43,7 @@ public TraceLink getSecondTraceLink() { @Override public int hashCode() { - return Objects.hash(this.getEndpointTuple()); + return Objects.hash(this.asPair()); } @Override @@ -56,6 +56,6 @@ public boolean equals(Object obj) { } return Objects.equals(this.getFirstTraceLink(), other.getFirstTraceLink()) && // Objects.equals(this.getSecondTraceLink(), other.getSecondTraceLink()) && // - Objects.equals(this.getEndpointTuple(), other.getEndpointTuple()); + Objects.equals(this.asPair(), other.asPair()); } } diff --git a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/tuple/Pair.java b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/tuple/Pair.java index fa0cd840d..1e488ae3a 100644 --- a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/tuple/Pair.java +++ b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/tuple/Pair.java @@ -3,5 +3,22 @@ import java.io.Serializable; +import com.github.jsonldjava.shaded.com.google.common.base.Objects; + public record Pair(T first, U second) implements Serializable { + + public boolean hasElement(Serializable element) { + return Objects.equal(this.first, element) || Objects.equal(this.second, element); + } + + public Serializable getOtherElement(Serializable element) { + if (Objects.equal(this.first, element)) { + return this.second; + } + if (Objects.equal(this.second, element)) { + return this.first; + } + throw new IllegalArgumentException("Unknown element: " + element); + } + } diff --git a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/util/TraceLinkUtilities.java b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/util/TraceLinkUtilities.java index 269228c1f..546c8e576 100644 --- a/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/util/TraceLinkUtilities.java +++ b/framework/common/src/main/java/edu/kit/kastel/mcse/ardoco/core/common/util/TraceLinkUtilities.java @@ -7,9 +7,9 @@ import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.code.CodeCompilationUnit; import edu.kit.kastel.mcse.ardoco.core.api.models.entity.ArchitectureEntity; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.EndpointTuple; import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.TraceLink; import edu.kit.kastel.mcse.ardoco.core.api.text.SentenceEntity; +import edu.kit.kastel.mcse.ardoco.core.common.tuple.Pair; public class TraceLinkUtilities { @@ -32,9 +32,9 @@ public static ImmutableList getSadSamTraceLinksAsStringList(ImmutableLis public static ImmutableList getSamCodeTraceLinksAsStringList(ImmutableList> samCodeTraceLinks) { MutableList resultsMut = Lists.mutable.empty(); for (var traceLink : samCodeTraceLinks) { - EndpointTuple endpointTuple = traceLink.getEndpointTuple(); - var modelElement = endpointTuple.firstEndpoint(); - var codeElement = endpointTuple.secondEndpoint(); + Pair endpointTuple = traceLink.asPair(); + var modelElement = endpointTuple.first(); + var codeElement = endpointTuple.second(); String traceLinkString = createTraceLinkString(modelElement.getId(), codeElement.toString()); resultsMut.add(traceLinkString); } @@ -44,9 +44,9 @@ public static ImmutableList getSamCodeTraceLinksAsStringList(ImmutableLi public static ImmutableList getSadCodeTraceLinksAsStringList(ImmutableList> sadCodeTraceLinks) { MutableList resultsMut = Lists.mutable.empty(); for (var traceLink : sadCodeTraceLinks) { - EndpointTuple endpointTuple = traceLink.getEndpointTuple(); - var codeElement = endpointTuple.secondEndpoint(); - String sentenceNumber = String.valueOf(endpointTuple.firstEndpoint().getSentence().getSentenceNumber() + 1); + Pair endpointTuple = traceLink.asPair(); + var codeElement = endpointTuple.second(); + String sentenceNumber = String.valueOf(endpointTuple.first().getSentence().getSentenceNumber() + 1); String traceLinkString = TraceLinkUtilities.createTraceLinkString(sentenceNumber, codeElement.toString()); resultsMut.add(traceLinkString); }