Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -1016,11 +1016,9 @@ public ResponseEntity<Resource> downloadExportedNetworkFile(
public ResponseEntity<Void> runSecurityAnalysis(@Parameter(description = "studyUuid") @PathVariable("studyUuid") UUID studyUuid,
@Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
@Parameter(description = "nodeUuid") @PathVariable("nodeUuid") UUID nodeUuid,
@Parameter(description = "Contingency list names") @RequestParam(name = "contingencyListName", required = false) List<String> contingencyListNames,
@RequestHeader(HEADER_USER_ID) String userId) {
List<String> nonNullcontingencyListNames = contingencyListNames != null ? contingencyListNames : Collections.emptyList();
studyService.assertIsNodeNotReadOnly(nodeUuid);
studyService.runSecurityAnalysis(studyUuid, nonNullcontingencyListNames, nodeUuid, rootNetworkUuid, userId);
studyService.runSecurityAnalysis(studyUuid, nodeUuid, rootNetworkUuid, userId);
return ResponseEntity.ok().build();
}

Expand Down Expand Up @@ -1063,8 +1061,8 @@ public byte[] getSecurityAnalysisResult(@Parameter(description = "study UUID") @
public ResponseEntity<Integer> getContingencyCount(@Parameter(description = "Study UUID") @PathVariable("studyUuid") UUID studyUuid,
@Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
@Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid,
@Parameter(description = "Contingency list names") @RequestParam(name = "contingencyListName", required = false) List<String> contingencyListNames) {
return ResponseEntity.ok().body(CollectionUtils.isEmpty(contingencyListNames) ? 0 : studyService.getContingencyCount(studyUuid, contingencyListNames, nodeUuid, rootNetworkUuid));
@Parameter(description = "Contingency list names") @RequestParam(name = "contingencyListIds", required = false) List<UUID> contingencyListIds) {
return ResponseEntity.ok().body(CollectionUtils.isEmpty(contingencyListIds) ? 0 : studyService.getContingencyCount(studyUuid, contingencyListIds, nodeUuid, rootNetworkUuid));
}

@GetMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/limit-violations")
Expand Down Expand Up @@ -2086,8 +2084,9 @@ public ResponseEntity<String> getDynamicSecurityAnalysisStatus(@Parameter(descri
@Operation(summary = "Get security analysis parameters on study")
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The security analysis parameters")})
public ResponseEntity<String> getSecurityAnalysisParametersValues(
@PathVariable("studyUuid") UUID studyUuid) {
return ResponseEntity.ok().body(studyService.getSecurityAnalysisParametersValues(studyUuid));
@PathVariable("studyUuid") UUID studyUuid,
@RequestHeader(HEADER_USER_ID) String userId) {
return ResponseEntity.ok().body(studyService.getSecurityAnalysisParametersValues(studyUuid, userId));
}

@PostMapping(value = "/studies/{studyUuid}/security-analysis/parameters")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;
import java.util.UUID;

/**
Expand All @@ -22,7 +21,4 @@ public class RunSecurityAnalysisParametersInfos {
private UUID securityAnalysisParametersUuid;

private UUID loadFlowParametersUuid;

private List<String> contingencyListNames;

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ public ActionsService(RemoteServicesProperties remoteServicesProperties, RestTem
this.restTemplate = restTemplate;
}

public Integer getContingencyCount(UUID networkUuid, String variantId, List<String> contingencyListNames) {
public Integer getContingencyCount(UUID networkUuid, String variantId, List<UUID> contingencyListIds) {
var uriComponentsBuilder = UriComponentsBuilder
.fromPath(DELIMITER + ACTIONS_API_VERSION + "/contingency-lists/count")
.queryParam(CONTINGENCY_LIST_IDS, contingencyListNames)
.queryParam(CONTINGENCY_LIST_IDS, contingencyListIds)
.queryParam(NETWORK_UUID, networkUuid);
if (!StringUtils.isBlank(variantId)) {
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ private UUID createDefaultSecurityAnalysisParameters(String userId, UserProfileI
if (userProfileInfos != null && userProfileInfos.getSecurityAnalysisParameterId() != null) {
// try to access/duplicate the user profile security analysis parameters
try {
return securityAnalysisService.duplicateSecurityAnalysisParameters(userProfileInfos.getSecurityAnalysisParameterId());
return securityAnalysisService.duplicateSecurityAnalysisParameters(userProfileInfos.getSecurityAnalysisParameterId(), userId);
} catch (Exception e) {
// TODO try to report a log in Root subreporter ?
LOGGER.error(String.format("Could not duplicate security analysis parameters with id '%s' from user/profile '%s/%s'. Using default parameters",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,7 @@ public UUID runSecurityAnalysis(UUID networkUuid, String variantId, RunSecurityA
if (parametersInfos.getLoadFlowParametersUuid() != null) {
uriComponentsBuilder.queryParam("loadFlowParametersUuid", parametersInfos.getLoadFlowParametersUuid());
}
var path = uriComponentsBuilder.queryParam("contingencyListName", parametersInfos.getContingencyListNames())
.queryParam(QUERY_PARAM_RECEIVER, receiver).buildAndExpand(networkUuid).toUriString();
var path = uriComponentsBuilder.queryParam(QUERY_PARAM_RECEIVER, receiver).buildAndExpand(networkUuid).toUriString();

HttpHeaders headers = new HttpHeaders();
headers.set(HEADER_USER_ID, userId);
Expand Down Expand Up @@ -237,27 +236,31 @@ public void updateSecurityAnalysisParameters(UUID parametersUuid, @Nullable Stri
restTemplate.put(securityAnalysisServerBaseUri + path, httpEntity);
}

public UUID duplicateSecurityAnalysisParameters(UUID sourceParametersUuid) {
public UUID duplicateSecurityAnalysisParameters(UUID sourceParametersUuid, String userId) {
Objects.requireNonNull(sourceParametersUuid);

var path = UriComponentsBuilder.fromPath(DELIMITER + SECURITY_ANALYSIS_API_VERSION + DELIMITER + PATH_PARAM_PARAMETERS)
.queryParam("duplicateFrom", sourceParametersUuid)
.buildAndExpand().toUriString();

HttpHeaders headers = new HttpHeaders();
headers.set(HEADER_USER_ID, userId);
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Void> httpEntity = new HttpEntity<>(null, headers);

return restTemplate.exchange(securityAnalysisServerBaseUri + path, HttpMethod.POST, httpEntity, UUID.class).getBody();
return restTemplate.exchange(securityAnalysisServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(null, headers), UUID.class).getBody();
}

public String getSecurityAnalysisParameters(UUID parametersUuid) {
public String getSecurityAnalysisParameters(UUID parametersUuid, String userId) {
Objects.requireNonNull(parametersUuid);

String path = UriComponentsBuilder.fromPath(DELIMITER + SECURITY_ANALYSIS_API_VERSION + PARAMETERS_URI)
.buildAndExpand(parametersUuid).toUriString();

return restTemplate.getForObject(securityAnalysisServerBaseUri + path, String.class);
HttpHeaders headers = new HttpHeaders();
headers.set(HEADER_USER_ID, userId);
headers.setContentType(MediaType.APPLICATION_JSON);

return restTemplate.exchange(securityAnalysisServerBaseUri + path, HttpMethod.GET, new HttpEntity<>(null, headers), String.class).getBody();
}

public UUID getSecurityAnalysisParametersUuidOrElseCreateDefaults(StudyEntity studyEntity) {
Expand Down
26 changes: 13 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 @@ -690,7 +690,7 @@ private StudyEntity duplicateStudy(BasicStudyInfos studyInfos, UUID sourceStudyU

StudyEntity sourceStudy = getStudy(sourceStudyUuid);

StudyEntity newStudyEntity = duplicateStudyEntity(sourceStudy, studyInfos.getId());
StudyEntity newStudyEntity = duplicateStudyEntity(sourceStudy, studyInfos.getId(), userId);
rootNetworkService.duplicateStudyRootNetworks(newStudyEntity, sourceStudy);
networkModificationTreeService.duplicateStudyNodes(newStudyEntity, sourceStudy);
duplicateStudyNodeAliases(newStudyEntity, sourceStudy);
Expand All @@ -702,7 +702,7 @@ private StudyEntity duplicateStudy(BasicStudyInfos studyInfos, UUID sourceStudyU
return newStudyEntity;
}

private StudyEntity duplicateStudyEntity(StudyEntity sourceStudyEntity, UUID newStudyId) {
private StudyEntity duplicateStudyEntity(StudyEntity sourceStudyEntity, UUID newStudyId, String userId) {
UUID copiedLoadFlowParametersUuid = null;
if (sourceStudyEntity.getLoadFlowParametersUuid() != null) {
copiedLoadFlowParametersUuid = loadflowService.duplicateLoadFlowParameters(sourceStudyEntity.getLoadFlowParametersUuid());
Expand All @@ -715,7 +715,7 @@ private StudyEntity duplicateStudyEntity(StudyEntity sourceStudyEntity, UUID new

UUID copiedSecurityAnalysisParametersUuid = null;
if (sourceStudyEntity.getSecurityAnalysisParametersUuid() != null) {
copiedSecurityAnalysisParametersUuid = securityAnalysisService.duplicateSecurityAnalysisParameters(sourceStudyEntity.getSecurityAnalysisParametersUuid());
copiedSecurityAnalysisParametersUuid = securityAnalysisService.duplicateSecurityAnalysisParameters(sourceStudyEntity.getSecurityAnalysisParametersUuid(), userId);
}

UUID copiedSensitivityAnalysisParametersUuid = null;
Expand Down Expand Up @@ -1178,9 +1178,9 @@ public LoadFlowParametersInfos getLoadFlowParametersInfos(StudyEntity studyEntit
}

@Transactional
public String getSecurityAnalysisParametersValues(UUID studyUuid) {
public String getSecurityAnalysisParametersValues(UUID studyUuid, String userId) {
StudyEntity studyEntity = getStudy(studyUuid);
return securityAnalysisService.getSecurityAnalysisParameters(securityAnalysisService.getSecurityAnalysisParametersUuidOrElseCreateDefaults(studyEntity));
return securityAnalysisService.getSecurityAnalysisParameters(securityAnalysisService.getSecurityAnalysisParametersUuidOrElseCreateDefaults(studyEntity), userId);
}

@Transactional
Expand Down Expand Up @@ -1407,14 +1407,14 @@ private void removeShortcircuitParameters(@Nullable UUID shortcircuitParametersU
}

@Transactional
public UUID runSecurityAnalysis(@NonNull UUID studyUuid, @NonNull List<String> contingencyListNames, @NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid, String userId) {
public UUID runSecurityAnalysis(@NonNull UUID studyUuid, @NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid, String userId) {
StudyEntity study = getStudy(studyUuid);
networkModificationTreeService.blockNode(rootNetworkUuid, nodeUuid);

return handleSecurityAnalysisRequest(study, nodeUuid, rootNetworkUuid, contingencyListNames, userId);
return handleSecurityAnalysisRequest(study, nodeUuid, rootNetworkUuid, userId);
}

private UUID handleSecurityAnalysisRequest(StudyEntity study, UUID nodeUuid, UUID rootNetworkUuid, List<String> contingencyListNames, String userId) {
private UUID handleSecurityAnalysisRequest(StudyEntity study, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
UUID networkUuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);
UUID saReportUuid = networkModificationTreeService.getComputationReports(nodeUuid, rootNetworkUuid).getOrDefault(SECURITY_ANALYSIS.name(), UUID.randomUUID());
Expand All @@ -1432,23 +1432,23 @@ private UUID handleSecurityAnalysisRequest(StudyEntity study, UUID nodeUuid, UUI
securityAnalysisService.deleteSecurityAnalysisResults(List.of(prevResultUuid));
}

var runSecurityAnalysisParametersInfos = new RunSecurityAnalysisParametersInfos(study.getSecurityAnalysisParametersUuid(), study.getLoadFlowParametersUuid(), contingencyListNames);
var runSecurityAnalysisParametersInfos = new RunSecurityAnalysisParametersInfos(study.getSecurityAnalysisParametersUuid(), study.getLoadFlowParametersUuid());
UUID result = securityAnalysisService.runSecurityAnalysis(networkUuid, variantId, runSecurityAnalysisParametersInfos,
new ReportInfos(saReportUuid, nodeUuid), receiver, userId);
updateComputationResultUuid(nodeUuid, rootNetworkUuid, result, SECURITY_ANALYSIS);
notificationService.emitStudyChanged(study.getId(), nodeUuid, rootNetworkUuid, NotificationService.UPDATE_TYPE_SECURITY_ANALYSIS_STATUS);
return result;
}

public Integer getContingencyCount(UUID studyUuid, List<String> contingencyListNames, UUID nodeUuid, UUID rootNetworkUuid) {
public Integer getContingencyCount(UUID studyUuid, List<UUID> contingencyListIds, UUID nodeUuid, UUID rootNetworkUuid) {
Objects.requireNonNull(studyUuid);
Objects.requireNonNull(contingencyListNames);
Objects.requireNonNull(contingencyListIds);
Objects.requireNonNull(nodeUuid);

UUID networkuuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);

return actionsService.getContingencyCount(networkuuid, variantId, contingencyListNames);
return actionsService.getContingencyCount(networkuuid, variantId, contingencyListIds);
}

public List<LimitViolationInfos> getLimitViolations(@NonNull UUID nodeUuid, UUID rootNetworkUuid, String filters, String globalFilters, Sort sort) {
Expand Down Expand Up @@ -1750,7 +1750,7 @@ public boolean createOrUpdateSecurityAnalysisParameters(StudyEntity studyEntity,
if (parameters == null && userProfileInfos.getSecurityAnalysisParameterId() != null) {
// reset case, with existing profile, having default security analysis params
try {
UUID securityAnalysisParametersFromProfileUuid = securityAnalysisService.duplicateSecurityAnalysisParameters(userProfileInfos.getSecurityAnalysisParameterId());
UUID securityAnalysisParametersFromProfileUuid = securityAnalysisService.duplicateSecurityAnalysisParameters(userProfileInfos.getSecurityAnalysisParameterId(), userId);
studyEntity.setSecurityAnalysisParametersUuid(securityAnalysisParametersFromProfileUuid);
removeSecurityAnalysisParameters(existingSecurityAnalysisParametersUuid);
return userProfileIssue;
Expand Down
Loading
Loading