Skip to content

Commit 2391812

Browse files
move "run-and-save"
1 parent 4a157e9 commit 2391812

File tree

4 files changed

+67
-57
lines changed

4 files changed

+67
-57
lines changed

src/main/java/org/gridsuite/shortcircuit/server/ShortCircuitController.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,22 @@
88

99
import com.fasterxml.jackson.core.JsonProcessingException;
1010
import com.powsybl.security.LimitViolationType;
11-
import com.powsybl.shortcircuit.ShortCircuitParameters;
1211
import io.swagger.v3.oas.annotations.Operation;
1312
import io.swagger.v3.oas.annotations.Parameter;
14-
import io.swagger.v3.oas.annotations.media.Content;
15-
import io.swagger.v3.oas.annotations.media.Schema;
1613
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1714
import io.swagger.v3.oas.annotations.responses.ApiResponses;
1815
import io.swagger.v3.oas.annotations.tags.Tag;
1916
import org.gridsuite.shortcircuit.server.dto.*;
20-
import org.gridsuite.shortcircuit.server.service.ShortCircuitRunContext;
2117
import org.gridsuite.shortcircuit.server.service.ShortCircuitService;
2218
import org.springframework.data.domain.Page;
2319
import org.springframework.data.domain.Pageable;
2420
import org.springframework.http.MediaType;
2521
import org.springframework.http.ResponseEntity;
2622
import org.springframework.web.bind.annotation.*;
2723

28-
import java.util.*;
24+
import java.util.List;
25+
import java.util.Map;
26+
import java.util.UUID;
2927

3028
import static com.powsybl.shortcircuit.Fault.FaultType;
3129
import static org.gridsuite.shortcircuit.server.service.NotificationService.HEADER_USER_ID;
@@ -44,28 +42,20 @@ public ShortCircuitController(ShortCircuitService shortCircuitService) {
4442
this.shortCircuitService = shortCircuitService;
4543
}
4644

