Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class RestResponseEntityExceptionHandler {
@ExceptionHandler(ShortCircuitException.class)
protected ResponseEntity<Object> handleShortCircuitException(ShortCircuitException exception) {
return switch (exception.getType()) {
case RESULT_NOT_FOUND -> ResponseEntity.status(HttpStatus.NOT_FOUND).body(exception.getMessage());
case RESULT_NOT_FOUND, PARAMETERS_NOT_FOUND -> ResponseEntity.status(HttpStatus.NOT_FOUND).body(exception.getMessage());
case INVALID_EXPORT_PARAMS -> ResponseEntity.status(HttpStatus.BAD_REQUEST).body(exception.getMessage());
case BUS_OUT_OF_VOLTAGE, FILE_EXPORT_ERROR, MISSING_EXTENSION_DATA, INCONSISTENT_VOLTAGE_LEVELS ->
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(exception.getMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,19 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.powsybl.iidm.network.ThreeSides;
import com.powsybl.security.LimitViolationType;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.gridsuite.computation.dto.GlobalFilter;
import org.gridsuite.computation.dto.ReportInfos;
import org.gridsuite.computation.service.UuidGeneratorService;
import org.gridsuite.computation.utils.FilterUtils;
import org.gridsuite.shortcircuit.server.dto.*;
import org.gridsuite.shortcircuit.server.service.ShortCircuitRunContext;
import org.gridsuite.shortcircuit.server.service.ShortCircuitService;
import org.springframework.core.io.Resource;
import org.springframework.data.domain.Page;
Expand All @@ -29,7 +33,6 @@
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

import static com.powsybl.shortcircuit.Fault.FaultType;
Expand All @@ -46,6 +49,7 @@
public class ShortCircuitController {

private final ShortCircuitService shortCircuitService;
private final UuidGeneratorService uuidGeneratorService;
private final ObjectMapper objectMapper;

@PostMapping(value = "/networks/{networkUuid}/run-and-save", produces = APPLICATION_JSON_VALUE)
Expand All @@ -59,9 +63,23 @@ public ResponseEntity<UUID> runAndSave(@Parameter(description = "Network UUID")
@Parameter(description = "The type name for the report") @RequestParam(name = "reportType", required = false) String reportType,
@Parameter(description = "Bus Id - Used for analysis targeting one bus") @RequestParam(name = "busId", required = false) String busId,
@Parameter(description = "Debug") @RequestParam(name = "debug", required = false, defaultValue = "false") boolean debug,
@Parameter(description = "ID of parameters to use, fallback on default ones if none") @RequestParam(name = "parametersUuid") Optional<UUID> parametersUuid,
@Parameter(description = "ID of parameters to use, fallback on default ones if none") @RequestParam(name = "parametersUuid", required = false) UUID parametersUuid,
@Parameter(description = "resultUuid") @RequestParam(name = "resultUuid", required = false) UUID resultUuid,
@RequestHeader(HEADER_USER_ID) String userId) {
return ResponseEntity.ok().contentType(APPLICATION_JSON).body(shortCircuitService.runAndSaveResult(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, busId, debug, parametersUuid));
UUID resultUuidToRun = resultUuid != null ? resultUuid : uuidGeneratorService.generate();
ShortCircuitRunContext shortCircuitRunContext = ShortCircuitRunContext.builder()
.resultUuid(resultUuidToRun)
.networkUuid(networkUuid)
.variantId(variantId)
.receiver(receiver)
.reportInfos(ReportInfos.builder().reportUuid(reportUuid).reporterId(reporterId).computationType(reportType).build())
.userId(userId)
.parametersUuid(parametersUuid)
.busId(busId)
.debug(debug)
.provider("default-provider") // TODO : replace with null when fix in powsybl-ws-commons will handle null provider
.build();
return ResponseEntity.ok().contentType(APPLICATION_JSON).body(shortCircuitService.runAndSaveResult(shortCircuitRunContext));
}

@GetMapping(value = "/results/{resultUuid}", produces = APPLICATION_JSON_VALUE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public enum Type {
INVALID_EXPORT_PARAMS,
FILE_EXPORT_ERROR,
MISSING_EXTENSION_DATA,
INCONSISTENT_VOLTAGE_LEVELS
INCONSISTENT_VOLTAGE_LEVELS,
PARAMETERS_NOT_FOUND
}

private final Type type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,15 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.gridsuite.shortcircuit.server.dto.ShortCircuitParametersInfos;
import org.gridsuite.shortcircuit.server.service.ShortCircuitService;
import org.gridsuite.shortcircuit.server.dto.ShortCircuitParametersValues;
import org.gridsuite.shortcircuit.server.service.ShortCircuitParametersService;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.UUID;

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
Expand All @@ -26,57 +31,81 @@
public class ShortCircuitParametersController {
public static final String DUPLICATE_FROM = "duplicateFrom";

private final ShortCircuitService shortCircuitService;
private final ShortCircuitParametersService shortCircuitParametersService;

public ShortCircuitParametersController(ShortCircuitService shortCircuitService) {
this.shortCircuitService = shortCircuitService;
public ShortCircuitParametersController(ShortCircuitParametersService shortCircuitParametersService) {
this.shortCircuitParametersService = shortCircuitParametersService;
}

@GetMapping(path = "/{parametersUuid}")
@Operation(summary = "Get the parameters for an analysis")
@ApiResponse(responseCode = "200", description = "The parameters asked")
@ApiResponse(responseCode = "404", description = "The parameters don't exists")
public ResponseEntity<ShortCircuitParametersInfos> getParameters(@Parameter(description = "UUID of parameters") @PathVariable("parametersUuid") UUID parametersUuid) {
return ResponseEntity.of(shortCircuitService.getParameters(parametersUuid));
return ResponseEntity.of(shortCircuitParametersService.getParameters(parametersUuid));
}

@GetMapping(value = "/{parametersUuid}/values", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Get parameters values")
@ApiResponse(responseCode = "200", description = "parameters values were returned")
@ApiResponse(responseCode = "404", description = "parameters were not found")
public ResponseEntity<ShortCircuitParametersValues> getParametersValues(
@Parameter(description = "parameters UUID") @PathVariable("parametersUuid") UUID parametersUuid,
@Parameter(description = "provider name") @RequestParam("provider") String provider) {
return ResponseEntity.of(shortCircuitParametersService.getParametersValues(parametersUuid, provider));
}

@GetMapping(value = "/specific-parameters")
@Operation(summary = "Get all existing shortcircuit specific parameters for a given provider, or for all of them")
@ApiResponse(responseCode = "200", description = "The shortcircuit model-specific parameters")
public ResponseEntity<Map<String, List<com.powsybl.commons.parameters.Parameter>>> getSpecificShortCircuitParameters(
@Parameter(description = "The model provider") @RequestParam(name = "provider", required = false) String provider) {
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON)
.body(ShortCircuitParametersService.getSpecificShortCircuitParameters(provider));
}

@PostMapping(consumes = APPLICATION_JSON_VALUE)
@Operation(summary = "Create a new set of parameters for an analysis using given parameters")
@ApiResponse(responseCode = "200", description = "The new parameters entity ID")
public ResponseEntity<UUID> createParameters(@Parameter(description = "Parameters to save") @RequestBody ShortCircuitParametersInfos parameters) {
return ResponseEntity.ok(shortCircuitService.createParameters(parameters));
return ResponseEntity.ok(shortCircuitParametersService.createParameters(parameters));
}

@PostMapping(path = "/default")
@Operation(summary = "Create a new set of parameters for an analysis using default parameters")
@ApiResponse(responseCode = "200", description = "The new parameters entity ID")
public ResponseEntity<UUID> createDefaultParameters() {
return ResponseEntity.ok(shortCircuitService.createParameters(null));
return ResponseEntity.ok(shortCircuitParametersService.createDefaultParameters());
}

@PostMapping(params = { DUPLICATE_FROM })
@Operation(summary = "Duplicate the parameters of an analysis")
@ApiResponse(responseCode = "200", description = "The new parameters ID")
@ApiResponse(responseCode = "404", description = "The parameters don't exist")
public ResponseEntity<UUID> duplicateParameters(@Parameter(description = "UUID of parameters to duplicate") @RequestParam(name = DUPLICATE_FROM) UUID sourceParametersUuid) {
return ResponseEntity.of(shortCircuitService.duplicateParameters(sourceParametersUuid));
return ResponseEntity.of(shortCircuitParametersService.duplicateParameters(sourceParametersUuid));
}

@DeleteMapping(path = "/{parametersUuid}")
@Operation(summary = "Delete a set of parameters")
@ApiResponse(responseCode = "204", description = "The parameters are successfully deleted")
@ApiResponse(responseCode = "200", description = "The parameters are successfully deleted")
@ApiResponse(responseCode = "404", description = "The parameters don't exists")
public ResponseEntity<Void> deleteParameters(@Parameter(description = "UUID of parameters") @PathVariable("parametersUuid") UUID parametersUuid) {
return (shortCircuitService.deleteParameters(parametersUuid) ? ResponseEntity.noContent() : ResponseEntity.notFound()).build();
return (shortCircuitParametersService.deleteParameters(parametersUuid) ? ResponseEntity.ok() : ResponseEntity.notFound()).build();
}

@PutMapping(path = "/{parametersUuid}", consumes = APPLICATION_JSON_VALUE)
@Operation(summary = "Update parameters for an analysis or reset them to default ones")
@ApiResponse(responseCode = "204", description = "The parameters are successfully updated")
@ApiResponse(responseCode = "200", description = "The parameters are successfully updated")
@ApiResponse(responseCode = "404", description = "The parameters don't exists")
public ResponseEntity<Void> updateOrResetParameters(@Parameter(description = "UUID of parameters") @PathVariable("parametersUuid") UUID parametersUuid,
@Parameter(description = "Parameters to save instead of default ones", schema = @Schema(implementation = ShortCircuitParametersInfos.class))
@RequestBody(required = false) ShortCircuitParametersInfos parameters) {
return (shortCircuitService.updateOrResetParameters(parametersUuid, parameters) ? ResponseEntity.noContent() : ResponseEntity.notFound()).build();
try {
shortCircuitParametersService.updateParameters(parametersUuid, parameters);
return ResponseEntity.ok().build();
} catch (NoSuchElementException e) {
return ResponseEntity.notFound().build();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@
import com.powsybl.shortcircuit.VoltageRange;
import lombok.Builder;
import lombok.extern.jackson.Jacksonized;
import org.gridsuite.shortcircuit.server.service.ShortCircuitService;

import org.gridsuite.shortcircuit.server.entities.parameters.ShortCircuitParametersConstants;
import org.gridsuite.shortcircuit.server.entities.parameters.ShortCircuitParametersEntity;

import java.util.List;
import java.util.Map;

/**
* @since 1.7.0
Expand All @@ -23,10 +26,15 @@
@Jacksonized
public record ShortCircuitParametersInfos(
ShortCircuitPredefinedConfiguration predefinedParameters,
ShortCircuitParameters parameters
ShortCircuitParameters commonParameters,
Map<String, Map<String, String>> specificParametersPerProvider
) {
@JsonProperty(access = Access.READ_ONLY)
public List<VoltageRange> cei909VoltageRanges() {
return ShortCircuitService.CEI909_VOLTAGE_PROFILE;
return ShortCircuitParametersConstants.CEI909_VOLTAGE_PROFILE;
}

public ShortCircuitParametersEntity toEntity() {
return new ShortCircuitParametersEntity(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2024, 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.shortcircuit.server.dto;

import com.powsybl.shortcircuit.ShortCircuitParameters;

import lombok.Builder;
// import lombok.extern.jackson.Jacksonized;

import java.util.Map;

/**
* @since 1.7.0
*/
// @Jacksonized
@Builder
public record ShortCircuitParametersValues(
String provider,
ShortCircuitPredefinedConfiguration predefinedParameters,
ShortCircuitParameters commonParameters,
Map<String, String> specificParameters
) {
}

This file was deleted.

Loading