Skip to content

Commit f8a16ee

Browse files
Adapt network preloading strategy when applying modifications (#288)
* 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]>
1 parent 3aa9942 commit f8a16ee

36 files changed

+299
-286
lines changed

src/main/java/org/gridsuite/modification/server/ModificationType.java

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,56 @@
66
*/
77
package org.gridsuite.modification.server;
88

9+
import com.powsybl.network.store.client.PreloadingStrategy;
10+
11+
import static org.gridsuite.modification.server.NetworkModificationException.Type.PRELOADING_STRATEGY_NOT_ALLOWED;
12+
913
/**
1014
* @author Slimane Amar <slimane.amar at rte-france.com>
1115
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
1216
*/
1317
public enum ModificationType {
14-
EQUIPMENT_ATTRIBUTE_MODIFICATION,
15-
LOAD_CREATION,
16-
LOAD_MODIFICATION,
17-
GENERATOR_CREATION,
18-
GENERATOR_MODIFICATION,
19-
EQUIPMENT_DELETION,
20-
LINE_CREATION,
21-
LINE_MODIFICATION,
22-
TWO_WINDINGS_TRANSFORMER_CREATION,
23-
TWO_WINDINGS_TRANSFORMER_MODIFICATION,
24-
GROOVY_SCRIPT,
25-
SUBSTATION_CREATION,
26-
SUBSTATION_MODIFICATION,
27-
SHUNT_COMPENSATOR_CREATION,
28-
SHUNT_COMPENSATOR_MODIFICATION,
29-
VOLTAGE_LEVEL_CREATION,
30-
VOLTAGE_LEVEL_MODIFICATION,
31-
LINE_SPLIT_WITH_VOLTAGE_LEVEL,
32-
LINE_ATTACH_TO_VOLTAGE_LEVEL,
33-
LINES_ATTACH_TO_SPLIT_LINES,
34-
GENERATOR_SCALING,
35-
LOAD_SCALING,
36-
BRANCH_STATUS_MODIFICATION,
37-
DELETE_VOLTAGE_LEVEL_ON_LINE,
38-
DELETE_ATTACHING_LINE,
39-
GENERATION_DISPATCH
18+
EQUIPMENT_ATTRIBUTE_MODIFICATION(PreloadingStrategy.NONE),
19+
LOAD_CREATION(PreloadingStrategy.NONE),
20+
LOAD_MODIFICATION(PreloadingStrategy.NONE),
21+
GENERATOR_CREATION(PreloadingStrategy.NONE),
22+
GENERATOR_MODIFICATION(PreloadingStrategy.NONE),
23+
EQUIPMENT_DELETION(PreloadingStrategy.NONE),
24+
LINE_CREATION(PreloadingStrategy.NONE),
25+
LINE_MODIFICATION(PreloadingStrategy.NONE),
26+
TWO_WINDINGS_TRANSFORMER_CREATION(PreloadingStrategy.NONE),
27+
TWO_WINDINGS_TRANSFORMER_MODIFICATION(PreloadingStrategy.NONE),
28+
GROOVY_SCRIPT(PreloadingStrategy.COLLECTION),
29+
SUBSTATION_CREATION(PreloadingStrategy.NONE),
30+
SUBSTATION_MODIFICATION(PreloadingStrategy.NONE),
31+
SHUNT_COMPENSATOR_CREATION(PreloadingStrategy.NONE),
32+
SHUNT_COMPENSATOR_MODIFICATION(PreloadingStrategy.NONE),
33+
VOLTAGE_LEVEL_CREATION(PreloadingStrategy.NONE),
34+
VOLTAGE_LEVEL_MODIFICATION(PreloadingStrategy.NONE),
35+
LINE_SPLIT_WITH_VOLTAGE_LEVEL(PreloadingStrategy.NONE),
36+
LINE_ATTACH_TO_VOLTAGE_LEVEL(PreloadingStrategy.NONE),
37+
LINES_ATTACH_TO_SPLIT_LINES(PreloadingStrategy.NONE),
38+
GENERATOR_SCALING(PreloadingStrategy.COLLECTION),
39+
LOAD_SCALING(PreloadingStrategy.COLLECTION),
40+
BRANCH_STATUS_MODIFICATION(PreloadingStrategy.NONE),
41+
DELETE_VOLTAGE_LEVEL_ON_LINE(PreloadingStrategy.NONE),
42+
DELETE_ATTACHING_LINE(PreloadingStrategy.NONE),
43+
GENERATION_DISPATCH(PreloadingStrategy.COLLECTION);
44+
45+
private final PreloadingStrategy strategy;
46+
47+
ModificationType(PreloadingStrategy strategy) {
48+
this.strategy = strategy;
49+
}
50+
51+
public PreloadingStrategy getStrategy() {
52+
return strategy;
53+
}
54+
55+
public ModificationType maxStrategy(ModificationType other) {
56+
if (strategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW || other.strategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW) {
57+
throw new NetworkModificationException(PRELOADING_STRATEGY_NOT_ALLOWED, "Preloading strategy ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW not allowed");
58+
}
59+
return strategy != PreloadingStrategy.NONE ? this : other;
60+
}
4061
}

