Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 26 additions & 13 deletions src/main/java/org/gridsuite/study/server/service/StudyService.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
import org.gridsuite.study.server.StudyConstants;
import org.gridsuite.study.server.StudyException;
import org.gridsuite.study.server.dto.*;
import org.gridsuite.study.server.dto.InvalidateNodeTreeParameters.ComputationsInvalidationMode;
import org.gridsuite.study.server.dto.InvalidateNodeTreeParameters.InvalidationMode;
import org.gridsuite.study.server.dto.caseimport.CaseImportAction;
import org.gridsuite.study.server.dto.dynamicmapping.MappingInfos;
import org.gridsuite.study.server.dto.dynamicmapping.ModelInfos;
Expand Down Expand Up @@ -1901,9 +1899,7 @@ public void deleteNetworkModifications(UUID studyUuid, UUID nodeUuid, List<UUID>
UUID groupId = networkModificationTreeService.getModificationGroupUuid(nodeUuid);
networkModificationService.deleteModifications(groupId, modificationsUuids);
// for each root network, remove modifications from excluded ones
studyEntity.getRootNetworks().forEach(rootNetworkEntity -> {
rootNetworkNodeInfoService.updateModificationsToExclude(nodeUuid, rootNetworkEntity.getId(), new HashSet<>(modificationsUuids), true);
});
studyEntity.getRootNetworks().forEach(rootNetworkEntity -> rootNetworkNodeInfoService.updateModificationsToExclude(nodeUuid, rootNetworkEntity.getId(), new HashSet<>(modificationsUuids), true));
} finally {
notificationService.emitEndDeletionEquipmentNotification(studyUuid, nodeUuid, childrenUuids);
}
Expand Down Expand Up @@ -2850,6 +2846,9 @@ public String getNetworkElementsIds(UUID nodeUuid, UUID rootNetworkUuid, List<St
public String getVoltageInitModifications(@NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid) {
// get modifications group uuid associated to voltage init results
UUID resultUuid = rootNetworkNodeInfoService.getComputationResultUuid(nodeUuid, rootNetworkUuid, ComputationType.VOLTAGE_INITIALIZATION);
if (resultUuid == null) {
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, String.format("Missing results for rootNetwork %s on node %s", rootNetworkUuid, nodeUuid));
}
UUID voltageInitModificationsGroupUuid = voltageInitService.getModificationsGroupUuid(nodeUuid, resultUuid);
return networkModificationService.getModifications(voltageInitModificationsGroupUuid, false, false);
}
Expand All @@ -2858,23 +2857,37 @@ public String getVoltageInitModifications(@NonNull UUID nodeUuid, @NonNull UUID
public void insertVoltageInitModifications(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
// get modifications group uuid associated to voltage init results
UUID resultUuid = rootNetworkNodeInfoService.getComputationResultUuid(nodeUuid, rootNetworkUuid, ComputationType.VOLTAGE_INITIALIZATION);
UUID voltageInitModificationsGroupUuid = voltageInitService.getModificationsGroupUuid(nodeUuid, resultUuid);
if (voltageInitModificationsGroupUuid == null) {
return;
if (resultUuid == null) {
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, String.format("Missing results for rootNetwork %s on node %s", rootNetworkUuid, nodeUuid));
}
UUID voltageInitModificationsGroupUuid = voltageInitService.getModificationsGroupUuid(nodeUuid, resultUuid);

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

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

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

voltageInitService.resetModificationsGroupUuid(nodeUuid, resultUuid);
voltageInitService.resetModificationsGroupUuid(resultUuid);

// invalidate the whole subtree except the target node (we have built this node during the duplication)
notificationService.emitStudyChanged(studyUuid, nodeUuid, rootNetworkUuid, NotificationService.UPDATE_TYPE_VOLTAGE_INIT_RESULT); // send notification voltage init result has changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,10 +255,6 @@ public void assertVoltageInitNotRunning(UUID resultUuid) {
}

public UUID getModificationsGroupUuid(UUID nodeUuid, UUID resultUuid) {
if (resultUuid == null) {
throw new StudyException(NO_VOLTAGE_INIT_RESULTS_FOR_NODE, THE_NODE + nodeUuid + " has no voltage init results");
}

UUID modificationsGroupUuid;
String path = UriComponentsBuilder.fromPath(DELIMITER + VOLTAGE_INIT_API_VERSION + "/results/{resultUuid}/modifications-group-uuid")
.buildAndExpand(resultUuid).toUriString();
Expand All @@ -283,10 +279,7 @@ public void invalidateVoltageInitStatus(List<UUID> uuids) {
}
}

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

Expand Down
Loading