Skip to content

Commit 308e407

Browse files
authored
Create voltage level busbar sections modification (#668)
Signed-off-by: Rehili Ghazwa <[email protected]>
1 parent 07d214f commit 308e407

File tree

5 files changed

+249
-0
lines changed

5 files changed

+249
-0
lines changed

src/main/java/org/gridsuite/modification/server/entities/EntityRegistry.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ private EntityRegistry() {
5151
register(LccCreationInfos.class, LccCreationEntity.class);
5252
register(LccConverterStationCreationInfos.class, LccConverterStationCreationEntity.class);
5353
register(TabularCreationInfos.class, TabularCreationEntity.class);
54+
register(CreateVoltageLevelSectionInfos.class, CreateVoltageLevelSectionEntity.class);
5455

5556
// // modification
5657
register(SubstationModificationInfos.class, SubstationModificationEntity.class);
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright (c) 2025, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.modification.server.entities.equipment.creation;
8+
9+
import jakarta.persistence.*;
10+
import lombok.Getter;
11+
import lombok.NoArgsConstructor;
12+
import lombok.NonNull;
13+
import org.gridsuite.modification.dto.CreateVoltageLevelSectionInfos;
14+
import org.gridsuite.modification.dto.ModificationInfos;
15+
import org.gridsuite.modification.server.entities.ModificationEntity;
16+
17+
/**
18+
* @author Rehili Ghazwa <ghazwa.rehili at rte-france.com>
19+
*/
20+
@NoArgsConstructor
21+
@Getter
22+
@Entity
23+
@Table
24+
@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "createVoltageLevelSection_id_fk_constraint"))
25+
public class CreateVoltageLevelSectionEntity extends ModificationEntity {
26+
27+
@Column
28+
private String voltageLevelId;
29+
30+
@Column
31+
private String busbarSectionId;
32+
33+
@Column
34+
private boolean isAfterBusbarSectionId;
35+
36+
@Column
37+
private int busbarIndex;
38+
39+
@Column
40+
private String leftSwitchKind;
41+
42+
@Column
43+
private String rightSwitchKind;
44+
45+
@Column
46+
private boolean isSwitchOpen;
47+
48+
@Column
49+
private boolean isAllBusbars;
50+
51+
public CreateVoltageLevelSectionEntity(CreateVoltageLevelSectionInfos createVoltageLevelSectionInfos) {
52+
super(createVoltageLevelSectionInfos);
53+
assignAttributes(createVoltageLevelSectionInfos);
54+
}
55+
56+
@Override
57+
public CreateVoltageLevelSectionInfos toModificationInfos() {
58+
return toCreateVoltageLevelSectionInfosBuilder().build();
59+
}
60+
61+
public CreateVoltageLevelSectionInfos toCreateVoltageLevelSectionInfos() {
62+
return toCreateVoltageLevelSectionInfosBuilder()
63+
.build();
64+
}
65+
66+
private CreateVoltageLevelSectionInfos.CreateVoltageLevelSectionInfosBuilder<?, ?> toCreateVoltageLevelSectionInfosBuilder() {
67+
return CreateVoltageLevelSectionInfos
68+
.builder()
69+
.uuid(getId())
70+
.date(getDate())
71+
.stashed(getStashed())
72+
.activated(getActivated())
73+
.voltageLevelId(getVoltageLevelId())
74+
.busbarSectionId(getBusbarSectionId())
75+
.busbarIndex(getBusbarIndex())
76+
.isAllBusbars(isAllBusbars())
77+
.isSwitchOpen(isSwitchOpen())
78+
.rightSwitchKind(getRightSwitchKind())
79+
.leftSwitchKind(getLeftSwitchKind())
80+
.isAfterBusbarSectionId(isAfterBusbarSectionId());
81+
}
82+
83+
@Override
84+
public void update(@NonNull ModificationInfos modificationInfos) {
85+
super.update(modificationInfos);
86+
assignAttributes((CreateVoltageLevelSectionInfos) modificationInfos);
87+
}
88+
89+
private void assignAttributes(CreateVoltageLevelSectionInfos createVoltageLevelSectionInfos) {
90+
this.voltageLevelId = createVoltageLevelSectionInfos.getVoltageLevelId();
91+
this.busbarSectionId = createVoltageLevelSectionInfos.getBusbarSectionId();
92+
this.busbarIndex = createVoltageLevelSectionInfos.getBusbarIndex();
93+
this.isAllBusbars = createVoltageLevelSectionInfos.isAllBusbars();
94+
this.leftSwitchKind = createVoltageLevelSectionInfos.getLeftSwitchKind();
95+
this.rightSwitchKind = createVoltageLevelSectionInfos.getRightSwitchKind();
96+
this.isSwitchOpen = createVoltageLevelSectionInfos.isSwitchOpen();
97+
this.isAfterBusbarSectionId = createVoltageLevelSectionInfos.isAfterBusbarSectionId();
98+
}
99+
}
100+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
2+
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
5+
<changeSet author="rehiligha (generated)" id="1754320722123-45">
6+
<createTable tableName="create_voltage_level_section_entity">
7+
<column name="busbar_index" type="INT"/>
8+
<column name="busbar_section_id" type="VARCHAR(255)"/>
9+
<column name="is_after_busbar_section_id" type="BOOLEAN"/>
10+
<column name="is_all_busbars" type="BOOLEAN"/>
11+
<column name="is_switch_open" type="BOOLEAN"/>
12+
<column name="left_switch_kind" type="VARCHAR(255)"/>
13+
<column name="right_switch_kind" type="VARCHAR(255)"/>
14+
<column name="voltage_level_id" type="VARCHAR(255)"/>
15+
<column name="id" type="UUID">
16+
<constraints nullable="false" primaryKey="true" primaryKeyName="create_voltage_level_section_entityPK"/>
17+
</column>
18+
</createTable>
19+
</changeSet>
20+
<changeSet author="rehiligha (generated)" id="1754320722123-67">
21+
<addForeignKeyConstraint baseColumnNames="id" baseTableName="create_voltage_level_section_entity" constraintName="createVoltageLevelSection_id_fk_constraint" deferrable="false" initiallyDeferred="false" referencedColumnNames="id" referencedTableName="modification" validate="true"/>
22+
</changeSet>
23+
</databaseChangeLog>

