Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class RootNetworkNodeInfo {

private Map<String, UUID> computationReports;

private Map<UUID, UUID> modificationReports;
private UUID modificationReportUuid;

private UUID shortCircuitAnalysisResultUuid;

Expand Down Expand Up @@ -59,7 +59,7 @@ public RootNetworkNodeInfoEntity toEntity() {
.id(id)
.variantId(variantId)
.computationReports(computationReports)
.modificationReports(modificationReports)
.modificationReportUuid(modificationReportUuid)
.shortCircuitAnalysisResultUuid(shortCircuitAnalysisResultUuid)
.oneBusShortCircuitAnalysisResultUuid(oneBusShortCircuitAnalysisResultUuid)
.loadFlowResultUuid(loadFlowResultUuid)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ public class NetworkModificationNode extends AbstractNode {

private NodeBuildStatus nodeBuildStatus;

private Map<String, UUID> computationsReports;

private UUID modificationReportUuid;

@Builder.Default
private NetworkModificationNodeType nodeType = NetworkModificationNodeType.CONSTRUCTION;

Expand All @@ -76,13 +80,9 @@ public void completeDtoFromRootNetworkNodeInfo(RootNetworkNodeInfoEntity rootNet
this.setStateEstimationResultUuid(rootNetworkNodeInfoEntity.getStateEstimationResultUuid());
this.setNodeBuildStatus(rootNetworkNodeInfoEntity.getNodeBuildStatus().toDto());
this.setComputationsReports(new HashMap<>(rootNetworkNodeInfoEntity.getComputationReports()));
this.setModificationReports(new HashMap<>(rootNetworkNodeInfoEntity.getModificationReports()));
this.setModificationReportUuid(rootNetworkNodeInfoEntity.getModificationReportUuid());
}

private Map<String, UUID> computationsReports;

private Map<UUID, UUID> modificationReports;

@Override
public NodeType getType() {
return NodeType.NETWORK_MODIFICATION;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,7 @@ public class RootNetworkNodeInfoEntity {
foreignKey = @ForeignKey(name = "rootNetworkNodeInfoEntity_computationReports_fk1"))
private Map<String, UUID> computationReports;

@ElementCollection
@CollectionTable(name = "modificationReports",
indexes = {@Index(name = "root_network_node_info_entity_modificationReports_idx1", columnList = "root_network_node_info_entity_id")},
foreignKey = @ForeignKey(name = "rootNetworkNodeInfoEntity_modificationReports_fk1"))
private Map<UUID, UUID> modificationReports;
private UUID modificationReportUuid;

@Column(name = "shortCircuitAnalysisResultUuid")
private UUID shortCircuitAnalysisResultUuid;
Expand Down Expand Up @@ -123,7 +119,7 @@ public RootNetworkNodeInfo toDto() {
return RootNetworkNodeInfo.builder()
.id(id)
.computationReports(computationReports)
.modificationReports(modificationReports)
.modificationReportUuid(modificationReportUuid)
.dynamicSimulationResultUuid(dynamicSimulationResultUuid)
.dynamicSecurityAnalysisResultUuid(dynamicSecurityAnalysisResultUuid)
.loadFlowResultUuid(loadFlowResultUuid)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -498,12 +498,11 @@ public void createBasicTree(StudyEntity studyEntity) {
.withAllResourceBundlesFromClasspath()
.withMessageTemplate("study.server.modificationNodeId")
.withUntypedValue("modificationNodeId", modificationNode.getId().toString()).build();
reportService.sendReport(getModificationReportUuid(networkModificationNode.getId(), firstRootNetworkUuid, networkModificationNode.getId()), reportNode);
UUID modificationReportUuid = UUID.randomUUID();
reportService.sendReport(modificationReportUuid, reportNode);

BuildInfos buildInfos = getBuildInfos(modificationNode.getId(), firstRootNetworkUuid);
Map<UUID, UUID> nodeUuidToReportUuid = buildInfos.getReportsInfos().stream().collect(Collectors.toMap(ReportInfos::nodeUuid, ReportInfos::reportUuid));
rootNetworkNodeInfoService.updateRootNetworkNode(networkModificationNode.getId(), firstRootNetworkUuid,
RootNetworkNodeInfo.builder().variantId(FIRST_VARIANT_ID).nodeBuildStatus(NodeBuildStatus.from(BuildStatus.BUILT)).modificationReports(nodeUuidToReportUuid).build());
RootNetworkNodeInfo.builder().variantId(FIRST_VARIANT_ID).nodeBuildStatus(NodeBuildStatus.from(BuildStatus.BUILT)).modificationReportUuid(modificationReportUuid).build());
}

@Transactional
Expand Down Expand Up @@ -746,7 +745,7 @@ public UUID getReportUuid(UUID nodeUuid, UUID rootNetworkUuid) {
if (nodeEntity.getType().equals(NodeType.ROOT)) {
return rootNetworkService.getRootReportUuid(rootNetworkUuid);
} else {
return rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND)).getModificationReports().get(nodeUuid);
return rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND)).getModificationReportUuid();
}
}

