diff --git a/network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/ThreeWindingsTransformerAdderImpl.java b/network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/ThreeWindingsTransformerAdderImpl.java index ffbd94b4d..1d146cc30 100644 --- a/network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/ThreeWindingsTransformerAdderImpl.java +++ b/network-store-iidm-impl/src/main/java/com/powsybl/network/store/iidm/impl/ThreeWindingsTransformerAdderImpl.java @@ -6,7 +6,13 @@ */ package com.powsybl.network.store.iidm.impl; -import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.Substation; +import com.powsybl.iidm.network.ThreeWindingsTransformer; +import com.powsybl.iidm.network.ThreeWindingsTransformerAdder; +import com.powsybl.iidm.network.Validable; +import com.powsybl.iidm.network.ValidationException; +import com.powsybl.iidm.network.ValidationUtil; +import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.network.store.model.LegAttributes; import com.powsybl.network.store.model.Resource; import com.powsybl.network.store.model.ResourceType; @@ -186,53 +192,12 @@ protected VoltageLevel checkVoltageLevel() { @Override public ThreeWindingsTransformerAdder add() { checkParams(); - checkVoltageLevel(); - checkNodeBus(); - - if (legNumber == 1) { - leg1 = LegAttributes.builder() - .voltageLevelId(voltageLevelId) - .node(node) - .bus(bus) - .connectableBus(connectableBus != null ? connectableBus : bus) - .r(r) - .x(x) - .g(g) - .b(b) - .ratedU(ratedU) - .ratedS(ratedS) - .legNumber(legNumber) - .build(); - } else if (legNumber == 2) { - leg2 = LegAttributes.builder() - .voltageLevelId(voltageLevelId) - .node(node) - .bus(bus) - .connectableBus(connectableBus != null ? connectableBus : bus) - .r(r) - .x(x) - .g(g) - .b(b) - .ratedU(ratedU) - .ratedS(ratedS) - .legNumber(legNumber) - .build(); - } else if (legNumber == 3) { - leg3 = LegAttributes.builder() - .voltageLevelId(voltageLevelId) - .node(node) - .bus(bus) - .connectableBus(connectableBus != null ? connectableBus : bus) - .r(r) - .x(x) - .g(g) - .b(b) - .ratedU(ratedU) - .ratedS(ratedS) - .legNumber(legNumber) - .build(); + switch (legNumber) { + case 1 -> legAdder1 = this; + case 2 -> legAdder2 = this; + case 3 -> legAdder3 = this; + default -> throw new IllegalStateException("Unexpected side: " + legNumber); } - return threeWindingsTransformerAdder; } @@ -240,15 +205,31 @@ public ThreeWindingsTransformerAdder add() { public String getMessageHeader() { return String.format("3 windings transformer leg%d in substation %s: ", legNumber, substation.getName()); } + + protected LegAttributes toLegAttributes() { + checkVoltageLevel(); + checkNodeBus(); + return LegAttributes.builder() + .voltageLevelId(voltageLevelId) + .node(node) + .bus(bus) + .connectableBus(connectableBus != null ? connectableBus : bus) + .r(r) + .x(x) + .g(g) + .b(b) + .ratedU(ratedU) + .ratedS(ratedS) + .legNumber(legNumber) + .build(); + } } private double ratedU0; - private LegAttributes leg1; - - private LegAttributes leg2; - - private LegAttributes leg3; + private LegAdderImpl legAdder1; + private LegAdderImpl legAdder2; + private LegAdderImpl legAdder3; ThreeWindingsTransformerAdderImpl(NetworkObjectIndex index, SubstationImpl substation) { super(index); @@ -286,19 +267,27 @@ public ThreeWindingsTransformerAdder setRatedU0(double ratedU0) { public ThreeWindingsTransformer add() { String id = checkAndGetUniqueId(); - if (leg1 == null) { + // Leg 1 + if (legAdder1 == null) { throw new ValidationException(this, "Leg1 is not set"); } - if (leg2 == null) { + LegAttributes leg1 = legAdder1.toLegAttributes(); + VoltageLevel voltageLevel1 = getNetwork().getVoltageLevel(leg1.getVoltageLevelId()); + + // Leg 2 + if (legAdder2 == null) { throw new ValidationException(this, "Leg2 is not set"); } - if (leg3 == null) { + LegAttributes leg2 = legAdder2.toLegAttributes(); + VoltageLevel voltageLevel2 = getNetwork().getVoltageLevel(leg2.getVoltageLevelId()); + + // Leg 3 + if (legAdder3 == null) { throw new ValidationException(this, "Leg3 is not set"); } - - VoltageLevel voltageLevel1 = getNetwork().getVoltageLevel(leg1.getVoltageLevelId()); - VoltageLevel voltageLevel2 = getNetwork().getVoltageLevel(leg2.getVoltageLevelId()); + LegAttributes leg3 = legAdder3.toLegAttributes(); VoltageLevel voltageLevel3 = getNetwork().getVoltageLevel(leg3.getVoltageLevelId()); + if (substation != null) { if (voltageLevel1.getSubstation().map(s -> s != substation).orElse(true) || voltageLevel2.getSubstation().map(s -> s != substation).orElse(true) || voltageLevel3.getSubstation().map(s -> s != substation).orElse(true)) { throw new ValidationException(this,