src/main/java/org/gridsuite/modification/server/NetworkModificationController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,14 @@ public ResponseEntity<Optional<NetworkModificationResult>> copyOrMoveNetworkModi
8383
@RequestBody List<UUID> modificationsUuidList) {
8484
switch (action) {
8585
case COPY:
86-
return ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, networkModificationService.getNetworkInfos(networkUuid, variantId), new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList));
86+
return ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, networkUuid, variantId, new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList));
8787
case MOVE:
8888
UUID sourceGroupUuid = originGroupUuid == null ? targetGroupUuid : originGroupUuid;
8989
boolean canBuildNode = build;
9090
if (sourceGroupUuid.equals(targetGroupUuid)) {
9191
canBuildNode = false;
9292
}
93-
return ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, before, networkModificationService.getNetworkInfos(networkUuid, variantId), new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList, canBuildNode));
93+
return ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, before, networkUuid, variantId, new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList, canBuildNode));
9494
default:
9595
throw new NetworkModificationException(TYPE_MISMATCH);
9696
}
@@ -125,7 +125,7 @@ public ResponseEntity<Optional<NetworkModificationResult>> createNetworkModifica
125125
@Parameter(description = "Reporter ID") @RequestParam("reporterId") String reporterId,
126126
@RequestBody ModificationInfos modificationInfos) {
127127
modificationInfos.check();
128-
return ResponseEntity.ok().body(networkModificationService.createNetworkModification(networkModificationService.getNetworkInfos(networkUuid, variantId), groupUuid, new ReportInfos(reportUuid, reporterId), modificationInfos));
128+
return ResponseEntity.ok().body(networkModificationService.createNetworkModification(networkUuid, variantId, groupUuid, new ReportInfos(reportUuid, reporterId), modificationInfos));
129129
}
130130

131131
@PutMapping(value = "/network-modifications/{uuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)

src/main/java/org/gridsuite/modification/server/NetworkModificationException.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ public enum Type {
9292
DELETE_ATTACHING_LINE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
9393
DELETE_ATTACHING_LINE_NOT_FOUND(HttpStatus.NOT_FOUND),
9494
FILTERS_NOT_FOUND(HttpStatus.NOT_FOUND),
95-
GENERATION_DISPATCH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR);
96-
95+
GENERATION_DISPATCH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),
96+
PRELOADING_STRATEGY_NOT_ALLOWED(HttpStatus.INTERNAL_SERVER_ERROR);
9797

9898
public final HttpStatus status;
9999
private final String message;

src/main/java/org/gridsuite/modification/server/dto/BranchStatusModificationInfos.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.gridsuite.modification.server.dto;
88

