Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…ion-server into homogenize_2WT_attributes
  • Loading branch information
Slimane AMAR committed Feb 15, 2024
2 parents 728ce3d + a5cfd4b commit a3473de
Show file tree
Hide file tree
Showing 43 changed files with 1,322 additions and 353 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,15 @@ public enum ModificationType {
LINES_ATTACH_TO_SPLIT_LINES(PreloadingStrategy.NONE),
GENERATOR_SCALING(PreloadingStrategy.COLLECTION),
LOAD_SCALING(PreloadingStrategy.COLLECTION),
BRANCH_STATUS_MODIFICATION(PreloadingStrategy.NONE),
OPERATING_STATUS_MODIFICATION(PreloadingStrategy.NONE),
DELETE_VOLTAGE_LEVEL_ON_LINE(PreloadingStrategy.NONE),
DELETE_ATTACHING_LINE(PreloadingStrategy.NONE),
GENERATION_DISPATCH(PreloadingStrategy.COLLECTION),
VOLTAGE_INIT_MODIFICATION(PreloadingStrategy.COLLECTION),
VSC_CREATION(PreloadingStrategy.NONE),
CONVERTER_STATION_CREATION(PreloadingStrategy.NONE),
TABULAR_MODIFICATION(PreloadingStrategy.COLLECTION),
TABULAR_CREATION(PreloadingStrategy.COLLECTION),
BY_FORMULA_MODIFICATION(PreloadingStrategy.COLLECTION);

private final PreloadingStrategy strategy;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
import org.gridsuite.modification.server.service.NetworkModificationService;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

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

Expand Down Expand Up @@ -153,14 +155,14 @@ public ResponseEntity<ModificationInfos> getNetworkModification(
}

@DeleteMapping(value = "/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Delete network modifications")
@Operation(summary = "Delete network modifications. If owned by a group, then groupUuid must be provided.")
@ApiResponse(responseCode = "200", description = "The network modifications were deleted")
public ResponseEntity<Void> deleteNetworkModifications(
@Parameter(description = "Network modification UUIDs") @RequestParam(name = "uuids", required = false) List<UUID> networkModificationUuids,
@Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid,
@Parameter(description = "delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed) {
@Parameter(description = "Group UUID") @RequestParam(name = "groupUuid", required = false) UUID groupUuid,
@Parameter(description = "Delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed) {

if (networkModificationUuids == null || networkModificationUuids.isEmpty()) {
if (CollectionUtils.isEmpty(networkModificationUuids)) {
networkModificationService.deleteNetworkModifications(groupUuid, onlyStashed);
} else {
networkModificationService.deleteNetworkModifications(groupUuid, networkModificationUuids);
Expand Down Expand Up @@ -216,14 +218,21 @@ public ResponseEntity<UUID> createModificationInGroup(@RequestBody ModificationI
return ResponseEntity.ok().body(networkModificationService.createModificationInGroup(modificationsInfos));
}

@PostMapping(value = "/network-modifications/duplicate", consumes = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Duplicate some modifications without group ownership")
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The duplicated modifications uuids mapped with their source uuid")})
public ResponseEntity<Map<UUID, UUID>> duplicateModifications(@Parameter(description = "source modifications uuids list to duplicate") @RequestBody List<UUID> sourceModificationUuids) {
return ResponseEntity.ok().body(networkModificationService.duplicateModifications(sourceModificationUuids));
}

@PutMapping(value = "/network-modifications", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "stash or unstash network modifications")
@ApiResponse(responseCode = "200", description = "The network modifications were stashed")
public ResponseEntity<Void> stashNetworkModifications(
@Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List<UUID> networkModificationUuids,
@Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid,
@Parameter(description = "stash or unstash network modifications") @RequestParam(name = "stashed", defaultValue = "true") Boolean stashed) {
if (stashed) {
if (Boolean.TRUE.equals(stashed)) {
networkModificationService.stashNetworkModifications(networkModificationUuids);
} else {
networkModificationService.restoreNetworkModifications(networkModificationUuids);
Expand Down Expand Up @@ -251,4 +260,11 @@ public ResponseEntity<Void> deleteStashedModificationInGroup(@Parameter(descript
networkModificationService.deleteStashedModificationInGroup(groupUuid, errorOnGroupNotFound);
return ResponseEntity.ok().build();
}

@GetMapping(value = "/network-modifications/metadata", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Get modifications metadata")
@ApiResponse(responseCode = "200", description = "List of metadata used to describe modification elements")
public ResponseEntity<List<ModificationMetadata>> getModificationsMetadata(@RequestParam("ids") List<UUID> ids) {
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(networkModificationService.getModificationsMetadata(ids));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.IdentifiableType;
import lombok.NonNull;
import org.gridsuite.modification.server.dto.BranchStatusModificationInfos;
import org.gridsuite.modification.server.dto.OperatingStatusModificationInfos;
import org.springframework.http.HttpStatus;

import java.util.Objects;
Expand All @@ -27,11 +27,11 @@ public enum Type {
NETWORK_NOT_FOUND(HttpStatus.NOT_FOUND),
VARIANT_NOT_FOUND(HttpStatus.NOT_FOUND),
NOTHING_TO_DELETE(HttpStatus.BAD_REQUEST),
MODIFICATION_DELETION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
MODIFICATION_GROUP_NOT_FOUND(HttpStatus.NOT_FOUND),
MODIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND),
SWITCH_NOT_FOUND(HttpStatus.NOT_FOUND),
LINE_NOT_FOUND(HttpStatus.NOT_FOUND),
BRANCH_NOT_FOUND(HttpStatus.NOT_FOUND),
LOAD_NOT_FOUND(HttpStatus.NOT_FOUND),
BATTERY_NOT_FOUND(HttpStatus.NOT_FOUND),
GENERATOR_NOT_FOUND(HttpStatus.NOT_FOUND),
Expand Down Expand Up @@ -73,12 +73,15 @@ public enum Type {
LINE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST),
TWO_WINDINGS_TRANSFORMER_ALREADY_EXISTS(HttpStatus.BAD_REQUEST),
TWO_WINDINGS_TRANSFORMER_CREATION_ERROR(HttpStatus.BAD_REQUEST),
BRANCH_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
INJECTION_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
CONNECTION_POSITION_ERROR(HttpStatus.BAD_REQUEST),
MODIFY_BATTERY_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
BRANCH_ACTION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
BRANCH_ACTION_TYPE_EMPTY(HttpStatus.BAD_REQUEST, "Empty branch action type"),
BRANCH_ACTION_TYPE_UNKNOWN(HttpStatus.BAD_REQUEST),
BRANCH_ACTION_TYPE_UNSUPPORTED(HttpStatus.INTERNAL_SERVER_ERROR),
OPERATING_STATUS_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
OPERATING_ACTION_TYPE_EMPTY(HttpStatus.BAD_REQUEST, "Empty operating action type"),
OPERATING_ACTION_TYPE_UNKNOWN(HttpStatus.BAD_REQUEST),
OPERATING_ACTION_TYPE_UNSUPPORTED(HttpStatus.INTERNAL_SERVER_ERROR),
EQUIPMENT_TYPE_UNSUPPORTED(HttpStatus.INTERNAL_SERVER_ERROR),
LINE_SPLIT_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
LINE_SPLIT_NOT_FOUND(HttpStatus.NOT_FOUND),
LINE_ATTACH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
Expand All @@ -103,6 +106,7 @@ public enum Type {
PRELOADING_STRATEGY_NOT_ALLOWED(HttpStatus.INTERNAL_SERVER_ERROR),
VOLTAGE_INIT_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
TABULAR_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
TABULAR_CREATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
CREATE_VSC_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
HVDC_LINE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST),
VSC_CONVERTER_STATION_NOT_FOUND(HttpStatus.NOT_FOUND),
Expand Down Expand Up @@ -151,8 +155,12 @@ public static NetworkModificationException createEquipmentTypeUnknown(@NonNull S
return new NetworkModificationException(Type.UNKNOWN_EQUIPMENT_TYPE, "The equipment type : " + type + " is unknown");
}

public static NetworkModificationException createBranchActionTypeUnsupported(@NonNull BranchStatusModificationInfos.ActionType type) {
return new NetworkModificationException(Type.BRANCH_ACTION_TYPE_UNSUPPORTED, "The branch action type : " + type + " is unsupported");
public static NetworkModificationException createEquipmentTypeNotSupported(@NonNull String type) {
return new NetworkModificationException(Type.EQUIPMENT_TYPE_UNSUPPORTED, "The equipment type : " + type + " is not supported");
}

public static NetworkModificationException createOperatingActionTypeUnsupported(@NonNull OperatingStatusModificationInfos.ActionType type) {
return new NetworkModificationException(Type.OPERATING_ACTION_TYPE_UNSUPPORTED, "The operating action type : " + type + " is unsupported");
}

public static NetworkModificationException createEquipementAttributeNotEditable(@NonNull IdentifiableType equipmentType, @NonNull String attributeName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
@JsonSubTypes.Type(value = LineSplitWithVoltageLevelInfos.class),
@JsonSubTypes.Type(value = LineAttachToVoltageLevelInfos.class),
@JsonSubTypes.Type(value = LinesAttachToSplitLinesInfos.class),
@JsonSubTypes.Type(value = BranchStatusModificationInfos.class),
@JsonSubTypes.Type(value = OperatingStatusModificationInfos.class),
@JsonSubTypes.Type(value = EquipmentAttributeModificationInfos.class),
@JsonSubTypes.Type(value = GeneratorScalingInfos.class),
@JsonSubTypes.Type(value = LoadScalingInfos.class),
Expand All @@ -68,6 +68,7 @@
@JsonSubTypes.Type(value = VscCreationInfos.class),
@JsonSubTypes.Type(value = ConverterStationCreationInfos.class),
@JsonSubTypes.Type(value = TabularModificationInfos.class),
@JsonSubTypes.Type(value = TabularCreationInfos.class),
@JsonSubTypes.Type(value = ByFormulaModificationInfos.class)
})
@SuperBuilder
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
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.modification.server.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.gridsuite.modification.server.ModificationType;
import java.util.UUID;

/**
* @author David Braquart <david.braquart@rte-france.com>
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "Modification metadata")
public class ModificationMetadata {

@Schema(description = "Modification id")
private UUID id;

@Schema(description = "Modification type")
private ModificationType type;
}

Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.BranchStatusModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.OperatingStatusModificationEntity;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.BranchStatusModification;
import org.gridsuite.modification.server.modifications.OperatingStatusModification;
import java.util.HashMap;
import java.util.Map;

import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_ACTION_TYPE_EMPTY;
import static org.gridsuite.modification.server.NetworkModificationException.Type.OPERATING_ACTION_TYPE_EMPTY;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
Expand All @@ -33,10 +33,10 @@
@Getter
@Setter
@ToString(callSuper = true)
@Schema(description = "Branch status modification")
@JsonTypeName("BRANCH_STATUS_MODIFICATION")
@ModificationErrorTypeName("BRANCH_ACTION_ERROR")
public class BranchStatusModificationInfos extends EquipmentModificationInfos {
@Schema(description = "Operating status modification")
@JsonTypeName("OPERATING_STATUS_MODIFICATION")
@ModificationErrorTypeName("OPERATING_STATUS_MODIFICATION_ERROR")
public class OperatingStatusModificationInfos extends EquipmentModificationInfos {
@Schema(description = "Action type")
private ActionType action;

Expand All @@ -52,43 +52,31 @@ public enum ActionType {
}

@Override
public BranchStatusModificationEntity toEntity() {
return new BranchStatusModificationEntity(this);
public OperatingStatusModificationEntity toEntity() {
return new OperatingStatusModificationEntity(this);
}

@Override
public AbstractModification toModification() {
return new BranchStatusModification(this);
return new OperatingStatusModification(this);
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
String defaultName;
switch (action) {
case LOCKOUT:
defaultName = "Lockout ${branchId}";
break;
case TRIP:
defaultName = "Trip ${branchId}";
break;
case ENERGISE_END_ONE:
case ENERGISE_END_TWO:
defaultName = "Energise ${branchId}";
break;
case SWITCH_ON:
defaultName = "Switch on ${branchId}";
break;
default:
defaultName = "";
}
return reporter.createSubReporter(getType().name() + "_" + action, defaultName, "branchId", this.getEquipmentId());
String defaultName = switch (action) {
case LOCKOUT -> "Lockout ${equipmentId}";
case TRIP -> "Trip ${equipmentId}";
case ENERGISE_END_ONE, ENERGISE_END_TWO -> "Energise ${equipmentId}";
case SWITCH_ON -> "Switch on ${equipmentId}";
};
return reporter.createSubReporter(getType().name() + "_" + action, defaultName, "equipmentId", this.getEquipmentId());
}

@Override
public void check() {
super.check();
if (action == null) {
throw new NetworkModificationException(BRANCH_ACTION_TYPE_EMPTY);
throw new NetworkModificationException(OPERATING_ACTION_TYPE_EMPTY);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
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.modification.server.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.powsybl.commons.reporter.Reporter;
import com.powsybl.commons.reporter.ReporterModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.ModificationEntity;
import org.gridsuite.modification.server.entities.TabularCreationEntity;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.TabularCreation;
import org.springframework.lang.NonNull;

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

/**
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
*/
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@Data
@Schema(description = "Tabular creation")
@JsonTypeName("TABULAR_CREATION")
@ModificationErrorTypeName("TABULAR_CREATION_ERROR")
public class TabularCreationInfos extends ModificationInfos {

@Schema(description = "Creation type")
@NonNull
private ModificationType creationType;

@Schema(description = "Creations")
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<ModificationInfos> creations;

@Override
public ModificationEntity toEntity() {
return new TabularCreationEntity(this);
}

@Override
public AbstractModification toModification() {
return new TabularCreation(this);
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(ModificationType.TABULAR_CREATION.name(), "Tabular creation");
}

@Override
public Map<String, String> getMapMessageValues() {
Map<String, String> mapMessageValues = new HashMap<>();
mapMessageValues.put("tabularCreationType", getCreationType().name());
return mapMessageValues;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ public ModificationEntity(UUID id, String type, ZonedDateTime date, Boolean stas
this.messageValues = messageValues;
}

public ModificationEntity(UUID id, String type) {
this.id = id;
this.type = type;
}

protected ModificationEntity(ModificationInfos modificationInfos) {
if (modificationInfos == null) {
throw new NetworkModificationException(MISSING_MODIFICATION_DESCRIPTION, "Missing network modification description");
Expand Down
Loading

0 comments on commit a3473de

Please sign in to comment.