Skip to content

Commit b821fec

Browse files
authored
Apply voltage-init modification only on computation root network (#797)
Signed-off-by: David BRAQUART <[email protected]>
1 parent 75577c9 commit b821fec

File tree

3 files changed

+232
-78
lines changed

3 files changed

+232
-78
lines changed

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

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
import org.gridsuite.study.server.StudyConstants;
2020
import org.gridsuite.study.server.StudyException;
2121
import org.gridsuite.study.server.dto.*;
22-
import org.gridsuite.study.server.dto.InvalidateNodeTreeParameters.ComputationsInvalidationMode;
23-
import org.gridsuite.study.server.dto.InvalidateNodeTreeParameters.InvalidationMode;
2422
import org.gridsuite.study.server.dto.caseimport.CaseImportAction;
2523
import org.gridsuite.study.server.dto.dynamicmapping.MappingInfos;
2624
import org.gridsuite.study.server.dto.dynamicmapping.ModelInfos;
@@ -1901,9 +1899,7 @@ public void deleteNetworkModifications(UUID studyUuid, UUID nodeUuid, List<UUID>
19011899
UUID groupId = networkModificationTreeService.getModificationGroupUuid(nodeUuid);
19021900
networkModificationService.deleteModifications(groupId, modificationsUuids);
19031901
// for each root network, remove modifications from excluded ones
1904-
studyEntity.getRootNetworks().forEach(rootNetworkEntity -> {
1905-
rootNetworkNodeInfoService.updateModificationsToExclude(nodeUuid, rootNetworkEntity.getId(), new HashSet<>(modificationsUuids), true);
1906-
});
1902+
studyEntity.getRootNetworks().forEach(rootNetworkEntity -> rootNetworkNodeInfoService.updateModificationsToExclude(nodeUuid, rootNetworkEntity.getId(), new HashSet<>(modificationsUuids), true));
19071903
} finally {
19081904
notificationService.emitEndDeletionEquipmentNotification(studyUuid, nodeUuid, childrenUuids);
19091905
}
@@ -2850,6 +2846,9 @@ public String getNetworkElementsIds(UUID nodeUuid, UUID rootNetworkUuid, List<St
28502846
public String getVoltageInitModifications(@NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid) {
28512847
// get modifications group uuid associated to voltage init results
28522848
UUID resultUuid = rootNetworkNodeInfoService.getComputationResultUuid(nodeUuid, rootNetworkUuid, ComputationType.VOLTAGE_INITIALIZATION);
2849+
if (resultUuid == null) {
2850+
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, String.format("Missing results for rootNetwork %s on node %s", rootNetworkUuid, nodeUuid));
2851+
}
28532852
UUID voltageInitModificationsGroupUuid = voltageInitService.getModificationsGroupUuid(nodeUuid, resultUuid);
28542853
return networkModificationService.getModifications(voltageInitModificationsGroupUuid, false, false);
28552854
}
@@ -2858,23 +2857,37 @@ public String getVoltageInitModifications(@NonNull UUID nodeUuid, @NonNull UUID
28582857
public void insertVoltageInitModifications(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
28592858
// get modifications group uuid associated to voltage init results
28602859
UUID resultUuid = rootNetworkNodeInfoService.getComputationResultUuid(nodeUuid, rootNetworkUuid, ComputationType.VOLTAGE_INITIALIZATION);
2861-
UUID voltageInitModificationsGroupUuid = voltageInitService.getModificationsGroupUuid(nodeUuid, resultUuid);
2862-
if (voltageInitModificationsGroupUuid == null) {
2863-
return;
2860+
if (resultUuid == null) {
2861+
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, String.format("Missing results for rootNetwork %s on node %s", rootNetworkUuid, nodeUuid));
28642862
}
2863+
UUID voltageInitModificationsGroupUuid = voltageInitService.getModificationsGroupUuid(nodeUuid, resultUuid);
28652864

28662865
List<UUID> childrenUuids = networkModificationTreeService.getChildrenUuids(nodeUuid);
28672866
notificationService.emitStartModificationEquipmentNotification(studyUuid, nodeUuid, childrenUuids, NotificationService.MODIFICATIONS_UPDATING_IN_PROGRESS);
28682867
try {
28692868
checkStudyContainsNode(studyUuid, nodeUuid);
28702869

2870+
// voltageInit modification should apply only on the root network where the computation has been made:
2871+
// - application context will point to the computation root network only
2872+
// - after creation, we deactivate the new modification for all other root networks
28712873
List<RootNetworkEntity> studyRootNetworkEntities = getStudyRootNetworks(studyUuid);
2872-
List<ModificationApplicationContext> modificationApplicationContexts = studyRootNetworkEntities.stream()
2873-
.map(rootNetworkEntity -> rootNetworkNodeInfoService.getNetworkModificationApplicationContext(rootNetworkEntity.getId(), nodeUuid, rootNetworkEntity.getNetworkUuid()))
2874-
.toList();
2874+
List<ModificationApplicationContext> modificationApplicationContexts = new ArrayList<>();
2875+
List<UUID> rootNetworkToDeactivateUuids = new ArrayList<>();
2876+
studyRootNetworkEntities.forEach(rootNetworkEntity -> {
2877+
if (rootNetworkUuid.equals(rootNetworkEntity.getId())) {
2878+
modificationApplicationContexts.add(rootNetworkNodeInfoService.getNetworkModificationApplicationContext(rootNetworkEntity.getId(), nodeUuid, rootNetworkEntity.getNetworkUuid()));
2879+
} else {
2880+
rootNetworkToDeactivateUuids.add(rootNetworkEntity.getId());
2881+
}
2882+
});
2883+
// duplicate the modification created by voltageInit server into the current node
28752884
NetworkModificationsResult networkModificationResults = networkModificationService.duplicateModificationsFromGroup(networkModificationTreeService.getModificationGroupUuid(nodeUuid), voltageInitModificationsGroupUuid, Pair.of(List.of(), modificationApplicationContexts));
28762885

2877-
if (networkModificationResults != null) {
2886+
// We expect a single voltageInit modification in the result list
2887+
if (networkModificationResults != null && networkModificationResults.modificationUuids().size() == 1) {
2888+
for (UUID otherRootNetwork : rootNetworkToDeactivateUuids) {
2889+
rootNetworkNodeInfoService.updateModificationsToExclude(nodeUuid, otherRootNetwork, Set.of(networkModificationResults.modificationUuids().getFirst()), false);
2890+
}
28782891
int index = 0;
28792892
// for each NetworkModificationResult, send an impact notification - studyRootNetworkEntities are ordered in the same way as networkModificationResults
28802893
for (Optional<NetworkModificationResult> modificationResultOpt : networkModificationResults.modificationResults()) {
@@ -2885,7 +2898,7 @@ public void insertVoltageInitModifications(UUID studyUuid, UUID nodeUuid, UUID r
28852898
}
28862899
}
28872900

2888-
voltageInitService.resetModificationsGroupUuid(nodeUuid, resultUuid);
2901+
voltageInitService.resetModificationsGroupUuid(resultUuid);
28892902

28902903
// invalidate the whole subtree except the target node (we have built this node during the duplication)
28912904
notificationService.emitStudyChanged(studyUuid, nodeUuid, rootNetworkUuid, NotificationService.UPDATE_TYPE_VOLTAGE_INIT_RESULT); // send notification voltage init result has changed

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,6 @@ public void assertVoltageInitNotRunning(UUID resultUuid) {
255255
}
256256

257257
public UUID getModificationsGroupUuid(UUID nodeUuid, UUID resultUuid) {
258-
if (resultUuid == null) {
259-
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, THE_NODE + nodeUuid + " has no voltage init results");
260-
}
261-
262258
UUID modificationsGroupUuid;
263259
String path = UriComponentsBuilder.fromPath(DELIMITER + VOLTAGE_INIT_API_VERSION + "/results/{resultUuid}/modifications-group-uuid")
264260
.buildAndExpand(resultUuid).toUriString();
@@ -283,10 +279,7 @@ public void invalidateVoltageInitStatus(List<UUID> uuids) {
283279
}
284280
}
285281

286-
public void resetModificationsGroupUuid(UUID nodeUuid, UUID resultUuid) {
287-
if (resultUuid == null) {
288-
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, THE_NODE + nodeUuid + " has no voltage init results");
289-
}
282+
public void resetModificationsGroupUuid(UUID resultUuid) {
290283
String path = UriComponentsBuilder.fromPath(DELIMITER + VOLTAGE_INIT_API_VERSION + "/results/{resultUuid}/modifications-group-uuid")
291284
.buildAndExpand(resultUuid).toUriString();
292285

0 commit comments

Comments
 (0)