Skip to content

Commit

Permalink
Adapt network preloading strategy when applying modifications (#288)
Browse files Browse the repository at this point in the history
* Associate a network preloading strategy to each modification
* Compute the network preloading strategy when bulding a node, in incremental mode (add/copy/move modifications on a built node).
* Do not allow preloading strategy all_collections_needed_for_bus_view

Signed-off-by: Franck LECUYER <[email protected]>
  • Loading branch information
FranckLecuyer authored Jul 12, 2023
1 parent 3aa9942 commit f8a16ee
Show file tree
Hide file tree
Showing 36 changed files with 299 additions and 286 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,56 @@
*/
package org.gridsuite.modification.server;

import com.powsybl.network.store.client.PreloadingStrategy;

import static org.gridsuite.modification.server.NetworkModificationException.Type.PRELOADING_STRATEGY_NOT_ALLOWED;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
*/
public enum ModificationType {
EQUIPMENT_ATTRIBUTE_MODIFICATION,
LOAD_CREATION,
LOAD_MODIFICATION,
GENERATOR_CREATION,
GENERATOR_MODIFICATION,
EQUIPMENT_DELETION,
LINE_CREATION,
LINE_MODIFICATION,
TWO_WINDINGS_TRANSFORMER_CREATION,
TWO_WINDINGS_TRANSFORMER_MODIFICATION,
GROOVY_SCRIPT,
SUBSTATION_CREATION,
SUBSTATION_MODIFICATION,
SHUNT_COMPENSATOR_CREATION,
SHUNT_COMPENSATOR_MODIFICATION,
VOLTAGE_LEVEL_CREATION,
VOLTAGE_LEVEL_MODIFICATION,
LINE_SPLIT_WITH_VOLTAGE_LEVEL,
LINE_ATTACH_TO_VOLTAGE_LEVEL,
LINES_ATTACH_TO_SPLIT_LINES,
GENERATOR_SCALING,
LOAD_SCALING,
BRANCH_STATUS_MODIFICATION,
DELETE_VOLTAGE_LEVEL_ON_LINE,
DELETE_ATTACHING_LINE,
GENERATION_DISPATCH
EQUIPMENT_ATTRIBUTE_MODIFICATION(PreloadingStrategy.NONE),
LOAD_CREATION(PreloadingStrategy.NONE),
LOAD_MODIFICATION(PreloadingStrategy.NONE),
GENERATOR_CREATION(PreloadingStrategy.NONE),
GENERATOR_MODIFICATION(PreloadingStrategy.NONE),
EQUIPMENT_DELETION(PreloadingStrategy.NONE),
LINE_CREATION(PreloadingStrategy.NONE),
LINE_MODIFICATION(PreloadingStrategy.NONE),
TWO_WINDINGS_TRANSFORMER_CREATION(PreloadingStrategy.NONE),
TWO_WINDINGS_TRANSFORMER_MODIFICATION(PreloadingStrategy.NONE),
GROOVY_SCRIPT(PreloadingStrategy.COLLECTION),
SUBSTATION_CREATION(PreloadingStrategy.NONE),
SUBSTATION_MODIFICATION(PreloadingStrategy.NONE),
SHUNT_COMPENSATOR_CREATION(PreloadingStrategy.NONE),
SHUNT_COMPENSATOR_MODIFICATION(PreloadingStrategy.NONE),
VOLTAGE_LEVEL_CREATION(PreloadingStrategy.NONE),
VOLTAGE_LEVEL_MODIFICATION(PreloadingStrategy.NONE),
LINE_SPLIT_WITH_VOLTAGE_LEVEL(PreloadingStrategy.NONE),
LINE_ATTACH_TO_VOLTAGE_LEVEL(PreloadingStrategy.NONE),
LINES_ATTACH_TO_SPLIT_LINES(PreloadingStrategy.NONE),
GENERATOR_SCALING(PreloadingStrategy.COLLECTION),
LOAD_SCALING(PreloadingStrategy.COLLECTION),
BRANCH_STATUS_MODIFICATION(PreloadingStrategy.NONE),
DELETE_VOLTAGE_LEVEL_ON_LINE(PreloadingStrategy.NONE),
DELETE_ATTACHING_LINE(PreloadingStrategy.NONE),
GENERATION_DISPATCH(PreloadingStrategy.COLLECTION);

private final PreloadingStrategy strategy;

ModificationType(PreloadingStrategy strategy) {
this.strategy = strategy;
}

public PreloadingStrategy getStrategy() {
return strategy;
}

public ModificationType maxStrategy(ModificationType other) {
if (strategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW || other.strategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW) {
throw new NetworkModificationException(PRELOADING_STRATEGY_NOT_ALLOWED, "Preloading strategy ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW not allowed");
}
return strategy != PreloadingStrategy.NONE ? this : other;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,14 @@ public ResponseEntity<Optional<NetworkModificationResult>> copyOrMoveNetworkModi
@RequestBody List<UUID> modificationsUuidList) {
switch (action) {
case COPY:
return ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, networkModificationService.getNetworkInfos(networkUuid, variantId), new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList));
return ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, networkUuid, variantId, new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList));
case MOVE:
UUID sourceGroupUuid = originGroupUuid == null ? targetGroupUuid : originGroupUuid;
boolean canBuildNode = build;
if (sourceGroupUuid.equals(targetGroupUuid)) {
canBuildNode = false;
}
return ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, before, networkModificationService.getNetworkInfos(networkUuid, variantId), new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList, canBuildNode));
return ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, before, networkUuid, variantId, new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList, canBuildNode));
default:
throw new NetworkModificationException(TYPE_MISMATCH);
}
Expand Down Expand Up @@ -125,7 +125,7 @@ public ResponseEntity<Optional<NetworkModificationResult>> createNetworkModifica
@Parameter(description = "Reporter ID") @RequestParam("reporterId") String reporterId,
@RequestBody ModificationInfos modificationInfos) {
modificationInfos.check();
return ResponseEntity.ok().body(networkModificationService.createNetworkModification(networkModificationService.getNetworkInfos(networkUuid, variantId), groupUuid, new ReportInfos(reportUuid, reporterId), modificationInfos));
return ResponseEntity.ok().body(networkModificationService.createNetworkModification(networkUuid, variantId, groupUuid, new ReportInfos(reportUuid, reporterId), modificationInfos));
}