Expand Down Expand Up @@ -811,16 +810,6 @@ public Map<String, UUID> getComputationReports(UUID nodeUuid, UUID rootNetworkUu
return rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(NODE_NOT_FOUND)).getComputationReports();
}

@Transactional
public void setModificationReports(UUID nodeUuid, UUID rootNetworkUuid, Map<UUID, UUID> modificationReports) {
rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeUuid, rootNetworkUuid).ifPresent(tpNodeInfo -> tpNodeInfo.setModificationReports(modificationReports));
}

@Transactional
public Map<UUID, UUID> getModificationReports(UUID nodeUuid, UUID rootNetworkUuid) {
return rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(NODE_NOT_FOUND)).getModificationReports();
}

private void restoreNodeChildren(UUID studyId, UUID parentNodeId) {
getChildren(parentNodeId).forEach(nodeEntity -> {
NetworkModificationNodeInfoEntity modificationNodeToRestore = networkModificationNodeInfoRepository.findById(nodeEntity.getIdNode()).orElseThrow(() -> new StudyException(NODE_NOT_FOUND));
Expand All @@ -840,19 +829,14 @@ public List<NodeEntity> getAllNodes(UUID studyUuid) {
return nodesRepository.findAllByStudyId(studyUuid);
}

private UUID getModificationReportUuid(UUID nodeUuid, UUID rootNetworkUuid, UUID nodeToBuildUuid) {
return self.getModificationReports(nodeToBuildUuid, rootNetworkUuid).getOrDefault(nodeUuid, UUID.randomUUID());
}

private void getBuildInfos(NodeEntity nodeEntity, UUID rootNetworkUuid, BuildInfos buildInfos, UUID nodeToBuildUuid) {
private void getBuildInfos(NodeEntity nodeEntity, UUID rootNetworkUuid, BuildInfos buildInfos) {
AbstractNode node = getSimpleNode(nodeEntity.getIdNode());
if (node.getType() == NodeType.NETWORK_MODIFICATION) {
NetworkModificationNode modificationNode = (NetworkModificationNode) node;
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()));
getBuildInfos(nodeEntity.getParentNode(), rootNetworkUuid, buildInfos, nodeToBuildUuid);
buildInfos.insertModificationInfos(modificationNode.getModificationGroupUuid(), rootNetworkNodeInfoEntity.getModificationsUuidsToExclude(), new ReportInfos(rootNetworkNodeInfoEntity.getModificationReportUuid(), modificationNode.getId()));
getBuildInfos(nodeEntity.getParentNode(), rootNetworkUuid, buildInfos);
} else {
buildInfos.setOriginVariantId(self.getVariantId(nodeEntity.getIdNode(), rootNetworkUuid));
}
Expand All @@ -868,7 +852,7 @@ public BuildInfos getBuildInfos(UUID nodeUuid, UUID rootNetworkUuid) {
throw new StudyException(BAD_NODE_TYPE, "The node " + entity.getIdNode() + " is not a modification node");
} else {
buildInfos.setDestinationVariantId(self.getVariantId(nodeUuid, rootNetworkUuid));
getBuildInfos(entity, rootNetworkUuid, buildInfos, nodeUuid);
getBuildInfos(entity, rootNetworkUuid, buildInfos);
}
}, () -> {
throw new StudyException(ELEMENT_NOT_FOUND);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@

import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -97,15 +96,15 @@ public RootNetworkNodeInfoService(RootNetworkNodeInfoRepository rootNetworkNodeI
public void createRootNetworkLinks(@NonNull UUID studyUuid, @NonNull RootNetworkEntity rootNetworkEntity) {
// For each network modification node (nodeInfoEntity) create a link with the root network
networkModificationNodeInfoRepository.findAllByNodeStudyId(studyUuid).forEach(networkModificationNodeEntity -> {
RootNetworkNodeInfoEntity newRootNetworkNodeInfoEntity = createDefaultEntity(networkModificationNodeEntity.getId());
RootNetworkNodeInfoEntity newRootNetworkNodeInfoEntity = createDefaultEntity();
addLink(networkModificationNodeEntity, rootNetworkEntity, newRootNetworkNodeInfoEntity);
});
}

public void createNodeLinks(@NonNull StudyEntity studyEntity, @NonNull NetworkModificationNodeInfoEntity modificationNodeInfoEntity) {
// For each root network create a link with the node
studyEntity.getRootNetworks().forEach(rootNetworkEntity -> {
RootNetworkNodeInfoEntity newRootNetworkNodeInfoEntity = createDefaultEntity(modificationNodeInfoEntity.getId());
RootNetworkNodeInfoEntity newRootNetworkNodeInfoEntity = createDefaultEntity();
addLink(modificationNodeInfoEntity, rootNetworkEntity, newRootNetworkNodeInfoEntity);
});
}
Expand All @@ -116,22 +115,21 @@ public void duplicateNodeLinks(List<RootNetworkNodeInfoEntity> sourceNodeLinks,
// when duplicating a rootNetworkNodeInfoEntity, we need to keep modificationsToExclude
// use correspondence map to use duplicate modification uuids
RootNetworkNodeInfoEntity newRootNetworkNodeInfoEntity = createDefaultEntity(
destinationNodeInfoEntity.getId(),
nodeLink.getModificationsUuidsToExclude().stream().map(originToDuplicateModificationUuidMap::get).collect(Collectors.toSet())
);
addLink(destinationNodeInfoEntity, originToDuplicateRootNetworkMap.get(nodeLink.getRootNetwork()), newRootNetworkNodeInfoEntity);
});
}

private static RootNetworkNodeInfoEntity createDefaultEntity(UUID nodeUuid) {
return createDefaultEntity(nodeUuid, new HashSet<>());
private static RootNetworkNodeInfoEntity createDefaultEntity() {
return createDefaultEntity(new HashSet<>());
}

private static RootNetworkNodeInfoEntity createDefaultEntity(UUID nodeUuid, Set<UUID> modificationsToExclude) {
private static RootNetworkNodeInfoEntity createDefaultEntity(Set<UUID> modificationsToExclude) {
return RootNetworkNodeInfoEntity.builder()
.nodeBuildStatus(NodeBuildStatusEmbeddable.from(BuildStatus.NOT_BUILT))
.variantId(UUID.randomUUID().toString())
.modificationReports(new HashMap<>(Map.of(nodeUuid, UUID.randomUUID())))
.modificationReportUuid(UUID.randomUUID())
.modificationsUuidsToExclude(modificationsToExclude)
.blockedBuild(false)
.build();
Expand Down Expand Up @@ -172,7 +170,7 @@ public void fillDeleteNodeInfo(UUID nodeUuid, DeleteNodeInfos deleteNodeInfos) {
//get all rootnetworknodeinfo info linked to node
List<RootNetworkNodeInfoEntity> rootNetworkNodeInfoEntities = rootNetworkNodeInfoRepository.findAllWithRootNetworkByNodeInfoId(nodeUuid);
rootNetworkNodeInfoEntities.forEach(rootNetworkNodeInfoEntity -> {
rootNetworkNodeInfoEntity.getModificationReports().forEach((key, value) -> deleteNodeInfos.addReportUuid(value));
deleteNodeInfos.addReportUuid(rootNetworkNodeInfoEntity.getModificationReportUuid());
rootNetworkNodeInfoEntity.getComputationReports().forEach((key, value) -> deleteNodeInfos.addReportUuid(value));

String variantId = rootNetworkNodeInfoEntity.getVariantId();
Expand Down Expand Up @@ -254,7 +252,6 @@ public InvalidateNodeInfos invalidateRootNetworkNode(RootNetworkNodeInfoEntity r
InvalidateNodeInfos invalidateNodeInfos = getInvalidationComputationInfos(rootNetworkNodeInfoEntity, invalidateTreeParameters.computationsInvalidationMode());

if (notOnlyChildrenBuildStatus) {
rootNetworkNodeInfoEntity.getModificationReports().forEach((key, value) -> invalidateNodeInfos.addReportUuid(value));
invalidateNodeInfos.addVariantId(rootNetworkNodeInfoEntity.getVariantId());
invalidateBuildStatus(rootNetworkNodeInfoEntity, invalidateNodeInfos);
}
Expand All @@ -267,7 +264,6 @@ public InvalidateNodeInfos invalidateRootNetworkNode(RootNetworkNodeInfoEntity r
private static void invalidateBuildStatus(RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity, InvalidateNodeInfos invalidateNodeInfos) {
rootNetworkNodeInfoEntity.setNodeBuildStatus(NodeBuildStatusEmbeddable.from(BuildStatus.NOT_BUILT));
rootNetworkNodeInfoEntity.setVariantId(UUID.randomUUID().toString());
rootNetworkNodeInfoEntity.setModificationReports(new HashMap<>(Map.of(rootNetworkNodeInfoEntity.getNodeInfo().getId(), UUID.randomUUID())));

invalidateNodeInfos.addNodeUuid(rootNetworkNodeInfoEntity.getNodeInfo().getIdNode());
}
Expand Down Expand Up @@ -481,8 +477,8 @@ public void updateRootNetworkNode(UUID nodeUuid, UUID rootNetworkUuid, RootNetwo
if (rootNetworkNodeInfo.getVoltageInitResultUuid() != null) {
rootNetworkNodeInfoEntity.setVoltageInitResultUuid(rootNetworkNodeInfo.getVoltageInitResultUuid());
}
if (rootNetworkNodeInfo.getModificationReports() != null) {
rootNetworkNodeInfoEntity.setModificationReports(rootNetworkNodeInfo.getModificationReports());
if (rootNetworkNodeInfo.getModificationReportUuid() != null) {
rootNetworkNodeInfoEntity.setModificationReportUuid(rootNetworkNodeInfo.getModificationReportUuid());
}
}

Expand All @@ -507,15 +503,14 @@ public Stream<CompletableFuture<Void>> getDeleteRootNetworkNodeInfosFutures(List
public ModificationApplicationContext getNetworkModificationApplicationContext(UUID rootNetworkUuid, UUID nodeUuid, UUID networkUuid) {
RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findWithModificationsToExcludeByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND));
String variantId = rootNetworkNodeInfoEntity.getVariantId();
UUID reportUuid = rootNetworkNodeInfoEntity.getModificationReports().get(nodeUuid);
UUID reportUuid = rootNetworkNodeInfoEntity.getModificationReportUuid();
return new ModificationApplicationContext(networkUuid, variantId, reportUuid, nodeUuid, rootNetworkNodeInfoEntity.getModificationsUuidsToExclude());
}

private List<UUID> getReportUuids(RootNetworkNodeInfo rootNetworkNodeInfo) {
return Stream.of(
rootNetworkNodeInfo.getModificationReports().values().stream(),
return Stream.concat(
Stream.of(rootNetworkNodeInfo.getModificationReportUuid()),
rootNetworkNodeInfo.getComputationReports().values().stream())
.flatMap(Function.identity())
.toList();
}

Expand Down
Loading