From b581518e429b8a91e63a571c7622d01a198aeb4b Mon Sep 17 00:00:00 2001 From: Slimane AMAR Date: Wed, 5 Mar 2025 15:50:39 +0100 Subject: [PATCH] Use a build context Signed-off-by: Slimane AMAR --- .../study/server/dto/BuildInfos.java | 22 ++++++++++--------- .../server/dto/modification/BuildContext.java | 14 ++++++++++++ .../NetworkModificationTreeService.java | 5 ++--- .../study/server/service/StudyService.java | 3 +-- .../study/server/NetworkModificationTest.java | 4 ++-- .../ModificationToExcludeTest.java | 8 +++++-- 6 files changed, 37 insertions(+), 19 deletions(-) create mode 100644 src/main/java/org/gridsuite/study/server/dto/modification/BuildContext.java diff --git a/src/main/java/org/gridsuite/study/server/dto/BuildInfos.java b/src/main/java/org/gridsuite/study/server/dto/BuildInfos.java index acb31910c..cc4a14016 100644 --- a/src/main/java/org/gridsuite/study/server/dto/BuildInfos.java +++ b/src/main/java/org/gridsuite/study/server/dto/BuildInfos.java @@ -10,8 +10,11 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.gridsuite.study.server.dto.modification.BuildContext; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author Franck Lecuyer @@ -25,18 +28,17 @@ public class BuildInfos { private String destinationVariantId; - private List modificationGroupUuids = new ArrayList<>(); + private List buildContextsInfos = new ArrayList<>(); - // map with modification groups as key, modification to excludes as value - private Map> modificationUuidsToExclude = new HashMap<>(); + private Stream getReportsInfos() { + return buildContextsInfos.stream().map(BuildContext::reportInfos); + } - private List reportsInfos = new ArrayList<>(); + public Map getReportsMappings() { + return getReportsInfos().collect(Collectors.toMap(ReportInfos::nodeUuid, ReportInfos::reportUuid)); + } - public void insertModificationInfos(UUID modificationGroupUuid, Set modificationUuidsToExclude, ReportInfos reportInfos) { - if (modificationUuidsToExclude != null && !modificationUuidsToExclude.isEmpty()) { - this.modificationUuidsToExclude.put(modificationGroupUuid, modificationUuidsToExclude); - } - modificationGroupUuids.add(0, modificationGroupUuid); - reportsInfos.add(0, reportInfos); + public void addApplicationContextInfos(UUID modificationGroupUuid, Set modificationUuidsToExclude, ReportInfos reportInfos) { + buildContextsInfos.add(0, new BuildContext(modificationGroupUuid, modificationUuidsToExclude == null ? new HashSet<>() : modificationUuidsToExclude, reportInfos)); } } diff --git a/src/main/java/org/gridsuite/study/server/dto/modification/BuildContext.java b/src/main/java/org/gridsuite/study/server/dto/modification/BuildContext.java new file mode 100644 index 000000000..0123e1c27 --- /dev/null +++ b/src/main/java/org/gridsuite/study/server/dto/modification/BuildContext.java @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2025, 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.study.server.dto.modification; + +import org.gridsuite.study.server.dto.ReportInfos; + +import java.util.Set; +import java.util.UUID; + +public record BuildContext(UUID groupUuid, Set excludedModifications, ReportInfos reportInfos) { } diff --git a/src/main/java/org/gridsuite/study/server/service/NetworkModificationTreeService.java b/src/main/java/org/gridsuite/study/server/service/NetworkModificationTreeService.java index 5a81ef0d4..1c9ee9e03 100644 --- a/src/main/java/org/gridsuite/study/server/service/NetworkModificationTreeService.java +++ b/src/main/java/org/gridsuite/study/server/service/NetworkModificationTreeService.java @@ -452,8 +452,7 @@ public void createBasicTree(StudyEntity studyEntity) { ReportNode reportNode = ReportNode.newRootReportNode().withMessageTemplate(modificationNode.getId().toString(), modificationNode.getId().toString()).build(); reportService.sendReport(getModificationReportUuid(networkModificationNode.getId(), firstRootNetworkUuid, networkModificationNode.getId()), reportNode); - BuildInfos buildInfos = getBuildInfos(modificationNode.getId(), firstRootNetworkUuid); - Map nodeUuidToReportUuid = buildInfos.getReportsInfos().stream().collect(Collectors.toMap(ReportInfos::nodeUuid, ReportInfos::reportUuid)); + Map nodeUuidToReportUuid = getBuildInfos(modificationNode.getId(), firstRootNetworkUuid).getReportsMappings(); rootNetworkNodeInfoService.updateRootNetworkNode(networkModificationNode.getId(), firstRootNetworkUuid, RootNetworkNodeInfo.builder().variantId(FIRST_VARIANT_ID).nodeBuildStatus(NodeBuildStatus.from(BuildStatus.BUILT)).modificationReports(nodeUuidToReportUuid).build()); } @@ -711,7 +710,7 @@ private void getBuildInfos(NodeEntity nodeEntity, UUID rootNetworkUuid, BuildInf RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeEntity.getIdNode(), rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND)); if (!rootNetworkNodeInfoEntity.getNodeBuildStatus().toDto().isBuilt()) { UUID reportUuid = getModificationReportUuid(nodeEntity.getIdNode(), rootNetworkUuid, nodeToBuildUuid); - buildInfos.insertModificationInfos(modificationNode.getModificationGroupUuid(), rootNetworkNodeInfoEntity.getModificationsUuidsToExclude(), new ReportInfos(reportUuid, modificationNode.getId())); + buildInfos.addApplicationContextInfos(modificationNode.getModificationGroupUuid(), Set.copyOf(rootNetworkNodeInfoEntity.getModificationsUuidsToExclude()), new ReportInfos(reportUuid, modificationNode.getId())); getBuildInfos(nodeEntity.getParentNode(), rootNetworkUuid, buildInfos, nodeToBuildUuid); } else { buildInfos.setOriginVariantId(self.getVariantId(nodeEntity.getIdNode(), rootNetworkUuid)); diff --git a/src/main/java/org/gridsuite/study/server/service/StudyService.java b/src/main/java/org/gridsuite/study/server/service/StudyService.java index 249d6cdc5..3eb90e72e 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -1491,8 +1491,7 @@ public UUID getStudyUuidFromNodeUuid(UUID nodeUuid) { public void buildNode(@NonNull UUID studyUuid, @NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid, @NonNull String userId) { assertCanBuildNode(studyUuid, rootNetworkUuid, userId); BuildInfos buildInfos = networkModificationTreeService.getBuildInfos(nodeUuid, rootNetworkUuid); - Map nodeUuidToReportUuid = buildInfos.getReportsInfos().stream().collect(Collectors.toMap(ReportInfos::nodeUuid, ReportInfos::reportUuid)); - networkModificationTreeService.setModificationReports(nodeUuid, rootNetworkUuid, nodeUuidToReportUuid); + networkModificationTreeService.setModificationReports(nodeUuid, rootNetworkUuid, buildInfos.getReportsMappings()); networkModificationTreeService.updateNodeBuildStatus(nodeUuid, rootNetworkUuid, NodeBuildStatus.from(BuildStatus.BUILDING)); try { networkModificationService.buildNode(nodeUuid, rootNetworkUuid, buildInfos); diff --git a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java index ee4983301..50c917904 100644 --- a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java +++ b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java @@ -544,7 +544,7 @@ void testBuild() throws Exception { BuildInfos buildInfos = networkModificationTreeService.getBuildInfos(modificationNode5.getId(), rootNetworkUuid); assertNull(buildInfos.getOriginVariantId()); // previous built node is root node assertEquals("variant_5", buildInfos.getDestinationVariantId()); - assertEquals(List.of(modificationGroupUuid1, modificationGroupUuid2, modificationGroupUuid3, modificationGroupUuid4, modificationGroupUuid5), buildInfos.getModificationGroupUuids()); + assertEquals(List.of(modificationGroupUuid1, modificationGroupUuid2, modificationGroupUuid3, modificationGroupUuid4, modificationGroupUuid5), buildInfos.getBuildContextsInfos().stream().map(BuildContext::groupUuid).toList()); // Mark the node 3 status as built RootNetworkNodeInfoEntity rootNetworkNodeInfo3Entity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(modificationNode3.getId(), studyTestUtils.getOneRootNetworkUuid(studyNameUserIdUuid)).orElseThrow(() -> new StudyException(StudyException.Type.ROOT_NETWORK_NOT_FOUND)); @@ -555,7 +555,7 @@ void testBuild() throws Exception { assertEquals("variant_3", buildInfos.getOriginVariantId()); // variant to clone is variant associated to node // modificationNode3 assertEquals("variant_4", buildInfos.getDestinationVariantId()); - assertEquals(List.of(modificationGroupUuid4), buildInfos.getModificationGroupUuids()); + assertEquals(List.of(modificationGroupUuid4), buildInfos.getBuildContextsInfos().stream().map(BuildContext::groupUuid).toList()); // Mark the node 2 status as not built RootNetworkNodeInfoEntity rootNetworkNodeInfo2Entity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(modificationNode2.getId(), studyTestUtils.getOneRootNetworkUuid(studyNameUserIdUuid)).orElseThrow(() -> new StudyException(StudyException.Type.ROOT_NETWORK_NOT_FOUND)); diff --git a/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java b/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java index c1024907e..bd890a4a7 100644 --- a/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java +++ b/src/test/java/org/gridsuite/study/server/rootnetworks/ModificationToExcludeTest.java @@ -509,8 +509,12 @@ void testBuildNodeWithExcludedModifications() { ArgumentCaptor buildInfosCaptor = ArgumentCaptor.forClass(BuildInfos.class); Mockito.verify(networkModificationService, Mockito.times(1)).buildNode(eq(secondNode.getId()), eq(rootNetworkBasicInfos.getFirst().rootNetworkUuid()), buildInfosCaptor.capture()); - assertThat(buildInfosCaptor.getValue().getModificationUuidsToExclude().get(firstNode.getModificationGroupUuid())).usingRecursiveComparison().ignoringCollectionOrder().isEqualTo(MODIFICATIONS_TO_EXCLUDE_RN_1); - assertThat(buildInfosCaptor.getValue().getModificationUuidsToExclude().get(secondNode.getModificationGroupUuid())).usingRecursiveComparison().ignoringCollectionOrder().isEqualTo(MODIFICATIONS_TO_EXCLUDE_RN_2); + assertThat(getModificationUuidsToExclude(firstNode.getModificationGroupUuid(), buildInfosCaptor.getValue())).usingRecursiveComparison().ignoringCollectionOrder().isEqualTo(MODIFICATIONS_TO_EXCLUDE_RN_1); + assertThat(getModificationUuidsToExclude(secondNode.getModificationGroupUuid(), buildInfosCaptor.getValue())).usingRecursiveComparison().ignoringCollectionOrder().isEqualTo(MODIFICATIONS_TO_EXCLUDE_RN_2); + } + + private Set getModificationUuidsToExclude(UUID groupUuid, BuildInfos buildInfos) { + return buildInfos.getBuildContextsInfos().stream().filter(buildContext -> groupUuid.equals(buildContext.groupUuid())).findFirst().orElseThrow().excludedModifications(); } private Set getSetIntersection(Set set1, Set set2) {