From 190e807d013cfa6e1074c204891e5b4c22664ce1 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Tue, 8 Oct 2024 14:42:20 +0200 Subject: [PATCH 01/10] draft getCompositeModification endpoint Signed-off-by: Mathieu DEHARBE --- .../server/NetworkModificationController.java | 13 +++++++++++++ .../repositories/NetworkModificationRepository.java | 5 ++++- .../server/service/NetworkModificationService.java | 10 ++++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index b8e6bddce..3ce2b0bd2 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -220,6 +220,19 @@ public ResponseEntity createNetworkCompositeModification(@RequestBody List return ResponseEntity.ok().body(networkModificationService.createNetworkCompositeModification(modificationUuids)); } + @GetMapping(value = "/network-composite-modification/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = "Get the content of a composite modification via its id") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Content of the composite modification"), + @ApiResponse(responseCode = "404", description = "This composite modification does not exist")} + ) + // TODO : renvoyer plutôt des métadonnées plutôt que des modifications complètes ?? (List) ?? => bof pas de name dedans ! + public ResponseEntity> getCompositeModificationContent(@PathVariable("id") UUID compositeModificationId) { + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_JSON) + .body(networkModificationService.getCompositeModificationContentInfos(compositeModificationId) + ); + } + @PostMapping(value = "/network-modifications", consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Duplicate some modifications without group ownership") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The duplicated modifications uuids mapped with their source uuid")}) diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 8c156b2cb..08877b28e 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -387,8 +387,11 @@ public List getModificationsInfos(@NonNull List uuids) return uuids.stream().map(entities::get).filter(Objects::nonNull).map(this::getModificationInfos).toList(); } + /** + * @return the data from all the network modification contained in the composite modification sent as parameters + */ @Transactional(readOnly = true) - public List getCompositeModificationsInfos(@NonNull List uuids) { + public List getCompositeModificationsContentInfos(@NonNull List uuids) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index b3d21d658..aec3b347e 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -76,6 +76,12 @@ public List getNetworkModifications(UUID groupUuid, boolean o return getNetworkModifications(groupUuid, onlyMetadata, errorOnGroupNotFound, false); } + @Transactional(readOnly = true) + // Need a transaction for collections lazy loading ==> TODO : this is copy pasted, is this true here ? + public List getCompositeModificationContentInfos(UUID compositeModificationUuid) { + return networkModificationRepository.getCompositeModificationsContentInfos(List.of(compositeModificationUuid)); + } + @Transactional(readOnly = true) public ModificationInfos getNetworkModification(UUID networkModificationUuid) { return networkModificationRepository.getModificationInfo(networkModificationUuid); @@ -285,7 +291,7 @@ public Optional duplicateModifications(UUID targetGro public Optional insertCompositeModifications(UUID targetGroupUuid, UUID networkUuid, String variantId, ReportInfos reportInfos, List modificationsUuids) { - List modificationInfos = networkModificationRepository.getCompositeModificationsInfos(modificationsUuids); + List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids); networkModificationRepository.saveModificationInfos(targetGroupUuid, modificationInfos); return applyModifications(networkUuid, variantId, reportInfos, modificationInfos); } @@ -328,7 +334,7 @@ public Optional applyModificationsFromUuids(UUID netw String variantId, ReportInfos reportInfos, List modificationsUuids) { - List modificationInfos = networkModificationRepository.getCompositeModificationsInfos(modificationsUuids); + List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids); return applyModifications(networkUuid, variantId, reportInfos, modificationInfos); } } From 94c049d953c6b444b7f25fd0fd859bfbf651ad40 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Wed, 9 Oct 2024 17:02:07 +0200 Subject: [PATCH 02/10] metadata instead of complete ModificationInfos Signed-off-by: Mathieu DEHARBE --- .../server/NetworkModificationController.java | 3 +-- .../NetworkModificationRepository.java | 15 +++++++++++++-- .../service/NetworkModificationService.java | 8 ++++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index 3ce2b0bd2..b6be226a7 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -225,11 +225,10 @@ public ResponseEntity createNetworkCompositeModification(@RequestBody List @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Content of the composite modification"), @ApiResponse(responseCode = "404", description = "This composite modification does not exist")} ) - // TODO : renvoyer plutôt des métadonnées plutôt que des modifications complètes ?? (List) ?? => bof pas de name dedans ! public ResponseEntity> getCompositeModificationContent(@PathVariable("id") UUID compositeModificationId) { return ResponseEntity.ok() .contentType(MediaType.APPLICATION_JSON) - .body(networkModificationService.getCompositeModificationContentInfos(compositeModificationId) + .body(networkModificationService.getCompositeModificationContentMetadata(compositeModificationId) ); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 08877b28e..c0349135e 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -194,6 +194,7 @@ public List getModifications(UUID groupUuid, boolean onlyMeta return getModifications(groupUuid, onlyMetadata, errorOnGroupNotFound, false); } + // TODO : regarder cette récup de métadata plutôt que la mienne @Transactional(readOnly = true) public List getModifications(UUID groupUuid, boolean onlyMetadata, boolean errorOnGroupNotFound, boolean onlyStashed) { try { @@ -315,6 +316,15 @@ public ModificationInfos getModificationInfo(UUID modificationUuid) { return getModificationInfos(optionalModificationEntity.get()); } + @Transactional(readOnly = true) + public ModificationInfos getMetadata(UUID modificationUuid) { + Optional optionalModificationEntity = modificationRepository.findById(modificationUuid); + if (!optionalModificationEntity.isPresent()) { + throw new NetworkModificationException(MODIFICATION_NOT_FOUND, modificationUuid.toString()); + } + return ModificationInfos.fromEntity(optionalModificationEntity.get()); + } + @Transactional // To have the 2 delete in the same transaction (atomic) public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound) { try { @@ -388,16 +398,17 @@ public List getModificationsInfos(@NonNull List uuids) } /** + * @param onlyMetadata if true, only returns the basic data common to all the modificaions * @return the data from all the network modification contained in the composite modification sent as parameters */ @Transactional(readOnly = true) - public List getCompositeModificationsContentInfos(@NonNull List uuids) { + public List getCompositeModificationsContentInfos(@NonNull List uuids, boolean onlyMetadata) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); List orderedModifications = foundEntities .stream() - .map(this::getModificationInfo) + .map(onlyMetadata ? this::getMetadata : this::getModificationInfo) .toList(); entities.addAll(orderedModifications); } diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index aec3b347e..2e1e8c6ac 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -78,8 +78,8 @@ public List getNetworkModifications(UUID groupUuid, boolean o @Transactional(readOnly = true) // Need a transaction for collections lazy loading ==> TODO : this is copy pasted, is this true here ? - public List getCompositeModificationContentInfos(UUID compositeModificationUuid) { - return networkModificationRepository.getCompositeModificationsContentInfos(List.of(compositeModificationUuid)); + public List getCompositeModificationContentMetadata(UUID compositeModificationUuid) { + return networkModificationRepository.getCompositeModificationsContentInfos(List.of(compositeModificationUuid), true); } @Transactional(readOnly = true) @@ -291,7 +291,7 @@ public Optional duplicateModifications(UUID targetGro public Optional insertCompositeModifications(UUID targetGroupUuid, UUID networkUuid, String variantId, ReportInfos reportInfos, List modificationsUuids) { - List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids); + List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids, false); networkModificationRepository.saveModificationInfos(targetGroupUuid, modificationInfos); return applyModifications(networkUuid, variantId, reportInfos, modificationInfos); } @@ -334,7 +334,7 @@ public Optional applyModificationsFromUuids(UUID netw String variantId, ReportInfos reportInfos, List modificationsUuids) { - List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids); + List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids, false); return applyModifications(networkUuid, variantId, reportInfos, modificationInfos); } } From 0dcc18776295855419b587024f61080b68656b50 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Thu, 10 Oct 2024 11:27:02 +0200 Subject: [PATCH 03/10] optimize database requests Signed-off-by: Mathieu DEHARBE --- .../repositories/ModificationRepository.java | 6 ++++ .../NetworkModificationRepository.java | 30 +++++++++---------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java index 2ccbe0a55..f3f3a95ce 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java @@ -30,6 +30,12 @@ public interface ModificationRepository extends JpaRepository findMetadataIn(List uuids); + /** + * @return base data of the network modifications (those from the main table, not those specific to each modification) + */ + @Query(value = "SELECT new ModificationEntity(m.id, m.type, m.date, m.stashed, m.activated, m.messageType, m.messageValues) FROM ModificationEntity m WHERE m.id IN (?1)") + List findBaseDataByIdIn(List uuids); + @Query(value = "SELECT m FROM ModificationEntity m WHERE m.id IN (?1) ORDER BY m.modificationsOrder") List findAllByIdIn(List uuids); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index c0349135e..33d3f2aea 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -316,15 +316,6 @@ public ModificationInfos getModificationInfo(UUID modificationUuid) { return getModificationInfos(optionalModificationEntity.get()); } - @Transactional(readOnly = true) - public ModificationInfos getMetadata(UUID modificationUuid) { - Optional optionalModificationEntity = modificationRepository.findById(modificationUuid); - if (!optionalModificationEntity.isPresent()) { - throw new NetworkModificationException(MODIFICATION_NOT_FOUND, modificationUuid.toString()); - } - return ModificationInfos.fromEntity(optionalModificationEntity.get()); - } - @Transactional // To have the 2 delete in the same transaction (atomic) public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound) { try { @@ -398,18 +389,27 @@ public List getModificationsInfos(@NonNull List uuids) } /** - * @param onlyMetadata if true, only returns the basic data common to all the modificaions + * @param onlyMetadata if true, only returns the basic data common to all the modifications * @return the data from all the network modification contained in the composite modification sent as parameters */ @Transactional(readOnly = true) public List getCompositeModificationsContentInfos(@NonNull List uuids, boolean onlyMetadata) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { - List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); - List orderedModifications = foundEntities - .stream() - .map(onlyMetadata ? this::getMetadata : this::getModificationInfo) - .toList(); + List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); + List orderedModifications; + if (onlyMetadata) { + List networkModifications = modificationRepository.findBaseDataByIdIn(networkModificationsUuids); + orderedModifications = networkModifications + .stream() + .map(this::getModificationInfos) + .toList(); + } else { + orderedModifications = networkModificationsUuids + .stream() + .map(this::getModificationInfo) + .toList(); + } entities.addAll(orderedModifications); } ); From 959bfd48659ceeb7029c6ee030655e5dd5187589 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Tue, 22 Oct 2024 17:41:51 +0200 Subject: [PATCH 04/10] TUs Signed-off-by: Mathieu DEHARBE --- .../server/ModificationControllerTest.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index ee2c5bafa..06f2d5dfb 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -95,6 +95,7 @@ public class ModificationControllerTest { private static final String URI_NETWORK_MODIF_BASE = "/v1/network-modifications"; private static final String URI_COMPOSITE_NETWORK_MODIF_BASE = "/v1/network-composite-modifications"; + private static final String URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT = "/v1/network-composite-modification/"; private static final String URI_NETWORK_MODIF_PARAMS = "&groupUuid=" + TEST_GROUP_ID + "&reportUuid=" + TEST_REPORT_ID + "&reporterId=" + UUID.randomUUID(); private static final String URI_NETWORK_MODIF = URI_NETWORK_MODIF_BASE + "?networkUuid=" + TEST_NETWORK_ID + URI_NETWORK_MODIF_PARAMS; private static final String URI_NETWORK_MODIF_BUS_BREAKER = URI_NETWORK_MODIF_BASE + "?networkUuid=" + TEST_NETWORK_BUS_BREAKER_ID + URI_NETWORK_MODIF_PARAMS; @@ -701,9 +702,10 @@ public void testMoveModificationInSameGroup() throws Exception { @Test public void testNetworkCompositeModification() throws Exception { - // Insert a switch modification in the group - List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 1); - assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); + // Insert some switch modifications in the group + int modificationsNumber = 2; + List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, modificationsNumber); + assertEquals(modificationsNumber, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); // Create a composite modification with the switch modification List modificationUuids = modificationList.stream().map(ModificationInfos::getUuid).toList(); @@ -716,7 +718,13 @@ public void testNetworkCompositeModification() throws Exception { .build(); UUID compositeModificationUuid = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertThat(modificationRepository.getModificationInfo(compositeModificationUuid)).recursivelyEquals(compositeModificationInfos); - assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); + assertEquals(modificationsNumber, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); + + // get the composite modification metadata + mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid)) + .andExpect(status().isOk()).andReturn(); + List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertEquals(modificationUuids.size(), compositeModificationContent.size()); // Insert the composite modification in the group mvcResult = mockMvc.perform( @@ -731,10 +739,10 @@ public void testNetworkCompositeModification() throws Exception { assertApplicationStatusOK(mvcResult); List newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); - assertEquals(2, newModificationList.size()); + assertEquals(modificationsNumber*2, newModificationList.size()); List newModificationUuidList = newModificationList.stream().map(ModificationInfos::getUuid).toList(); assertEquals(modificationUuids.get(0), newModificationUuidList.get(0)); - assertThat(modificationList.get(0)).recursivelyEquals(newModificationList.get(1)); + assertThat(modificationList.get(0)).recursivelyEquals(newModificationList.get(modificationsNumber)); } @Test From 659dfb2b2f2269f8a62de46fb73a90183d7fe559 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Tue, 22 Oct 2024 17:58:42 +0200 Subject: [PATCH 05/10] pleasing sonar Signed-off-by: Mathieu DEHARBE --- .../modification/server/ModificationControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 06f2d5dfb..3e5f3a0b5 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -739,7 +739,7 @@ public void testNetworkCompositeModification() throws Exception { assertApplicationStatusOK(mvcResult); List newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); - assertEquals(modificationsNumber*2, newModificationList.size()); + assertEquals(modificationsNumber * 2, newModificationList.size()); List newModificationUuidList = newModificationList.stream().map(ModificationInfos::getUuid).toList(); assertEquals(modificationUuids.get(0), newModificationUuidList.get(0)); assertThat(modificationList.get(0)).recursivelyEquals(newModificationList.get(modificationsNumber)); From b001a7f9e4feb92864b93cedd80203e834e88ece Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Thu, 24 Oct 2024 13:25:34 +0200 Subject: [PATCH 06/10] cleaning + order by Signed-off-by: Mathieu DEHARBE --- .../server/repositories/ModificationRepository.java | 4 ++-- .../server/repositories/NetworkModificationRepository.java | 7 +++---- .../server/service/NetworkModificationService.java | 2 +- .../modification/server/ModificationControllerTest.java | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java index f3f3a95ce..9fad71f6a 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java @@ -31,9 +31,9 @@ public interface ModificationRepository extends JpaRepository findMetadataIn(List uuids); /** - * @return base data of the network modifications (those from the main table, not those specific to each modification) + * @return base data of the network modifications (the data from the main common table, not those specific to each modification) */ - @Query(value = "SELECT new ModificationEntity(m.id, m.type, m.date, m.stashed, m.activated, m.messageType, m.messageValues) FROM ModificationEntity m WHERE m.id IN (?1)") + @Query(value = "SELECT new ModificationEntity(m.id, m.type, m.date, m.stashed, m.activated, m.messageType, m.messageValues) FROM ModificationEntity m WHERE m.id IN (?1) order by m.modificationsOrder") List findBaseDataByIdIn(List uuids); @Query(value = "SELECT m FROM ModificationEntity m WHERE m.id IN (?1) ORDER BY m.modificationsOrder") diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 33d3f2aea..ae6bfe069 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -194,7 +194,6 @@ public List getModifications(UUID groupUuid, boolean onlyMeta return getModifications(groupUuid, onlyMetadata, errorOnGroupNotFound, false); } - // TODO : regarder cette récup de métadata plutôt que la mienne @Transactional(readOnly = true) public List getModifications(UUID groupUuid, boolean onlyMetadata, boolean errorOnGroupNotFound, boolean onlyStashed) { try { @@ -389,16 +388,16 @@ public List getModificationsInfos(@NonNull List uuids) } /** - * @param onlyMetadata if true, only returns the basic data common to all the modifications + * @param onlyCommonData if true, only returns the basic data common to all the modifications. If false, returns complete modifications * @return the data from all the network modification contained in the composite modification sent as parameters */ @Transactional(readOnly = true) - public List getCompositeModificationsContentInfos(@NonNull List uuids, boolean onlyMetadata) { + public List getCompositeModificationsContentInfos(@NonNull List uuids, boolean onlyCommonData) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); List orderedModifications; - if (onlyMetadata) { + if (onlyCommonData) { List networkModifications = modificationRepository.findBaseDataByIdIn(networkModificationsUuids); orderedModifications = networkModifications .stream() diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 2e1e8c6ac..103a91ffa 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -77,7 +77,7 @@ public List getNetworkModifications(UUID groupUuid, boolean o } @Transactional(readOnly = true) - // Need a transaction for collections lazy loading ==> TODO : this is copy pasted, is this true here ? + // Need a transaction for collections lazy loading public List getCompositeModificationContentMetadata(UUID compositeModificationUuid) { return networkModificationRepository.getCompositeModificationsContentInfos(List.of(compositeModificationUuid), true); } diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 3e5f3a0b5..f6fd0e951 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -724,7 +724,7 @@ public void testNetworkCompositeModification() throws Exception { mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid)) .andExpect(status().isOk()).andReturn(); List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - assertEquals(modificationUuids.size(), compositeModificationContent.size()); + assertEquals(modificationsNumber, compositeModificationContent.size()); // Insert the composite modification in the group mvcResult = mockMvc.perform( From d8907554c07d6e008e68a1ba221801dd893ce884 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Thu, 24 Oct 2024 17:16:58 +0200 Subject: [PATCH 07/10] clean post merge conflicts Signed-off-by: Mathieu DEHARBE --- .../modification/server/ModificationControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index ee8c615fe..7fc518ae6 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -695,7 +695,7 @@ void testMoveModificationInSameGroup() throws Exception { } @Test - public void testNetworkCompositeModification() throws Exception { + void testNetworkCompositeModification() throws Exception { // Insert some switch modifications in the group int modificationsNumber = 2; List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, modificationsNumber); From 002e6631d7f1a1df9f425d3930876c49c30b513e Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Thu, 31 Oct 2024 16:44:51 +0100 Subject: [PATCH 08/10] post reviews Signed-off-by: Mathieu DEHARBE --- .../server/NetworkModificationController.java | 12 +++--- .../NetworkModificationRepository.java | 38 ++++++++++--------- .../service/NetworkModificationService.java | 9 ++--- .../server/ModificationControllerTest.java | 2 +- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index 14fa1c0d6..fd520f808 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -220,15 +220,15 @@ public ResponseEntity createNetworkCompositeModification(@RequestBody List return ResponseEntity.ok().body(networkModificationService.createNetworkCompositeModification(modificationUuids)); } - @GetMapping(value = "/network-composite-modification/{id}", produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "Get the content of a composite modification via its id") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Content of the composite modification"), - @ApiResponse(responseCode = "404", description = "This composite modification does not exist")} + @GetMapping(value = "/network-composite-modification/{uuid}/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = "Get the list of the network modifications inside a composite modification") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "List of the modifications inside the composite modification"), + @ApiResponse(responseCode = "404", description = "Composite modification not found")} ) - public ResponseEntity> getCompositeModificationContent(@PathVariable("id") UUID compositeModificationId) { + public ResponseEntity> getNetworkModificationsFromComposite(@PathVariable("uuid") UUID compositeModificationUuid) { return ResponseEntity.ok() .contentType(MediaType.APPLICATION_JSON) - .body(networkModificationService.getCompositeModificationContentMetadata(compositeModificationId) + .body(networkModificationService.getNetworkModificationsFromComposite(compositeModificationUuid) ); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 83f07c1fd..8e21694da 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -395,27 +395,31 @@ public List getModificationsInfos(@NonNull List uuids) } /** - * @param onlyCommonData if true, only returns the basic data common to all the modifications. If false, returns complete modifications - * @return the data from all the network modification contained in the composite modification sent as parameters + * returns the data from all the network modifications contained in the composite modification sent as parameter + * but only returns the basic data common to all the modifications form the ModificationInfos, not from the extended classes */ @Transactional(readOnly = true) - public List getCompositeModificationsContentInfos(@NonNull List uuids, boolean onlyCommonData) { + public List getBasicNetworkModificationsFromComposite(@NonNull UUID uuid) { + + List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); + + List networkModificationsEntities = modificationRepository.findBaseDataByIdIn(networkModificationsUuids); + + return networkModificationsEntities + .stream() + .map(this::getModificationInfos) + .toList(); + } + + @Transactional(readOnly = true) + public List getCompositeModificationsInfos(@NonNull List uuids) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { - List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); - List orderedModifications; - if (onlyCommonData) { - List networkModifications = modificationRepository.findBaseDataByIdIn(networkModificationsUuids); - orderedModifications = networkModifications - .stream() - .map(this::getModificationInfos) - .toList(); - } else { - orderedModifications = networkModificationsUuids - .stream() - .map(this::getModificationInfo) - .toList(); - } + List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); + List orderedModifications = foundEntities + .stream() + .map(this::getModificationInfo) + .toList(); entities.addAll(orderedModifications); } ); diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 4018a20d7..6470752a7 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -77,9 +77,8 @@ public List getNetworkModifications(UUID groupUuid, boolean o } @Transactional(readOnly = true) - // Need a transaction for collections lazy loading - public List getCompositeModificationContentMetadata(UUID compositeModificationUuid) { - return networkModificationRepository.getCompositeModificationsContentInfos(List.of(compositeModificationUuid), true); + public List getNetworkModificationsFromComposite(UUID compositeModificationUuid) { + return networkModificationRepository.getBasicNetworkModificationsFromComposite(compositeModificationUuid); } @Transactional(readOnly = true) @@ -295,7 +294,7 @@ public Optional duplicateModifications(UUID targetGro public Optional insertCompositeModifications(UUID targetGroupUuid, UUID networkUuid, String variantId, ReportInfos reportInfos, List modificationsUuids) { - List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids, false); + List modificationInfos = networkModificationRepository.getCompositeModificationsInfos(modificationsUuids); networkModificationRepository.saveModificationInfos(targetGroupUuid, modificationInfos); return applyModifications(networkUuid, variantId, reportInfos, modificationInfos); } @@ -338,7 +337,7 @@ public Optional applyModificationsFromUuids(UUID netw String variantId, ReportInfos reportInfos, List modificationsUuids) { - List modificationInfos = networkModificationRepository.getCompositeModificationsContentInfos(modificationsUuids, false); + List modificationInfos = networkModificationRepository.getCompositeModificationsInfos(modificationsUuids); return applyModifications(networkUuid, variantId, reportInfos, modificationInfos); } } diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 7fc518ae6..712aa5b83 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -715,7 +715,7 @@ void testNetworkCompositeModification() throws Exception { assertEquals(modificationsNumber, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); // get the composite modification metadata - mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid)) + mvcResult = mockMvc.perform(get(URI_GET_COMPOSITE_NETWORK_MODIF_CONTENT + compositeModificationUuid + "/network-modifications")) .andExpect(status().isOk()).andReturn(); List compositeModificationContent = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(modificationsNumber, compositeModificationContent.size()); From 6277098fe9ef1f038ea5c9cd78c59e4e992253da Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Thu, 31 Oct 2024 17:17:02 +0100 Subject: [PATCH 09/10] removed unhandled 404 Signed-off-by: Mathieu DEHARBE --- .../modification/server/NetworkModificationController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index fd520f808..ca68aad31 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -222,9 +222,7 @@ public ResponseEntity createNetworkCompositeModification(@RequestBody List @GetMapping(value = "/network-composite-modification/{uuid}/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Get the list of the network modifications inside a composite modification") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "List of the modifications inside the composite modification"), - @ApiResponse(responseCode = "404", description = "Composite modification not found")} - ) + @ApiResponse(responseCode = "200", description = "List of the modifications inside the composite modification") public ResponseEntity> getNetworkModificationsFromComposite(@PathVariable("uuid") UUID compositeModificationUuid) { return ResponseEntity.ok() .contentType(MediaType.APPLICATION_JSON) From 54436322f9f405a183d26c59041ec4ae1a100b7d Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Wed, 6 Nov 2024 16:13:39 +0100 Subject: [PATCH 10/10] removed empty lines Signed-off-by: Mathieu DEHARBE --- .../server/repositories/NetworkModificationRepository.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 8e21694da..b2759fdab 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -400,11 +400,8 @@ public List getModificationsInfos(@NonNull List uuids) */ @Transactional(readOnly = true) public List getBasicNetworkModificationsFromComposite(@NonNull UUID uuid) { - List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); - List networkModificationsEntities = modificationRepository.findBaseDataByIdIn(networkModificationsUuids); - return networkModificationsEntities .stream() .map(this::getModificationInfos)