@PutMapping(value = "/network-modifications/{uuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ public enum Type {
DELETE_ATTACHING_LINE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
DELETE_ATTACHING_LINE_NOT_FOUND(HttpStatus.NOT_FOUND),
FILTERS_NOT_FOUND(HttpStatus.NOT_FOUND),
GENERATION_DISPATCH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR);

GENERATION_DISPATCH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
PRELOADING_STRATEGY_NOT_ALLOWED(HttpStatus.INTERNAL_SERVER_ERROR);

public final HttpStatus status;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package org.gridsuite.modification.server.dto;

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;
Expand All @@ -14,8 +15,8 @@
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.ModificationType;
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.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.BranchStatusModification;
Expand All @@ -30,6 +31,8 @@
@Setter
@ToString(callSuper = true)
@Schema(description = "Branch status modification")
@JsonTypeName("BRANCH_STATUS_MODIFICATION")
@ModificationErrorTypeName("BRANCH_ACTION_ERROR")
public class BranchStatusModificationInfos extends EquipmentModificationInfos {

@Schema(description = "Action type")
Expand All @@ -56,11 +59,6 @@ public AbstractModification toModification() {
return new BranchStatusModification(this);
}

@Override
public NetworkModificationException.Type getErrorType() {
return NetworkModificationException.Type.BRANCH_ACTION_ERROR;
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
String defaultName;
Expand All @@ -81,7 +79,7 @@ public Reporter createSubReporter(ReporterModel reporter) {
default:
defaultName = "";
}
return reporter.createSubReporter(ModificationType.BRANCH_STATUS_MODIFICATION.name() + "_" + action, defaultName, "branchId", this.getEquipmentId());
return reporter.createSubReporter(getType().name() + "_" + action, defaultName, "branchId", this.getEquipmentId());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package org.gridsuite.modification.server.dto;

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;
Expand All @@ -15,8 +16,7 @@
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.DeleteAttachingLineEntity;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.DeleteAttachingLine;
Expand All @@ -31,6 +31,8 @@
@Setter
@ToString(callSuper = true)
@Schema(description = "Delete attaching line infos")
@JsonTypeName("DELETE_ATTACHING_LINE")
@ModificationErrorTypeName("DELETE_ATTACHING_LINE_ERROR")
public class DeleteAttachingLineInfos extends ModificationInfos {

@Schema(description = "line 1 id")
Expand Down Expand Up @@ -58,13 +60,8 @@ public AbstractModification toModification() {
return new DeleteAttachingLine(this);
}

@Override
public NetworkModificationException.Type getErrorType() {
return NetworkModificationException.Type.DELETE_ATTACHING_LINE_ERROR;
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(ModificationType.DELETE_ATTACHING_LINE.name(), "Delete attaching line");
return reporter.createSubReporter(getType().name(), "Delete attaching line");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
*/
package org.gridsuite.modification.server.dto;

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.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.DeleteVoltageLevelOnLineEntity;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.DeleteVoltageLevelOnLine;
Expand All @@ -28,6 +28,8 @@
@Setter
@ToString(callSuper = true)
@Schema(description = "Delete voltage level on line infos")
@JsonTypeName("DELETE_VOLTAGE_LEVEL_ON_LINE")
@ModificationErrorTypeName("DELETE_VOLTAGE_LEVEL_ON_LINE_ERROR")
public class DeleteVoltageLevelOnLineInfos extends ModificationInfos {

@Schema(description = "line 1 id")
Expand All @@ -52,13 +54,8 @@ public AbstractModification toModification() {
return new DeleteVoltageLevelOnLine(this);
}

@Override
public NetworkModificationException.Type getErrorType() {
return NetworkModificationException.Type.DELETE_VOLTAGE_LEVEL_ON_LINE_ERROR;
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(ModificationType.DELETE_VOLTAGE_LEVEL_ON_LINE.name(), "Delete voltage level on line");
return reporter.createSubReporter(getType().name(), "Delete voltage level on line");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package org.gridsuite.modification.server.dto;

import com.fasterxml.jackson.annotation.JsonTypeName;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.reporter.Reporter;
import com.powsybl.commons.reporter.ReporterModel;
Expand All @@ -18,8 +19,8 @@
import lombok.ToString;
import lombok.experimental.SuperBuilder;

import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.attribute.*;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.EquipmentAttributeModification;
Expand All @@ -39,6 +40,8 @@
@Setter
@ToString(callSuper = true)
@Schema(description = "Equipment attribute modification")
@JsonTypeName("EQUIPMENT_ATTRIBUTE_MODIFICATION")
@ModificationErrorTypeName("MODIFICATION_ERROR")
public class EquipmentAttributeModificationInfos extends EquipmentModificationInfos {
@Schema(description = "Equipment attribute name")
private String equipmentAttributeName;
Expand All @@ -55,14 +58,9 @@ public AbstractModification toModification() {
return new EquipmentAttributeModification(this);
}

@Override
public NetworkModificationException.Type getErrorType() {
return NetworkModificationException.Type.MODIFICATION_ERROR;
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(ModificationType.EQUIPMENT_ATTRIBUTE_MODIFICATION.name(), "${EquipmentType} '${EquipmentId}' change",
return reporter.createSubReporter(getType().name(), "${EquipmentType} '${EquipmentId}' change",
Map.of("EquipmentType", new TypedValue(equipmentType.name(), TypedValue.UNTYPED), "EquipmentId", new TypedValue(getEquipmentId(), TypedValue.UNTYPED)));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
*/
package org.gridsuite.modification.server.dto;

import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.NetworkModificationException;
import com.fasterxml.jackson.annotation.JsonTypeName;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.deletion.EquipmentDeletionEntity;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.EquipmentDeletion;
Expand All @@ -29,6 +29,8 @@
@Setter
@ToString(callSuper = true)
@Schema(description = "Equipment deletion")
@JsonTypeName("EQUIPMENT_DELETION")
@ModificationErrorTypeName("DELETE_EQUIPMENT_ERROR")
public class EquipmentDeletionInfos extends EquipmentModificationInfos {
@Schema(description = "Equipment type")
private String equipmentType;
Expand All @@ -43,13 +45,8 @@ public AbstractModification toModification() {
return new EquipmentDeletion(this);
}

@Override
public NetworkModificationException.Type getErrorType() {
return NetworkModificationException.Type.DELETE_EQUIPMENT_ERROR;
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(ModificationType.EQUIPMENT_DELETION.name(), "Equipment deletion ${equipmentId}", "equipmentId", this.getEquipmentId());
return reporter.createSubReporter(getType().name(), "Equipment deletion ${equipmentId}", "equipmentId", this.getEquipmentId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@

package org.gridsuite.modification.server.dto;

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.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.GenerationDispatchEntity;
import org.gridsuite.modification.server.modifications.AbstractModification;
import org.gridsuite.modification.server.modifications.GenerationDispatch;
Expand All @@ -30,6 +30,8 @@
@Getter
@Setter
@Schema(description = "Generation dispatch creation")
@JsonTypeName("GENERATION_DISPATCH")
@ModificationErrorTypeName("GENERATION_DISPATCH_ERROR")
public class GenerationDispatchInfos extends ModificationInfos {

@Schema(description = "loss coefficient")
Expand Down Expand Up @@ -57,13 +59,8 @@ public AbstractModification toModification() {
return new GenerationDispatch(this);
}

@Override
public NetworkModificationException.Type getErrorType() {
return NetworkModificationException.Type.GENERATION_DISPATCH_ERROR;
}

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(ModificationType.GENERATION_DISPATCH.name(), "Generation dispatch");
return reporter.createSubReporter(getType().name(), "Generation dispatch");
}
}
Loading

0 comments on commit f8a16ee

Please sign in to comment.