9+
import com.fasterxml.jackson.annotation.JsonTypeName;
910
import com.powsybl.commons.reporter.Reporter;
1011
import com.powsybl.commons.reporter.ReporterModel;
1112
import io.swagger.v3.oas.annotations.media.Schema;
@@ -14,8 +15,8 @@
1415
import lombok.Setter;
1516
import lombok.ToString;
1617
import lombok.experimental.SuperBuilder;
17-
import org.gridsuite.modification.server.ModificationType;
1818
import org.gridsuite.modification.server.NetworkModificationException;
19+
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
1920
import org.gridsuite.modification.server.entities.equipment.modification.BranchStatusModificationEntity;
2021
import org.gridsuite.modification.server.modifications.AbstractModification;
2122
import org.gridsuite.modification.server.modifications.BranchStatusModification;
@@ -30,6 +31,8 @@
3031
@Setter
3132
@ToString(callSuper = true)
3233
@Schema(description = "Branch status modification")
34+
@JsonTypeName("BRANCH_STATUS_MODIFICATION")
35+
@ModificationErrorTypeName("BRANCH_ACTION_ERROR")
3336
public class BranchStatusModificationInfos extends EquipmentModificationInfos {
3437

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

59-
@Override
60-
public NetworkModificationException.Type getErrorType() {
61-
return NetworkModificationException.Type.BRANCH_ACTION_ERROR;
62-
}
63-
6462
@Override
6563
public Reporter createSubReporter(ReporterModel reporter) {
6664
String defaultName;
@@ -81,7 +79,7 @@ public Reporter createSubReporter(ReporterModel reporter) {
8179
default:
8280
defaultName = "";
8381
}
84-
return reporter.createSubReporter(ModificationType.BRANCH_STATUS_MODIFICATION.name() + "_" + action, defaultName, "branchId", this.getEquipmentId());
82+
return reporter.createSubReporter(getType().name() + "_" + action, defaultName, "branchId", this.getEquipmentId());
8583
}
8684

8785
@Override

src/main/java/org/gridsuite/modification/server/dto/DeleteAttachingLineInfos.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.gridsuite.modification.server.dto;
88

9+
import com.fasterxml.jackson.annotation.JsonTypeName;
910
import com.powsybl.commons.reporter.Reporter;
1011
import com.powsybl.commons.reporter.ReporterModel;
1112
import io.swagger.v3.oas.annotations.media.Schema;
@@ -15,8 +16,7 @@
1516
import lombok.Setter;
1617
import lombok.ToString;
1718
import lombok.experimental.SuperBuilder;
18-
import org.gridsuite.modification.server.ModificationType;
19-
import org.gridsuite.modification.server.NetworkModificationException;
19+
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
2020
import org.gridsuite.modification.server.entities.equipment.modification.DeleteAttachingLineEntity;
2121
import org.gridsuite.modification.server.modifications.AbstractModification;
2222
import org.gridsuite.modification.server.modifications.DeleteAttachingLine;
@@ -31,6 +31,8 @@
3131
@Setter
3232
@ToString(callSuper = true)
3333
@Schema(description = "Delete attaching line infos")
34+
@JsonTypeName("DELETE_ATTACHING_LINE")
35+
@ModificationErrorTypeName("DELETE_ATTACHING_LINE_ERROR")
3436
public class DeleteAttachingLineInfos extends ModificationInfos {
3537

3638
@Schema(description = "line 1 id")
@@ -58,13 +60,8 @@ public AbstractModification toModification() {
5860
return new DeleteAttachingLine(this);
5961
}
6062

61-
@Override
62-
public NetworkModificationException.Type getErrorType() {
63-
return NetworkModificationException.Type.DELETE_ATTACHING_LINE_ERROR;
64-
}
65-
6663
@Override
6764
public Reporter createSubReporter(ReporterModel reporter) {
68-
return reporter.createSubReporter(ModificationType.DELETE_ATTACHING_LINE.name(), "Delete attaching line");
65+
return reporter.createSubReporter(getType().name(), "Delete attaching line");
6966
}
7067
}

src/main/java/org/gridsuite/modification/server/dto/DeleteVoltageLevelOnLineInfos.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
*/
77
package org.gridsuite.modification.server.dto;
88

9+
import com.fasterxml.jackson.annotation.JsonTypeName;
910
import com.powsybl.commons.reporter.Reporter;
1011
import com.powsybl.commons.reporter.ReporterModel;
1112
import io.swagger.v3.oas.annotations.media.Schema;
1213
import lombok.*;
1314
import lombok.experimental.SuperBuilder;
14-
import org.gridsuite.modification.server.ModificationType;
15-
import org.gridsuite.modification.server.NetworkModificationException;
15+
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
1616
import org.gridsuite.modification.server.entities.equipment.modification.DeleteVoltageLevelOnLineEntity;
1717
import org.gridsuite.modification.server.modifications.AbstractModification;
1818
import org.gridsuite.modification.server.modifications.DeleteVoltageLevelOnLine;
@@ -28,6 +28,8 @@
2828
@Setter
2929
@ToString(callSuper = true)
3030
@Schema(description = "Delete voltage level on line infos")
31+
@JsonTypeName("DELETE_VOLTAGE_LEVEL_ON_LINE")
32+
@ModificationErrorTypeName("DELETE_VOLTAGE_LEVEL_ON_LINE_ERROR")
3133
public class DeleteVoltageLevelOnLineInfos extends ModificationInfos {
3234

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

55-
@Override
56-
public NetworkModificationException.Type getErrorType() {
57-
return NetworkModificationException.Type.DELETE_VOLTAGE_LEVEL_ON_LINE_ERROR;
58-
}
59-
6057
@Override
6158
public Reporter createSubReporter(ReporterModel reporter) {
62-
return reporter.createSubReporter(ModificationType.DELETE_VOLTAGE_LEVEL_ON_LINE.name(), "Delete voltage level on line");
59+
return reporter.createSubReporter(getType().name(), "Delete voltage level on line");
6360
}
6461
}

src/main/java/org/gridsuite/modification/server/dto/EquipmentAttributeModificationInfos.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.gridsuite.modification.server.dto;
88

9+
import com.fasterxml.jackson.annotation.JsonTypeName;
910
import com.powsybl.commons.PowsyblException;
1011
import com.powsybl.commons.reporter.Reporter;
1112
import com.powsybl.commons.reporter.ReporterModel;
@@ -18,8 +19,8 @@
1819
import lombok.ToString;
1920
import lombok.experimental.SuperBuilder;
2021

21-
import org.gridsuite.modification.server.ModificationType;
2222
import org.gridsuite.modification.server.NetworkModificationException;
23+
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
2324
import org.gridsuite.modification.server.entities.equipment.modification.attribute.*;
2425
import org.gridsuite.modification.server.modifications.AbstractModification;
2526
import org.gridsuite.modification.server.modifications.EquipmentAttributeModification;
@@ -39,6 +40,8 @@
3940
@Setter
4041
@ToString(callSuper = true)
4142
@Schema(description = "Equipment attribute modification")
43+
@JsonTypeName("EQUIPMENT_ATTRIBUTE_MODIFICATION")
44+
@ModificationErrorTypeName("MODIFICATION_ERROR")
4245
public class EquipmentAttributeModificationInfos extends EquipmentModificationInfos {
4346
@Schema(description = "Equipment attribute name")
4447
private String equipmentAttributeName;
@@ -55,14 +58,9 @@ public AbstractModification toModification() {
5558
return new EquipmentAttributeModification(this);
5659
}
5760

58-
@Override
59-
public NetworkModificationException.Type getErrorType() {
60-
return NetworkModificationException.Type.MODIFICATION_ERROR;
61-
}
62-
6361
@Override
6462
public Reporter createSubReporter(ReporterModel reporter) {
65-
return reporter.createSubReporter(ModificationType.EQUIPMENT_ATTRIBUTE_MODIFICATION.name(), "${EquipmentType} '${EquipmentId}' change",
63+
return reporter.createSubReporter(getType().name(), "${EquipmentType} '${EquipmentId}' change",
6664
Map.of("EquipmentType", new TypedValue(equipmentType.name(), TypedValue.UNTYPED), "EquipmentId", new TypedValue(getEquipmentId(), TypedValue.UNTYPED)));
6765
}
6866

src/main/java/org/gridsuite/modification/server/dto/EquipmentDeletionInfos.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
*/
77
package org.gridsuite.modification.server.dto;
88

9-
import org.gridsuite.modification.server.ModificationType;
10-
import org.gridsuite.modification.server.NetworkModificationException;
9+
import com.fasterxml.jackson.annotation.JsonTypeName;
10+
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
1111
import org.gridsuite.modification.server.entities.equipment.deletion.EquipmentDeletionEntity;
1212
import org.gridsuite.modification.server.modifications.AbstractModification;
1313
import org.gridsuite.modification.server.modifications.EquipmentDeletion;
@@ -29,6 +29,8 @@
2929
@Setter
3030
@ToString(callSuper = true)
3131
@Schema(description = "Equipment deletion")
32+
@JsonTypeName("EQUIPMENT_DELETION")
33+
@ModificationErrorTypeName("DELETE_EQUIPMENT_ERROR")
3234
public class EquipmentDeletionInfos extends EquipmentModificationInfos {
3335
@Schema(description = "Equipment type")
3436
private String equipmentType;
@@ -43,13 +45,8 @@ public AbstractModification toModification() {
4345
return new EquipmentDeletion(this);
4446
}
4547

46-
@Override
47-
public NetworkModificationException.Type getErrorType() {
48-
return NetworkModificationException.Type.DELETE_EQUIPMENT_ERROR;
49-
}
50-
5148
@Override
5249
public Reporter createSubReporter(ReporterModel reporter) {
53-
return reporter.createSubReporter(ModificationType.EQUIPMENT_DELETION.name(), "Equipment deletion ${equipmentId}", "equipmentId", this.getEquipmentId());
50+
return reporter.createSubReporter(getType().name(), "Equipment deletion ${equipmentId}", "equipmentId", this.getEquipmentId());
5451
}
5552
}

src/main/java/org/gridsuite/modification/server/dto/GenerationDispatchInfos.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77

88
package org.gridsuite.modification.server.dto;
99

10+
import com.fasterxml.jackson.annotation.JsonTypeName;
1011
import com.powsybl.commons.reporter.Reporter;
1112
import com.powsybl.commons.reporter.ReporterModel;
1213
import io.swagger.v3.oas.annotations.media.Schema;
1314
import lombok.Getter;
1415
import lombok.NoArgsConstructor;
1516
import lombok.Setter;
1617
import lombok.experimental.SuperBuilder;
17-
import org.gridsuite.modification.server.ModificationType;
18-
import org.gridsuite.modification.server.NetworkModificationException;
18+
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
1919
import org.gridsuite.modification.server.entities.equipment.modification.GenerationDispatchEntity;
2020
import org.gridsuite.modification.server.modifications.AbstractModification;
2121
import org.gridsuite.modification.server.modifications.GenerationDispatch;
@@ -30,6 +30,8 @@
3030
@Getter
3131
@Setter
3232
@Schema(description = "Generation dispatch creation")
33+
@JsonTypeName("GENERATION_DISPATCH")
34+
@ModificationErrorTypeName("GENERATION_DISPATCH_ERROR")
3335
public class GenerationDispatchInfos extends ModificationInfos {
3436

3537
@Schema(description = "loss coefficient")
@@ -57,13 +59,8 @@ public AbstractModification toModification() {
5759
return new GenerationDispatch(this);
5860
}
5961

60-
@Override
61-
public NetworkModificationException.Type getErrorType() {
62-
return NetworkModificationException.Type.GENERATION_DISPATCH_ERROR;
63-
}
64-
6562
@Override
6663
public Reporter createSubReporter(ReporterModel reporter) {
67-
return reporter.createSubReporter(ModificationType.GENERATION_DISPATCH.name(), "Generation dispatch");
64+
return reporter.createSubReporter(getType().name(), "Generation dispatch");
6865
}
6966
}

0 commit comments

Comments
 (0)