From 42549ea4c9470f292cea4e65ed37ee4f26406c8d Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 9 Sep 2026 12:51:38 +0200 Subject: [PATCH 1/2] add some infos for references attributes Signed-off-by: SOUISSI Maissa (Externe) --- .../server/dto/ReferenceAttributes.java | 18 +++++----- .../server/dto/ReferenceContainer.java | 34 +++++++++++++++++++ .../server/services/ExploreService.java | 3 +- .../server/ReferencingElementInfosTest.java | 30 +++++++++++----- 4 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java diff --git a/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java b/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java index ede42f70..b759071f 100644 --- a/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java +++ b/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java @@ -6,27 +6,27 @@ */ package org.gridsuite.explore.server.dto; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; +import lombok.experimental.SuperBuilder; import java.util.UUID; /** - * @author Florent MILLOT {@literal } + * @author Maissa Souissi */ @Getter @Setter @NoArgsConstructor -@AllArgsConstructor +@SuperBuilder public class ReferenceAttributes { public enum ReferenceType { STUDY_NODE, - NETWORK_MODIFICATION, - DIRECTORY_ELEMENT + STUDY_NODE_NETWORK_MODIFICATION, + DIRECTORY_NETWORK_MODIFICATION, } + @NonNull private UUID referenceId; - private ReferenceType referenceType; + @NonNull private ReferenceContainer referenceContainer; + @NonNull private ReferenceType referenceType; } diff --git a/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java b/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java new file mode 100644 index 00000000..c08f431c --- /dev/null +++ b/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.explore.server.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import java.util.UUID; + +/** + * @author Maissa Souissi + */ +@Getter +@Setter +@NoArgsConstructor +@SuperBuilder +/** + * ReferenceContainer represents the information that makes it easy to locate the reference where it is used. + * It depends on the type of reference: + * STUDY_NODE: rootContainerId: studyId; containerId: nodeId + * STUDY_NODE_NETWORK_MODIFICATION: rootContainerId: nodeId; containerId: parentCompositeId + * DIRECTORY_NETWORK_MODIFICATION: rootContainerId: directoryId; containerId: parentCompositeId + */ +public class ReferenceContainer { + @NonNull private UUID rootContainerId; + @NonNull private UUID containerId; +} diff --git a/src/main/java/org/gridsuite/explore/server/services/ExploreService.java b/src/main/java/org/gridsuite/explore/server/services/ExploreService.java index 1566857f..ed2b14d4 100644 --- a/src/main/java/org/gridsuite/explore/server/services/ExploreService.java +++ b/src/main/java/org/gridsuite/explore/server/services/ExploreService.java @@ -474,7 +474,8 @@ public List getReferencingElementInfos(UUID elementUuid // for now only STUDY_NODE references List referencedNodeUuids = directoryService.getElementInfos(elementUuid).getReferences().stream() .filter(reference -> reference.getReferenceType() == ReferenceAttributes.ReferenceType.STUDY_NODE) - .map(ReferenceAttributes::getReferenceId) + // STUDY_NODE: the referenced node is the container's containerId + .map(reference -> reference.getReferenceContainer().getContainerId()) .toList(); if (referencedNodeUuids.isEmpty()) { return List.of(); diff --git a/src/test/java/org/gridsuite/explore/server/ReferencingElementInfosTest.java b/src/test/java/org/gridsuite/explore/server/ReferencingElementInfosTest.java index f7ef6183..a7e48036 100644 --- a/src/test/java/org/gridsuite/explore/server/ReferencingElementInfosTest.java +++ b/src/test/java/org/gridsuite/explore/server/ReferencingElementInfosTest.java @@ -14,6 +14,7 @@ import org.gridsuite.explore.server.dto.ElementAttributes; import org.gridsuite.explore.server.dto.NodeInfos; import org.gridsuite.explore.server.dto.ReferenceAttributes; +import org.gridsuite.explore.server.dto.ReferenceContainer; import org.gridsuite.explore.server.dto.ReferencingElementInfos; import org.gridsuite.explore.server.services.DirectoryService; import org.gridsuite.explore.server.services.StudyService; @@ -113,11 +114,22 @@ private void stubUsersIdentities() { """))); } - private void stubSharedElementReferences(UUID... referencedNodeUuids) throws Exception { + /** A STUDY_NODE reference: containerId is the node, rootContainerId is the study that holds it. */ + private static ReferenceAttributes studyNodeReference(UUID nodeUuid, UUID studyUuid) { + return ReferenceAttributes.builder() + // id of the modification reference pointing to the composite, not the composite itself + .referenceId(UUID.randomUUID()) + .referenceType(ReferenceAttributes.ReferenceType.STUDY_NODE) + .referenceContainer(ReferenceContainer.builder() + .rootContainerId(studyUuid) + .containerId(nodeUuid) + .build()) + .build(); + } + + private void stubSharedElementReferences(ReferenceAttributes... references) throws Exception { ElementAttributes sharedElement = new ElementAttributes(SHARED_ELEMENT_UUID, "sharedModification", "MODIFICATION", OWNER_SUB, 0L, null); - sharedElement.setReferences(Arrays.stream(referencedNodeUuids) - .map(nodeUuid -> new ReferenceAttributes(nodeUuid, ReferenceAttributes.ReferenceType.STUDY_NODE)) - .toList()); + sharedElement.setReferences(List.of(references)); wireMockServer.stubFor(WireMock.get(WireMock.urlPathEqualTo(SHARED_ELEMENT_PATH)) .willReturn(jsonResponse(sharedElement))); } @@ -163,7 +175,7 @@ private List getReferencingElementInfos() throws Except @Test void testTwoNodesInDistinctStudies() throws Exception { - stubSharedElementReferences(NODE_1_UUID, NODE_2_UUID); + stubSharedElementReferences(studyNodeReference(NODE_1_UUID, STUDY_1_UUID), studyNodeReference(NODE_2_UUID, STUDY_2_UUID)); stubNodesInfos( new NodeInfos(NODE_1_UUID, "node1", STUDY_1_UUID), new NodeInfos(NODE_2_UUID, "node2", STUDY_2_UUID)); @@ -204,7 +216,7 @@ STUDY_1_UUID, pathStub(STUDY_1_UUID, "study1", "root", "folder"), @Test void testTwoNodesInSameStudy() throws Exception { - stubSharedElementReferences(NODE_1_UUID, NODE_2_UUID); + stubSharedElementReferences(studyNodeReference(NODE_1_UUID, STUDY_1_UUID), studyNodeReference(NODE_2_UUID, STUDY_1_UUID)); stubNodesInfos( new NodeInfos(NODE_1_UUID, "node1", STUDY_1_UUID), new NodeInfos(NODE_2_UUID, "node2", STUDY_1_UUID)); @@ -225,7 +237,7 @@ void testTwoNodesInSameStudy() throws Exception { @Test void testSameNodeReferencedTwice() throws Exception { - stubSharedElementReferences(NODE_1_UUID, NODE_1_UUID); + stubSharedElementReferences(studyNodeReference(NODE_1_UUID, STUDY_1_UUID), studyNodeReference(NODE_1_UUID, STUDY_1_UUID)); stubNodesInfos(new NodeInfos(NODE_1_UUID, "node1", STUDY_1_UUID)); stubStudies(studyStub(STUDY_1_UUID, "study1")); stubStudiesPaths(Map.of(STUDY_1_UUID, pathStub(STUDY_1_UUID, "study1", "root"))); @@ -242,7 +254,7 @@ void testSameNodeReferencedTwice() throws Exception { @Test void testStudyNotReadableIsOmitted() throws Exception { - stubSharedElementReferences(NODE_1_UUID, NODE_2_UUID); + stubSharedElementReferences(studyNodeReference(NODE_1_UUID, STUDY_1_UUID), studyNodeReference(NODE_2_UUID, STUDY_2_UUID)); stubNodesInfos( new NodeInfos(NODE_1_UUID, "node1", STUDY_1_UUID), new NodeInfos(NODE_2_UUID, "node2", STUDY_2_UUID)); @@ -269,7 +281,7 @@ void testStudyNotReadableIsOmitted() throws Exception { @Test void testUnknownNodesLeaveNothingToDescribe() throws Exception { - stubSharedElementReferences(NODE_1_UUID, NODE_2_UUID); + stubSharedElementReferences(studyNodeReference(NODE_1_UUID, STUDY_1_UUID), studyNodeReference(NODE_2_UUID, STUDY_2_UUID)); // the study-server knows none of the referenced nodes anymore stubNodesInfos(); From 2acea89f084873eaef13685b15dd946572c83460 Mon Sep 17 00:00:00 2001 From: Slimane AMAR Date: Wed, 9 Sep 2026 13:10:17 +0200 Subject: [PATCH 2/2] Review --- .../gridsuite/explore/server/dto/ReferenceAttributes.java | 5 +++-- .../org/gridsuite/explore/server/dto/ReferenceContainer.java | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java b/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java index b759071f..211816f7 100644 --- a/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java +++ b/src/main/java/org/gridsuite/explore/server/dto/ReferenceAttributes.java @@ -6,7 +6,9 @@ */ package org.gridsuite.explore.server.dto; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.NonNull; import lombok.experimental.SuperBuilder; import java.util.UUID; @@ -15,7 +17,6 @@ * @author Maissa Souissi */ @Getter -@Setter @NoArgsConstructor @SuperBuilder public class ReferenceAttributes { diff --git a/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java b/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java index c08f431c..d15d0bb1 100644 --- a/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java +++ b/src/main/java/org/gridsuite/explore/server/dto/ReferenceContainer.java @@ -9,7 +9,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.NonNull; -import lombok.Setter; import lombok.experimental.SuperBuilder; import java.util.UUID; @@ -18,7 +17,6 @@ * @author Maissa Souissi */ @Getter -@Setter @NoArgsConstructor @SuperBuilder /**