47-
private static ShortCircuitParameters getNonNullParameters(ShortCircuitParameters parameters) {
48-
return parameters != null ? parameters : new ShortCircuitParameters();
49-
}
50-
51-
@PostMapping(value = "/networks/{networkUuid}/run-and-save", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
45+
@PostMapping(value = "/networks/{networkUuid}/run-and-save", consumes = APPLICATION_JSON_VALUE)
5246
@Operation(summary = "Run a short circuit analysis on a network")
53-
@ApiResponses(value = {@ApiResponse(responseCode = "200",
54-
description = "The short circuit analysis has been performed",
55-
content = {@Content(mediaType = APPLICATION_JSON_VALUE,
56-
schema = @Schema(implementation = ShortCircuitParameters.class))})})
47+
@ApiResponse(responseCode = "200", description = "The short circuit analysis has been started")
5748
public ResponseEntity<UUID> runAndSave(@Parameter(description = "Network UUID") @PathVariable("networkUuid") UUID networkUuid,
5849
@Parameter(description = "Variant Id") @RequestParam(name = "variantId", required = false) String variantId,
5950
@Parameter(description = "Result receiver") @RequestParam(name = "receiver", required = false) String receiver,
6051
@Parameter(description = "reportUuid") @RequestParam(name = "reportUuid", required = false) UUID reportUuid,
6152
@Parameter(description = "reporterId") @RequestParam(name = "reporterId", required = false) String reporterId,
6253
@Parameter(description = "The type name for the report") @RequestParam(name = "reportType", required = false) String reportType,
6354
@Parameter(description = "Bus Id - Used for analysis targeting one bus") @RequestParam(name = "busId", required = false) String busId,
64-
@RequestBody(required = false) ShortCircuitParameters parameters,
55+
@Parameter(description = "Parameters to use for the analysis") @RequestParam(name = "parametersUuid", required = false) UUID parametersUuid,
56+
@Parameter(description = "Optional override of parameters for this analysis") @RequestBody(required = false) Map<String, Object> parametersOverride,
6557
@RequestHeader(HEADER_USER_ID) String userId) {
66-
ShortCircuitParameters nonNullParameters = getNonNullParameters(parameters);
67-
UUID resultUuid = shortCircuitService.runAndSaveResult(new ShortCircuitRunContext(networkUuid, variantId, receiver, nonNullParameters, reportUuid, reporterId, reportType, userId, busId));
68-
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(resultUuid);
58+
return ResponseEntity.ok(shortCircuitService.runAndSaveResult(networkUuid, variantId, receiver, parametersUuid, parametersOverride, reportUuid, reporterId, reportType, userId, busId));
6959
}
7060

7161
@GetMapping(value = "/results/{resultUuid}", produces = APPLICATION_JSON_VALUE)

src/main/java/org/gridsuite/shortcircuit/server/repositories/ShortCircuitParametersRepository.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
*/
77
package org.gridsuite.shortcircuit.server.repositories;
88

9+
import com.powsybl.shortcircuit.InitialVoltageProfileMode;
10+
import com.powsybl.shortcircuit.ShortCircuitParameters;
11+
import com.powsybl.shortcircuit.StudyType;
12+
import lombok.NonNull;
13+
import org.gridsuite.shortcircuit.server.dto.ShortCircuitPredefinedConfiguration;
914
import org.gridsuite.shortcircuit.server.entities.ShortCircuitParametersEntity;
1015
import org.springframework.data.jpa.repository.JpaRepository;
1116
import org.springframework.stereotype.Repository;
@@ -14,4 +19,39 @@
1419

1520
@Repository
1621
public interface ShortCircuitParametersRepository extends JpaRepository<ShortCircuitParametersEntity, UUID> {
22+
default ShortCircuitParametersEntity getByIdOrDefault(final UUID id) {
23+
return findById(id).orElseGet(() -> this.save(convert(getDefaultShortCircuitParameters(), ShortCircuitPredefinedConfiguration.ICC_MAX_WITH_NOMINAL_VOLTAGE_MAP)));
24+
}
25+
26+
private static ShortCircuitParameters getDefaultShortCircuitParameters() {
27+
return new ShortCircuitParameters()
28+
.setStudyType(StudyType.TRANSIENT)
29+
.setMinVoltageDropProportionalThreshold(20)
30+
.setWithFeederResult(true)
31+
.setWithLimitViolations(true)
32+
.setWithVoltageResult(false)
33+
.setWithFortescueResult(false)
34+
.setWithLoads(false)
35+
.setWithShuntCompensators(false)
36+
.setWithVSCConverterStations(true)
37+
.setWithNeutralPosition(true)
38+
.setInitialVoltageProfileMode(InitialVoltageProfileMode.NOMINAL)
39+
// the voltageRanges is not taken into account when initialVoltageProfileMode=NOMINAL
40+
.setVoltageRanges(null);
41+
}
42+
43+
private static ShortCircuitParametersEntity convert(@NonNull final ShortCircuitParameters parameters, final ShortCircuitPredefinedConfiguration shortCircuitPredefinedConfiguration) {
44+
return new ShortCircuitParametersEntity(parameters.isWithLimitViolations(),
45+
parameters.isWithVoltageResult(),
46+
parameters.isWithFortescueResult(),
47+
parameters.isWithFeederResult(),
48+
parameters.getStudyType(),
49+
parameters.getMinVoltageDropProportionalThreshold(),
50+
parameters.isWithLoads(),
51+
parameters.isWithShuntCompensators(),
52+
parameters.isWithVSCConverterStations(),
53+
parameters.isWithNeutralPosition(),
54+
parameters.getInitialVoltageProfileMode(),
55+
shortCircuitPredefinedConfiguration);
56+
}
1757
}

src/main/java/org/gridsuite/shortcircuit/server/service/EntityDtoUtils.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,6 @@ static FeederResult convert(@NonNull final FeederResultEntity feederResultEntity
7979
return new FeederResult(feederResultEntity.getConnectableId(), feederResultEntity.getCurrent(), feederResultEntity.getPositiveMagnitude());
8080
}
8181

82-
static ShortCircuitParametersEntity convert(@NonNull final ShortCircuitParameters parameters, final ShortCircuitPredefinedConfiguration shortCircuitPredefinedConfiguration) {
83-
return new ShortCircuitParametersEntity(parameters.isWithLimitViolations(),
84-
parameters.isWithVoltageResult(),
85-
parameters.isWithFortescueResult(),
86-
parameters.isWithFeederResult(),
87-
parameters.getStudyType(),
88-
parameters.getMinVoltageDropProportionalThreshold(),
89-
parameters.isWithLoads(),
90-
parameters.isWithShuntCompensators(),
91-
parameters.isWithVSCConverterStations(),
92-
parameters.isWithNeutralPosition(),
93-
parameters.getInitialVoltageProfileMode(),
94-
shortCircuitPredefinedConfiguration);
95-
}
96-
9782
static ShortCircuitParameters convert(@NonNull final ShortCircuitParametersEntity entity) {
9883
return new ShortCircuitParameters()
9984
.setStudyType(entity.getStudyType())

src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitService.java

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66
*/
77
package org.gridsuite.shortcircuit.server.service;
88

9+
import com.fasterxml.jackson.databind.JsonMappingException;
910
import com.fasterxml.jackson.databind.ObjectMapper;
10-
import com.powsybl.shortcircuit.InitialVoltageProfileMode;
1111
import com.powsybl.shortcircuit.ShortCircuitParameters;
12-
import com.powsybl.shortcircuit.StudyType;
1312
import com.powsybl.ws.commons.LogUtils;
1413
import lombok.NonNull;
1514
import lombok.RequiredArgsConstructor;
15+
import org.apache.commons.lang3.StringUtils;
1616
import org.gridsuite.shortcircuit.server.dto.*;
1717
import org.gridsuite.shortcircuit.server.entities.FaultResultEntity;
1818
import org.gridsuite.shortcircuit.server.entities.FeederResultEntity;
1919
import org.gridsuite.shortcircuit.server.entities.ShortCircuitAnalysisResultEntity;
2020
import org.gridsuite.shortcircuit.server.repositories.ShortCircuitAnalysisResultRepository;
21+
import org.gridsuite.shortcircuit.server.repositories.ShortCircuitParametersRepository;
2122
import org.slf4j.Logger;
2223
import org.slf4j.LoggerFactory;
2324
import org.springframework.data.domain.Page;
@@ -41,15 +42,26 @@ public class ShortCircuitService {
4142
@NonNull private final NotificationService notificationService;
4243
@NonNull private final UuidGeneratorService uuidGeneratorService;
4344
@NonNull private final ShortCircuitAnalysisResultRepository resultRepository;
45+
@NonNull private final ShortCircuitParametersRepository parametersRepository;
4446
@NonNull private final ObjectMapper objectMapper;
4547

46-
public UUID runAndSaveResult(ShortCircuitRunContext runContext) {
47-
Objects.requireNonNull(runContext);
48-
var resultUuid = uuidGeneratorService.generate();
49-
48+
public UUID runAndSaveResult(@NonNull final UUID networkUuid, final String variantId, final String receiver,
49+
final UUID parametersUuid, final Map<String, Object> parametersOverride,
50+
final UUID reportUuid, final String reporterId, final String reportType,
51+
@NonNull final String userId, final String busId) {
52+
ShortCircuitParameters scParameters = EntityDtoUtils.convertInfos(parametersRepository.getByIdOrDefault(parametersUuid)).parameters();
53+
if (parametersOverride != null && !parametersOverride.isEmpty()) {
54+
try {
55+
scParameters = objectMapper.updateValue(scParameters, parametersOverride);
56+
} catch (final JsonMappingException ex) {
57+
throw new RuntimeException("Error while updating parameters", ex);
58+
}
59+
}
60+
scParameters.setWithFortescueResult(StringUtils.isNotBlank(busId));
61+
final UUID resultUuid = uuidGeneratorService.generate();
5062
// update status to running status
5163
setStatus(List.of(resultUuid), ShortCircuitAnalysisStatus.RUNNING.name());
52-
notificationService.sendRunMessage(new ShortCircuitResultContext(resultUuid, runContext).toMessage(objectMapper));
64+
notificationService.sendRunMessage(new ShortCircuitResultContext(resultUuid, new ShortCircuitRunContext(networkUuid, variantId, receiver, scParameters, reportUuid, reporterId, reportType, userId, busId)).toMessage(objectMapper));
5365
return resultUuid;
5466
}
5567

@@ -158,23 +170,6 @@ public void stop(UUID resultUuid, String receiver) {
158170
notificationService.sendCancelMessage(new ShortCircuitCancelContext(resultUuid, receiver).toMessage());
159171
}
160172

161-
private static ShortCircuitParameters getDefaultShortCircuitParameters() {
162-
return new ShortCircuitParameters()
163-
.setStudyType(StudyType.TRANSIENT)
164-
.setMinVoltageDropProportionalThreshold(20)
165-
.setWithFeederResult(true)
166-
.setWithLimitViolations(true)
167-
.setWithVoltageResult(false)
168-
.setWithFortescueResult(false)
169-
.setWithLoads(false)
170-
.setWithShuntCompensators(false)
171-
.setWithVSCConverterStations(true)
172-
.setWithNeutralPosition(true)
173-
.setInitialVoltageProfileMode(InitialVoltageProfileMode.NOMINAL)
174-
// the voltageRanges is not taken into account when initialVoltageProfileMode=NOMINAL
175-
.setVoltageRanges(null);
176-
}
177-
178173
private static ShortCircuitParameters copy(ShortCircuitParameters shortCircuitParameters) {
179174
return new ShortCircuitParameters()
180175
.setStudyType(shortCircuitParameters.getStudyType())

0 commit comments

Comments
 (0)