src/main/resources/db/changelog/db.changelog-master.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,4 +392,7 @@ databaseChangeLog:
392392
relativeToChangelogFile: true
393393
- include:
394394
file: changesets/changelog_20250618T124747Z.xml
395+
relativeToChangelogFile: true
396+
- include:
397+
file: changesets/changelog_20250804T151824Z.xml
395398
relativeToChangelogFile: true
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/**
2+
* Copyright (c) 2025, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.modification.server.modifications;
8+
9+
import com.powsybl.iidm.network.BusbarSection;
10+
import com.powsybl.iidm.network.Network;
11+
import com.powsybl.iidm.network.extensions.BusbarSectionPosition;
12+
import com.powsybl.iidm.network.extensions.BusbarSectionPositionAdder;
13+
import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl;
14+
import org.gridsuite.modification.dto.CreateVoltageLevelSectionInfos;
15+
import org.gridsuite.modification.dto.ModificationInfos;
16+
import org.gridsuite.modification.server.utils.NetworkCreation;
17+
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
import java.util.UUID;
21+
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
23+
import static org.junit.jupiter.api.Assertions.assertTrue;
24+
25+
/**
26+
* @author Rehili Ghazwa <ghazwa.rehili at rte-france.com>
27+
*/
28+
class CreateVoltageLevelSectionTest extends AbstractNetworkModificationTest {
29+
30+
@Override
31+
protected Network createNetwork(UUID networkUuid) {
32+
Network network = NetworkCreation.createSwitchNetwork(networkUuid, new NetworkFactoryImpl());
33+
network.getVoltageLevel("vl1").getNodeBreakerView().getBusbarSectionStream().forEach(busbarSection -> {
34+
if (busbarSection.getExtension(BusbarSectionPosition.class) == null) {
35+
busbarSection.newExtension(BusbarSectionPositionAdder.class)
36+
.withBusbarIndex(1)
37+
.withSectionIndex(1)
38+
.add();
39+
}
40+
});
41+
BusbarSection b3 = network.getVoltageLevel("vl1")
42+
.getNodeBreakerView()
43+
.newBusbarSection()
44+
.setId("b3")
45+
.setName("b3")
46+
.setNode(15)
47+
.add();
48+
b3.newExtension(BusbarSectionPositionAdder.class)
49+
.withBusbarIndex(1)
50+
.withSectionIndex(1)
51+
.add();
52+
53+
BusbarSection b9 = network.getVoltageLevel("vl1")
54+
.getNodeBreakerView()
55+
.newBusbarSection()
56+
.setId("b9")
57+
.setName("b9")
58+
.setNode(20)
59+
.add();
60+
b9.newExtension(BusbarSectionPositionAdder.class)
61+
.withBusbarIndex(1)
62+
.withSectionIndex(1)
63+
.add();
64+
65+
return network;
66+
}
67+
68+
@Override
69+
protected ModificationInfos buildModification() {
70+
return CreateVoltageLevelSectionInfos.builder()
71+
.stashed(false)
72+
.voltageLevelId("vl1")
73+
.busbarSectionId("b3")
74+
.busbarIndex(1)
75+
.isAfterBusbarSectionId(true)
76+
.leftSwitchKind("BREAKER")
77+
.rightSwitchKind("DISCONNECTOR")
78+
.isAllBusbars(false)
79+
.isSwitchOpen(false)
80+
.build();
81+
}
82+
83+
@Override
84+
protected ModificationInfos buildModificationUpdate() {
85+
return CreateVoltageLevelSectionInfos.builder()
86+
.voltageLevelId("vl1")
87+
.busbarSectionId("b3")
88+
.busbarIndex(1)
89+
.isAfterBusbarSectionId(true)
90+
.leftSwitchKind("DISCONNECTOR")
91+
.rightSwitchKind("DISCONNECTOR")
92+
.isAllBusbars(false)
93+
.isSwitchOpen(false)
94+
.build();
95+
}
96+
97+
@Override
98+
protected void assertAfterNetworkModificationCreation() {
99+
List<String> busBarIds = new ArrayList<>();
100+
getNetwork().getBusbarSections().forEach(busbarSection -> busBarIds.add(busbarSection.getId()));
101+
assertTrue(busBarIds.size() > 4);
102+
assertTrue(busBarIds.containsAll(List.of("b1", "b2", "b3", "b9", "vl1_1_2")));
103+
}
104+
105+
@Override
106+
protected void assertAfterNetworkModificationDeletion() {
107+
List<String> busBarIds = new ArrayList<>();
108+
getNetwork().getBusbarSections().forEach(busbarSection -> busBarIds.add(busbarSection.getId()));
109+
assertEquals(4, busBarIds.size());
110+
assertTrue(busBarIds.containsAll(List.of("b1", "b2", "b3", "b9")));
111+
}
112+
113+
@Override
114+
protected void testCreationModificationMessage(ModificationInfos modificationInfos) {
115+
assertEquals("{\"voltageLevelId\":\"vl1\"}", modificationInfos.getMessageValues());
116+
}
117+
118+
@Override
119+
protected void testUpdateModificationMessage(ModificationInfos modificationInfos) {
120+
assertEquals("{\"voltageLevelId\":\"vl1\"}", modificationInfos.getMessageValues());
121+
}
122+
}

0 commit comments

Comments
 (0)