Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Network modifications] Fix: no exception should be thrown if boolean throwException is false #701

Merged
merged 6 commits into from
Feb 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.powsybl.iidm.network.BranchAdder;
import com.powsybl.iidm.network.Network;

import java.util.Optional;

import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;

/**
Expand Down Expand Up @@ -58,6 +60,10 @@ protected void setBranchAttributes(BranchAdder<?, ?> adder, int row) {
applyIfPresent(nodes2, row, adder::setNode2);
}

abstract BranchAdder create(Network network, int row);
BranchAdder create(Network network, int row) {
return create(network, row, true).orElseThrow();
}

abstract Optional<BranchAdder> create(Network network, int row, boolean throwException);

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,28 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.extensions.ConnectablePosition;

import java.util.Optional;

import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;

public abstract class AbstractFeederBaysSeries {

abstract AbstractBranchSeries createTypedSeries(UpdatingDataframe dataframe);

public CreateBranchFeederBaysBuilder createBuilder(Network n, UpdatingDataframe dataframe, int row) {
public Optional<CreateBranchFeederBaysBuilder> createBuilder(Network n, UpdatingDataframe dataframe, int row, boolean throwException) {
AbstractBranchSeries series = createTypedSeries(dataframe);
CreateBranchFeederBaysBuilder builder = new CreateBranchFeederBaysBuilder();
BranchAdder<?, ?> lAdder = series.create(n, row);
builder.withBranchAdder(lAdder);
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_1"), row, builder::withBusOrBusbarSectionId1);
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_2"), row, builder::withBusOrBusbarSectionId2);
applyIfPresent(dataframe.getInts("position_order_1"), row, builder::withPositionOrder1);
applyIfPresent(dataframe.getInts("position_order_2"), row, builder::withPositionOrder2);
applyIfPresent(dataframe.getStrings("direction_1"), row, ConnectablePosition.Direction.class, builder::withDirection1);
applyIfPresent(dataframe.getStrings("direction_2"), row, ConnectablePosition.Direction.class, builder::withDirection2);
return builder;
Optional<BranchAdder> lineAdder = series.create(n, row, throwException);
if (lineAdder.isPresent()) {
builder.withBranchAdder(lineAdder.get());
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_1"), row, builder::withBusOrBusbarSectionId1);
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_2"), row, builder::withBusOrBusbarSectionId2);
applyIfPresent(dataframe.getInts("position_order_1"), row, builder::withPositionOrder1);
applyIfPresent(dataframe.getInts("position_order_2"), row, builder::withPositionOrder2);
applyIfPresent(dataframe.getStrings("direction_1"), row, ConnectablePosition.Direction.class, builder::withDirection1);
applyIfPresent(dataframe.getStrings("direction_2"), row, ConnectablePosition.Direction.class, builder::withDirection2);
return Optional.of(builder);
}
return Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,30 +38,30 @@ public void addElementsWithBay(Network network, UpdatingDataframe dataframe, boo
}

public void addElements(Network network, UpdatingDataframe dataframe) {
addElements(network, dataframe, (n, df, adder, row, throwException, reporter) -> add(adder), false, Reporter.NO_OP);
addElements(network, dataframe, (n, df, adder, row, throwException, reporter) -> add(adder), true, Reporter.NO_OP);
}

void addElements(Network network, UpdatingDataframe dataframe, AbstractSimpleAdder.AdditionStrategy addition, boolean throwException, Reporter reporter) {
//do nothing
}

private void add(InjectionAdder<?, ?> injectionAdder) {
if (injectionAdder instanceof LoadAdder) {
((LoadAdder) injectionAdder).add();
} else if (injectionAdder instanceof BatteryAdder) {
((BatteryAdder) injectionAdder).add();
} else if (injectionAdder instanceof DanglingLineAdder) {
((DanglingLineAdder) injectionAdder).add();
} else if (injectionAdder instanceof GeneratorAdder) {
((GeneratorAdder) injectionAdder).add();
} else if (injectionAdder instanceof ShuntCompensatorAdder) {
((ShuntCompensatorAdder) injectionAdder).add();
} else if (injectionAdder instanceof StaticVarCompensatorAdder) {
((StaticVarCompensatorAdder) injectionAdder).add();
} else if (injectionAdder instanceof LccConverterStationAdder) {
((LccConverterStationAdder) injectionAdder).add();
} else if (injectionAdder instanceof VscConverterStationAdder) {
((VscConverterStationAdder) injectionAdder).add();
if (injectionAdder instanceof LoadAdder loadAdder) {
loadAdder.add();
} else if (injectionAdder instanceof BatteryAdder batteryAdder) {
batteryAdder.add();
} else if (injectionAdder instanceof DanglingLineAdder danglingLineAdder) {
danglingLineAdder.add();
} else if (injectionAdder instanceof GeneratorAdder generatorAdder) {
generatorAdder.add();
} else if (injectionAdder instanceof ShuntCompensatorAdder shuntCompensatorAdder) {
shuntCompensatorAdder.add();
} else if (injectionAdder instanceof StaticVarCompensatorAdder staticVarCompensatorAdder) {
staticVarCompensatorAdder.add();
} else if (injectionAdder instanceof LccConverterStationAdder lccConverterStationAdder) {
lccConverterStationAdder.add();
} else if (injectionAdder instanceof VscConverterStationAdder vscConverterStationAdder) {
vscConverterStationAdder.add();
} else {
throw new AssertionError("Given InjectionAdder not supported: " + injectionAdder.getClass().getName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.powsybl.dataframe.update.UpdatingDataframe;
import com.powsybl.iidm.network.BatteryAdder;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
Expand Down Expand Up @@ -65,24 +67,30 @@ private static class BatterySeries extends InjectionSeries {
this.busOrBusbarSections = dataframe.getStrings("bus_or_busbar_section_id");
}

BatteryAdder createAdder(Network network, int row) {
BatteryAdder batteryAdder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newBattery();
setInjectionAttributes(batteryAdder, row);
applyIfPresent(maxP, row, batteryAdder::setMaxP);
applyIfPresent(minP, row, batteryAdder::setMinP);
applyIfPresent(targetP, row, batteryAdder::setTargetP);
applyIfPresent(targetQ, row, batteryAdder::setTargetQ);
return batteryAdder;
Optional<BatteryAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections, throwException);
if (vl.isPresent()) {
BatteryAdder batteryAdder = vl.get().newBattery();
setInjectionAttributes(batteryAdder, row);
applyIfPresent(maxP, row, batteryAdder::setMaxP);
applyIfPresent(minP, row, batteryAdder::setMinP);
applyIfPresent(targetP, row, batteryAdder::setTargetP);
applyIfPresent(targetQ, row, batteryAdder::setTargetQ);
return Optional.of(batteryAdder);
} else {
return Optional.empty();
}
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy addition, boolean throwException, Reporter reporter) {
BatterySeries series = new BatterySeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
BatteryAdder adder = series.createAdder(network, row);
addition.add(network, dataframe, adder, row, throwException, reporter);
Optional<BatteryAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
addition.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.powsybl.dataframe.update.UpdatingDataframe;
import com.powsybl.iidm.network.DanglingLineAdder;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
Expand All @@ -28,19 +30,19 @@
public class DanglingLineDataframeAdder extends AbstractSimpleAdder {

private static final List<SeriesMetadata> METADATA = List.of(
SeriesMetadata.stringIndex("id"),
SeriesMetadata.strings("voltage_level_id"),
SeriesMetadata.strings("bus_id"),
SeriesMetadata.strings("connectable_bus_id"),
SeriesMetadata.ints("node"),
SeriesMetadata.strings("name"),
SeriesMetadata.doubles("p0"),
SeriesMetadata.doubles("q0"),
SeriesMetadata.doubles("r"),
SeriesMetadata.doubles("x"),
SeriesMetadata.doubles("g"),
SeriesMetadata.doubles("b"),
SeriesMetadata.strings("pairing_key")
SeriesMetadata.stringIndex("id"),
SeriesMetadata.strings("voltage_level_id"),
SeriesMetadata.strings("bus_id"),
SeriesMetadata.strings("connectable_bus_id"),
SeriesMetadata.ints("node"),
SeriesMetadata.strings("name"),
SeriesMetadata.doubles("p0"),
SeriesMetadata.doubles("q0"),
SeriesMetadata.doubles("r"),
SeriesMetadata.doubles("x"),
SeriesMetadata.doubles("g"),
SeriesMetadata.doubles("b"),
SeriesMetadata.strings("pairing_key")
);

@Override
Expand Down Expand Up @@ -73,27 +75,34 @@ private static class DanglingLineSeries extends InjectionSeries {
this.pairingKey = dataframe.getStrings("pairing_key");
}

DanglingLineAdder createAdder(Network network, int row) {
DanglingLineAdder adder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newDanglingLine();
setInjectionAttributes(adder, row);
applyIfPresent(p0, row, adder::setP0);
applyIfPresent(q0, row, adder::setQ0);
applyIfPresent(r, row, adder::setR);
applyIfPresent(x, row, adder::setX);
applyIfPresent(g, row, adder::setG);
applyIfPresent(b, row, adder::setB);
applyIfPresent(pairingKey, row, adder::setPairingKey);
return adder;
Optional<DanglingLineAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels,
busOrBusbarSections, throwException);
if (vl.isPresent()) {
DanglingLineAdder adder = vl.get().newDanglingLine();
setInjectionAttributes(adder, row);
applyIfPresent(p0, row, adder::setP0);
applyIfPresent(q0, row, adder::setQ0);
applyIfPresent(r, row, adder::setR);
applyIfPresent(x, row, adder::setX);
applyIfPresent(g, row, adder::setG);
applyIfPresent(b, row, adder::setB);
applyIfPresent(pairingKey, row, adder::setPairingKey);
return Optional.of(adder);
} else {
return Optional.empty();
}
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy additionStrategy, boolean throwException, Reporter reporter) {
DanglingLineSeries series = new DanglingLineSeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
DanglingLineAdder adder = series.createAdder(network, row);
additionStrategy.add(network, dataframe, adder, row, throwException, reporter);
Optional<DanglingLineAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
additionStrategy.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyBooleanIfPresent;
Expand Down Expand Up @@ -80,31 +81,35 @@ private static class GeneratorSeries extends InjectionSeries {
this.regulatingElements = dataframe.getStrings("regulating_element_id");
}

GeneratorAdder createAdder(Network network, int row) {
GeneratorAdder adder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newGenerator();

setInjectionAttributes(adder, row);
applyIfPresent(maxP, row, adder::setMaxP);
applyIfPresent(minP, row, adder::setMinP);
applyIfPresent(targetP, row, adder::setTargetP);
applyIfPresent(targetQ, row, adder::setTargetQ);
applyIfPresent(targetV, row, adder::setTargetV);
applyIfPresent(ratedS, row, adder::setRatedS);
applyBooleanIfPresent(voltageRegulatorOn, row, adder::setVoltageRegulatorOn);
applyIfPresent(energySource, row, EnergySource.class, adder::setEnergySource);
applyIfPresent(regulatingElements, row, elementId -> NetworkUtil
.setRegulatingTerminal(adder::setRegulatingTerminal, network, elementId));
return adder;
Optional<GeneratorAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections, throwException);
if (vl.isPresent()) {
GeneratorAdder adder = vl.get().newGenerator();
setInjectionAttributes(adder, row);
applyIfPresent(maxP, row, adder::setMaxP);
applyIfPresent(minP, row, adder::setMinP);
applyIfPresent(targetP, row, adder::setTargetP);
applyIfPresent(targetQ, row, adder::setTargetQ);
applyIfPresent(targetV, row, adder::setTargetV);
applyIfPresent(ratedS, row, adder::setRatedS);
applyBooleanIfPresent(voltageRegulatorOn, row, adder::setVoltageRegulatorOn);
applyIfPresent(energySource, row, EnergySource.class, adder::setEnergySource);
applyIfPresent(regulatingElements, row, elementId -> NetworkUtil
.setRegulatingTerminal(adder::setRegulatingTerminal, network, elementId));
return Optional.of(adder);
}
return Optional.empty();
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy addition, boolean throwException, Reporter reporter) {
GeneratorSeries series = new GeneratorSeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
GeneratorAdder adder = series.createAdder(network, row);
addition.add(network, dataframe, adder, row, throwException, reporter);
Optional<GeneratorAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
addition.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.powsybl.dataframe.update.UpdatingDataframe;
import com.powsybl.iidm.network.LccConverterStationAdder;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
Expand Down Expand Up @@ -58,22 +60,27 @@ private static class LccStationSeries extends InjectionSeries {
this.busOrBusbarSections = dataframe.getStrings("bus_or_busbar_section_id");
}

LccConverterStationAdder createAdder(Network network, int row) {
LccConverterStationAdder adder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newLccConverterStation();
setInjectionAttributes(adder, row);
applyIfPresent(lossFactors, row, f -> adder.setLossFactor((float) f));
applyIfPresent(powerFactors, row, f -> adder.setPowerFactor((float) f));
return adder;
Optional<LccConverterStationAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections, throwException);
if (vl.isPresent()) {
LccConverterStationAdder adder = vl.get().newLccConverterStation();
setInjectionAttributes(adder, row);
applyIfPresent(lossFactors, row, f -> adder.setLossFactor((float) f));
applyIfPresent(powerFactors, row, f -> adder.setPowerFactor((float) f));
return Optional.of(adder);
}
return Optional.empty();
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy additionStrategy, boolean throwException, Reporter reporter) {
LccStationSeries series = new LccStationSeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
LccConverterStationAdder adder = series.createAdder(network, row);
additionStrategy.add(network, dataframe, adder, row, throwException, reporter);
Optional<LccConverterStationAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
additionStrategy.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}
}
Loading
Loading