From 155f6b31bfd76d990180bd2e292cec3ff7e73f7e Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 29 Jan 2026 20:19:38 +0100 Subject: [PATCH] Dynamic Margin Calculation - Config gateway for margin calculation server Signed-off-by: Thang PHAM --- .../org/gridsuite/gateway/GatewayConfig.java | 1 + .../gridsuite/gateway/ServiceURIsConfig.java | 3 ++ .../DynamicMarginCalculationServer.java | 36 +++++++++++++++++++ .../gateway/endpoints/StudyServer.java | 3 +- src/main/resources/application-local.yml | 2 ++ .../gateway/ElementAccessControlTest.java | 1 + 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/gridsuite/gateway/endpoints/DynamicMarginCalculationServer.java diff --git a/src/main/java/org/gridsuite/gateway/GatewayConfig.java b/src/main/java/org/gridsuite/gateway/GatewayConfig.java index db5dd60..54d747e 100644 --- a/src/main/java/org/gridsuite/gateway/GatewayConfig.java +++ b/src/main/java/org/gridsuite/gateway/GatewayConfig.java @@ -52,6 +52,7 @@ public RouteLocator myRoutes(RouteLocatorBuilder builder, ApplicationContext con .route(p -> context.getBean(SecurityAnalysisServer.class).getRoute(p)) .route(p -> context.getBean(DynamicSimulationServer.class).getRoute(p)) .route(p -> context.getBean(DynamicSecurityAnalysisServer.class).getRoute(p)) + .route(p -> context.getBean(DynamicMarginCalculationServer.class).getRoute(p)) .route(p -> context.getBean(VoltageInitServer.class).getRoute(p)) .route(p -> context.getBean(ShortCircuitServer.class).getRoute(p)) .route(p -> context.getBean(StateEstimationOrchestratorServer.class).getRoute(p)) diff --git a/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java b/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java index 1cb43f1..58773cc 100644 --- a/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java +++ b/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java @@ -102,6 +102,9 @@ public class ServiceURIsConfig { @Value("${gridsuite.services.dynamic-security-analysis-server.base-uri:http://dynamic-security-analysis-server/}") String dynamicSecurityAnalysisServerBaseUri; + @Value("${gridsuite.services.dynamic-margin-calculation-server.base-uri:http://dynamic-margin-calculation-server/}") + String dynamicMarginCalculationServerBaseUri; + @Value("${gridsuite.services.case-import-server.base-uri:http://case-import-server/}") String caseImportServerBaseUri; diff --git a/src/main/java/org/gridsuite/gateway/endpoints/DynamicMarginCalculationServer.java b/src/main/java/org/gridsuite/gateway/endpoints/DynamicMarginCalculationServer.java new file mode 100644 index 0000000..afd5371 --- /dev/null +++ b/src/main/java/org/gridsuite/gateway/endpoints/DynamicMarginCalculationServer.java @@ -0,0 +1,36 @@ +/* + * 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.gateway.endpoints; + +import org.gridsuite.gateway.ServiceURIsConfig; +import org.springframework.stereotype.Component; + +/** + * @author Thang PHAM + */ +@Component(value = DynamicMarginCalculationServer.ENDPOINT_NAME) +public class DynamicMarginCalculationServer implements EndPointServer { + + public static final String ENDPOINT_NAME = "dynamic-margin-calculation"; + + private final ServiceURIsConfig servicesURIsConfig; + + public DynamicMarginCalculationServer(ServiceURIsConfig servicesURIsConfig) { + this.servicesURIsConfig = servicesURIsConfig; + } + + @Override + public String getEndpointBaseUri() { + return servicesURIsConfig.getDynamicMarginCalculationServerBaseUri(); + } + + @Override + public String getEndpointName() { + return ENDPOINT_NAME; + } +} diff --git a/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java b/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java index 37c4d67..0f1f720 100644 --- a/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java +++ b/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java @@ -39,6 +39,7 @@ public String getEndpointName() { public Set getUncontrolledRootPaths() { return Set.of("search", "svg-component-libraries", "export-network-formats", "loadflow-default-provider", "security-analysis-default-provider", "sensitivity-analysis-default-provider", - "dynamic-simulation-default-provider", "dynamic-security-analysis-default-provider", "optional-services", "servers"); + "dynamic-simulation-default-provider", "dynamic-security-analysis-default-provider", "dynamic-margin-calculation-default-provider", + "optional-services", "servers"); } } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index a45bd0d..6004c93 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -60,6 +60,8 @@ gridsuite: base-uri: http://localhost:5032 dynamic-security-analysis-server: base-uri: http://localhost:5040 + dynamic-margin-calculation-server: + base-uri: http://localhost:5041 case-import-server: base-uri: http://localhost:5039 voltage-init-server: diff --git a/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java b/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java index d1ba0fd..b769b37 100644 --- a/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java +++ b/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java @@ -133,6 +133,7 @@ void testWithNoControl() { stubFor(get(urlEqualTo("/v1/sensitivity-analysis-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); stubFor(get(urlEqualTo("/v1/dynamic-simulation-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); stubFor(get(urlEqualTo("/v1/dynamic-security-analysis-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); + stubFor(get(urlEqualTo("/v1/dynamic-margin-calculation-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); webClient .get().uri("study/v1/search") .header(HttpHeaders.AUTHORIZATION, "Bearer " + tokenUser1)