Skip to content

Commit 899f9cd

Browse files
adds INSERT_COMPOSITE as a new ModificationsActionType (#933)
Signed-off-by: Mathieu DEHARBE <mathieu.deharbe@rte-france.com>
1 parent 566c60e commit 899f9cd

8 files changed

Lines changed: 95 additions & 45 deletions

File tree

src/main/java/org/gridsuite/study/server/StudyConstants.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,10 @@ public enum SldDisplayMode {
117117
}
118118

119119
public enum ModificationsActionType {
120-
MOVE, COPY, INSERT
120+
MOVE,
121+
COPY,
122+
SPLIT_COMPOSITE, // the network modifications contained into the composite modifications are extracted and inserted one by one
123+
INSERT_COMPOSITE // the composite modifications are fully inserted as composite modifications
121124
}
122125

123126
public enum Severity {

src/main/java/org/gridsuite/study/server/controller/StudyController.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -656,14 +656,14 @@ public ResponseEntity<Void> moveOrCopyModifications(@PathVariable("studyUuid") U
656656
@RequestParam("action") ModificationsActionType action,
657657
@RequestParam("originStudyUuid") UUID originStudyUuid,
658658
@RequestParam("originNodeUuid") UUID originNodeUuid,
659-
@RequestBody List<UUID> modificationsToCopyUuidList,
659+
@RequestBody List<ModificationsToCopyInfos> modificationsToCopyInfos,
660660
@RequestHeader(HEADER_USER_ID) String userId) {
661661
studyService.assertIsStudyAndNodeExist(studyUuid, nodeUuid);
662662
studyService.assertIsStudyAndNodeExist(originStudyUuid, originNodeUuid);
663663
studyService.assertCanUpdateModifications(studyUuid, nodeUuid);
664664
switch (action) {
665-
case COPY, INSERT:
666-
handleDuplicateOrInsertNetworkModifications(studyUuid, nodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyUuidList, userId, action);
665+
case COPY, SPLIT_COMPOSITE, INSERT_COMPOSITE:
666+
handleDuplicateOrInsertNetworkModifications(studyUuid, nodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyInfos, userId, action);
667667
break;
668668
case MOVE:
669669
// we don't cut - paste modifications from different studies
@@ -672,17 +672,18 @@ public ResponseEntity<Void> moveOrCopyModifications(@PathVariable("studyUuid") U
672672
}
673673
studyService.assertNoBlockedNodeInStudy(studyUuid, originNodeUuid);
674674
studyService.assertNoBlockedNodeInStudy(studyUuid, nodeUuid);
675-
rebuildNodeService.moveNetworkModifications(studyUuid, nodeUuid, originNodeUuid, modificationsToCopyUuidList, userId);
675+
List<UUID> modificationsToCopyInfosUuids = modificationsToCopyInfos.stream().map(ModificationsToCopyInfos::getUuid).toList();
676+
rebuildNodeService.moveNetworkModifications(studyUuid, nodeUuid, originNodeUuid, modificationsToCopyInfosUuids, userId);
676677
break;
677678
}
678679
return ResponseEntity.ok().build();
679680
}
680681

681-
private void handleDuplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID targetNodeUuid, UUID originStudyUuid, UUID originNodeUuid, List<UUID> modificationsToCopyUuidList, String userId, ModificationsActionType action) {
682+
private void handleDuplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID targetNodeUuid, UUID originStudyUuid, UUID originNodeUuid, List<ModificationsToCopyInfos> modificationsToCopy, String userId, ModificationsActionType action) {
682683
studyService.assertNoBlockedNodeInStudy(targetStudyUuid, targetNodeUuid);
683684
studyService.invalidateNodeTreeWithLF(targetStudyUuid, targetNodeUuid);
684685
try {
685-
studyService.duplicateOrInsertNetworkModifications(targetStudyUuid, targetNodeUuid, originStudyUuid, originNodeUuid, modificationsToCopyUuidList, userId, action);
686+
studyService.duplicateOrInsertNetworkModifications(targetStudyUuid, targetNodeUuid, originStudyUuid, originNodeUuid, modificationsToCopy, userId, action);
686687
} finally {
687688
studyService.unblockNodeTree(targetStudyUuid, targetNodeUuid);
688689
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Copyright (c) 2026, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.study.server.dto;
8+
9+
import lombok.AllArgsConstructor;
10+
import lombok.Builder;
11+
import lombok.Getter;
12+
import lombok.NoArgsConstructor;
13+
14+
import java.util.UUID;
15+
16+
/**
17+
* @author Mathieu Deharbe <mathieu.deharbe at rte-france.com>
18+
*/
19+
@AllArgsConstructor
20+
@NoArgsConstructor
21+
@Getter
22+
@Builder
23+
public class ModificationsToCopyInfos {
24+
private UUID uuid;
25+
26+
private String compositeName;
27+
}

src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.gridsuite.study.server.RemoteServicesProperties;
1313
import org.gridsuite.study.server.StudyConstants;
1414
import org.gridsuite.study.server.dto.BuildInfos;
15+
import org.gridsuite.study.server.dto.ModificationsToCopyInfos;
1516
import org.gridsuite.study.server.dto.NodeReceiver;
1617
import org.gridsuite.study.server.dto.modification.ModificationApplicationContext;
1718
import org.gridsuite.study.server.dto.modification.NetworkModificationMetadata;
@@ -246,7 +247,7 @@ public void stopBuild(@NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid) {
246247
restTemplate.put(getNetworkModificationServerURI(false) + path, null);
247248
}
248249

249-
public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID targetGroupUuid, UUID beforeUuid, Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos, boolean buildTargetNode) {
250+
public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID targetGroupUuid, UUID beforeUuid, Pair<List<ModificationsToCopyInfos>, List<ModificationApplicationContext>> modificationContextInfos, boolean buildTargetNode) {
250251
var path = UriComponentsBuilder.fromPath(GROUP_PATH)
251252
.queryParam(QUERY_PARAM_ACTION, ModificationsActionType.MOVE.name())
252253
.queryParam("originGroupUuid", originGroupUuid)
@@ -257,7 +258,7 @@ public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID t
257258

258259
HttpHeaders headers = new HttpHeaders();
259260
headers.setContentType(MediaType.APPLICATION_JSON);
260-
HttpEntity<Pair<List<UUID>, List<ModificationApplicationContext>>> httpEntity = new HttpEntity<>(modificationContextInfos, headers);
261+
HttpEntity<Pair<List<ModificationsToCopyInfos>, List<ModificationApplicationContext>>> httpEntity = new HttpEntity<>(modificationContextInfos, headers);
261262

262263
return restTemplate.exchange(
263264
getNetworkModificationServerURI(false) + path.buildAndExpand(targetGroupUuid).toUriString(),
@@ -267,12 +268,12 @@ public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID t
267268
}
268269

269270
public NetworkModificationsResult duplicateOrInsertModifications(UUID groupUuid, ModificationsActionType action,
270-
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
271+
Pair<List<ModificationsToCopyInfos>, List<ModificationApplicationContext>> modificationContextInfos) {
271272
return handleModifications(groupUuid, null, action, modificationContextInfos);
272273
}
273274

274275
private NetworkModificationsResult handleModifications(UUID groupUuid, UUID originGroupUuid, ModificationsActionType action,
275-
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
276+
Pair<List<ModificationsToCopyInfos>, List<ModificationApplicationContext>> modificationContextInfos) {
276277
var path = UriComponentsBuilder.fromPath(GROUP_PATH)
277278
.queryParam(QUERY_PARAM_ACTION, action.name());
278279

@@ -282,7 +283,7 @@ private NetworkModificationsResult handleModifications(UUID groupUuid, UUID orig
282283

283284
HttpHeaders headers = new HttpHeaders();
284285
headers.setContentType(MediaType.APPLICATION_JSON);
285-
HttpEntity<Pair<List<UUID>, List<ModificationApplicationContext>>> httpEntity = new HttpEntity<>(modificationContextInfos, headers);
286+
HttpEntity<Pair<List<ModificationsToCopyInfos>, List<ModificationApplicationContext>>> httpEntity = new HttpEntity<>(modificationContextInfos, headers);
286287

287288
return restTemplate.exchange(
288289
getNetworkModificationServerURI(false) + path.buildAndExpand(groupUuid).toUriString(),
@@ -312,7 +313,7 @@ public Map<UUID, UUID> duplicateModificationsGroup(UUID sourceGroupUuid, UUID gr
312313
).getBody();
313314
}
314315

315-
public NetworkModificationsResult duplicateModificationsFromGroup(UUID groupUuid, UUID originGroupUuid, Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
316+
public NetworkModificationsResult duplicateModificationsFromGroup(UUID groupUuid, UUID originGroupUuid, Pair<List<ModificationsToCopyInfos>, List<ModificationApplicationContext>> modificationContextInfos) {
316317
return handleModifications(groupUuid, originGroupUuid, StudyConstants.ModificationsActionType.COPY, modificationContextInfos);
317318
}
318319

src/main/java/org/gridsuite/study/server/service/StudyService.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2496,7 +2496,8 @@ public void moveNetworkModifications(@NonNull UUID studyUuid, UUID targetNodeUui
24962496
.map(rootNetworkEntity -> rootNetworkNodeInfoService.getNetworkModificationApplicationContext(rootNetworkEntity.getId(), targetNodeUuid, rootNetworkEntity.getNetworkUuid()))
24972497
.toList();
24982498

2499-
NetworkModificationsResult networkModificationsResult = networkModificationService.moveModifications(originGroupUuid, targetGroupUuid, beforeUuid, Pair.of(modificationUuidList, modificationApplicationContexts), isTargetInDifferentNodeTree);
2499+
List<ModificationsToCopyInfos> modificationsToCopyInfos = modificationUuidList.stream().map(modifUuid -> ModificationsToCopyInfos.builder().uuid(modifUuid).build()).toList();
2500+
NetworkModificationsResult networkModificationsResult = networkModificationService.moveModifications(originGroupUuid, targetGroupUuid, beforeUuid, Pair.of(modificationsToCopyInfos, modificationApplicationContexts), isTargetInDifferentNodeTree);
25002501
rootNetworkNodeInfoService.moveModificationsToExclude(originNodeUuid, targetNodeUuid, networkModificationsResult.modificationUuids());
25012502

25022503
// Target node
@@ -2525,7 +2526,14 @@ private void emitNetworkModificationImpactsForAllRootNetworks(List<Optional<Netw
25252526
}
25262527

25272528
@Transactional
2528-
public void duplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID targetNodeUuid, UUID originStudyUuid, UUID originNodeUuid, List<UUID> modificationsUuis, String userId, StudyConstants.ModificationsActionType action) {
2529+
public void duplicateOrInsertNetworkModifications(
2530+
UUID targetStudyUuid,
2531+
UUID targetNodeUuid,
2532+
UUID originStudyUuid,
2533+
UUID originNodeUuid,
2534+
List<ModificationsToCopyInfos> modifications,
2535+
String userId,
2536+
StudyConstants.ModificationsActionType action) {
25292537
List<UUID> childrenUuids = networkModificationTreeService.getChildrenUuids(targetNodeUuid);
25302538
notificationService.emitStartModificationEquipmentNotification(targetStudyUuid, targetNodeUuid, childrenUuids, NotificationService.MODIFICATIONS_UPDATING_IN_PROGRESS);
25312539
try {
@@ -2538,12 +2546,12 @@ public void duplicateOrInsertNetworkModifications(UUID targetStudyUuid, UUID tar
25382546
.map(rootNetworkEntity -> rootNetworkNodeInfoService.getNetworkModificationApplicationContext(rootNetworkEntity.getId(), targetNodeUuid, rootNetworkEntity.getNetworkUuid()))
25392547
.toList();
25402548

2541-
NetworkModificationsResult networkModificationResults = networkModificationService.duplicateOrInsertModifications(groupUuid, action, Pair.of(modificationsUuis, modificationApplicationContexts));
2549+
NetworkModificationsResult networkModificationResults = networkModificationService.duplicateOrInsertModifications(groupUuid, action, Pair.of(modifications, modificationApplicationContexts));
25422550

25432551
if (targetStudyUuid.equals(originStudyUuid)) {
25442552
Map<UUID, UUID> originToDuplicateModificationsUuids = new HashMap<>();
2545-
for (int i = 0; i < modificationsUuis.size(); i++) {
2546-
originToDuplicateModificationsUuids.put(modificationsUuis.get(i), networkModificationResults.modificationUuids().get(i));
2553+
for (int i = 0; i < modifications.size(); i++) {
2554+
originToDuplicateModificationsUuids.put(modifications.get(i).getUuid(), networkModificationResults.modificationUuids().get(i));
25472555
}
25482556
rootNetworkNodeInfoService.copyModificationsToExclude(originNodeUuid, targetNodeUuid, originToDuplicateModificationsUuids);
25492557
}

0 commit comments

Comments
 (0)