diff --git a/src/main/java/org/gridsuite/study/server/service/client/dynamicmargincalculation/DynamicMarginCalculationClient.java b/src/main/java/org/gridsuite/study/server/service/client/dynamicmargincalculation/DynamicMarginCalculationClient.java deleted file mode 100644 index f2d0e1adec..0000000000 --- a/src/main/java/org/gridsuite/study/server/service/client/dynamicmargincalculation/DynamicMarginCalculationClient.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2026, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.study.server.service.client.dynamicmargincalculation; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.gridsuite.study.server.RemoteServicesProperties; -import org.gridsuite.study.server.dto.ReportInfos; -import org.gridsuite.study.server.dto.dynamicmargincalculation.DynamicMarginCalculationStatus; -import org.gridsuite.study.server.service.StudyService; -import org.gridsuite.study.server.service.client.AbstractRestClient; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.lang.NonNull; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -import static org.gridsuite.study.server.StudyConstants.*; -import static org.gridsuite.study.server.notification.NotificationService.HEADER_USER_ID; -import static org.gridsuite.study.server.service.client.util.UrlUtil.buildEndPointUrl; - -/** - * @author Thang PHAM - */ -@Service -public class DynamicMarginCalculationClient extends AbstractRestClient { - public static final String API_VERSION = DYNAMIC_MARGIN_CALCULATION_API_VERSION; - public static final String DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER = "parameters"; - public static final String DYNAMIC_MARGIN_CALCULATION_END_POINT_RUN = "networks"; - public static final String DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT = "results"; - - protected DynamicMarginCalculationClient(RemoteServicesProperties remoteServicesProperties, - RestTemplate restTemplate) { - super(remoteServicesProperties.getServiceUri("dynamic-margin-calculation-server"), restTemplate); - } - - public String getProviders() { - String url = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, "providers"); - return getRestTemplate().getForObject(url, String.class); - } - - private String getParametersWithUuidUrl(UUID parametersUuid) { - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); - - return UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/{uuid}") - .buildAndExpand(parametersUuid) - .toUriString(); - } - - // --- Related parameters methods --- // - public String getProvider(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/{uuid}/provider") - .buildAndExpand(parametersUuid) - .toUriString(); - - return getRestTemplate().getForObject(url, String.class); - } - - public String getParameters(@NonNull UUID parametersUuid, String userId) { - Objects.requireNonNull(parametersUuid); - - String url = getParametersWithUuidUrl(parametersUuid); - - HttpHeaders headers = new HttpHeaders(); - if (StringUtils.isNotBlank(userId)) { - headers.set(HEADER_USER_ID, userId); - } - - return getRestTemplate() - .exchange(url, HttpMethod.GET, new HttpEntity<>(headers), String.class).getBody(); - } - - public UUID createParameters(@NonNull String parametersInfos) { - Objects.requireNonNull(parametersInfos); - - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl) - .buildAndExpand() - .toUriString(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - - return getRestTemplate().postForObject(url, httpEntity, UUID.class); - } - - public void updateParameters(@NonNull UUID parametersUuid, @NonNull String parametersInfos) { - Objects.requireNonNull(parametersUuid); - Objects.requireNonNull(parametersInfos); - - String url = getParametersWithUuidUrl(parametersUuid); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - - getRestTemplate().put(url, httpEntity); - } - - public UUID duplicateParameters(@NonNull UUID sourceParametersUuid) { - Objects.requireNonNull(sourceParametersUuid); - - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/{uuid}/duplicate") - .buildAndExpand(sourceParametersUuid) - .toUriString(); - - return getRestTemplate().postForObject(url, null, UUID.class); - } - - public void deleteParameters(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - - String url = getParametersWithUuidUrl(parametersUuid); - - // call dynamic-margin-calculation REST API - getRestTemplate().delete(url); - } - - public UUID createDefaultParameters() { - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/default") - .buildAndExpand() - .toUriString(); - - return getRestTemplate().postForObject(url, null, UUID.class); - } - - // --- Related run computation methods --- // - - public UUID run(@NonNull String receiver, @NonNull UUID networkUuid, String variantId, - @NonNull ReportInfos reportInfos, @NonNull UUID dynamicSimulationParametersUuid, - @NonNull UUID dynamicSecurityAnalysisParametersUuid, - @NonNull UUID parametersUuid, String userId, boolean debug) { - Objects.requireNonNull(receiver); - Objects.requireNonNull(networkUuid); - Objects.requireNonNull(reportInfos); - Objects.requireNonNull(dynamicSecurityAnalysisParametersUuid); - Objects.requireNonNull(parametersUuid); - - String runBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RUN); - - UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(runBaseUrl + "/{networkUuid}/run"); - if (StringUtils.isNotBlank(variantId)) { - uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); - } - if (debug) { - uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true); - } - uriComponentsBuilder - .queryParam("dynamicSimulationParametersUuid", dynamicSimulationParametersUuid) - .queryParam("dynamicSecurityAnalysisParametersUuid", dynamicSecurityAnalysisParametersUuid) - .queryParam("parametersUuid", parametersUuid) - .queryParam(QUERY_PARAM_RECEIVER, receiver) - .queryParam(QUERY_PARAM_REPORT_UUID, reportInfos.reportUuid()) - .queryParam(QUERY_PARAM_REPORTER_ID, reportInfos.nodeUuid()) - .queryParam(QUERY_PARAM_REPORT_TYPE, StudyService.ReportType.DYNAMIC_MARGIN_CALCULATION.reportKey); - String url = uriComponentsBuilder - .buildAndExpand(networkUuid) - .toUriString(); - - HttpHeaders headers = new HttpHeaders(); - headers.set(HEADER_USER_ID, userId); - headers.setContentType(MediaType.APPLICATION_JSON); - - // call dynamic-margin-calculation REST API - HttpEntity httpEntity = new HttpEntity<>(null, headers); - - return getRestTemplate().postForObject(url, httpEntity, UUID.class); - } - - // --- Related result methods --- // - - public DynamicMarginCalculationStatus getStatus(@NonNull UUID resultUuid) { - Objects.requireNonNull(resultUuid); - - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); - - String url = UriComponentsBuilder - .fromUriString(resultBaseUrl + "/{resultUuid}/status") - .buildAndExpand(resultUuid) - .toUriString(); - - // call dynamic-margin-calculation REST API - return getRestTemplate().getForObject(url, DynamicMarginCalculationStatus.class); - } - - public void invalidateStatus(@NonNull List resultUuids) { - if (CollectionUtils.isEmpty(resultUuids)) { - return; - } - - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); - - String url = UriComponentsBuilder - .fromUriString(resultBaseUrl + "/invalidate-status") - .queryParam("resultUuid", resultUuids) - .build() - .toUriString(); - - getRestTemplate().put(url, null); - } - - public void deleteResults(List resultUuids) { - if (CollectionUtils.isEmpty(resultUuids)) { - return; - } - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); - String url = UriComponentsBuilder - .fromUriString(resultBaseUrl) - .queryParam(QUERY_PARAM_RESULTS_UUIDS, resultUuids) - .build() - .toUriString(); - // call dynamic-margin-calculation REST API - getRestTemplate().delete(url); - } - - public Integer getResultsCount() { - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); - String url = UriComponentsBuilder - .fromUriString(resultBaseUrl) - .toUriString(); - - // call dynamic-margin-calculation REST API - return getRestTemplate().getForObject(url, Integer.class); - } - - public ResponseEntity downloadDebugFile(UUID resultUuid) { - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); - String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/download-debug-file") - .buildAndExpand(resultUuid) - .toUriString(); - return getRestTemplate().exchange(url, HttpMethod.GET, null, Resource.class); - } -} diff --git a/src/main/java/org/gridsuite/study/server/service/client/dynamicsecurityanalysis/DynamicSecurityAnalysisClient.java b/src/main/java/org/gridsuite/study/server/service/client/dynamicsecurityanalysis/DynamicSecurityAnalysisClient.java deleted file mode 100644 index c9166f560b..0000000000 --- a/src/main/java/org/gridsuite/study/server/service/client/dynamicsecurityanalysis/DynamicSecurityAnalysisClient.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (c) 2025, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.study.server.service.client.dynamicsecurityanalysis; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.gridsuite.study.server.RemoteServicesProperties; -import org.gridsuite.study.server.dto.ReportInfos; -import org.gridsuite.study.server.dto.dynamicsecurityanalysis.DynamicSecurityAnalysisStatus; -import org.gridsuite.study.server.service.StudyService; -import org.gridsuite.study.server.service.client.AbstractRestClient; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.lang.NonNull; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -import static org.gridsuite.study.server.StudyConstants.*; -import static org.gridsuite.study.server.notification.NotificationService.HEADER_USER_ID; -import static org.gridsuite.study.server.service.client.util.UrlUtil.buildEndPointUrl; - -/** - * @author Thang PHAM - */ -@Service -public class DynamicSecurityAnalysisClient extends AbstractRestClient { - public static final String API_VERSION = DYNAMIC_SECURITY_ANALYSIS_API_VERSION; - public static final String DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER = "parameters"; - public static final String DYNAMIC_SECURITY_ANALYSIS_END_POINT_RUN = "networks"; - public static final String DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT = "results"; - - protected DynamicSecurityAnalysisClient(RemoteServicesProperties remoteServicesProperties, - RestTemplate restTemplate) { - super(remoteServicesProperties.getServiceUri("dynamic-security-analysis-server"), restTemplate); - } - - private String getParametersWithUuidUrl(UUID parametersUuid) { - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); - - return UriComponentsBuilder.fromUriString(parametersBaseUrl + "/{uuid}") - .buildAndExpand(parametersUuid) - .toUriString(); - } - - // --- Related parameters methods --- // - public String getProviders() { - String url = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, "providers"); - return getRestTemplate().getForObject(url, String.class); - } - - public String getProvider(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); - - String url = UriComponentsBuilder.fromUriString(parametersBaseUrl + "/{uuid}/provider") - .buildAndExpand(parametersUuid) - .toUriString(); - - return getRestTemplate().getForObject(url, String.class); - } - - public String getParameters(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - - String url = getParametersWithUuidUrl(parametersUuid); - - return getRestTemplate().getForObject(url, String.class); - } - - public UUID createParameters(@NonNull String parametersInfos) { - Objects.requireNonNull(parametersInfos); - - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); - - String url = UriComponentsBuilder.fromUriString(parametersBaseUrl) - .buildAndExpand() - .toUriString(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - - return getRestTemplate().postForObject(url, httpEntity, UUID.class); - } - - public void updateParameters(@NonNull UUID parametersUuid, @NonNull String parametersInfos) { - Objects.requireNonNull(parametersUuid); - Objects.requireNonNull(parametersInfos); - - String url = getParametersWithUuidUrl(parametersUuid); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - - getRestTemplate().put(url, httpEntity); - } - - public UUID duplicateParameters(@NonNull UUID sourceParametersUuid) { - Objects.requireNonNull(sourceParametersUuid); - - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); - - String url = UriComponentsBuilder.fromUriString(parametersBaseUrl + "/{uuid}/duplicate") - .buildAndExpand(sourceParametersUuid) - .toUriString(); - - return getRestTemplate().postForObject(url, null, UUID.class); - } - - public void deleteParameters(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - - String url = getParametersWithUuidUrl(parametersUuid); - - // call dynamic-security-analysis REST API - getRestTemplate().delete(url); - } - - public UUID createDefaultParameters() { - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); - - String url = UriComponentsBuilder.fromUriString(parametersBaseUrl + "/default") - .buildAndExpand() - .toUriString(); - - return getRestTemplate().postForObject(url, null, UUID.class); - } - - // --- Related run computation methods --- // - - public UUID run(@NonNull String receiver, @NonNull UUID networkUuid, String variantId, - @NonNull ReportInfos reportInfos, @NonNull UUID dynamicSimulationResultUuid, - @NonNull UUID parametersUuid, String userId, boolean debug) { - Objects.requireNonNull(receiver); - Objects.requireNonNull(networkUuid); - Objects.requireNonNull(reportInfos); - Objects.requireNonNull(dynamicSimulationResultUuid); - Objects.requireNonNull(parametersUuid); - - String runBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RUN); - - UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(runBaseUrl + "/{networkUuid}/run"); - if (StringUtils.isNotBlank(variantId)) { - uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); - } - if (debug) { - uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true); - } - uriComponentsBuilder - .queryParam("dynamicSimulationResultUuid", dynamicSimulationResultUuid) - .queryParam("parametersUuid", parametersUuid) - .queryParam(QUERY_PARAM_RECEIVER, receiver) - .queryParam(QUERY_PARAM_REPORT_UUID, reportInfos.reportUuid()) - .queryParam(QUERY_PARAM_REPORTER_ID, reportInfos.nodeUuid()) - .queryParam(QUERY_PARAM_REPORT_TYPE, StudyService.ReportType.DYNAMIC_SECURITY_ANALYSIS.reportKey); - String url = uriComponentsBuilder - .buildAndExpand(networkUuid) - .toUriString(); - - HttpHeaders headers = new HttpHeaders(); - headers.set(HEADER_USER_ID, userId); - headers.setContentType(MediaType.APPLICATION_JSON); - - // call dynamic-security-analysis REST API - HttpEntity httpEntity = new HttpEntity<>(null, headers); - - return getRestTemplate().postForObject(url, httpEntity, UUID.class); - } - - // --- Related result methods --- // - - public DynamicSecurityAnalysisStatus getStatus(@NonNull UUID resultUuid) { - Objects.requireNonNull(resultUuid); - - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); - - String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/status") - .buildAndExpand(resultUuid) - .toUriString(); - - // call dynamic-security-analysis REST API - return getRestTemplate().getForObject(url, DynamicSecurityAnalysisStatus.class); - } - - public void invalidateStatus(@NonNull List resultUuids) { - if (CollectionUtils.isEmpty(resultUuids)) { - return; - } - - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); - - String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/invalidate-status") - .queryParam("resultUuid", resultUuids) - .build() - .toUriString(); - getRestTemplate().put(url, null); - } - - public void deleteResults(List resultUuids) { - if (CollectionUtils.isEmpty(resultUuids)) { - return; - } - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); - UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(resultBaseUrl).queryParam(QUERY_PARAM_RESULTS_UUIDS, resultUuids); - String path = uriComponentsBuilder.build().toUriString(); - // call dynamic-security-analysis REST API - getRestTemplate().delete(path); - } - - public Integer getResultsCount() { - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); - String url = UriComponentsBuilder.fromUriString(resultBaseUrl) - .toUriString(); - - // call dynamic-security-analysis REST API - return getRestTemplate().getForObject(url, Integer.class); - } - - public ResponseEntity downloadDebugFile(UUID resultUuid) { - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); - String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/download-debug-file") - .buildAndExpand(resultUuid) - .toUriString(); - return getRestTemplate().exchange(url, HttpMethod.GET, null, Resource.class); - } - -} diff --git a/src/main/java/org/gridsuite/study/server/service/client/dynamicsimulation/DynamicSimulationClient.java b/src/main/java/org/gridsuite/study/server/service/client/dynamicsimulation/DynamicSimulationClient.java deleted file mode 100644 index 7bd9a92b7a..0000000000 --- a/src/main/java/org/gridsuite/study/server/service/client/dynamicsimulation/DynamicSimulationClient.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2022, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.study.server.service.client.dynamicsimulation; - -import org.gridsuite.study.server.dto.ReportInfos; -import org.gridsuite.study.server.dto.dynamicsimulation.DynamicSimulationStatus; -import org.gridsuite.study.server.dto.dynamicsimulation.event.EventInfos; -import org.gridsuite.study.server.service.client.RestClient; -import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; -import org.springframework.lang.NonNull; - -import java.util.List; -import java.util.UUID; - -import static org.gridsuite.study.server.StudyConstants.DYNAMIC_SIMULATION_API_VERSION; - -/** - * @author Thang PHAM - */ -public interface DynamicSimulationClient extends RestClient { - String API_VERSION = DYNAMIC_SIMULATION_API_VERSION; - String DELIMITER = "/"; - String DYNAMIC_SIMULATION_END_POINT_PARAMETER = "parameters"; - String DYNAMIC_SIMULATION_END_POINT_RUN = "networks"; - String DYNAMIC_SIMULATION_END_POINT_RESULT = "results"; - String DYNAMIC_SIMULATION_END_POINT_RESULT_COUNT = "supervision/results-count"; - - // --- Parameters related methods --- // - - String getProviders(); - - String getProvider(@NonNull UUID parametersUuid); - - String getParameters(@NonNull UUID parametersUuid); - - UUID createParameters(@NonNull String parametersInfos); - - void updateParameters(@NonNull UUID parametersUuid, @NonNull String parametersInfos); - - UUID duplicateParameters(@NonNull UUID sourceParametersUuid); - - void deleteParameters(@NonNull UUID parametersUuid); - - UUID createDefaultParameters(); - - // --- Run computation related methods --- // - - UUID run(String receiver, UUID networkUuid, String variantId, ReportInfos reportInfos, - UUID parametersUuid, List events, String userId, boolean debug); - - UUID getTimeSeriesResult(UUID resultUuid); - - UUID getTimelineResult(UUID resultUuid); - - DynamicSimulationStatus getStatus(UUID resultUuid); - - void invalidateStatus(List resultUuids); - - void deleteResults(List resultsUuids); - - void deleteAllResults(); - - Integer getResultsCount(); - - ResponseEntity downloadDebugFile(UUID resultUuid); - -} diff --git a/src/main/java/org/gridsuite/study/server/service/client/dynamicsimulation/impl/DynamicSimulationClientImpl.java b/src/main/java/org/gridsuite/study/server/service/client/dynamicsimulation/impl/DynamicSimulationClientImpl.java deleted file mode 100644 index 4484ef2eaf..0000000000 --- a/src/main/java/org/gridsuite/study/server/service/client/dynamicsimulation/impl/DynamicSimulationClientImpl.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (c) 2022, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.study.server.service.client.dynamicsimulation.impl; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.gridsuite.study.server.RemoteServicesProperties; -import org.gridsuite.study.server.dto.ReportInfos; -import org.gridsuite.study.server.dto.dynamicsimulation.DynamicSimulationStatus; -import org.gridsuite.study.server.dto.dynamicsimulation.event.EventInfos; -import org.gridsuite.study.server.service.StudyService; -import org.gridsuite.study.server.service.client.AbstractRestClient; -import org.gridsuite.study.server.service.client.dynamicsimulation.DynamicSimulationClient; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.lang.NonNull; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -import static org.gridsuite.study.server.StudyConstants.*; -import static org.gridsuite.study.server.notification.NotificationService.HEADER_USER_ID; -import static org.gridsuite.study.server.service.client.util.UrlUtil.buildEndPointUrl; - -/** - * @author Thang PHAM - */ -@Service -public class DynamicSimulationClientImpl extends AbstractRestClient implements DynamicSimulationClient { - - public DynamicSimulationClientImpl(RemoteServicesProperties remoteServicesProperties, - RestTemplate restTemplate) { - super(remoteServicesProperties.getServiceUri("dynamic-simulation-server"), restTemplate); - } - - private String getParametersWithUuidUrl(UUID parametersUuid) { - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); - - return UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/{uuid}") - .buildAndExpand(parametersUuid) - .toUriString(); - } - - // --- Parameters related methods --- // - - @Override - public String getProviders() { - String url = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, "providers"); - return getRestTemplate().getForObject(url, String.class); - } - - @Override - public String getProvider(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/{uuid}/provider") - .buildAndExpand(parametersUuid) - .toUriString(); - - return getRestTemplate().getForObject(url, String.class); - } - - @Override - public String getParameters(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - - String url = getParametersWithUuidUrl(parametersUuid); - - return getRestTemplate().getForObject(url, String.class); - } - - @Override - public UUID createParameters(@NonNull String parametersInfos) { - Objects.requireNonNull(parametersInfos); - - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl) - .buildAndExpand() - .toUriString(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - - return getRestTemplate().postForObject(url, httpEntity, UUID.class); - } - - @Override - public void updateParameters(@NonNull UUID parametersUuid, @NonNull String parametersInfos) { - Objects.requireNonNull(parametersUuid); - Objects.requireNonNull(parametersInfos); - - String url = getParametersWithUuidUrl(parametersUuid); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - - getRestTemplate().put(url, httpEntity); - } - - @Override - public UUID duplicateParameters(@NonNull UUID sourceParametersUuid) { - Objects.requireNonNull(sourceParametersUuid); - - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/{uuid}/duplicate") - .buildAndExpand(sourceParametersUuid) - .toUriString(); - - return getRestTemplate().postForObject(url, null, UUID.class); - } - - @Override - public void deleteParameters(@NonNull UUID parametersUuid) { - Objects.requireNonNull(parametersUuid); - - String url = getParametersWithUuidUrl(parametersUuid); - - // call dynamic-simulation REST API - getRestTemplate().delete(url); - } - - @Override - public UUID createDefaultParameters() { - String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); - - String url = UriComponentsBuilder - .fromUriString(parametersBaseUrl + "/default") - .buildAndExpand() - .toUriString(); - - return getRestTemplate().postForObject(url, null, UUID.class); - } - - // --- Run computation related methods --- // - - @Override - public UUID run(String receiver, UUID networkUuid, String variantId, ReportInfos reportInfos, UUID parametersUuid, List events, String userId, boolean debug) { - Objects.requireNonNull(networkUuid); - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RUN); - - UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(endPointUrl + "/{networkUuid}/run"); - if (StringUtils.isNotBlank(variantId)) { - uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); - } - if (debug) { - uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true); - } - uriComponentsBuilder - .queryParam("parametersUuid", parametersUuid) - .queryParam(QUERY_PARAM_RECEIVER, receiver) - .queryParam(QUERY_PARAM_REPORT_UUID, reportInfos.reportUuid()) - .queryParam(QUERY_PARAM_REPORTER_ID, reportInfos.nodeUuid()) - .queryParam(QUERY_PARAM_REPORT_TYPE, StudyService.ReportType.DYNAMIC_SIMULATION.reportKey); - var uriComponent = uriComponentsBuilder - .buildAndExpand(networkUuid); - - HttpHeaders headers = new HttpHeaders(); - headers.set(HEADER_USER_ID, userId); - headers.setContentType(MediaType.APPLICATION_JSON); - - // call dynamic-simulation REST API - HttpEntity> httpEntity = new HttpEntity<>(events, headers); - return getRestTemplate().postForObject(uriComponent.toUriString(), httpEntity, UUID.class); - } - - @Override - public UUID getTimeSeriesResult(UUID resultUuid) { - Objects.requireNonNull(resultUuid); - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); - - var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl + "/{resultUuid}/timeseries") - .buildAndExpand(resultUuid); - - return getRestTemplate().getForObject(uriComponents.toUriString(), UUID.class); - } - - @Override - public UUID getTimelineResult(UUID resultUuid) { - Objects.requireNonNull(resultUuid); - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); - - var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl + "/{resultUuid}/timeline") - .buildAndExpand(resultUuid); - - return getRestTemplate().getForObject(uriComponents.toUriString(), UUID.class); - } - - @Override - public DynamicSimulationStatus getStatus(UUID resultUuid) { - Objects.requireNonNull(resultUuid); - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); - - var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl + "/{resultUuid}/status") - .buildAndExpand(resultUuid); - - return getRestTemplate().getForObject(uriComponents.toUriString(), DynamicSimulationStatus.class); - } - - @Override - public void invalidateStatus(List resultUuids) { - if (CollectionUtils.isEmpty(resultUuids)) { - return; - } - - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); - - UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(endPointUrl + "/invalidate-status"); - - uriComponentsBuilder.queryParam("resultUuid", resultUuids); - - var uriComponents = uriComponentsBuilder.build(); - - getRestTemplate().put(uriComponents.toUriString(), null); - } - - @Override - public void deleteResults(List resultUuids) { - if (CollectionUtils.isEmpty(resultUuids)) { - return; - } - - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); - var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl).queryParam(QUERY_PARAM_RESULTS_UUIDS, resultUuids); - // call dynamic-simulation REST API - getRestTemplate().delete(uriComponents.build().toUriString()); - } - - @Override - public void deleteAllResults() { - deleteResults(null); - } - - @Override - public Integer getResultsCount() { - String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT_COUNT); - var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl); - // call dynamic-simulation REST API - return getRestTemplate().getForObject(uriComponents.toUriString(), Integer.class); - } - - @Override - public ResponseEntity downloadDebugFile(UUID resultUuid) { - String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); - String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/download-debug-file") - .buildAndExpand(resultUuid) - .toUriString(); - return getRestTemplate().exchange(url, org.springframework.http.HttpMethod.GET, null, Resource.class); - } - -} diff --git a/src/main/java/org/gridsuite/study/server/service/dynamicmargincalculation/DynamicMarginCalculationRestService.java b/src/main/java/org/gridsuite/study/server/service/dynamicmargincalculation/DynamicMarginCalculationRestService.java index 28bfc7db63..76780ecf88 100644 --- a/src/main/java/org/gridsuite/study/server/service/dynamicmargincalculation/DynamicMarginCalculationRestService.java +++ b/src/main/java/org/gridsuite/study/server/service/dynamicmargincalculation/DynamicMarginCalculationRestService.java @@ -10,66 +10,152 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.gridsuite.study.server.RemoteServicesProperties; import org.gridsuite.study.server.dto.NodeReceiver; import org.gridsuite.study.server.dto.ReportInfos; import org.gridsuite.study.server.dto.dynamicmargincalculation.DynamicMarginCalculationStatus; import org.gridsuite.study.server.repository.StudyEntity; -import org.gridsuite.study.server.service.client.dynamicmargincalculation.DynamicMarginCalculationClient; +import org.gridsuite.study.server.service.StudyService; +import org.gridsuite.study.server.service.common.AbstractComputationRestService; import org.gridsuite.study.server.service.common.ComputationParameters; import org.springframework.core.io.Resource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import java.io.UncheckedIOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Objects; import java.util.UUID; +import static org.gridsuite.study.server.StudyConstants.*; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_RECEIVER; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORTER_ID; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORT_TYPE; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORT_UUID; +import static org.gridsuite.study.server.notification.NotificationService.HEADER_USER_ID; +import static org.gridsuite.study.server.service.client.util.UrlUtil.buildEndPointUrl; + /** * @author Thang PHAM */ @Service -public class DynamicMarginCalculationRestService implements ComputationParameters { +public class DynamicMarginCalculationRestService extends AbstractComputationRestService implements ComputationParameters { - private final ObjectMapper objectMapper; + public static final String API_VERSION = DYNAMIC_MARGIN_CALCULATION_API_VERSION; + public static final String DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER = "parameters"; + public static final String DYNAMIC_MARGIN_CALCULATION_END_POINT_RUN = "networks"; + public static final String DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT = "results"; - private final DynamicMarginCalculationClient dynamicMarginCalculationClient; + private final ObjectMapper objectMapper; - public DynamicMarginCalculationRestService(ObjectMapper objectMapper, - DynamicMarginCalculationClient dynamicMarginCalculationClient) { + public DynamicMarginCalculationRestService( + RemoteServicesProperties remoteServicesProperties, RestTemplate restTemplate, ObjectMapper objectMapper) { + super(remoteServicesProperties.getServiceUri("dynamic-margin-calculation-server"), restTemplate); this.objectMapper = objectMapper; - this.dynamicMarginCalculationClient = dynamicMarginCalculationClient; } public String getParameters(UUID parametersUuid, String userId) { - return dynamicMarginCalculationClient.getParameters(parametersUuid, userId); + Objects.requireNonNull(parametersUuid); + + String url = getParametersWithUuidUrl(parametersUuid); + + HttpHeaders headers = new HttpHeaders(); + if (StringUtils.isNotBlank(userId)) { + headers.set(HEADER_USER_ID, userId); + } + + return getRestTemplate() + .exchange(url, HttpMethod.GET, new HttpEntity<>(headers), String.class).getBody(); + } + + private String getParametersWithUuidUrl(UUID parametersUuid) { + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); + + return UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/{uuid}") + .buildAndExpand(parametersUuid) + .toUriString(); } public UUID createParameters(String parameters) { - return dynamicMarginCalculationClient.createParameters(parameters); + Objects.requireNonNull(parameters); + + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl) + .buildAndExpand() + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity httpEntity = new HttpEntity<>(parameters, headers); + + return getRestTemplate().postForObject(url, httpEntity, UUID.class); } @Override public UUID createDefaultParameters() { - return dynamicMarginCalculationClient.createDefaultParameters(); + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/default") + .buildAndExpand() + .toUriString(); + + return getRestTemplate().postForObject(url, null, UUID.class); } public void updateParameters(UUID parametersUuid, String parametersInfos) { - dynamicMarginCalculationClient.updateParameters(parametersUuid, parametersInfos); + Objects.requireNonNull(parametersUuid); + Objects.requireNonNull(parametersInfos); + + String url = getParametersWithUuidUrl(parametersUuid); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); + + getRestTemplate().put(url, httpEntity); } @Override public UUID duplicateParameters(UUID sourceParameterId) { - return dynamicMarginCalculationClient.duplicateParameters(sourceParameterId); + Objects.requireNonNull(sourceParameterId); + + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/{uuid}/duplicate") + .buildAndExpand(sourceParameterId) + .toUriString(); + + return getRestTemplate().postForObject(url, null, UUID.class); } public void deleteParameters(UUID parametersUuid) { - dynamicMarginCalculationClient.deleteParameters(parametersUuid); + Objects.requireNonNull(parametersUuid); + + String url = getParametersWithUuidUrl(parametersUuid); + + // call dynamic-margin-calculation REST API + getRestTemplate().delete(url); } public UUID runDynamicMarginCalculation(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, - String variantId, UUID reportUuid, UUID dynamicSimulationParametersUuid, UUID dynamicSecurityAnalysisParametersUuid, UUID parametersUuid, String userId, + String variantId, UUID reportUuid, UUID dynamicSimulationParametersUuid, + UUID dynamicSecurityAnalysisParametersUuid, UUID parametersUuid, String userId, boolean debug) { // create receiver for getting back the notification in rabbitmq @@ -82,22 +168,90 @@ public UUID runDynamicMarginCalculation(UUID nodeUuid, UUID rootNetworkUuid, UUI throw new UncheckedIOException(e); } - return dynamicMarginCalculationClient.run(receiver, networkUuid, variantId, new ReportInfos(reportUuid, nodeUuid), dynamicSimulationParametersUuid, dynamicSecurityAnalysisParametersUuid, - parametersUuid, userId, debug); + ReportInfos reportInfos = new ReportInfos(reportUuid, nodeUuid); + + Objects.requireNonNull(receiver); + Objects.requireNonNull(networkUuid); + Objects.requireNonNull(reportInfos); + Objects.requireNonNull(dynamicSecurityAnalysisParametersUuid); + Objects.requireNonNull(parametersUuid); + + String runBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RUN); + + UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(runBaseUrl + "/{networkUuid}/run"); + if (StringUtils.isNotBlank(variantId)) { + uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); + } + if (debug) { + uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true); + } + uriComponentsBuilder + .queryParam("dynamicSimulationParametersUuid", dynamicSimulationParametersUuid) + .queryParam("dynamicSecurityAnalysisParametersUuid", dynamicSecurityAnalysisParametersUuid) + .queryParam("parametersUuid", parametersUuid) + .queryParam(QUERY_PARAM_RECEIVER, receiver) + .queryParam(QUERY_PARAM_REPORT_UUID, reportInfos.reportUuid()) + .queryParam(QUERY_PARAM_REPORTER_ID, reportInfos.nodeUuid()) + .queryParam(QUERY_PARAM_REPORT_TYPE, StudyService.ReportType.DYNAMIC_MARGIN_CALCULATION.reportKey); + String url = uriComponentsBuilder + .buildAndExpand(networkUuid) + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.set(HEADER_USER_ID, userId); + headers.setContentType(MediaType.APPLICATION_JSON); + + // call dynamic-margin-calculation REST API + HttpEntity httpEntity = new HttpEntity<>(null, headers); + + return getRestTemplate().postForObject(url, httpEntity, UUID.class); } public DynamicMarginCalculationStatus getStatus(UUID resultUuid) { - return resultUuid == null ? null : dynamicMarginCalculationClient.getStatus(resultUuid); + if (resultUuid == null) { + return null; + } + + Objects.requireNonNull(resultUuid); + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); + + String url = UriComponentsBuilder + .fromUriString(resultBaseUrl + "/{resultUuid}/status") + .buildAndExpand(resultUuid) + .toUriString(); + + // call dynamic-margin-calculation REST API + return getRestTemplate().getForObject(url, DynamicMarginCalculationStatus.class); } public void invalidateStatus(List resultUuids) { - if (CollectionUtils.isNotEmpty(resultUuids)) { - dynamicMarginCalculationClient.invalidateStatus(resultUuids); + if (CollectionUtils.isEmpty(resultUuids)) { + return; } + + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); + + String url = UriComponentsBuilder + .fromUriString(resultBaseUrl + "/invalidate-status") + .queryParam("resultUuid", resultUuids) + .build() + .toUriString(); + + getRestTemplate().put(url, null); } public void deleteResults(List resultUuids) { - dynamicMarginCalculationClient.deleteResults(resultUuids); + if (CollectionUtils.isEmpty(resultUuids)) { + return; + } + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); + String url = UriComponentsBuilder + .fromUriString(resultBaseUrl) + .queryParam(QUERY_PARAM_RESULTS_UUIDS, resultUuids) + .build() + .toUriString(); + // call dynamic-margin-calculation REST API + getRestTemplate().delete(url); } public void deleteAllResults() { @@ -105,26 +259,50 @@ public void deleteAllResults() { } public Integer getResultsCount() { - return dynamicMarginCalculationClient.getResultsCount(); + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); + String url = UriComponentsBuilder + .fromUriString(resultBaseUrl) + .toUriString(); + + // call dynamic-margin-calculation REST API + return getRestTemplate().getForObject(url, Integer.class); } public UUID getDynamicMarginCalculationParametersUuidOrElseCreateDefault(StudyEntity studyEntity) { if (studyEntity.getDynamicMarginCalculationParametersUuid() == null) { // not supposed to happen because we create it as the study creation - studyEntity.setDynamicMarginCalculationParametersUuid(dynamicMarginCalculationClient.createDefaultParameters()); + studyEntity.setDynamicMarginCalculationParametersUuid(createDefaultParameters()); } return studyEntity.getDynamicMarginCalculationParametersUuid(); } public String getProvider(UUID parametersUuid) { - return dynamicMarginCalculationClient.getProvider(parametersUuid); + Objects.requireNonNull(parametersUuid); + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/{uuid}/provider") + .buildAndExpand(parametersUuid) + .toUriString(); + + return getRestTemplate().getForObject(url, String.class); + } + + @Override + public List getEnumValues(String enumName, UUID resultUuidOpt) { + return List.of(); } public String getProviders() { - return dynamicMarginCalculationClient.getProviders(); + String url = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, "providers"); + return getRestTemplate().getForObject(url, String.class); } public ResponseEntity downloadDebugFile(UUID resultUuid) { - return dynamicMarginCalculationClient.downloadDebugFile(resultUuid); + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_MARGIN_CALCULATION_API_VERSION, DYNAMIC_MARGIN_CALCULATION_END_POINT_RESULT); + String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/download-debug-file") + .buildAndExpand(resultUuid) + .toUriString(); + return getRestTemplate().exchange(url, HttpMethod.GET, null, Resource.class); } } diff --git a/src/main/java/org/gridsuite/study/server/service/dynamicsecurityanalysis/DynamicSecurityAnalysisRestService.java b/src/main/java/org/gridsuite/study/server/service/dynamicsecurityanalysis/DynamicSecurityAnalysisRestService.java index 63c4b97b44..8573a2a1f4 100644 --- a/src/main/java/org/gridsuite/study/server/service/dynamicsecurityanalysis/DynamicSecurityAnalysisRestService.java +++ b/src/main/java/org/gridsuite/study/server/service/dynamicsecurityanalysis/DynamicSecurityAnalysisRestService.java @@ -10,70 +10,143 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.gridsuite.study.server.RemoteServicesProperties; import org.gridsuite.study.server.dto.NodeReceiver; import org.gridsuite.study.server.dto.ReportInfos; import org.gridsuite.study.server.dto.dynamicsecurityanalysis.DynamicSecurityAnalysisStatus; import org.gridsuite.study.server.repository.StudyEntity; -import org.gridsuite.study.server.service.client.dynamicsecurityanalysis.DynamicSecurityAnalysisClient; +import org.gridsuite.study.server.service.StudyService; +import org.gridsuite.study.server.service.common.AbstractComputationRestService; import org.gridsuite.study.server.service.common.ComputationParameters; import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import java.io.UncheckedIOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Objects; import java.util.UUID; +import static org.gridsuite.study.server.StudyConstants.*; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_RECEIVER; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORTER_ID; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORT_TYPE; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORT_UUID; +import static org.gridsuite.study.server.notification.NotificationService.HEADER_USER_ID; +import static org.gridsuite.study.server.service.client.util.UrlUtil.buildEndPointUrl; + /** * @author Thang PHAM */ @Service -public class DynamicSecurityAnalysisRestService implements ComputationParameters { +public class DynamicSecurityAnalysisRestService extends AbstractComputationRestService implements ComputationParameters { - private final ObjectMapper objectMapper; + public static final String API_VERSION = DYNAMIC_SECURITY_ANALYSIS_API_VERSION; + public static final String DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER = "parameters"; + public static final String DYNAMIC_SECURITY_ANALYSIS_END_POINT_RUN = "networks"; + public static final String DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT = "results"; - private final DynamicSecurityAnalysisClient dynamicSecurityAnalysisClient; + private final ObjectMapper objectMapper; - public DynamicSecurityAnalysisRestService(ObjectMapper objectMapper, - DynamicSecurityAnalysisClient dynamicSecurityAnalysisClient) { + public DynamicSecurityAnalysisRestService(RemoteServicesProperties remoteServicesProperties, RestTemplate restTemplate, ObjectMapper objectMapper) { + super(remoteServicesProperties.getServiceUri("dynamic-security-analysis-server"), restTemplate); this.objectMapper = objectMapper; - this.dynamicSecurityAnalysisClient = dynamicSecurityAnalysisClient; } public String getParameters(UUID parametersUuid) { - return dynamicSecurityAnalysisClient.getParameters(parametersUuid); + Objects.requireNonNull(parametersUuid); + + String url = getParametersWithUuidUrl(parametersUuid); + + return getRestTemplate().getForObject(url, String.class); } - public String getProviders() { - return dynamicSecurityAnalysisClient.getProviders(); + private String getParametersWithUuidUrl(UUID parametersUuid) { + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); + + return UriComponentsBuilder.fromUriString(parametersBaseUrl + "/{uuid}") + .buildAndExpand(parametersUuid) + .toUriString(); } - public UUID createParameters(String parameters) { - return dynamicSecurityAnalysisClient.createParameters(parameters); + public String getProviders() { + String url = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, "providers"); + return getRestTemplate().getForObject(url, String.class); } public ResponseEntity downloadDebugFile(UUID resultUuid) { - return dynamicSecurityAnalysisClient.downloadDebugFile(resultUuid); + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); + String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/download-debug-file") + .buildAndExpand(resultUuid) + .toUriString(); + return getRestTemplate().exchange(url, HttpMethod.GET, null, Resource.class); + } + + public UUID createParameters(String parameters) { + Objects.requireNonNull(parameters); + + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); + + String url = UriComponentsBuilder.fromUriString(parametersBaseUrl) + .buildAndExpand() + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity httpEntity = new HttpEntity<>(parameters, headers); + + return getRestTemplate().postForObject(url, httpEntity, UUID.class); } - @Override public UUID createDefaultParameters() { - return dynamicSecurityAnalysisClient.createDefaultParameters(); + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); + + String url = UriComponentsBuilder.fromUriString(parametersBaseUrl + "/default") + .buildAndExpand() + .toUriString(); + + return getRestTemplate().postForObject(url, null, UUID.class); } public void updateParameters(UUID parametersUuid, String parametersInfos) { - dynamicSecurityAnalysisClient.updateParameters(parametersUuid, parametersInfos); + Objects.requireNonNull(parametersUuid); + Objects.requireNonNull(parametersInfos); + + String url = getParametersWithUuidUrl(parametersUuid); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); + + getRestTemplate().put(url, httpEntity); } - @Override public UUID duplicateParameters(UUID sourceParameterId) { - return dynamicSecurityAnalysisClient.duplicateParameters(sourceParameterId); + Objects.requireNonNull(sourceParameterId); + + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); + + String url = UriComponentsBuilder.fromUriString(parametersBaseUrl + "/{uuid}/duplicate") + .buildAndExpand(sourceParameterId) + .toUriString(); + + return getRestTemplate().postForObject(url, null, UUID.class); } public void deleteParameters(UUID parametersUuid) { - dynamicSecurityAnalysisClient.deleteParameters(parametersUuid); + Objects.requireNonNull(parametersUuid); + + String url = getParametersWithUuidUrl(parametersUuid); + + // call dynamic-security-analysis REST API + getRestTemplate().delete(url); } public UUID runDynamicSecurityAnalysis(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, @@ -89,21 +162,82 @@ public UUID runDynamicSecurityAnalysis(UUID nodeUuid, UUID rootNetworkUuid, UUID throw new UncheckedIOException(e); } - return dynamicSecurityAnalysisClient.run(receiver, networkUuid, variantId, new ReportInfos(reportUuid, nodeUuid), dynamicSimulationResultUuid, parametersUuid, userId, debug); + ReportInfos reportInfos = new ReportInfos(reportUuid, nodeUuid); + Objects.requireNonNull(receiver); + Objects.requireNonNull(networkUuid); + Objects.requireNonNull(reportInfos); + Objects.requireNonNull(dynamicSimulationResultUuid); + Objects.requireNonNull(parametersUuid); + + String runBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RUN); + + UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(runBaseUrl + "/{networkUuid}/run"); + if (StringUtils.isNotBlank(variantId)) { + uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); + } + if (debug) { + uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true); + } + uriComponentsBuilder + .queryParam("dynamicSimulationResultUuid", dynamicSimulationResultUuid) + .queryParam("parametersUuid", parametersUuid) + .queryParam(QUERY_PARAM_RECEIVER, receiver) + .queryParam(QUERY_PARAM_REPORT_UUID, reportInfos.reportUuid()) + .queryParam(QUERY_PARAM_REPORTER_ID, reportInfos.nodeUuid()) + .queryParam(QUERY_PARAM_REPORT_TYPE, StudyService.ReportType.DYNAMIC_SECURITY_ANALYSIS.reportKey); + String url = uriComponentsBuilder + .buildAndExpand(networkUuid) + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.set(HEADER_USER_ID, userId); + headers.setContentType(MediaType.APPLICATION_JSON); + + // call dynamic-security-analysis REST API + HttpEntity httpEntity = new HttpEntity<>(null, headers); + + return getRestTemplate().postForObject(url, httpEntity, UUID.class); } public DynamicSecurityAnalysisStatus getStatus(UUID resultUuid) { - return resultUuid == null ? null : dynamicSecurityAnalysisClient.getStatus(resultUuid); + if (resultUuid == null) { + return null; + } + Objects.requireNonNull(resultUuid); + + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); + + String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/status") + .buildAndExpand(resultUuid) + .toUriString(); + + // call dynamic-security-analysis REST API + return getRestTemplate().getForObject(url, DynamicSecurityAnalysisStatus.class); } public void invalidateStatus(List resultUuids) { - if (CollectionUtils.isNotEmpty(resultUuids)) { - dynamicSecurityAnalysisClient.invalidateStatus(resultUuids); + if (CollectionUtils.isEmpty(resultUuids)) { + return; } + + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); + + String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/invalidate-status") + .queryParam("resultUuid", resultUuids) + .build() + .toUriString(); + getRestTemplate().put(url, null); } public void deleteResults(List resultUuids) { - dynamicSecurityAnalysisClient.deleteResults(resultUuids); + if (CollectionUtils.isEmpty(resultUuids)) { + return; + } + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); + UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(resultBaseUrl).queryParam(QUERY_PARAM_RESULTS_UUIDS, resultUuids); + String path = uriComponentsBuilder.build().toUriString(); + // call dynamic-security-analysis REST API + getRestTemplate().delete(path); } public void deleteAllResults() { @@ -111,18 +245,35 @@ public void deleteAllResults() { } public Integer getResultsCount() { - return dynamicSecurityAnalysisClient.getResultsCount(); + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_RESULT); + String url = UriComponentsBuilder.fromUriString(resultBaseUrl) + .toUriString(); + + // call dynamic-security-analysis REST API + return getRestTemplate().getForObject(url, Integer.class); } public UUID getDynamicSecurityAnalysisParametersUuidOrElseCreateDefault(StudyEntity studyEntity) { if (studyEntity.getDynamicSecurityAnalysisParametersUuid() == null) { // not supposed to happen because we create it as the study creation - studyEntity.setDynamicSecurityAnalysisParametersUuid(dynamicSecurityAnalysisClient.createDefaultParameters()); + studyEntity.setDynamicSecurityAnalysisParametersUuid(createDefaultParameters()); } return studyEntity.getDynamicSecurityAnalysisParametersUuid(); } public String getProvider(UUID parametersUuid) { - return dynamicSecurityAnalysisClient.getProvider(parametersUuid); + Objects.requireNonNull(parametersUuid); + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SECURITY_ANALYSIS_API_VERSION, DYNAMIC_SECURITY_ANALYSIS_END_POINT_PARAMETER); + + String url = UriComponentsBuilder.fromUriString(parametersBaseUrl + "/{uuid}/provider") + .buildAndExpand(parametersUuid) + .toUriString(); + + return getRestTemplate().getForObject(url, String.class); + } + + @Override + public List getEnumValues(String enumName, UUID resultUuidOpt) { + return List.of(); } } diff --git a/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/DynamicSimulationRestService.java b/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/DynamicSimulationRestService.java index a3fd17cabd..44be7fcd4f 100644 --- a/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/DynamicSimulationRestService.java +++ b/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/DynamicSimulationRestService.java @@ -7,44 +7,179 @@ package org.gridsuite.study.server.service.dynamicsimulation; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.powsybl.timeseries.DoubleTimeSeries; +import com.powsybl.timeseries.StringTimeSeries; +import com.powsybl.timeseries.TimeSeries; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.gridsuite.study.server.RemoteServicesProperties; +import org.gridsuite.study.server.dto.NodeReceiver; +import org.gridsuite.study.server.dto.ReportInfos; import org.gridsuite.study.server.dto.dynamicsimulation.DynamicSimulationStatus; import org.gridsuite.study.server.dto.dynamicsimulation.event.EventInfos; import org.gridsuite.study.server.dto.timeseries.TimeSeriesMetadataInfos; import org.gridsuite.study.server.dto.timeseries.TimelineEventInfos; +import org.gridsuite.study.server.dto.timeseries.rest.TimeSeriesGroupRest; +import org.gridsuite.study.server.error.StudyException; import org.gridsuite.study.server.repository.StudyEntity; +import org.gridsuite.study.server.service.StudyService; +import org.gridsuite.study.server.service.client.timeseries.TimeSeriesClient; +import org.gridsuite.study.server.service.common.AbstractComputationRestService; import org.gridsuite.study.server.service.common.ComputationParameters; import org.springframework.core.io.Resource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; -import java.util.List; -import java.util.UUID; +import java.io.UncheckedIOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Stream; + +import static org.gridsuite.study.server.StudyConstants.*; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_RECEIVER; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORTER_ID; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORT_TYPE; +import static org.gridsuite.study.server.StudyConstants.QUERY_PARAM_REPORT_UUID; +import static org.gridsuite.study.server.error.StudyBusinessErrorCode.COMPUTATION_RUNNING; +import static org.gridsuite.study.server.error.StudyBusinessErrorCode.TIME_SERIES_BAD_TYPE; +import static org.gridsuite.study.server.notification.NotificationService.HEADER_USER_ID; +import static org.gridsuite.study.server.service.client.util.UrlUtil.buildEndPointUrl; /** * @author Thang PHAM */ -public interface DynamicSimulationRestService extends ComputationParameters { +@Service +public class DynamicSimulationRestService extends AbstractComputationRestService implements ComputationParameters { + + public static final String API_VERSION = DYNAMIC_SIMULATION_API_VERSION; + public static final String DYNAMIC_SIMULATION_END_POINT_PARAMETER = "parameters"; + public static final String DYNAMIC_SIMULATION_END_POINT_RUN = "networks"; + public static final String DYNAMIC_SIMULATION_END_POINT_RESULT = "results"; + public static final String DYNAMIC_SIMULATION_END_POINT_RESULT_COUNT = "supervision/results-count"; + + private final ObjectMapper objectMapper; + private final TimeSeriesClient timeSeriesClient; + + public DynamicSimulationRestService(RemoteServicesProperties remoteServicesProperties, + RestTemplate restTemplate, + ObjectMapper objectMapper, + TimeSeriesClient timeSeriesClient) { + super(remoteServicesProperties.getServiceUri("dynamic-simulation-server"), restTemplate); + this.objectMapper = objectMapper; + this.timeSeriesClient = timeSeriesClient; + } // --- Parameters related methods --- // - String getProviders(); - String getProvider(UUID parametersUuid); + public String getProvider(UUID parametersUuid) { + Objects.requireNonNull(parametersUuid); + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/{uuid}/provider") + .buildAndExpand(parametersUuid) + .toUriString(); + + return getRestTemplate().getForObject(url, String.class); + } + + private String getParametersWithUuidUrl(UUID parametersUuid) { + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); + + return UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/{uuid}") + .buildAndExpand(parametersUuid) + .toUriString(); + } + + public String getParameters(UUID parametersUuid) { + Objects.requireNonNull(parametersUuid); + + String url = getParametersWithUuidUrl(parametersUuid); + + return getRestTemplate().getForObject(url, String.class); + } + + public UUID createParameters(String parameters) { + Objects.requireNonNull(parameters); + + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl) + .buildAndExpand() + .toUriString(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity httpEntity = new HttpEntity<>(parameters, headers); + + return getRestTemplate().postForObject(url, httpEntity, UUID.class); + } - String getParameters(UUID parametersUuid); + public UUID createDefaultParameters() { + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); - UUID createParameters(String parameters); + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/default") + .buildAndExpand() + .toUriString(); - UUID createDefaultParameters(); + return getRestTemplate().postForObject(url, null, UUID.class); + } - void updateParameters(UUID parametersUuid, String parametersInfos); + public void updateParameters(UUID parametersUuid, String parametersInfos) { + Objects.requireNonNull(parametersUuid); + Objects.requireNonNull(parametersInfos); - UUID duplicateParameters(UUID sourceParameterId); + String url = getParametersWithUuidUrl(parametersUuid); - void deleteParameters(UUID parametersUuid); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); - UUID getDynamicSimulationParametersUuidOrElseCreateDefault(StudyEntity studyEntity); + HttpEntity httpEntity = new HttpEntity<>(parametersInfos, headers); - // --- Run computation related methods --- // + getRestTemplate().put(url, httpEntity); + } + + public UUID duplicateParameters(UUID sourceParameterId) { + Objects.requireNonNull(sourceParameterId); + + String parametersBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_PARAMETER); + + String url = UriComponentsBuilder + .fromUriString(parametersBaseUrl + "/{uuid}/duplicate") + .buildAndExpand(sourceParameterId) + .toUriString(); + + return getRestTemplate().postForObject(url, null, UUID.class); + } + + public void deleteParameters(UUID parametersUuid) { + Objects.requireNonNull(parametersUuid); + + String url = getParametersWithUuidUrl(parametersUuid); + + // call dynamic-simulation REST API + getRestTemplate().delete(url); + } + + public UUID getDynamicSimulationParametersUuidOrElseCreateDefault(StudyEntity studyEntity) { + if (studyEntity.getDynamicSimulationParametersUuid() == null) { + // not supposed to happen because we create it as the study creation + studyEntity.setDynamicSimulationParametersUuid(createDefaultParameters()); + } + return studyEntity.getDynamicSimulationParametersUuid(); + } /** * Run a dynamic simulation from a given study, node UUID and some configured parameters @@ -59,8 +194,75 @@ public interface DynamicSimulationRestService extends ComputationParameters { * @param debug run in debug mode * @return the UUID of the dynamic simulation */ - UUID runDynamicSimulation(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, String variantId, - UUID reportUuid, UUID parametersUuid, List events, String userId, boolean debug); + public UUID runDynamicSimulation(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, String variantId, + UUID reportUuid, UUID parametersUuid, List events, String userId, boolean debug) { + + // create receiver for getting back the notification in rabbitmq + String receiver; + try { + receiver = URLEncoder.encode(objectMapper.writeValueAsString(new NodeReceiver(nodeUuid, rootNetworkUuid)), + StandardCharsets.UTF_8); + } catch (JsonProcessingException e) { + throw new UncheckedIOException(e); + } + + ReportInfos reportInfos = new ReportInfos(reportUuid, nodeUuid); + + Objects.requireNonNull(networkUuid); + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RUN); + + UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(endPointUrl + "/{networkUuid}/run"); + if (StringUtils.isNotBlank(variantId)) { + uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); + } + if (debug) { + uriComponentsBuilder.queryParam(QUERY_PARAM_DEBUG, true); + } + uriComponentsBuilder + .queryParam("parametersUuid", parametersUuid) + .queryParam(QUERY_PARAM_RECEIVER, receiver) + .queryParam(QUERY_PARAM_REPORT_UUID, reportInfos.reportUuid()) + .queryParam(QUERY_PARAM_REPORTER_ID, reportInfos.nodeUuid()) + .queryParam(QUERY_PARAM_REPORT_TYPE, StudyService.ReportType.DYNAMIC_SIMULATION.reportKey); + var uriComponent = uriComponentsBuilder + .buildAndExpand(networkUuid); + + HttpHeaders headers = new HttpHeaders(); + headers.set(HEADER_USER_ID, userId); + headers.setContentType(MediaType.APPLICATION_JSON); + + // call dynamic-simulation REST API + HttpEntity> httpEntity = new HttpEntity<>(events, headers); + return getRestTemplate().postForObject(uriComponent.toUriString(), httpEntity, UUID.class); + } + + /** + * Get list of time-series metadata + * @param resultUuid a given result UUID + * @return a list of time-series metadata + */ + public List getTimeSeriesMetadataList(UUID resultUuid) { + List metadataList = new ArrayList<>(); + + if (resultUuid != null) { + UUID timeSeriesUuid = getTimeSeriesResult(resultUuid); // get timeseries uuid + if (timeSeriesUuid != null) { + // get timeseries metadata + TimeSeriesGroupRest timeSeriesGroupMetadata = timeSeriesClient.getTimeSeriesGroupMetadata(timeSeriesUuid); + + if (timeSeriesGroupMetadata != null && + !CollectionUtils.isEmpty(timeSeriesGroupMetadata.getMetadatas())) { + metadataList = timeSeriesGroupMetadata + .getMetadatas() + .stream() + .map(TimeSeriesMetadataInfos::fromRest) + .toList(); + } + } + } + + return metadataList; + } /** * Get a list of curves from a given result UUID @@ -69,7 +271,47 @@ UUID runDynamicSimulation(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, * @param timeSeriesNames a given list of time-series names * @return a list of curves */ - List getTimeSeriesResult(UUID resultUuid, List timeSeriesNames); + public List getTimeSeriesResult(UUID resultUuid, List timeSeriesNames) { + List timeSeries = new ArrayList<>(); + + if (resultUuid != null) { + UUID timeSeriesUuid = getTimeSeriesResult(resultUuid); // get timeseries uuid + if (timeSeriesUuid != null) { + // get timeseries data + timeSeries = timeSeriesClient.getTimeSeriesGroup(timeSeriesUuid, timeSeriesNames); + + // get first element to check type + if (!CollectionUtils.isEmpty(timeSeries) && + !(timeSeries.get(0) instanceof DoubleTimeSeries)) { + throw new StudyException(TIME_SERIES_BAD_TYPE, "Time series can not be a type: " + + timeSeries.get(0).getClass().getSimpleName() + + ", expected type: " + DoubleTimeSeries.class.getSimpleName()); + } + } + } + + return (List) timeSeries; + } + + public UUID getTimeSeriesResult(UUID resultUuid) { + Objects.requireNonNull(resultUuid); + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); + + var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl + "/{resultUuid}/timeseries") + .buildAndExpand(resultUuid); + + return getRestTemplate().getForObject(uriComponents.toUriString(), UUID.class); + } + + public UUID getTimelineRestResult(UUID resultUuid) { + Objects.requireNonNull(resultUuid); + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); + + var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl + "/{resultUuid}/timeline") + .buildAndExpand(resultUuid); + + return getRestTemplate().getForObject(uriComponents.toUriString(), UUID.class); + } /** * Get timeline from a given result UUID @@ -77,43 +319,130 @@ UUID runDynamicSimulation(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, * @param resultUuid a given result UUID * @return a list of {@link TimelineEventInfos} */ - List getTimelineResult(UUID resultUuid); + public List getTimelineResult(UUID resultUuid) { + if (resultUuid != null) { + UUID timelineUuid = getTimelineRestResult(resultUuid); // get timeline uuid + if (timelineUuid != null) { + // get timeline data + List timelines = timeSeriesClient.getTimeSeriesGroup(timelineUuid, null); + + // get first element to check type + if (!CollectionUtils.isEmpty(timelines) && + !(timelines.getFirst() instanceof StringTimeSeries)) { + throw new StudyException(TIME_SERIES_BAD_TYPE, "Timelines can not be a type: " + + timelines.getFirst().getClass().getSimpleName() + + ", expected type: " + StringTimeSeries.class.getSimpleName()); + } + + // convert {@link StringTimeSeries} to {@link TimelineEventInfos} + // note that each {@link StringTimeSeries} corresponds to an array of {@link TimelineEventInfos} + return CollectionUtils.emptyIfNull(timelines).stream() + .flatMap(series -> Stream.of(((StringTimeSeries) series).toArray())) + .map(eventJson -> { + try { + return objectMapper.readValue(eventJson, TimelineEventInfos.class); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Error while deserializing timeline event: " + eventJson, e); + } + }).toList(); + } + } + + return Collections.emptyList(); + } /** * Get the current status of the simulation * @param resultUuid a given result UUID * @return the status of the dynamic simulation */ - DynamicSimulationStatus getStatus(UUID resultUuid); + public DynamicSimulationStatus getStatus(UUID resultUuid) { + if (resultUuid == null) { + return null; + } + Objects.requireNonNull(resultUuid); + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); + + var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl + "/{resultUuid}/status") + .buildAndExpand(resultUuid); + + return getRestTemplate().getForObject(uriComponents.toUriString(), DynamicSimulationStatus.class); + } /** * invalidate status of the simulation results * @param resultUuids a given list of result UUIDs */ - void invalidateStatus(List resultUuids); + public void invalidateStatus(List resultUuids) { + if (CollectionUtils.isEmpty(resultUuids)) { + return; + } + + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); + + UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(endPointUrl + "/invalidate-status"); + + uriComponentsBuilder.queryParam("resultUuid", resultUuids); + + var uriComponents = uriComponentsBuilder.build(); + + getRestTemplate().put(uriComponents.toUriString(), null); + } + + @Override + public List getEnumValues(String enumName, UUID resultUuidOpt) { + return List.of(); + } /** * Delete results - * @param resultsUuids a given results UUID + * @param resultUuids a given results UUID */ - void deleteResults(List resultsUuids); + public void deleteResults(List resultUuids) { + if (CollectionUtils.isEmpty(resultUuids)) { + return; + } + + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); + var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl).queryParam(QUERY_PARAM_RESULTS_UUIDS, resultUuids); + // call dynamic-simulation REST API + getRestTemplate().delete(uriComponents.build().toUriString()); + } /** * Delete all results */ - void deleteAllResults(); + public void deleteAllResults() { + deleteResults(null); + } /** * Get results count */ - Integer getResultsCount(); + public Integer getResultsCount() { + String endPointUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT_COUNT); + var uriComponents = UriComponentsBuilder.fromUriString(endPointUrl); + // call dynamic-simulation REST API + return getRestTemplate().getForObject(uriComponents.toUriString(), Integer.class); + } - /** - * Get list of time-series metadata - * @param resultUuid a given result UUID - * @return a list of time-series metadata - */ - List getTimeSeriesMetadataList(UUID resultUuid); + public void assertDynamicSimulationNotRunning(UUID resultUuid) { + DynamicSimulationStatus status = getStatus(resultUuid); + if (DynamicSimulationStatus.RUNNING == status) { + throw new StudyException(COMPUTATION_RUNNING); + } + } + + public String getProviders() { + String url = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, "providers"); + return getRestTemplate().getForObject(url, String.class); + } - ResponseEntity downloadDebugFile(UUID resultUuid); + public ResponseEntity downloadDebugFile(UUID resultUuid) { + String resultBaseUrl = buildEndPointUrl(getBaseUri(), DYNAMIC_SIMULATION_API_VERSION, DYNAMIC_SIMULATION_END_POINT_RESULT); + String url = UriComponentsBuilder.fromUriString(resultBaseUrl + "/{resultUuid}/download-debug-file") + .buildAndExpand(resultUuid) + .toUriString(); + return getRestTemplate().exchange(url, org.springframework.http.HttpMethod.GET, null, Resource.class); + } } diff --git a/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/impl/DynamicSimulationRestServiceImpl.java b/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/impl/DynamicSimulationRestServiceImpl.java deleted file mode 100644 index a59bd0e025..0000000000 --- a/src/main/java/org/gridsuite/study/server/service/dynamicsimulation/impl/DynamicSimulationRestServiceImpl.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 2022, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.study.server.service.dynamicsimulation.impl; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.powsybl.timeseries.DoubleTimeSeries; -import com.powsybl.timeseries.StringTimeSeries; -import com.powsybl.timeseries.TimeSeries; -import org.apache.commons.collections4.CollectionUtils; -import org.gridsuite.study.server.dto.NodeReceiver; -import org.gridsuite.study.server.dto.ReportInfos; -import org.gridsuite.study.server.dto.dynamicsimulation.DynamicSimulationStatus; -import org.gridsuite.study.server.dto.dynamicsimulation.event.EventInfos; -import org.gridsuite.study.server.dto.timeseries.TimeSeriesMetadataInfos; -import org.gridsuite.study.server.dto.timeseries.TimelineEventInfos; -import org.gridsuite.study.server.dto.timeseries.rest.TimeSeriesGroupRest; -import org.gridsuite.study.server.error.StudyException; -import org.gridsuite.study.server.repository.StudyEntity; -import org.gridsuite.study.server.service.client.dynamicsimulation.DynamicSimulationClient; -import org.gridsuite.study.server.service.client.timeseries.TimeSeriesClient; -import org.gridsuite.study.server.service.dynamicsimulation.DynamicSimulationRestService; -import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; - -import java.io.UncheckedIOException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; -import java.util.stream.Stream; - -import static org.gridsuite.study.server.error.StudyBusinessErrorCode.TIME_SERIES_BAD_TYPE; - -/** - * @author Thang PHAM - */ -@Service -public class DynamicSimulationRestServiceImpl implements DynamicSimulationRestService { - - private final ObjectMapper objectMapper; - - private final TimeSeriesClient timeSeriesClient; - - private final DynamicSimulationClient dynamicSimulationClient; - - public DynamicSimulationRestServiceImpl(ObjectMapper objectMapper, - TimeSeriesClient timeSeriesClient, - DynamicSimulationClient dynamicSimulationClient) { - this.objectMapper = objectMapper; - this.timeSeriesClient = timeSeriesClient; - this.dynamicSimulationClient = dynamicSimulationClient; - } - - @Override - public String getProviders() { - return dynamicSimulationClient.getProviders(); - } - - @Override - public String getProvider(UUID parametersUuid) { - return dynamicSimulationClient.getProvider(parametersUuid); - } - - @Override - public String getParameters(UUID parametersUuid) { - return dynamicSimulationClient.getParameters(parametersUuid); - } - - @Override - public UUID createParameters(String parameters) { - return dynamicSimulationClient.createParameters(parameters); - } - - @Override - public UUID createDefaultParameters() { - return dynamicSimulationClient.createDefaultParameters(); - } - - @Override - public void updateParameters(UUID parametersUuid, String parametersInfos) { - dynamicSimulationClient.updateParameters(parametersUuid, parametersInfos); - } - - @Override - public UUID duplicateParameters(UUID sourceParameterId) { - return dynamicSimulationClient.duplicateParameters(sourceParameterId); - } - - @Override - public void deleteParameters(UUID parametersUuid) { - dynamicSimulationClient.deleteParameters(parametersUuid); - } - - @Override - public UUID getDynamicSimulationParametersUuidOrElseCreateDefault(StudyEntity studyEntity) { - if (studyEntity.getDynamicSimulationParametersUuid() == null) { - // not supposed to happen because we create it as the study creation - studyEntity.setDynamicSimulationParametersUuid(dynamicSimulationClient.createDefaultParameters()); - } - return studyEntity.getDynamicSimulationParametersUuid(); - } - - @Override - public UUID runDynamicSimulation(UUID nodeUuid, UUID rootNetworkUuid, UUID networkUuid, String variantId, - UUID reportUuid, UUID parametersUuid, List events, String userId, boolean debug) { - - // create receiver for getting back the notification in rabbitmq - String receiver; - try { - receiver = URLEncoder.encode(objectMapper.writeValueAsString(new NodeReceiver(nodeUuid, rootNetworkUuid)), - StandardCharsets.UTF_8); - } catch (JsonProcessingException e) { - throw new UncheckedIOException(e); - } - - return dynamicSimulationClient.run(receiver, networkUuid, variantId, new ReportInfos(reportUuid, nodeUuid), parametersUuid, events, userId, debug); - } - - @Override - public List getTimeSeriesMetadataList(UUID resultUuid) { - List metadataList = new ArrayList<>(); - - if (resultUuid != null) { - UUID timeSeriesUuid = dynamicSimulationClient.getTimeSeriesResult(resultUuid); // get timeseries uuid - if (timeSeriesUuid != null) { - // get timeseries metadata - TimeSeriesGroupRest timeSeriesGroupMetadata = timeSeriesClient.getTimeSeriesGroupMetadata(timeSeriesUuid); - - if (timeSeriesGroupMetadata != null && - !CollectionUtils.isEmpty(timeSeriesGroupMetadata.getMetadatas())) { - metadataList = timeSeriesGroupMetadata - .getMetadatas() - .stream() - .map(TimeSeriesMetadataInfos::fromRest) - .toList(); - } - } - } - - return metadataList; - } - - @Override - public List getTimeSeriesResult(UUID resultUuid, List timeSeriesNames) { - List timeSeries = new ArrayList<>(); - - if (resultUuid != null) { - UUID timeSeriesUuid = dynamicSimulationClient.getTimeSeriesResult(resultUuid); // get timeseries uuid - if (timeSeriesUuid != null) { - // get timeseries data - timeSeries = timeSeriesClient.getTimeSeriesGroup(timeSeriesUuid, timeSeriesNames); - - // get first element to check type - if (!CollectionUtils.isEmpty(timeSeries) && - !(timeSeries.get(0) instanceof DoubleTimeSeries)) { - throw new StudyException(TIME_SERIES_BAD_TYPE, "Time series can not be a type: " - + timeSeries.get(0).getClass().getSimpleName() - + ", expected type: " + DoubleTimeSeries.class.getSimpleName()); - } - } - } - - return (List) timeSeries; - } - - @Override - public List getTimelineResult(UUID resultUuid) { - if (resultUuid != null) { - UUID timelineUuid = dynamicSimulationClient.getTimelineResult(resultUuid); // get timeline uuid - if (timelineUuid != null) { - // get timeline data - List timelines = timeSeriesClient.getTimeSeriesGroup(timelineUuid, null); - - // get first element to check type - if (!CollectionUtils.isEmpty(timelines) && - !(timelines.getFirst() instanceof StringTimeSeries)) { - throw new StudyException(TIME_SERIES_BAD_TYPE, "Timelines can not be a type: " - + timelines.getFirst().getClass().getSimpleName() - + ", expected type: " + StringTimeSeries.class.getSimpleName()); - } - - // convert {@link StringTimeSeries} to {@link TimelineEventInfos} - // note that each {@link StringTimeSeries} corresponds to an array of {@link TimelineEventInfos} - return CollectionUtils.emptyIfNull(timelines).stream() - .flatMap(series -> Stream.of(((StringTimeSeries) series).toArray())) - .map(eventJson -> { - try { - return objectMapper.readValue(eventJson, TimelineEventInfos.class); - } catch (JsonProcessingException e) { - throw new IllegalStateException("Error while deserializing timeline event: " + eventJson, e); - } - }).toList(); - } - } - - return Collections.emptyList(); - } - - @Override - public DynamicSimulationStatus getStatus(UUID resultUuid) { - return resultUuid == null ? null : dynamicSimulationClient.getStatus(resultUuid); - } - - @Override - public void invalidateStatus(List resultUuids) { - if (CollectionUtils.isNotEmpty(resultUuids)) { - dynamicSimulationClient.invalidateStatus(resultUuids); - } - } - - @Override - public void deleteResults(List resultUuids) { - dynamicSimulationClient.deleteResults(resultUuids); - } - - @Override - public void deleteAllResults() { - deleteResults(null); - } - - @Override - public Integer getResultsCount() { - return dynamicSimulationClient.getResultsCount(); - } - - @Override - public ResponseEntity downloadDebugFile(UUID resultUuid) { - return dynamicSimulationClient.downloadDebugFile(resultUuid); - } - -} diff --git a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java index 5a0dc0d277..4305211867 100644 --- a/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java +++ b/src/test/java/org/gridsuite/study/server/NetworkModificationTest.java @@ -44,9 +44,9 @@ import org.gridsuite.study.server.repository.nodeactivity.NodeActivityRepository; import org.gridsuite.study.server.repository.rootnetwork.RootNetworkNodeInfoRepository; import org.gridsuite.study.server.service.*; -import org.gridsuite.study.server.service.client.dynamicmargincalculation.DynamicMarginCalculationClient; -import org.gridsuite.study.server.service.client.dynamicsecurityanalysis.DynamicSecurityAnalysisClient; -import org.gridsuite.study.server.service.client.dynamicsimulation.DynamicSimulationClient; +import org.gridsuite.study.server.service.dynamicmargincalculation.DynamicMarginCalculationRestService; +import org.gridsuite.study.server.service.dynamicsecurityanalysis.DynamicSecurityAnalysisRestService; +import org.gridsuite.study.server.service.dynamicsimulation.DynamicSimulationRestService; import org.gridsuite.study.server.service.loadflow.LoadFlowRestService; import org.gridsuite.study.server.service.pccmin.PccMinRestService; import org.gridsuite.study.server.service.securityanalysis.SecurityAnalysisRestService; @@ -224,6 +224,9 @@ class NetworkModificationTest { @Autowired private StateEstimationRestService stateEstimationService; + @Autowired + DynamicMarginCalculationRestService dynamicMarginCalculationRestService; + @MockitoSpyBean private UserAdminService userAdminService; @@ -234,13 +237,10 @@ class NetworkModificationTest { private StudyRepository studyRepository; @MockitoSpyBean - private DynamicSimulationClient dynamicSimulationClient; - - @MockitoSpyBean - DynamicSecurityAnalysisClient dynamicSecurityAnalysisClient; + private DynamicSimulationRestService dynamicSimulationRestService; @MockitoSpyBean - DynamicMarginCalculationClient dynamicMarginCalculationClient; + private DynamicSecurityAnalysisRestService dynamicSecurityAnalysisRestService; @MockitoSpyBean private RootNetworkNodeInfoRepository rootNetworkNodeInfoRepository; @@ -309,10 +309,10 @@ void setup() { voltageInitService.setBaseUri(baseUrl); stateEstimationService.setBaseUri(baseUrl); pccMinService.setBaseUri(baseUrl); + dynamicMarginCalculationRestService.setBaseUri(baseUrl); - doReturn(baseUrl).when(dynamicSimulationClient).getBaseUri(); - doReturn(baseUrl).when(dynamicSecurityAnalysisClient).getBaseUri(); - doReturn(baseUrl).when(dynamicMarginCalculationClient).getBaseUri(); + doReturn(baseUrl).when(dynamicSimulationRestService).getBaseUri(); + doReturn(baseUrl).when(dynamicSecurityAnalysisRestService).getBaseUri(); networkModificationService.setNetworkModificationServerBaseUri(baseUrl); directoryService.setDirectoryServerServerBaseUri(baseUrl); diff --git a/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java b/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java index cea6bab325..e4cd1aeb2b 100644 --- a/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java +++ b/src/test/java/org/gridsuite/study/server/NetworkModificationTreeTest.java @@ -46,9 +46,9 @@ import org.gridsuite.study.server.repository.rootnetwork.RootNetworkNodeInfoRepository; import org.gridsuite.study.server.repository.rootnetwork.RootNetworkRepository; import org.gridsuite.study.server.service.*; -import org.gridsuite.study.server.service.client.dynamicmargincalculation.DynamicMarginCalculationClient; -import org.gridsuite.study.server.service.client.dynamicsecurityanalysis.DynamicSecurityAnalysisClient; -import org.gridsuite.study.server.service.client.dynamicsimulation.DynamicSimulationClient; +import org.gridsuite.study.server.service.dynamicmargincalculation.DynamicMarginCalculationRestService; +import org.gridsuite.study.server.service.dynamicsecurityanalysis.DynamicSecurityAnalysisRestService; +import org.gridsuite.study.server.service.dynamicsimulation.DynamicSimulationRestService; import org.gridsuite.study.server.service.loadflow.LoadFlowRestService; import org.gridsuite.study.server.service.pccmin.PccMinRestService; import org.gridsuite.study.server.service.securityanalysis.SecurityAnalysisRestService; @@ -168,6 +168,9 @@ class NetworkModificationTreeTest { @Autowired private PccMinRestService pccMinService; + @Autowired + DynamicMarginCalculationRestService dynamicMarginCalculationRestService; + @Autowired private SingleLineDiagramService singleLineDiagramService; @@ -181,13 +184,10 @@ class NetworkModificationTreeTest { private ActionsService actionsService; @MockitoSpyBean - private DynamicSimulationClient dynamicSimulationClient; - - @MockitoSpyBean - DynamicSecurityAnalysisClient dynamicSecurityAnalysisClient; + private DynamicSimulationRestService dynamicSimulationRestService; @MockitoSpyBean - DynamicMarginCalculationClient dynamicMarginCalculationClient; + private DynamicSecurityAnalysisRestService dynamicSecurityAnalysisRestService; @MockitoBean private NetworkStoreService networkStoreService; @@ -281,10 +281,10 @@ public Set