diff --git a/README.md b/README.md
index 886124223..2a4737043 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ for (Line line : network.lines) {
parameterSetId "CLA"
controlledQuadripole line.id
iMeasurement line.id
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
}
```
diff --git a/commons/pom.xml b/commons/pom.xml
index eaade231c..68c1efed5 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -51,7 +51,7 @@
com.powsybl
- powsybl-iidm-xml-converter
+ powsybl-iidm-serde
com.powsybl
diff --git a/commons/src/main/java/com/powsybl/dynawo/commons/DynawoConstants.java b/commons/src/main/java/com/powsybl/dynawo/commons/DynawoConstants.java
index 25474862e..9e1eebdd9 100644
--- a/commons/src/main/java/com/powsybl/dynawo/commons/DynawoConstants.java
+++ b/commons/src/main/java/com/powsybl/dynawo/commons/DynawoConstants.java
@@ -7,7 +7,7 @@
*/
package com.powsybl.dynawo.commons;
-import com.powsybl.iidm.xml.IidmXmlVersion;
+import com.powsybl.iidm.serde.IidmVersion;
import java.util.List;
@@ -22,7 +22,7 @@ private DynawoConstants() {
/**
* write the network to XIIDM v1.4 because currently Dynawo does not support versions above
*/
- public static final String IIDM_VERSION = IidmXmlVersion.V_1_4.toString(".");
+ public static final String IIDM_VERSION = IidmVersion.V_1_4.toString(".");
public static final String DYNAWO_CMD_NAME = "dynawo";
diff --git a/commons/src/main/java/com/powsybl/dynawo/commons/DynawoUtil.java b/commons/src/main/java/com/powsybl/dynawo/commons/DynawoUtil.java
index 3cf6da070..1fd602023 100644
--- a/commons/src/main/java/com/powsybl/dynawo/commons/DynawoUtil.java
+++ b/commons/src/main/java/com/powsybl/dynawo/commons/DynawoUtil.java
@@ -11,7 +11,7 @@
import com.powsybl.commons.PowsyblException;
import com.powsybl.computation.*;
import com.powsybl.iidm.network.Network;
-import com.powsybl.iidm.xml.XMLExporter;
+import com.powsybl.iidm.serde.AbstractTreeDataExporter;
import java.io.IOException;
import java.io.InputStream;
@@ -35,8 +35,8 @@ public static void writeIidm(Network network, Path file) {
Objects.requireNonNull(network);
Objects.requireNonNull(file);
Properties params = new Properties();
- params.setProperty(XMLExporter.VERSION, IIDM_VERSION);
- params.setProperty(XMLExporter.EXTENSIONS_LIST, String.join(",", IIDM_EXTENSIONS));
+ params.setProperty(AbstractTreeDataExporter.VERSION, IIDM_VERSION);
+ params.setProperty(AbstractTreeDataExporter.EXTENSIONS_LIST, String.join(",", IIDM_EXTENSIONS));
network.write("XIIDM", params, file);
}
diff --git a/commons/src/main/java/com/powsybl/dynawo/commons/NetworkResultsUpdater.java b/commons/src/main/java/com/powsybl/dynawo/commons/NetworkResultsUpdater.java
index ec6cca474..520cf1102 100644
--- a/commons/src/main/java/com/powsybl/dynawo/commons/NetworkResultsUpdater.java
+++ b/commons/src/main/java/com/powsybl/dynawo/commons/NetworkResultsUpdater.java
@@ -78,10 +78,10 @@ public static void update(Network targetNetwork, Network sourceNetwork, boolean
private static void updateHvdcLines(Network targetNetwork, Iterable hvdcLines) {
for (HvdcLine sourceHvdcLine : hvdcLines) {
- Terminal targetTerminal1 = targetNetwork.getHvdcLine(sourceHvdcLine.getId()).getConverterStation(HvdcLine.Side.ONE).getTerminal();
- Terminal targetTerminal2 = targetNetwork.getHvdcLine(sourceHvdcLine.getId()).getConverterStation(HvdcLine.Side.TWO).getTerminal();
- Terminal sourceTerminal1 = sourceHvdcLine.getConverterStation(HvdcLine.Side.ONE).getTerminal();
- Terminal sourceTerminal2 = sourceHvdcLine.getConverterStation(HvdcLine.Side.TWO).getTerminal();
+ Terminal targetTerminal1 = targetNetwork.getHvdcLine(sourceHvdcLine.getId()).getConverterStation(TwoSides.ONE).getTerminal();
+ Terminal targetTerminal2 = targetNetwork.getHvdcLine(sourceHvdcLine.getId()).getConverterStation(TwoSides.TWO).getTerminal();
+ Terminal sourceTerminal1 = sourceHvdcLine.getConverterStation(TwoSides.ONE).getTerminal();
+ Terminal sourceTerminal2 = sourceHvdcLine.getConverterStation(TwoSides.TWO).getTerminal();
update(targetTerminal1, sourceTerminal1);
update(targetTerminal2, sourceTerminal2);
}
diff --git a/commons/src/main/java/com/powsybl/dynawo/commons/loadmerge/LoadsMerger.java b/commons/src/main/java/com/powsybl/dynawo/commons/loadmerge/LoadsMerger.java
index dfb5de9e3..5b17b9bb1 100644
--- a/commons/src/main/java/com/powsybl/dynawo/commons/loadmerge/LoadsMerger.java
+++ b/commons/src/main/java/com/powsybl/dynawo/commons/loadmerge/LoadsMerger.java
@@ -12,7 +12,7 @@
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;
-import com.powsybl.iidm.xml.NetworkXml;
+import com.powsybl.iidm.serde.NetworkSerDe;
import java.util.EnumMap;
import java.util.List;
@@ -33,7 +33,7 @@ private LoadsMerger() {
}
public static Network mergeLoads(Network network) throws PowsyblException {
- Network mergedLoadsNetwork = NetworkXml.copy(network);
+ Network mergedLoadsNetwork = NetworkSerDe.copy(network);
mergedLoadsNetwork.getVoltageLevelStream().forEach(LoadsMerger::mergeLoadsInVoltageLevel);
return mergedLoadsNetwork;
}
diff --git a/commons/src/main/java/com/powsybl/dynawo/commons/timeline/XmlTimeLineParser.java b/commons/src/main/java/com/powsybl/dynawo/commons/timeline/XmlTimeLineParser.java
index fe697a08b..33d344983 100644
--- a/commons/src/main/java/com/powsybl/dynawo/commons/timeline/XmlTimeLineParser.java
+++ b/commons/src/main/java/com/powsybl/dynawo/commons/timeline/XmlTimeLineParser.java
@@ -75,13 +75,18 @@ private static List read(XMLStreamReader xmlReader) throws XMLStr
while (state == XMLStreamConstants.COMMENT) {
state = xmlReader.next();
}
- XmlUtil.readUntilEndElement("timeline", xmlReader, () -> {
- if (xmlReader.getLocalName().equals("event")) {
- String time = xmlReader.getAttributeValue(null, TIME);
- String modelName = xmlReader.getAttributeValue(null, MODEL_NAME);
- String message = xmlReader.getAttributeValue(null, MESSAGE);
- TimeLineUtil.createEvent(time, modelName, message)
- .ifPresent(timeline::add);
+ XmlUtil.readSubElements(xmlReader, elementName -> {
+ try {
+ if (elementName.equals("event")) {
+ String time = xmlReader.getAttributeValue(null, TIME);
+ String modelName = xmlReader.getAttributeValue(null, MODEL_NAME);
+ String message = xmlReader.getAttributeValue(null, MESSAGE);
+ XmlUtil.readEndElementOrThrow(xmlReader);
+ TimeLineUtil.createEvent(time, modelName, message)
+ .ifPresent(timeline::add);
+ }
+ } catch (XMLStreamException e) {
+ throw new UncheckedXmlStreamException(e);
}
});
return timeline;
diff --git a/commons/src/test/java/com/powsybl/dynawo/commons/AbstractDynawoCommonsTest.java b/commons/src/test/java/com/powsybl/dynawo/commons/AbstractDynawoCommonsTest.java
index 8ac2f3dda..d284f684d 100644
--- a/commons/src/test/java/com/powsybl/dynawo/commons/AbstractDynawoCommonsTest.java
+++ b/commons/src/test/java/com/powsybl/dynawo/commons/AbstractDynawoCommonsTest.java
@@ -7,9 +7,9 @@
*/
package com.powsybl.dynawo.commons;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.iidm.network.Network;
-import com.powsybl.iidm.xml.NetworkXml;
+import com.powsybl.iidm.serde.NetworkSerDe;
import java.io.IOException;
import java.io.InputStream;
@@ -17,25 +17,25 @@
import java.nio.file.Path;
import java.util.Objects;
-import static com.powsybl.commons.test.ComparisonUtils.compareTxt;
+import static com.powsybl.commons.test.ComparisonUtils.compareXml;
/**
* @author Florian Dupuy {@literal }
*/
-abstract class AbstractDynawoCommonsTest extends AbstractConverterTest {
+abstract class AbstractDynawoCommonsTest extends AbstractSerDeTest {
protected void compare(String expectedIidmResource, Network actual) throws IOException {
InputStream expected = Objects.requireNonNull(getClass().getResourceAsStream(expectedIidmResource));
- compareTxt(expected, getInputStream(actual, tmpDir.resolve("actual.xiidm")));
+ compareXml(expected, getInputStream(actual, tmpDir.resolve("actual.xiidm")));
}
protected void compare(Network expected, Network actual) throws IOException {
- compareTxt(getInputStream(expected, tmpDir.resolve("expected.xiidm")),
+ compareXml(getInputStream(expected, tmpDir.resolve("expected.xiidm")),
getInputStream(actual, tmpDir.resolve("actual.xiidm")));
}
private InputStream getInputStream(Network n, Path path) throws IOException {
- NetworkXml.write(n, path);
+ NetworkSerDe.write(n, path);
return Files.newInputStream(path);
}
}
diff --git a/commons/src/test/java/com/powsybl/dynawo/commons/DynawoVersionTest.java b/commons/src/test/java/com/powsybl/dynawo/commons/DynawoVersionTest.java
index 7526d49a9..4abbb8fa8 100644
--- a/commons/src/test/java/com/powsybl/dynawo/commons/DynawoVersionTest.java
+++ b/commons/src/test/java/com/powsybl/dynawo/commons/DynawoVersionTest.java
@@ -8,7 +8,6 @@
package com.powsybl.dynawo.commons;
import com.powsybl.commons.PowsyblException;
-import com.powsybl.commons.test.AbstractConverterTest;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@@ -16,7 +15,7 @@
/**
* @author Laurent Issertial {@literal }
*/
-class DynawoVersionTest extends AbstractConverterTest {
+class DynawoVersionTest {
private static final DynawoVersion DV_MIN = new DynawoVersion(1, 3, 0);
diff --git a/commons/src/test/java/com/powsybl/dynawo/commons/NetworkResultsUpdaterTest.java b/commons/src/test/java/com/powsybl/dynawo/commons/NetworkResultsUpdaterTest.java
index 50a2ec135..2f36f3d50 100644
--- a/commons/src/test/java/com/powsybl/dynawo/commons/NetworkResultsUpdaterTest.java
+++ b/commons/src/test/java/com/powsybl/dynawo/commons/NetworkResultsUpdaterTest.java
@@ -9,8 +9,8 @@
import com.powsybl.dynawo.commons.loadmerge.LoadsMerger;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.test.FourSubstationsNodeBreakerFactory;
-import com.powsybl.iidm.xml.ExportOptions;
-import com.powsybl.iidm.xml.NetworkXml;
+import com.powsybl.iidm.serde.ExportOptions;
+import com.powsybl.iidm.serde.NetworkSerDe;
import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -24,7 +24,7 @@ class NetworkResultsUpdaterTest extends AbstractDynawoCommonsTest {
@Test
void testUpdateWithoutMergeLoads() throws IOException {
Network expected = TestNetworkFactory.createMultiBusesVoltageLevelNetwork();
- Network actual = NetworkXml.copy(expected);
+ Network actual = NetworkSerDe.copy(expected);
reset(actual);
NetworkResultsUpdater.update(actual, expected, false);
compare(expected, actual);
@@ -33,7 +33,7 @@ void testUpdateWithoutMergeLoads() throws IOException {
@Test
void testUpdateWithMergeLoads() throws IOException {
Network expected = TestNetworkFactory.createMultiBusesVoltageLevelNetwork();
- Network actual = NetworkXml.copy(expected);
+ Network actual = NetworkSerDe.copy(expected);
NetworkResultsUpdater.update(actual, LoadsMerger.mergeLoads(expected), true);
compare(expected, actual);
}
@@ -41,7 +41,7 @@ void testUpdateWithMergeLoads() throws IOException {
@Test
void testUpdateNetworkPassingThroughBusBreaker() throws IOException {
Network expected = TestNetworkFactory.createMultiBusesVoltageLevelNetwork();
- Network actual = NetworkXml.copy(expected);
+ Network actual = NetworkSerDe.copy(expected);
reset(actual);
// We assume that the original network will be updated by some analysis tool
@@ -50,8 +50,8 @@ void testUpdateNetworkPassingThroughBusBreaker() throws IOException {
// is properly updated from the Bus/Breaker "solution" exchanged
// with the external analysis tool
Path pexpectedAsBusBreaker = tmpDir.resolve("expected-as-busbreaker.xiidm");
- NetworkXml.write(expected, new ExportOptions().setTopologyLevel(TopologyLevel.BUS_BREAKER), pexpectedAsBusBreaker);
- Network expectedBusBreaker = NetworkXml.read(pexpectedAsBusBreaker);
+ NetworkSerDe.write(expected, new ExportOptions().setTopologyLevel(TopologyLevel.BUS_BREAKER), pexpectedAsBusBreaker);
+ Network expectedBusBreaker = NetworkSerDe.read(pexpectedAsBusBreaker);
NetworkResultsUpdater.update(actual, expectedBusBreaker, false);
compare(expected, actual);
@@ -60,7 +60,7 @@ void testUpdateNetworkPassingThroughBusBreaker() throws IOException {
@Test
void testUpdateWithDisconnects() throws IOException {
Network expected = FourSubstationsNodeBreakerFactory.create();
- Network actual = NetworkXml.copy(expected);
+ Network actual = NetworkSerDe.copy(expected);
reset(actual);
// Test with some elements disconnected in the network
@@ -89,8 +89,8 @@ private static void reset(Network targetNetwork) {
reset(targetDangling.getTerminal());
}
for (HvdcLine targetHvdcLine : targetNetwork.getHvdcLines()) {
- reset(targetHvdcLine.getConverterStation(HvdcLine.Side.ONE).getTerminal());
- reset(targetHvdcLine.getConverterStation(HvdcLine.Side.TWO).getTerminal());
+ reset(targetHvdcLine.getConverterStation(TwoSides.ONE).getTerminal());
+ reset(targetHvdcLine.getConverterStation(TwoSides.TWO).getTerminal());
}
for (TwoWindingsTransformer targetTwoWindingsTransformer : targetNetwork.getTwoWindingsTransformers()) {
reset(targetTwoWindingsTransformer.getTerminal1());
diff --git a/commons/src/test/java/com/powsybl/dynawo/commons/TestNetworkFactory.java b/commons/src/test/java/com/powsybl/dynawo/commons/TestNetworkFactory.java
index b3588c79c..51bf19394 100644
--- a/commons/src/test/java/com/powsybl/dynawo/commons/TestNetworkFactory.java
+++ b/commons/src/test/java/com/powsybl/dynawo/commons/TestNetworkFactory.java
@@ -8,8 +8,8 @@
package com.powsybl.dynawo.commons;
import com.powsybl.iidm.network.*;
-import org.joda.time.DateTime;
+import java.time.ZonedDateTime;
import java.util.List;
/**
@@ -22,7 +22,7 @@ private TestNetworkFactory() {
static Network createMultiBusesVoltageLevelNetwork() {
Network network = Network.create("multiBusesVl", "test")
- .setCaseDate(DateTime.parse("2023-02-17T05:41:11.194+01:00"));
+ .setCaseDate(ZonedDateTime.parse("2023-02-17T05:41:11.194+01:00"));
Substation s = network.newSubstation().setId("substation").add();
VoltageLevel vl1 = s.newVoltageLevel().setId("vl1").setNominalV(250).setTopologyKind(TopologyKind.NODE_BREAKER).add();
@@ -70,7 +70,7 @@ static Network createMultiBusesVoltageLevelNetwork() {
*/
static Network createMultiLoadsBusesNetwork(List loadStates) {
Network network = Network.create("multiLoads", "test")
- .setCaseDate(DateTime.parse("2023-02-17T05:41:11.194+01:00"));
+ .setCaseDate(ZonedDateTime.parse("2023-02-17T05:41:11.194+01:00"));
Substation s = network.newSubstation().setId("substation").add();
// First node breaker voltage level
diff --git a/dynaflow/pom.xml b/dynaflow/pom.xml
index b66ead0ca..791b35d8c 100644
--- a/dynaflow/pom.xml
+++ b/dynaflow/pom.xml
@@ -28,7 +28,7 @@
com.powsybl
- powsybl-iidm-xml-converter
+ powsybl-iidm-serde
com.powsybl
diff --git a/dynaflow/src/main/java/com/powsybl/dynaflow/DynaFlowProvider.java b/dynaflow/src/main/java/com/powsybl/dynaflow/DynaFlowProvider.java
index a5cfa4986..260795236 100644
--- a/dynaflow/src/main/java/com/powsybl/dynaflow/DynaFlowProvider.java
+++ b/dynaflow/src/main/java/com/powsybl/dynaflow/DynaFlowProvider.java
@@ -24,7 +24,7 @@
import com.powsybl.dynawo.commons.timeline.TimelineEntry;
import com.powsybl.dynawo.commons.timeline.XmlTimeLineParser;
import com.powsybl.iidm.network.Network;
-import com.powsybl.iidm.xml.NetworkXml;
+import com.powsybl.iidm.serde.NetworkSerDe;
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.loadflow.LoadFlowProvider;
import com.powsybl.loadflow.LoadFlowResult;
@@ -187,7 +187,7 @@ public LoadFlowResult after(Path workingDir, ExecutionReport report) {
boolean status = true;
Path outputNetworkFile = workingDir.resolve("outputs").resolve("finalState").resolve(OUTPUT_IIDM_FILENAME);
if (Files.exists(outputNetworkFile)) {
- NetworkResultsUpdater.update(network, NetworkXml.read(outputNetworkFile), dynaFlowParameters.isMergeLoads());
+ NetworkResultsUpdater.update(network, NetworkSerDe.read(outputNetworkFile), dynaFlowParameters.isMergeLoads());
} else {
status = false;
}
diff --git a/dynaflow/src/main/java/com/powsybl/dynaflow/xml/ConstraintsReader.java b/dynaflow/src/main/java/com/powsybl/dynaflow/xml/ConstraintsReader.java
index c46b29f14..9531b1c82 100644
--- a/dynaflow/src/main/java/com/powsybl/dynaflow/xml/ConstraintsReader.java
+++ b/dynaflow/src/main/java/com/powsybl/dynaflow/xml/ConstraintsReader.java
@@ -72,21 +72,30 @@ public static List read(Network network, InputStream is) {
state = reader.next();
}
- XmlUtil.readUntilEndElement(CONSTRAINTS_ELEMENT_NAME, reader, () -> {
- if (!reader.getLocalName().equals(CONSTRAINT_ELEMENT_NAME)) {
- throw new AssertionError();
+ if (!CONSTRAINTS_ELEMENT_NAME.equals(reader.getLocalName())) {
+ throw new PowsyblException("Unknown element name '" + reader.getLocalName() + "' in constraints file");
+ }
+ XmlUtil.readSubElements(reader, elementName -> {
+ try {
+ if (!elementName.equals(CONSTRAINT_ELEMENT_NAME)) {
+ throw new PowsyblException("Unknown element name '" + elementName + "' in constraints tag");
+ }
+ String name = reader.getAttributeValue(null, MODEL_NAME);
+ reader.getAttributeValue(null, DESCRIPTION); // description: unused
+ reader.getAttributeValue(null, TYPE); // type: unused
+ String kind = reader.getAttributeValue(null, KIND);
+ double limit = readDouble(reader, LIMIT);
+ double value = readDouble(reader, VALUE);
+ Integer side = readInteger(reader, SIDE);
+ Integer acceptableDuration = readInteger(reader, ACCEPTABLE_DURATION, Integer.MAX_VALUE);
+ XmlUtil.readEndElementOrThrow(reader);
+
+ getLimitViolation(network, name, kind, limit, 1f, value, side, acceptableDuration)
+ .ifPresent(lvRead -> addOrDismiss(lvRead, limitViolations));
+
+ } catch (XMLStreamException e) {
+ throw new UncheckedXmlStreamException(e);
}
- String name = reader.getAttributeValue(null, MODEL_NAME);
- reader.getAttributeValue(null, DESCRIPTION); // description: unused
- reader.getAttributeValue(null, TYPE); // type: unused
- String kind = reader.getAttributeValue(null, KIND);
- double limit = XmlUtil.readOptionalDoubleAttribute(reader, LIMIT);
- double value = XmlUtil.readOptionalDoubleAttribute(reader, VALUE);
- Integer side = XmlUtil.readOptionalIntegerAttribute(reader, SIDE);
- Integer acceptableDuration = XmlUtil.readOptionalIntegerAttribute(reader, ACCEPTABLE_DURATION, Integer.MAX_VALUE);
-
- getLimitViolation(network, name, kind, limit, 1f, value, side, acceptableDuration)
- .ifPresent(lvRead -> addOrDismiss(lvRead, limitViolations));
});
return limitViolations;
} catch (XMLStreamException e) {
@@ -94,6 +103,21 @@ public static List read(Network network, InputStream is) {
}
}
+ private static double readDouble(XMLStreamReader reader, String name) {
+ String doubleStr = reader.getAttributeValue(null, name);
+ return doubleStr != null ? Double.parseDouble(doubleStr) : Double.NaN;
+ }
+
+ private static Integer readInteger(XMLStreamReader reader, String name) {
+ String intStr = reader.getAttributeValue(null, name);
+ return intStr != null ? Integer.valueOf(intStr) : null;
+ }
+
+ private static int readInteger(XMLStreamReader reader, String name, int defaultValue) {
+ String intStr = reader.getAttributeValue(null, name);
+ return intStr != null ? Integer.parseInt(intStr) : defaultValue;
+ }
+
private static void addOrDismiss(LimitViolation lvRead, List limitViolations) {
LimitViolationComparator comparator = new LimitViolationComparator();
limitViolations.stream().filter(lv -> comparator.compare(lvRead, lv) == 0).findFirst()
@@ -117,7 +141,7 @@ private static Optional getLimitViolation(Network network, Strin
.map(identifiable -> new LimitViolation(
identifiable.getId(), identifiable.getOptionalName().orElse(null),
toLimitViolationType(kind), kind, acceptableDuration,
- limit, limitReduction, value, toBranchSide(side)));
+ limit, limitReduction, value, toThreeSides(side)));
}
private static Optional> getLimitViolationIdentifiable(Network network, String name) {
@@ -142,16 +166,11 @@ private static Optional> getLimitViolationIdentifiable(Network n
}
}
- private static Branch.Side toBranchSide(Integer side) {
+ private static ThreeSides toThreeSides(Integer side) {
if (side == null) {
return null;
- } else if (side == 1) {
- return Branch.Side.ONE;
- } else if (side == 2) {
- return Branch.Side.TWO;
- } else {
- return null;
}
+ return ThreeSides.valueOf(side);
}
private static LimitViolationType toLimitViolationType(String kind) {
diff --git a/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowParametersTest.java b/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowParametersTest.java
index 022543290..52347e736 100644
--- a/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowParametersTest.java
+++ b/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowParametersTest.java
@@ -10,7 +10,7 @@
import com.google.common.jimfs.Jimfs;
import com.powsybl.commons.config.InMemoryPlatformConfig;
import com.powsybl.commons.config.MapModuleConfig;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.dynaflow.DynaFlowConstants.ActivePowerCompensation;
import com.powsybl.dynaflow.DynaFlowConstants.OutputTypes;
import com.powsybl.dynaflow.DynaFlowConstants.StartingPointMode;
@@ -34,7 +34,7 @@
*
* @author Guillaume Pernin {@literal }
*/
-class DynaFlowParametersTest extends AbstractConverterTest {
+class DynaFlowParametersTest extends AbstractSerDeTest {
private InMemoryPlatformConfig platformConfig;
diff --git a/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowProviderTest.java b/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowProviderTest.java
index b45e099e1..e04371357 100644
--- a/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowProviderTest.java
+++ b/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowProviderTest.java
@@ -7,14 +7,14 @@
package com.powsybl.dynaflow;
import com.powsybl.commons.PowsyblException;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.computation.ComputationManager;
import com.powsybl.computation.local.LocalCommandExecutor;
import com.powsybl.computation.local.LocalComputationConfig;
import com.powsybl.computation.local.LocalComputationManager;
import com.powsybl.dynawo.commons.DynawoConstants;
import com.powsybl.iidm.network.*;
-import com.powsybl.iidm.xml.NetworkXml;
+import com.powsybl.iidm.serde.NetworkSerDe;
import com.powsybl.loadflow.LoadFlow;
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.loadflow.LoadFlowResult;
@@ -40,7 +40,7 @@
/**
* @author Guillaume Pernin {@literal }
*/
-class DynaFlowProviderTest extends AbstractConverterTest {
+class DynaFlowProviderTest extends AbstractSerDeTest {
private Path homeDir;
private DynaFlowConfig config;
@@ -137,7 +137,7 @@ void testWithoutMergeLoads() throws Exception {
assertTrue(result.isOk());
InputStream pReferenceOutput = getClass().getResourceAsStream("/output.xiidm");
- Network expectedNetwork = NetworkXml.read(pReferenceOutput);
+ Network expectedNetwork = NetworkSerDe.read(pReferenceOutput);
compare(expectedNetwork, network);
}
@@ -158,7 +158,7 @@ void testWithMergeLoads() throws Exception {
assertTrue(result.isOk());
InputStream pReferenceOutput = getClass().getResourceAsStream("/output.xiidm");
- Network expectedNetwork = NetworkXml.read(pReferenceOutput);
+ Network expectedNetwork = NetworkSerDe.read(pReferenceOutput);
compare(expectedNetwork, network);
}
@@ -217,9 +217,9 @@ private void compare(Network expected, Network actual) throws IOException {
assertNotNull(pexpected);
Path pactual = tmpDir.resolve("actual.xiidm");
assertNotNull(pactual);
- NetworkXml.write(expected, pexpected);
+ NetworkSerDe.write(expected, pexpected);
actual.setCaseDate(expected.getCaseDate());
- NetworkXml.write(actual, pactual);
+ NetworkSerDe.write(actual, pactual);
compareXml(Files.newInputStream(pexpected), Files.newInputStream(pactual));
}
diff --git a/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowSecurityAnalysisTest.java b/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowSecurityAnalysisTest.java
index c20d88729..60d6c4910 100644
--- a/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowSecurityAnalysisTest.java
+++ b/dynaflow/src/test/java/com/powsybl/dynaflow/DynaFlowSecurityAnalysisTest.java
@@ -7,7 +7,7 @@
package com.powsybl.dynaflow;
import com.powsybl.commons.PowsyblException;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.computation.ComputationManager;
import com.powsybl.computation.local.LocalCommandExecutor;
import com.powsybl.computation.local.LocalComputationConfig;
@@ -22,7 +22,6 @@
import com.powsybl.security.SecurityAnalysisReport;
import com.powsybl.security.SecurityAnalysisResult;
import com.powsybl.security.json.SecurityAnalysisResultSerializer;
-import org.joda.time.DateTime;
import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -31,6 +30,7 @@
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.time.ZonedDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -40,12 +40,13 @@
import static com.powsybl.commons.test.ComparisonUtils.compareXml;
import static com.powsybl.dynaflow.DynaFlowConstants.DYNAFLOW_NAME;
import static com.powsybl.dynaflow.DynaFlowConstants.IIDM_FILENAME;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* @author Marcos de Miguel {@literal }
*/
-class DynaFlowSecurityAnalysisTest extends AbstractConverterTest {
+class DynaFlowSecurityAnalysisTest extends AbstractSerDeTest {
private static class LocalCommandExecutorMock extends AbstractLocalCommandExecutor {
@@ -142,7 +143,7 @@ void testCallingBadVersionDynawo() throws IOException {
private static Network buildNetwork() {
Network network = EurostagTutorialExample1Factory.create();
- network.setCaseDate(DateTime.parse("2023-03-23T16:40:48.060+01:00"));
+ network.setCaseDate(ZonedDateTime.parse("2023-03-23T16:40:48.060+01:00"));
// Changing the network for having some pre-contingencies violations
network.getBusBreakerView().getBus("NHV1").setV(380.0);
diff --git a/dynaflow/src/test/java/com/powsybl/dynaflow/json/JsonDynaFlowParametersSerializerTest.java b/dynaflow/src/test/java/com/powsybl/dynaflow/json/JsonDynaFlowParametersSerializerTest.java
index 58dc5f866..fcc5c4982 100644
--- a/dynaflow/src/test/java/com/powsybl/dynaflow/json/JsonDynaFlowParametersSerializerTest.java
+++ b/dynaflow/src/test/java/com/powsybl/dynaflow/json/JsonDynaFlowParametersSerializerTest.java
@@ -6,8 +6,8 @@
*/
package com.powsybl.dynaflow.json;
-import com.powsybl.commons.test.AbstractConverterTest;
import com.powsybl.commons.config.InMemoryPlatformConfig;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.dynaflow.DynaFlowConstants;
import com.powsybl.dynaflow.DynaFlowParameters;
import com.powsybl.loadflow.LoadFlowParameters;
@@ -25,7 +25,7 @@
*
* @author Guillaume Pernin {@literal }
*/
-class JsonDynaFlowParametersSerializerTest extends AbstractConverterTest {
+class JsonDynaFlowParametersSerializerTest extends AbstractSerDeTest {
@Test
void testDeserialize() {
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractEquipmentGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractEquipmentGroovyExtension.groovy
index 16caa0de9..c28430e5b 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractEquipmentGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractEquipmentGroovyExtension.groovy
@@ -7,14 +7,18 @@
*/
package com.powsybl.dynawaltz.dsl
+import com.powsybl.commons.reporter.Reporter
+import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.DynaWaltzProvider
import com.powsybl.iidm.network.Network
import java.util.function.Consumer
+
/**
* @author Laurent Issertial {@literal }
*/
-abstract class AbstractEquipmentGroovyExtension {
+abstract class AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
protected static final String MODELS_CONFIG = "models.json"
@@ -28,21 +32,26 @@ abstract class AbstractEquipmentGroovyExtension {
equipmentConfigs = ModelsSlurper.instance.getEquipmentConfigs(modelConfigUrl, modelTag)
}
- abstract protected ModelBuilder createBuilder(Network network, EquipmentConfig equipmentConfig)
+ abstract protected ModelBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter)
+ @Override
String getName() {
DynaWaltzProvider.NAME
}
+ @Override
List getModelNames() {
equipmentConfigs.collect(eq -> eq.lib)
}
- void load(Binding binding, Consumer consumer) {
+ @Override
+ void load(Binding binding, Consumer consumer, Reporter reporter) {
equipmentConfigs.forEach {
binding.setVariable(it.lib, { Closure closure ->
def cloned = closure.clone()
- ModelBuilder builder = createBuilder(binding.getVariable("network") as Network, it)
+ ModelBuilder builder = createBuilder(binding.getVariable("network") as Network,
+ it,
+ Reporters.createModelBuilderReporter(reporter, it.lib))
cloned.delegate = builder
cloned()
builder.build()?.tap {
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractPureDynamicGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractPureDynamicGroovyExtension.groovy
index 493a2ba46..b0658bf45 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractPureDynamicGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractPureDynamicGroovyExtension.groovy
@@ -7,6 +7,8 @@
*/
package com.powsybl.dynawaltz.dsl
+import com.powsybl.commons.reporter.Reporter
+import com.powsybl.dynamicsimulation.groovy.GroovyExtension
import com.powsybl.dynawaltz.DynaWaltzProvider
import com.powsybl.iidm.network.Network
@@ -16,12 +18,13 @@ import java.util.function.Consumer
* Superclass for automaton & event groovy extensions
* @author Laurent Issertial {@literal }
*/
-abstract class AbstractPureDynamicGroovyExtension {
+abstract class AbstractPureDynamicGroovyExtension implements GroovyExtension {
protected List modelTags
- abstract protected ModelBuilder createBuilder(Network network)
+ abstract protected ModelBuilder createBuilder(Network network, Reporter reporter)
+ @Override
String getName() {
DynaWaltzProvider.NAME
}
@@ -30,11 +33,13 @@ abstract class AbstractPureDynamicGroovyExtension {
modelTags
}
- void load(Binding binding, Consumer consumer) {
+ @Override
+ void load(Binding binding, Consumer consumer, Reporter reporter) {
modelTags.forEach {
binding.setVariable(it, { Closure closure ->
def cloned = closure.clone()
- ModelBuilder builder = createBuilder(binding.getVariable("network") as Network)
+ ModelBuilder builder = createBuilder(binding.getVariable("network") as Network,
+ Reporters.createModelBuilderReporter(reporter, it))
cloned.delegate = builder
cloned()
builder.build()?.tap {
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractSimpleEquipmentGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractSimpleEquipmentGroovyExtension.groovy
index 4c5eed638..f24e36ed0 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractSimpleEquipmentGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/AbstractSimpleEquipmentGroovyExtension.groovy
@@ -7,6 +7,9 @@
*/
package com.powsybl.dynawaltz.dsl
+import com.powsybl.commons.reporter.Reporter
+import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.DynaWaltzProvider
import com.powsybl.iidm.network.Network
@@ -15,7 +18,7 @@ import java.util.function.Consumer
/**
* @author Laurent Issertial {@literal }
*/
-abstract class AbstractSimpleEquipmentGroovyExtension {
+abstract class AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
protected EquipmentConfig equipmentConfig
@@ -23,21 +26,25 @@ abstract class AbstractSimpleEquipmentGroovyExtension {
equipmentConfig = new EquipmentConfig(modelTag)
}
+ abstract protected ModelBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter)
- abstract protected ModelBuilder createBuilder(Network network, EquipmentConfig equipmentConfig)
-
+ @Override
String getName() {
DynaWaltzProvider.NAME
}
+ @Override
List getModelNames() {
List.of(equipmentConfig.lib)
}
- void load(Binding binding, Consumer consumer) {
+ @Override
+ void load(Binding binding, Consumer consumer, Reporter reporter) {
binding.setVariable(equipmentConfig.lib, { Closure closure ->
def cloned = closure.clone()
- ModelBuilder builder = createBuilder(binding.getVariable("network") as Network, equipmentConfig)
+ ModelBuilder builder = createBuilder(binding.getVariable("network") as Network,
+ equipmentConfig,
+ Reporters.createModelBuilderReporter(reporter, equipmentConfig.lib))
cloned.delegate = builder
cloned()
builder.build()?.tap {
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DslEquipment.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DslEquipment.groovy
index a6046e488..c45e322ce 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DslEquipment.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DslEquipment.groovy
@@ -7,9 +7,9 @@
*/
package com.powsybl.dynawaltz.dsl
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.iidm.network.Identifiable
import com.powsybl.iidm.network.IdentifiableType
-import org.slf4j.Logger
import java.util.function.Function
@@ -48,12 +48,12 @@ class DslEquipment {
equipment = equipmentSupplier(staticId)
}
- boolean checkEquipmentData(Logger logger, String lib) {
+ boolean checkEquipmentData(Reporter reporter) {
if (!staticId) {
- logger.warn("$lib: '$fieldName' field is not set")
+ Reporters.reportFieldNotSet(reporter, fieldName)
return false
} else if (!equipment) {
- logger.warn("$lib: $equipmentType static id unknown : $staticId")
+ Reporters.reportStaticIdUnknown(reporter, fieldName, staticId, equipmentType)
return false
}
true
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DynaWaltzCurveGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DynaWaltzCurveGroovyExtension.groovy
index 717166fcd..63f698aba 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DynaWaltzCurveGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/DynaWaltzCurveGroovyExtension.groovy
@@ -7,6 +7,7 @@
package com.powsybl.dynawaltz.dsl
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dsl.DslException
import com.powsybl.dynamicsimulation.Curve
import com.powsybl.dynamicsimulation.groovy.CurveGroovyExtension
@@ -51,6 +52,7 @@ class DynaWaltzCurveGroovyExtension implements CurveGroovyExtension {
}
}
+ @Override
String getName() {
DynaWaltzProvider.NAME
}
@@ -76,7 +78,8 @@ class DynaWaltzCurveGroovyExtension implements CurveGroovyExtension {
}
}
- void load(Binding binding, Consumer consumer) {
+ @Override
+ void load(Binding binding, Consumer consumer, Reporter reporter) {
binding.curve = { Closure closure ->
def cloned = closure.clone()
CurvesSpec curveSpec = new CurvesSpec()
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/Reporters.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/Reporters.groovy
new file mode 100644
index 000000000..3ea04159f
--- /dev/null
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/Reporters.groovy
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2023, RTE (http://www.rte-france.com)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ * SPDX-License-Identifier: MPL-2.0
+ */
+package com.powsybl.dynawaltz.dsl
+
+import com.powsybl.commons.reporter.Report
+import com.powsybl.commons.reporter.Reporter
+import com.powsybl.commons.reporter.TypedValue
+import com.powsybl.iidm.network.IdentifiableType
+
+/**
+ * @author Laurent Issertial
+ */
+final class Reporters {
+
+ private Reporters() {
+ }
+
+ static Reporter createModelBuilderReporter(Reporter reporter, String lib) {
+ reporter.createSubReporter("DSLModelBuilder",
+ 'DSL model builder for ${lib}',
+ "lib", lib)
+ }
+
+ static void reportModelInstantiation(Reporter reporter, String dynamicId) {
+ reporter.report(Report.builder()
+ .withKey("modelInstantiation")
+ .withDefaultMessage('Model ${dynamicId} instantiation successful')
+ .withValue("dynamicId", dynamicId)
+ .withSeverity(TypedValue.TRACE_SEVERITY)
+ .build())
+ }
+
+ static void reportModelInstantiationFailure(Reporter reporter, String dynamicId) {
+ reporter.report(Report.builder()
+ .withKey("modelInstantiation")
+ .withDefaultMessage('Model ${dynamicId} cannot be instantiated')
+ .withValue("dynamicId", dynamicId)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build())
+ }
+
+ static void reportFieldReplacement(Reporter reporter, String fieldName, String replacementName, String replacement) {
+ reporter.report(Report.builder()
+ .withKey("fieldReplacement")
+ .withDefaultMessage('\'${fieldName}\' field is not set, ${replacementName} ${replacement} will be used instead')
+ .withValue("fieldName", fieldName)
+ .withValue("replacementName", replacementName)
+ .withValue("replacement", replacement)
+ .withSeverity(TypedValue.TRACE_SEVERITY)
+ .build())
+ }
+
+ static void reportFieldNotSet(Reporter reporter, String fieldName) {
+ reporter.report(Report.builder()
+ .withKey("fieldNotSet")
+ .withDefaultMessage('\'${fieldName}\' field is not set')
+ .withValue("fieldName", fieldName)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build())
+ }
+
+ static void reportStaticIdUnknown(Reporter reporter, String fieldName, String staticId, String equipmentType) {
+ reporter.report(Report.builder()
+ .withKey("staticIdUnknown")
+ .withDefaultMessage('\'${fieldName}\' field value \'${staticId}\' not found for equipment type(s) ${equipmentType}')
+ .withValue("equipmentType", equipmentType)
+ .withValue("fieldName", fieldName)
+ .withValue("staticId", staticId)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build())
+ }
+
+ static void reportCrossThreshold(Reporter reporter, String fieldName, double fieldValue, String threshold) {
+ reporter.report(Report.builder()
+ .withKey("crossThreshold")
+ .withDefaultMessage('${fieldName} should be ${threshold} (${fieldValue})')
+ .withValue("fieldName", fieldName)
+ .withValue("fieldValue", fieldValue)
+ .withValue("threshold", threshold)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build())
+ }
+
+ static void reportEmptyList(Reporter reporter, String fieldName) {
+ reporter.report(Report.builder()
+ .withKey("emptyList")
+ .withDefaultMessage('\'${fieldName}\' list is empty')
+ .withValue("fieldName", fieldName)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build())
+ }
+
+ static void reportFieldSetWithWrongEquipment(Reporter reporter, String fieldName, IdentifiableType equipmentType, String staticId) {
+ reportFieldSetWithWrongEquipment(reporter, fieldName, equipmentType.toString() + " " + staticId)
+ }
+
+ static void reportFieldSetWithWrongEquipment(Reporter reporter, String fieldName, String equipment) {
+ reporter.report(Report.builder()
+ .withKey("fieldSetWithWrongEquipment")
+ .withDefaultMessage('\'${fieldName}\' field is set but ${equipment} does not possess this option')
+ .withValue("fieldName", fieldName)
+ .withValue("equipment", equipment)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build())
+ }
+}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/AbstractPhaseShifterModelBuilder.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/AbstractPhaseShifterModelBuilder.groovy
index 686acbed4..766242183 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/AbstractPhaseShifterModelBuilder.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/AbstractPhaseShifterModelBuilder.groovy
@@ -7,6 +7,7 @@
*/
package com.powsybl.dynawaltz.dsl.automatons
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynawaltz.dsl.DslEquipment
import com.powsybl.dynawaltz.dsl.builders.AbstractPureDynamicModelBuilder
import com.powsybl.iidm.network.IdentifiableType
@@ -20,8 +21,8 @@ abstract class AbstractPhaseShifterModelBuilder extends AbstractPureDynamicModel
protected final DslEquipment dslTransformer
- AbstractPhaseShifterModelBuilder(Network network, String lib) {
- super(network, lib)
+ AbstractPhaseShifterModelBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
dslTransformer = new DslEquipment<>(IdentifiableType.TWO_WINDINGS_TRANSFORMER, "transformer")
}
@@ -32,6 +33,6 @@ abstract class AbstractPhaseShifterModelBuilder extends AbstractPureDynamicModel
@Override
protected void checkData() {
super.checkData()
- isInstantiable &= dslTransformer.checkEquipmentData(LOGGER, getLib())
+ isInstantiable &= dslTransformer.checkEquipmentData(reporter)
}
}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitAutomatonGroovyExtension.groovy
index a63db5d7d..00439dd46 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitAutomatonGroovyExtension.groovy
@@ -8,16 +8,20 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
import com.powsybl.dynawaltz.dsl.DslEquipment
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.dynawaltz.dsl.builders.AbstractPureDynamicModelBuilder
import com.powsybl.dynawaltz.models.Side
import com.powsybl.dynawaltz.models.automatons.CurrentLimitAutomaton
import com.powsybl.dynawaltz.models.utils.SideConverter
import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.IdentifiableType
import com.powsybl.iidm.network.Network
+import com.powsybl.iidm.network.TwoSides
/**
* An implementation of {@link DynamicModelGroovyExtension} that adds the CurrentLimitAutomaton
keyword to the DSL
@@ -32,8 +36,8 @@ class CurrentLimitAutomatonGroovyExtension extends AbstractPureDynamicGroovyExte
}
@Override
- protected CurrentLimitAutomatonBuilder createBuilder(Network network) {
- new CurrentLimitAutomatonBuilder(network, getLib())
+ protected CurrentLimitAutomatonBuilder createBuilder(Network network, Reporter reporter) {
+ new CurrentLimitAutomatonBuilder(network, getLib(), reporter)
}
protected String getLib() {
@@ -46,17 +50,17 @@ class CurrentLimitAutomatonGroovyExtension extends AbstractPureDynamicGroovyExte
protected Side iMeasurementSide
protected final DslEquipment controlledEquipment
- CurrentLimitAutomatonBuilder(Network network, String lib) {
- super(network, lib)
- iMeasurement = new DslEquipment<>("I measurement quadripole", "iMeasurement")
- controlledEquipment = new DslEquipment<>("Controlled quadripole", "controlledQuadripole")
+ CurrentLimitAutomatonBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
+ iMeasurement = new DslEquipment<>("Quadripole", "iMeasurement")
+ controlledEquipment = new DslEquipment<>("Quadripole", "controlledQuadripole")
}
void iMeasurement(String staticId) {
iMeasurement.addEquipment(staticId, network::getBranch)
}
- void iMeasurementSide(Branch.Side side) {
+ void iMeasurementSide(TwoSides side) {
this.iMeasurementSide = SideConverter.convert(side)
}
@@ -67,10 +71,10 @@ class CurrentLimitAutomatonGroovyExtension extends AbstractPureDynamicGroovyExte
@Override
void checkData() {
super.checkData()
- isInstantiable &= controlledEquipment.checkEquipmentData(LOGGER, getLib())
- isInstantiable &= iMeasurement.checkEquipmentData(LOGGER, getLib())
+ isInstantiable &= controlledEquipment.checkEquipmentData(reporter)
+ isInstantiable &= iMeasurement.checkEquipmentData(reporter)
if (!iMeasurementSide) {
- LOGGER.warn("${getLib()}: 'iMeasurementSide' field is not set")
+ Reporters.reportFieldNotSet(reporter, "iMeasurementSide")
isInstantiable = false
}
}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitTwoLevelsAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitTwoLevelsAutomatonGroovyExtension.groovy
index 289abdcf1..56aa888cc 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitTwoLevelsAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/CurrentLimitTwoLevelsAutomatonGroovyExtension.groovy
@@ -8,16 +8,18 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
-import com.powsybl.dsl.DslException
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
import com.powsybl.dynawaltz.dsl.DslEquipment
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.dynawaltz.models.Side
import com.powsybl.dynawaltz.models.automatons.CurrentLimitTwoLevelsAutomaton
import com.powsybl.dynawaltz.models.utils.SideConverter
import com.powsybl.iidm.network.Branch
import com.powsybl.iidm.network.Network
+import com.powsybl.iidm.network.TwoSides
/**
* @author Laurent Issertial {@literal }
@@ -34,8 +36,8 @@ class CurrentLimitTwoLevelsAutomatonGroovyExtension extends AbstractPureDynamicG
}
@Override
- protected CurrentLimitAutomatonTwoLevelBuilder createBuilder(Network network) {
- new CurrentLimitAutomatonTwoLevelBuilder(network, getLib())
+ protected CurrentLimitAutomatonTwoLevelBuilder createBuilder(Network network, Reporter reporter) {
+ new CurrentLimitAutomatonTwoLevelBuilder(network, getLib(), reporter)
}
static class CurrentLimitAutomatonTwoLevelBuilder extends CurrentLimitAutomatonGroovyExtension.CurrentLimitAutomatonBuilder {
@@ -43,16 +45,16 @@ class CurrentLimitTwoLevelsAutomatonGroovyExtension extends AbstractPureDynamicG
protected final DslEquipment iMeasurement2
protected Side iMeasurement2Side
- CurrentLimitAutomatonTwoLevelBuilder(Network network, String lib) {
- super(network, lib)
- iMeasurement2 = new DslEquipment<>("I measurement 2 quadripole", "iMeasurement2")
+ CurrentLimitAutomatonTwoLevelBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
+ iMeasurement2 = new DslEquipment<>("Quadripole", "iMeasurement2")
}
void iMeasurement1(String staticId) {
iMeasurement(staticId)
}
- void iMeasurement1Side(Branch.Side side) {
+ void iMeasurement1Side(TwoSides side) {
iMeasurementSide(side)
}
@@ -60,16 +62,16 @@ class CurrentLimitTwoLevelsAutomatonGroovyExtension extends AbstractPureDynamicG
iMeasurement2.addEquipment(staticId, network::getBranch)
}
- void iMeasurement2Side(Branch.Side side) {
+ void iMeasurement2Side(TwoSides side) {
this.iMeasurement2Side = SideConverter.convert(side)
}
@Override
void checkData() {
super.checkData()
- isInstantiable &= iMeasurement2.checkEquipmentData(LOGGER, getLib())
+ isInstantiable &= iMeasurement2.checkEquipmentData(reporter)
if (!iMeasurement2Side) {
- LOGGER.warn("${getLib()}: 'iMeasurement2Side' field is not set")
+ Reporters.reportFieldNotSet(reporter, "iMeasurement2Side")
isInstantiable = false
}
}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterIAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterIAutomatonGroovyExtension.groovy
index 6a8614a68..a35512e94 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterIAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterIAutomatonGroovyExtension.groovy
@@ -8,6 +8,7 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
@@ -27,14 +28,14 @@ class PhaseShifterIAutomatonGroovyExtension extends AbstractPureDynamicGroovyExt
}
@Override
- protected PhaseShifterPAutomatonBuilder createBuilder(Network network) {
- new PhaseShifterPAutomatonBuilder(network, LIB)
+ protected PhaseShifterPAutomatonBuilder createBuilder(Network network, Reporter reporter) {
+ new PhaseShifterPAutomatonBuilder(network, LIB, reporter)
}
static class PhaseShifterPAutomatonBuilder extends AbstractPhaseShifterModelBuilder {
- PhaseShifterPAutomatonBuilder(Network network, String lib) {
- super(network, lib)
+ PhaseShifterPAutomatonBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterPAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterPAutomatonGroovyExtension.groovy
index 716d04875..e13c64ce3 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterPAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/PhaseShifterPAutomatonGroovyExtension.groovy
@@ -8,6 +8,7 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
@@ -27,14 +28,14 @@ class PhaseShifterPAutomatonGroovyExtension extends AbstractPureDynamicGroovyExt
}
@Override
- protected PhaseShifterPAutomatonBuilder createBuilder(Network network) {
- new PhaseShifterPAutomatonBuilder(network, LIB)
+ protected PhaseShifterPAutomatonBuilder createBuilder(Network network, Reporter reporter) {
+ new PhaseShifterPAutomatonBuilder(network, LIB, reporter)
}
static class PhaseShifterPAutomatonBuilder extends AbstractPhaseShifterModelBuilder {
- PhaseShifterPAutomatonBuilder(Network network, String lib) {
- super(network, lib)
+ PhaseShifterPAutomatonBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerAutomatonGroovyExtension.groovy
index 654da0b1e..d6afcc29e 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerAutomatonGroovyExtension.groovy
@@ -8,6 +8,7 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
@@ -30,8 +31,8 @@ class TapChangerAutomatonGroovyExtension extends AbstractPureDynamicGroovyExtens
}
@Override
- protected TapChangerAutomatonBuilder createBuilder(Network network) {
- new TapChangerAutomatonBuilder(network, LIB)
+ protected TapChangerAutomatonBuilder createBuilder(Network network, Reporter reporter) {
+ new TapChangerAutomatonBuilder(network, LIB, reporter)
}
static class TapChangerAutomatonBuilder extends AbstractPureDynamicModelBuilder {
@@ -39,8 +40,8 @@ class TapChangerAutomatonGroovyExtension extends AbstractPureDynamicGroovyExtens
protected final DslEquipment dslLoad
protected TransformerSide side = TransformerSide.NONE
- TapChangerAutomatonBuilder(Network network, String lib) {
- super(network, lib)
+ TapChangerAutomatonBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
dslLoad = new DslEquipment<>(IdentifiableType.LOAD)
}
@@ -55,7 +56,7 @@ class TapChangerAutomatonGroovyExtension extends AbstractPureDynamicGroovyExtens
@Override
protected void checkData() {
super.checkData()
- isInstantiable &= dslLoad.checkEquipmentData(LOGGER, getLib())
+ isInstantiable &= dslLoad.checkEquipmentData(reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerBlockingAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerBlockingAutomatonGroovyExtension.groovy
index 3cd89b287..376f81cf4 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerBlockingAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/TapChangerBlockingAutomatonGroovyExtension.groovy
@@ -8,9 +8,11 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.dynawaltz.dsl.builders.AbstractPureDynamicModelBuilder
import com.powsybl.dynawaltz.models.automatons.TapChangerBlockingAutomaton
import com.powsybl.iidm.network.Bus
@@ -33,8 +35,8 @@ class TapChangerBlockingAutomatonGroovyExtension extends AbstractPureDynamicGroo
}
@Override
- protected TCBAutomatonBuilder createBuilder(Network network) {
- new TCBAutomatonBuilder(network, LIB)
+ protected TCBAutomatonBuilder createBuilder(Network network, Reporter reporter) {
+ new TCBAutomatonBuilder(network, LIB, reporter)
}
static class TCBAutomatonBuilder extends AbstractPureDynamicModelBuilder {
@@ -44,8 +46,8 @@ class TapChangerBlockingAutomatonGroovyExtension extends AbstractPureDynamicGroo
List uMeasurements = []
List tapChangerAutomatonIds = []
- TCBAutomatonBuilder(Network network, String lib) {
- super(network, lib)
+ TCBAutomatonBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
}
void transformers(String[] staticIds) {
@@ -69,7 +71,7 @@ class TapChangerBlockingAutomatonGroovyExtension extends AbstractPureDynamicGroo
Identifiable extends Identifiable> checkEquipment(String staticId) {
network.getIdentifiable(staticId)?.tap {
if (!TapChangerBlockingAutomaton.isCompatibleEquipment(type)) {
- LOGGER.warn("${getLib()}: $type $staticId is not compatible")
+ Reporters.reportStaticIdUnknown(reporter, "uMeasurements", staticId, "LOAD/TWO_WINDINGS_TRANSFORMER")
}
}
}
@@ -78,7 +80,7 @@ class TapChangerBlockingAutomatonGroovyExtension extends AbstractPureDynamicGroo
uMeasurements = staticIds.collect {
def bus = network.busBreakerView.getBus(it)
if (!bus) {
- LOGGER.warn("${getLib()}: $IdentifiableType.BUS static id unknown : $it")
+ Reporters.reportStaticIdUnknown(reporter, "uMeasurements", it, IdentifiableType.BUS.toString())
}
bus
}
@@ -87,17 +89,17 @@ class TapChangerBlockingAutomatonGroovyExtension extends AbstractPureDynamicGroo
@Override
protected void checkData() {
if (!uMeasurements) {
- LOGGER.warn("${getLib()}: 'uMeasurements' field is not set")
+ Reporters.reportFieldNotSet(reporter, "uMeasurements")
isInstantiable = false
} else {
uMeasurements -= null
if (!uMeasurements) {
- LOGGER.warn("${getLib()}: 'uMeasurements' is empty")
+ Reporters.reportEmptyList(reporter, "uMeasurements")
isInstantiable = false
}
}
if(!loads && !transformers && !tapChangerAutomatonIds) {
- LOGGER.warn("${getLib()}: 'transformers' field is empty")
+ Reporters.reportEmptyList(reporter, "transformers")
isInstantiable = false
}
}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/UnderVoltageAutomatonGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/UnderVoltageAutomatonGroovyExtension.groovy
index b9e83c6fa..52d90a182 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/UnderVoltageAutomatonGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/automatons/UnderVoltageAutomatonGroovyExtension.groovy
@@ -8,6 +8,7 @@
package com.powsybl.dynawaltz.dsl.automatons
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
@@ -31,16 +32,16 @@ class UnderVoltageAutomatonGroovyExtension extends AbstractPureDynamicGroovyExte
}
@Override
- protected UnderVoltageAutomatonBuilder createBuilder(Network network) {
- new UnderVoltageAutomatonBuilder(network, LIB)
+ protected UnderVoltageAutomatonBuilder createBuilder(Network network, Reporter reporter) {
+ new UnderVoltageAutomatonBuilder(network, LIB, reporter)
}
static class UnderVoltageAutomatonBuilder extends AbstractPureDynamicModelBuilder {
protected final DslEquipment dslGenerator
- UnderVoltageAutomatonBuilder(Network network, String lib) {
- super(network, lib)
+ UnderVoltageAutomatonBuilder(Network network, String lib, Reporter reporter) {
+ super(network, lib, reporter)
dslGenerator = new DslEquipment<>(IdentifiableType.GENERATOR, "generator")
}
@@ -51,7 +52,7 @@ class UnderVoltageAutomatonGroovyExtension extends AbstractPureDynamicGroovyExte
@Override
protected void checkData() {
super.checkData()
- isInstantiable &= dslGenerator.checkEquipmentData(LOGGER, getLib())
+ isInstantiable &= dslGenerator.checkEquipmentData(reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractDynamicModelBuilder.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractDynamicModelBuilder.groovy
index 80f863af7..34074ddde 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractDynamicModelBuilder.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractDynamicModelBuilder.groovy
@@ -7,32 +7,36 @@
*/
package com.powsybl.dynawaltz.dsl.builders
+import com.powsybl.commons.reporter.Reporter
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.iidm.network.Network
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
/**
* @author Laurent Issertial {@literal }
*/
abstract class AbstractDynamicModelBuilder {
- protected static final Logger LOGGER = LoggerFactory.getLogger("DynamicModelBuilder")
-
protected final Network network
+ protected final Reporter reporter
protected boolean isInstantiable = true
+ protected AbstractDynamicModelBuilder(Network network, Reporter reporter) {
+ this.network = network
+ this.reporter = reporter
+ }
+
protected AbstractDynamicModelBuilder(Network network) {
this.network = network
+ this.reporter = null
}
abstract protected void checkData()
protected final boolean isInstantiable() {
checkData()
- isInstantiable ? LOGGER.debug("${getLib()} instanciation successful")
- : LOGGER.warn("${getLib()} cannot be instantiated")
+ isInstantiable ? Reporters.reportModelInstantiation(reporter, getModelId()) : Reporters.reportModelInstantiationFailure(reporter, getModelId())
isInstantiable
}
- abstract protected String getLib()
+ abstract protected String getModelId()
}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEquipmentModelBuilder.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEquipmentModelBuilder.groovy
index 89269a4b0..4008d0356 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEquipmentModelBuilder.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEquipmentModelBuilder.groovy
@@ -7,10 +7,12 @@
*/
package com.powsybl.dynawaltz.dsl.builders
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynawaltz.dsl.DslEquipment
import com.powsybl.dynawaltz.dsl.EquipmentConfig
import com.powsybl.dynawaltz.dsl.ModelBuilder
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.iidm.network.Identifiable
import com.powsybl.iidm.network.IdentifiableType
import com.powsybl.iidm.network.Network
@@ -25,8 +27,8 @@ abstract class AbstractEquipmentModelBuilder extends Abs
protected final EquipmentConfig equipmentConfig
protected final DslEquipment dslEquipment
- protected AbstractEquipmentModelBuilder(Network network, EquipmentConfig equipmentConfig, IdentifiableType equipmentType) {
- super(network)
+ protected AbstractEquipmentModelBuilder(Network network, EquipmentConfig equipmentConfig, IdentifiableType equipmentType, Reporter reporter) {
+ super(network, reporter)
this.equipmentConfig = equipmentConfig
this.dslEquipment = new DslEquipment(equipmentType)
}
@@ -45,12 +47,13 @@ abstract class AbstractEquipmentModelBuilder extends Abs
@Override
protected void checkData() {
- isInstantiable = dslEquipment.checkEquipmentData(LOGGER, getLib())
+ isInstantiable = dslEquipment.checkEquipmentData(reporter)
if (!parameterSetId) {
- LOGGER.warn("${getLib()}: 'parameterSetId' field is not set")
+ Reporters.reportFieldNotSet(reporter, "parameterSetId")
isInstantiable = false
}
if (!dynamicModelId) {
+ Reporters.reportFieldReplacement(reporter, "dynamicModelId", "staticId", dslEquipment.staticId ?: "(unknown staticId)")
dynamicModelId = dslEquipment.staticId
}
}
@@ -62,8 +65,8 @@ abstract class AbstractEquipmentModelBuilder extends Abs
}
@Override
- String getLib() {
- equipmentConfig.getLib()
+ String getModelId() {
+ dynamicModelId ?: "unknownDynamicId"
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEventModelBuilder.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEventModelBuilder.groovy
index 36ad3aeea..115e991ec 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEventModelBuilder.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractEventModelBuilder.groovy
@@ -8,9 +8,12 @@
package com.powsybl.dynawaltz.dsl.builders
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.EventModel
import com.powsybl.dynawaltz.dsl.DslEquipment
import com.powsybl.dynawaltz.dsl.ModelBuilder
+import com.powsybl.dynawaltz.dsl.Reporters
+import com.powsybl.dynawaltz.models.events.AbstractEvent
import com.powsybl.iidm.network.Identifiable
import com.powsybl.iidm.network.Network
@@ -24,8 +27,8 @@ abstract class AbstractEventModelBuilder extends Abstrac
protected String staticId
protected double startTime
- AbstractEventModelBuilder(Network network, DslEquipment dslEquipment, String tag) {
- super(network)
+ AbstractEventModelBuilder(Network network, DslEquipment dslEquipment, String tag, Reporter reporter) {
+ super(network, reporter)
this.dslEquipment = dslEquipment
this.tag = tag
}
@@ -40,9 +43,9 @@ abstract class AbstractEventModelBuilder extends Abstrac
@Override
protected void checkData() {
- isInstantiable &= dslEquipment.checkEquipmentData(LOGGER, getLib())
+ isInstantiable &= dslEquipment.checkEquipmentData(reporter)
if (!startTime) {
- LOGGER.warn("${getLib()}: 'startTime' field is not set")
+ Reporters.reportFieldNotSet(reporter, "startTime")
isInstantiable = false
}
}
@@ -50,8 +53,8 @@ abstract class AbstractEventModelBuilder extends Abstrac
abstract protected Identifiable findEquipment(String staticId)
@Override
- protected String getLib() {
- tag
+ String getModelId() {
+ AbstractEvent.generateEventId(tag + "_", dslEquipment.staticId ?: "unknownStaticId")
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractPureDynamicModelBuilder.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractPureDynamicModelBuilder.groovy
index 454d4ae02..866f4e69a 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractPureDynamicModelBuilder.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/builders/AbstractPureDynamicModelBuilder.groovy
@@ -7,8 +7,10 @@
*/
package com.powsybl.dynawaltz.dsl.builders
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynawaltz.dsl.ModelBuilder
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.iidm.network.Network
/**
@@ -21,8 +23,8 @@ abstract class AbstractPureDynamicModelBuilder extends AbstractDynamicModelBuild
protected String parameterSetId
protected final String lib
- AbstractPureDynamicModelBuilder(Network network, String lib) {
- super(network)
+ AbstractPureDynamicModelBuilder(Network network, String lib, Reporter reporter) {
+ super(network, reporter)
this.lib = lib
}
@@ -37,18 +39,18 @@ abstract class AbstractPureDynamicModelBuilder extends AbstractDynamicModelBuild
@Override
protected void checkData() {
if (!dynamicModelId) {
- LOGGER.warn("${getLib()}: 'dynamicModelId' field is not set")
+ Reporters.reportFieldNotSet(reporter, "dynamicModelId")
isInstantiable = false
}
if (!parameterSetId) {
- LOGGER.warn("${getLib()}: 'parameterSetId' field is not set")
+ Reporters.reportFieldNotSet(reporter, "dynamicModelId")
isInstantiable = false
}
}
@Override
- protected String getLib() {
- lib
+ String getModelId() {
+ dynamicModelId ?: "unknownDynamicId"
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventActivePowerVariationGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventActivePowerVariationGroovyExtension.groovy
index 038875a18..36cbae18c 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventActivePowerVariationGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventActivePowerVariationGroovyExtension.groovy
@@ -8,10 +8,12 @@
package com.powsybl.dynawaltz.dsl.events
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.EventModel
import com.powsybl.dynamicsimulation.groovy.EventModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
import com.powsybl.dynawaltz.dsl.DslFilteredEquipment
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.dynawaltz.dsl.builders.AbstractEventModelBuilder
import com.powsybl.dynawaltz.models.events.EventActivePowerVariation
import com.powsybl.iidm.network.Identifiable
@@ -31,16 +33,16 @@ class EventActivePowerVariationGroovyExtension extends AbstractPureDynamicGroovy
}
@Override
- protected EventAPVBuilder createBuilder(Network network) {
- new EventAPVBuilder(network, TAG)
+ protected EventAPVBuilder createBuilder(Network network, Reporter reporter) {
+ new EventAPVBuilder(network, TAG, reporter)
}
static class EventAPVBuilder extends AbstractEventModelBuilder {
protected double deltaP
- EventAPVBuilder(Network network, String tag) {
- super(network, new DslFilteredEquipment("Generator/Load", EventActivePowerVariation::isConnectable), tag)
+ EventAPVBuilder(Network network, String tag, Reporter reporter) {
+ super(network, new DslFilteredEquipment("GENERATOR/LOAD", EventActivePowerVariation::isConnectable), tag, reporter)
}
void deltaP(double deltaP) {
@@ -49,12 +51,8 @@ class EventActivePowerVariationGroovyExtension extends AbstractPureDynamicGroovy
void checkData() {
super.checkData()
- if (dslEquipment.equipment && !EventActivePowerVariation.isConnectable(dslEquipment.equipment.type)) {
- LOGGER.warn("${getLib()}: ${dslEquipment.equipment?.type} ${dslEquipment.staticId} cannot be disconnected")
- isInstantiable = false
- }
if (!deltaP) {
- LOGGER.warn("${getLib()}: 'deltaP' field is not set")
+ Reporters.reportFieldNotSet(reporter, "deltaP")
isInstantiable = false
}
}
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventDisconnectionGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventDisconnectionGroovyExtension.groovy
index 82d165476..d9d8a3d2d 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventDisconnectionGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/EventDisconnectionGroovyExtension.groovy
@@ -8,20 +8,18 @@
package com.powsybl.dynawaltz.dsl.events
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.EventModel
import com.powsybl.dynamicsimulation.groovy.EventModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
import com.powsybl.dynawaltz.dsl.DslEquipment
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.dynawaltz.dsl.builders.AbstractEventModelBuilder
import com.powsybl.dynawaltz.models.events.AbstractEvent
import com.powsybl.dynawaltz.models.events.EventHvdcDisconnection
-import com.powsybl.dynawaltz.models.events.EventQuadripoleDisconnection
import com.powsybl.dynawaltz.models.events.EventInjectionDisconnection
-import com.powsybl.iidm.network.Branch
-import com.powsybl.iidm.network.HvdcLine
-import com.powsybl.iidm.network.Identifiable
-import com.powsybl.iidm.network.IdentifiableType
-import com.powsybl.iidm.network.Network
+import com.powsybl.dynawaltz.models.events.EventQuadripoleDisconnection
+import com.powsybl.iidm.network.*
/**
* @author Laurent Issertial {@literal }
@@ -40,8 +38,8 @@ class EventDisconnectionGroovyExtension extends AbstractPureDynamicGroovyExtensi
}
@Override
- protected EventQuadripoleDisconnectionBuilder createBuilder(Network network) {
- new EventQuadripoleDisconnectionBuilder(network, TAG)
+ protected EventQuadripoleDisconnectionBuilder createBuilder(Network network, Reporter reporter) {
+ new EventQuadripoleDisconnectionBuilder(network, TAG, reporter)
}
static class EventQuadripoleDisconnectionBuilder extends AbstractEventModelBuilder {
@@ -54,18 +52,18 @@ class EventDisconnectionGroovyExtension extends AbstractPureDynamicGroovyExtensi
private enum DisconnectionType {INJECTION, QUADRIPOLE, HVDC, NONE}
- EventQuadripoleDisconnectionBuilder(Network network, String tag) {
- super(network, new DslEquipment("Disconnectable equipment"), tag)
+ EventQuadripoleDisconnectionBuilder(Network network, String tag, Reporter reporter) {
+ super(network, new DslEquipment("Disconnectable equipment"), tag, reporter)
}
- void disconnectOnly(Branch.Side side) {
+ void disconnectOnly(TwoSides side) {
disconnectSide = true
switch (side) {
- case Branch.Side.ONE :
+ case TwoSides.ONE :
disconnectOrigin = true
disconnectExtremity = false
break
- case Branch.Side.TWO :
+ case TwoSides.TWO :
disconnectOrigin = false
disconnectExtremity = true
break
@@ -74,20 +72,20 @@ class EventDisconnectionGroovyExtension extends AbstractPureDynamicGroovyExtensi
void checkData() {
super.checkData()
- disconnectionType(dslEquipment?.equipment?.type)
+ setDisconnectionType(dslEquipment?.equipment?.type)
if(dslEquipment.equipment) {
if (disconnectionType == DisconnectionType.NONE) {
- LOGGER.warn("${getLib()}: ${dslEquipment.equipment?.type} ${dslEquipment.staticId} cannot be disconnected")
+ Reporters.reportStaticIdUnknown(reporter, "staticId", dslEquipment.staticId, "Disconnectable equipment")
isInstantiable = false
}
if (DisconnectionType.INJECTION == disconnectionType && disconnectSide) {
- LOGGER.warn("'${getLib()}: disconnectSide' has been set but ${dslEquipment.equipment?.type} ${dslEquipment.staticId} is not a quadripole with a disconnectable side")
+ Reporters.reportFieldSetWithWrongEquipment(reporter, "disconnectSide", dslEquipment.equipment?.type, dslEquipment.staticId)
isInstantiable = false
}
}
}
- boolean disconnectionType(IdentifiableType type) {
+ void setDisconnectionType(IdentifiableType type) {
if (type) {
if (CONNECTABLE_INJECTIONS.contains(type)) {
disconnectionType = DisconnectionType.INJECTION
@@ -97,7 +95,6 @@ class EventDisconnectionGroovyExtension extends AbstractPureDynamicGroovyExtensi
disconnectionType = DisconnectionType.HVDC
}
}
- disconnectionType != DisconnectionType.NONE
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/NodeFaultEventGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/NodeFaultEventGroovyExtension.groovy
index 31c4e6a5c..f839f869c 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/NodeFaultEventGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/events/NodeFaultEventGroovyExtension.groovy
@@ -8,10 +8,12 @@
package com.powsybl.dynawaltz.dsl.events
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.EventModel
import com.powsybl.dynamicsimulation.groovy.EventModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractPureDynamicGroovyExtension
import com.powsybl.dynawaltz.dsl.DslEquipment
+import com.powsybl.dynawaltz.dsl.Reporters
import com.powsybl.dynawaltz.dsl.builders.AbstractEventModelBuilder
import com.powsybl.dynawaltz.models.events.NodeFaultEvent
import com.powsybl.iidm.network.Bus
@@ -31,8 +33,8 @@ class NodeFaultEventGroovyExtension extends AbstractPureDynamicGroovyExtension {
@@ -41,8 +43,8 @@ class NodeFaultEventGroovyExtension extends AbstractPureDynamicGroovyExtension(IdentifiableType.BUS), tag)
+ NodeFaultEventBuilder(Network network,String tag, Reporter reporter) {
+ super(network, new DslEquipment(IdentifiableType.BUS), tag, reporter)
}
void faultTime(double faultTime) {
@@ -65,15 +67,15 @@ class NodeFaultEventGroovyExtension extends AbstractPureDynamicGroovyExtension {
- AbstractBusBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig, IdentifiableType.BUS)
+ AbstractBusBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, IdentifiableType.BUS, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/BusGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/BusGroovyExtension.groovy
index 971ef9e90..1e3c3efa0 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/BusGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/BusGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.buses
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractSimpleEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -21,21 +21,21 @@ import com.powsybl.iidm.network.Network
* @author Dimitri Baudrier {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class BusGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class BusGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
BusGroovyExtension() {
super("Bus")
}
@Override
- protected BusBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new BusBuilder(network, equipmentConfig)
+ protected BusBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new BusBuilder(network, equipmentConfig, reporter)
}
static class BusBuilder extends AbstractBusBuilder {
- BusBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ BusBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/InfiniteBusGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/InfiniteBusGroovyExtension.groovy
index 1db7922d4..9964d19a0 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/InfiniteBusGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/buses/InfiniteBusGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.buses
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -19,7 +19,7 @@ import com.powsybl.iidm.network.Network
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class InfiniteBusGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class InfiniteBusGroovyExtension extends AbstractEquipmentGroovyExtension {
protected static final String BUSES = "infiniteBuses"
@@ -28,14 +28,14 @@ class InfiniteBusGroovyExtension extends AbstractEquipmentGroovyExtension {
- AbstractGeneratorBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig, IdentifiableType.GENERATOR)
+ AbstractGeneratorBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, IdentifiableType.GENERATOR, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GeneratorFictitiousGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GeneratorFictitiousGroovyExtension.groovy
index 0cbec26c8..c0a34a798 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GeneratorFictitiousGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GeneratorFictitiousGroovyExtension.groovy
@@ -7,7 +7,7 @@
package com.powsybl.dynawaltz.dsl.models.generators
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractSimpleEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -18,21 +18,21 @@ import com.powsybl.iidm.network.Network
* @author Dimitri Baudrier {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class GeneratorFictitiousGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class GeneratorFictitiousGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
GeneratorFictitiousGroovyExtension() {
super("GeneratorFictitious")
}
@Override
- protected GeneratorFictitiousBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new GeneratorFictitiousBuilder(network, equipmentConfig)
+ protected GeneratorFictitiousBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new GeneratorFictitiousBuilder(network, equipmentConfig, reporter)
}
static class GeneratorFictitiousBuilder extends AbstractGeneratorBuilder {
- GeneratorFictitiousBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ GeneratorFictitiousBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GridFormingConverterGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GridFormingConverterGroovyExtension.groovy
index 082f80e51..dc376c2a8 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GridFormingConverterGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/GridFormingConverterGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.generators
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -19,7 +19,7 @@ import com.powsybl.iidm.network.Network
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class GridFormingConverterGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class GridFormingConverterGroovyExtension extends AbstractEquipmentGroovyExtension {
private static final String GRID_FORMING_CONVERTER = "gridFormingConverter"
@@ -28,14 +28,14 @@ class GridFormingConverterGroovyExtension extends AbstractEquipmentGroovyExtensi
}
@Override
- protected GridFormingConverterBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new GridFormingConverterBuilder(network, equipmentConfig)
+ protected GridFormingConverterBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new GridFormingConverterBuilder(network, equipmentConfig, reporter)
}
static class GridFormingConverterBuilder extends AbstractGeneratorBuilder {
- GridFormingConverterBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ GridFormingConverterBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronizedGeneratorGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronizedGeneratorGroovyExtension.groovy
index ab9e5c0a7..899277d45 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronizedGeneratorGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronizedGeneratorGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.generators
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -21,7 +21,7 @@ import com.powsybl.iidm.network.Network
* @author Dimitri Baudrier {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class SynchronizedGeneratorGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class SynchronizedGeneratorGroovyExtension extends AbstractEquipmentGroovyExtension {
private static final String SYNCHRONIZED_GENERATORS = "synchronizedGenerators"
@@ -34,14 +34,14 @@ class SynchronizedGeneratorGroovyExtension extends AbstractEquipmentGroovyExtens
}
@Override
- protected SynchronizedGeneratorBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new SynchronizedGeneratorBuilder(network, equipmentConfig)
+ protected SynchronizedGeneratorBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new SynchronizedGeneratorBuilder(network, equipmentConfig, reporter)
}
static class SynchronizedGeneratorBuilder extends AbstractGeneratorBuilder {
- SynchronizedGeneratorBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ SynchronizedGeneratorBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronousGeneratorGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronousGeneratorGroovyExtension.groovy
index 132920b2d..7b094e7c4 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronousGeneratorGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/SynchronousGeneratorGroovyExtension.groovy
@@ -7,8 +7,8 @@
package com.powsybl.dynawaltz.dsl.models.generators
import com.google.auto.service.AutoService
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dsl.DslException
-import com.powsybl.dynamicsimulation.DynamicModel
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -21,7 +21,7 @@ import com.powsybl.iidm.network.Network
* @author Marcos de Miguel {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class SynchronousGeneratorGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class SynchronousGeneratorGroovyExtension extends AbstractEquipmentGroovyExtension {
protected static final String SYNCHRONOUS_GENERATORS = "synchronousGenerators"
@@ -34,14 +34,14 @@ class SynchronousGeneratorGroovyExtension extends AbstractEquipmentGroovyExtensi
}
@Override
- protected SynchronousGeneratorBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new SynchronousGeneratorBuilder(network, equipmentConfig)
+ protected SynchronousGeneratorBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new SynchronousGeneratorBuilder(network, equipmentConfig, reporter)
}
static class SynchronousGeneratorBuilder extends AbstractGeneratorBuilder {
- SynchronousGeneratorBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ SynchronousGeneratorBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
protected EnumGeneratorComponent getGeneratorComponent() {
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/WeccGenGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/WeccGenGroovyExtension.groovy
index fed1d3bca..9a30a019a 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/WeccGenGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/generators/WeccGenGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.generators
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -20,7 +20,7 @@ import com.powsybl.iidm.network.Network
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class WeccGenGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class WeccGenGroovyExtension extends AbstractEquipmentGroovyExtension {
private static final String WECC = "wecc"
@@ -29,14 +29,14 @@ class WeccGenGroovyExtension extends AbstractEquipmentGroovyExtension}
@@ -23,11 +25,11 @@ abstract class AbstractHvdcBuilder extends AbstractEquipmentModelBuilder}
*/
@AutoService(DynamicModelGroovyExtension.class)
-class HvdcPGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class HvdcPGroovyExtension extends AbstractEquipmentGroovyExtension {
protected static final String HVDC_P = "hvdcP"
@@ -33,14 +33,14 @@ class HvdcPGroovyExtension extends AbstractEquipmentGroovyExtension}
*/
@AutoService(DynamicModelGroovyExtension.class)
-class HvdcVscGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class HvdcVscGroovyExtension extends AbstractEquipmentGroovyExtension {
protected static final String HVDC_VSC = "hvdcVsc"
@@ -29,14 +29,14 @@ class HvdcVscGroovyExtension extends AbstractEquipmentGroovyExtension}
*/
@AutoService(DynamicModelGroovyExtension.class)
-class LineGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class LineGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
LineGroovyExtension() {
super("Line")
}
@Override
- protected LineBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new LineBuilder(network, equipmentConfig)
+ protected LineBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new LineBuilder(network, equipmentConfig, reporter)
}
static class LineBuilder extends AbstractEquipmentModelBuilder {
- LineBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig, IdentifiableType.LINE)
+ LineBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, IdentifiableType.LINE, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/AbstractLoadModelBuilder.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/AbstractLoadModelBuilder.groovy
index b34399cf4..c6abe1649 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/AbstractLoadModelBuilder.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/AbstractLoadModelBuilder.groovy
@@ -7,6 +7,7 @@
*/
package com.powsybl.dynawaltz.dsl.models.loads
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynawaltz.dsl.EquipmentConfig
import com.powsybl.dynawaltz.dsl.builders.AbstractEquipmentModelBuilder
import com.powsybl.iidm.network.IdentifiableType
@@ -18,8 +19,8 @@ import com.powsybl.iidm.network.Network
*/
abstract class AbstractLoadModelBuilder extends AbstractEquipmentModelBuilder {
- AbstractLoadModelBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig, IdentifiableType.LOAD)
+ AbstractLoadModelBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, IdentifiableType.LOAD, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/BaseLoadGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/BaseLoadGroovyExtension.groovy
index a80a6168e..b7a69a1de 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/BaseLoadGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/BaseLoadGroovyExtension.groovy
@@ -7,7 +7,7 @@
package com.powsybl.dynawaltz.dsl.models.loads
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -21,7 +21,7 @@ import com.powsybl.iidm.network.Network
* @author Marcos de Miguel {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class BaseLoadGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class BaseLoadGroovyExtension extends AbstractEquipmentGroovyExtension {
private static final String LOADS = "baseLoads"
@@ -30,14 +30,14 @@ class BaseLoadGroovyExtension extends AbstractEquipmentGroovyExtension}
*/
@AutoService(DynamicModelGroovyExtension.class)
-class LoadOneTransformerGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class LoadOneTransformerGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
LoadOneTransformerGroovyExtension() {
super("LoadOneTransformer")
}
@Override
- protected LoadOneTransformerBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new LoadOneTransformerBuilder(network, equipmentConfig)
+ protected LoadOneTransformerBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new LoadOneTransformerBuilder(network, equipmentConfig, reporter)
}
static class LoadOneTransformerBuilder extends AbstractLoadModelBuilder {
- LoadOneTransformerBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ LoadOneTransformerBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadOneTransformerTapChangerGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadOneTransformerTapChangerGroovyExtension.groovy
index 96660215b..e0d01d9a8 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadOneTransformerTapChangerGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadOneTransformerTapChangerGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.loads
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractSimpleEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -19,21 +19,21 @@ import com.powsybl.iidm.network.Network
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class LoadOneTransformerTapChangerGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class LoadOneTransformerTapChangerGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
LoadOneTransformerTapChangerGroovyExtension() {
super("LoadOneTransformerTapChanger")
}
@Override
- protected LoadOneTransformerTapChangerBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new LoadOneTransformerTapChangerBuilder(network, equipmentConfig)
+ protected LoadOneTransformerTapChangerBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new LoadOneTransformerTapChangerBuilder(network, equipmentConfig, reporter)
}
static class LoadOneTransformerTapChangerBuilder extends AbstractLoadModelBuilder {
- LoadOneTransformerTapChangerBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ LoadOneTransformerTapChangerBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersGroovyExtension.groovy
index 5d0e7a758..bd85b2aaf 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.loads
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractSimpleEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -19,21 +19,21 @@ import com.powsybl.iidm.network.Network
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class LoadTwoTransformersGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class LoadTwoTransformersGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
LoadTwoTransformersGroovyExtension() {
super("LoadTwoTransformers")
}
@Override
- protected LoadTwoTransformersBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new LoadTwoTransformersBuilder(network, equipmentConfig)
+ protected LoadTwoTransformersBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new LoadTwoTransformersBuilder(network, equipmentConfig, reporter)
}
static class LoadTwoTransformersBuilder extends AbstractLoadModelBuilder {
- LoadTwoTransformersBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ LoadTwoTransformersBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersTapChangersGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersTapChangersGroovyExtension.groovy
index 642db1859..18bf77353 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersTapChangersGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/loads/LoadTwoTransformersTapChangersGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.loads
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractSimpleEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -19,21 +19,21 @@ import com.powsybl.iidm.network.Network
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class LoadTwoTransformersTapChangersGroovyExtension extends AbstractSimpleEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class LoadTwoTransformersTapChangersGroovyExtension extends AbstractSimpleEquipmentGroovyExtension {
LoadTwoTransformersTapChangersGroovyExtension() {
super("LoadTwoTransformersTapChangers")
}
@Override
- protected LoadTwoTransformersTapChangersBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new LoadTwoTransformersTapChangersBuilder(network, equipmentConfig)
+ protected LoadTwoTransformersTapChangersBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new LoadTwoTransformersTapChangersBuilder(network, equipmentConfig, reporter)
}
static class LoadTwoTransformersTapChangersBuilder extends AbstractLoadModelBuilder {
- LoadTwoTransformersTapChangersBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig)
+ LoadTwoTransformersTapChangersBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/svarcs/SvarcGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/svarcs/SvarcGroovyExtension.groovy
index ae11ab92f..dab946e13 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/svarcs/SvarcGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/svarcs/SvarcGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.svarcs
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.builders.AbstractEquipmentModelBuilder
import com.powsybl.dynawaltz.models.svarcs.StaticVarCompensator as DynamicSvarc
@@ -22,7 +22,7 @@ import com.powsybl.iidm.network.StaticVarCompensator as StaticSvarc
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class SvarcGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class SvarcGroovyExtension extends AbstractEquipmentGroovyExtension {
protected static final String SVARC = "staticVarCompensators"
@@ -31,14 +31,14 @@ class SvarcGroovyExtension extends AbstractEquipmentGroovyExtension {
- SvcBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig, IdentifiableType.STATIC_VAR_COMPENSATOR)
+ SvcBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, IdentifiableType.STATIC_VAR_COMPENSATOR, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/transformers/TransformerFixedRatioGroovyExtension.groovy b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/transformers/TransformerFixedRatioGroovyExtension.groovy
index 84c4e0288..9e67b4a3a 100644
--- a/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/transformers/TransformerFixedRatioGroovyExtension.groovy
+++ b/dynawaltz-dsl/src/main/groovy/com/powsybl/dynawaltz/dsl/models/transformers/TransformerFixedRatioGroovyExtension.groovy
@@ -8,7 +8,7 @@
package com.powsybl.dynawaltz.dsl.models.transformers
import com.google.auto.service.AutoService
-import com.powsybl.dynamicsimulation.DynamicModel
+import com.powsybl.commons.reporter.Reporter
import com.powsybl.dynamicsimulation.groovy.DynamicModelGroovyExtension
import com.powsybl.dynawaltz.dsl.AbstractEquipmentGroovyExtension
import com.powsybl.dynawaltz.dsl.EquipmentConfig
@@ -22,7 +22,7 @@ import com.powsybl.iidm.network.TwoWindingsTransformer
* @author Laurent Issertial {@literal }
*/
@AutoService(DynamicModelGroovyExtension.class)
-class TransformerFixedRatioGroovyExtension extends AbstractEquipmentGroovyExtension implements DynamicModelGroovyExtension {
+class TransformerFixedRatioGroovyExtension extends AbstractEquipmentGroovyExtension {
private static final String TRANSFORMERS = "transformers"
@@ -31,14 +31,14 @@ class TransformerFixedRatioGroovyExtension extends AbstractEquipmentGroovyExtens
}
@Override
- protected TransformerBuilder createBuilder(Network network, EquipmentConfig equipmentConfig) {
- new TransformerBuilder(network, equipmentConfig)
+ protected TransformerBuilder createBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ new TransformerBuilder(network, equipmentConfig, reporter)
}
static class TransformerBuilder extends AbstractEquipmentModelBuilder {
- TransformerBuilder(Network network, EquipmentConfig equipmentConfig) {
- super(network, equipmentConfig, IdentifiableType.TWO_WINDINGS_TRANSFORMER)
+ TransformerBuilder(Network network, EquipmentConfig equipmentConfig, Reporter reporter) {
+ super(network, equipmentConfig, IdentifiableType.TWO_WINDINGS_TRANSFORMER, reporter)
}
@Override
diff --git a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/AbstractModelSupplierTest.java b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/AbstractModelSupplierTest.java
index efafba9a6..7776a7b20 100644
--- a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/AbstractModelSupplierTest.java
+++ b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/AbstractModelSupplierTest.java
@@ -7,15 +7,29 @@
*/
package com.powsybl.dynawaltz.dsl;
+import com.powsybl.commons.reporter.ReporterModel;
+import com.powsybl.commons.test.TestUtil;
+
import java.io.InputStream;
+import java.io.StringWriter;
import java.util.Objects;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
/**
* @author Laurent Issertial {@literal }
*/
abstract class AbstractModelSupplierTest {
+ protected final ReporterModel reporter = new ReporterModel("dslTests", "DSL tests");
+
protected InputStream getResourceAsStream(String name) {
return Objects.requireNonNull(AbstractModelSupplierTest.class.getResourceAsStream(name));
}
+
+ protected void checkReporter(String report) {
+ StringWriter sw = new StringWriter();
+ reporter.export(sw);
+ assertEquals(report, TestUtil.normalizeLineSeparator(sw.toString()));
+ }
}
diff --git a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/DynamicModelsSupplierTest.java b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/DynamicModelsSupplierTest.java
index 1241f0cd5..063ce9a59 100644
--- a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/DynamicModelsSupplierTest.java
+++ b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/DynamicModelsSupplierTest.java
@@ -74,19 +74,22 @@ void testAutomatonDynamicModels(String groovyScriptName, Class extends BlackBo
@ParameterizedTest(name = "{0}")
@MethodSource("provideWarningsModel")
- void testDslWarnings(String groovyScriptName, Network network) {
+ void testDslWarnings(String groovyScriptName, Network network, String report) {
DynamicModelsSupplier supplier = new GroovyDynamicModelsSupplier(getResourceAsStream(groovyScriptName), EXTENSIONS);
- assertTrue(supplier.get(network).isEmpty());
+ assertTrue(supplier.get(network, reporter).isEmpty());
+ checkReporter(report);
}
@ParameterizedTest(name = "{0}")
@MethodSource("provideGenerator")
- void testGeneratorPrefixes(String groovyScriptName, Class extends GeneratorModel> modelClass, Network network, String terminalVarName) {
+ void testGeneratorPrefixes(String groovyScriptName, Class extends GeneratorModel> modelClass, Network network, String terminalVarName, String report) {
DynamicModelsSupplier supplier = new GroovyDynamicModelsSupplier(getResourceAsStream(groovyScriptName), EXTENSIONS);
- List dynamicModels = supplier.get(network);
+ List dynamicModels = supplier.get(network, reporter);
assertEquals(1, dynamicModels.size());
assertTrue(modelClass.isInstance(dynamicModels.get(0)));
assertEquals(terminalVarName, modelClass.cast(dynamicModels.get(0)).getTerminalVarName());
+ checkReporter(report);
+
}
void assertEquipmentBlackBoxModel(EquipmentBlackBoxModel bbm, String dynamicId, String staticId, String parameterId, String lib) {
@@ -144,27 +147,142 @@ private static Stream provideAutomatonModelData() {
private static Stream provideWarningsModel() {
return Stream.of(
- Arguments.of("/warnings/missingStaticId.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/missingParameterId.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/missingEquipment.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/missingDangling.groovy", HvdcTestNetwork.createVsc()),
- Arguments.of("/warnings/missingDanglingProperty.groovy", HvdcTestNetwork.createVsc()),
- Arguments.of("/warnings/underVoltageMissingGenerator.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/phaseShifterMissingTransformer.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/claMissingMeasurement.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/claMissingMeasurementSide.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/claMissingControlled.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/cla2MissingMeasurement2.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/cla2MissingMeasurementSide2.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/tapChangerMissingBus.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/warnings/tapChangerCompatible.groovy", EurostagTutorialExample1Factory.create())
+ Arguments.of("/warnings/missingStaticId.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for LoadAlphaBeta
+ 'staticId' field is not set
+ 'dynamicModelId' field is not set, staticId (unknown staticId) will be used instead
+ Model unknownDynamicId cannot be instantiated
+ """),
+ Arguments.of("/warnings/missingParameterId.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for LoadAlphaBeta
+ 'parameterSetId' field is not set
+ 'dynamicModelId' field is not set, staticId LOAD will be used instead
+ Model LOAD cannot be instantiated
+ """),
+ Arguments.of("/warnings/missingEquipment.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for LoadAlphaBeta
+ 'staticId' field value 'GEN' not found for equipment type(s) LOAD
+ 'dynamicModelId' field is not set, staticId GEN will be used instead
+ Model GEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/missingDangling.groovy", HvdcTestNetwork.createVsc(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for HvdcPVDangling
+ 'dangling' field is not set
+ Model BBM_HVDC_L cannot be instantiated
+ """),
+ Arguments.of("/warnings/missingDanglingProperty.groovy", HvdcTestNetwork.createVsc(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for HvdcPV
+ 'dangling' field is set but HvdcPV does not possess this option
+ Model BBM_HVDC_L cannot be instantiated
+ """),
+ Arguments.of("/warnings/underVoltageMissingGenerator.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for UnderVoltage
+ 'generator' field value 'NGEN' not found for equipment type(s) GENERATOR
+ Model UV_GEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/phaseShifterMissingTransformer.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for PhaseShifterI
+ 'transformer' field value 'NGEN' not found for equipment type(s) TWO_WINDINGS_TRANSFORMER
+ Model PS_NGEN_NHV1 cannot be instantiated
+ """),
+ Arguments.of("/warnings/claMissingMeasurement.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for CurrentLimitAutomaton
+ 'iMeasurement' field value 'NGEN' not found for equipment type(s) Quadripole
+ Model CLA_NGEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/claMissingMeasurementSide.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for CurrentLimitAutomaton
+ 'iMeasurementSide' field is not set
+ Model CLA_NGEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/claMissingControlled.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for CurrentLimitAutomaton
+ 'controlledQuadripole' field value 'GEN' not found for equipment type(s) Quadripole
+ Model CLA_NGEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/cla2MissingMeasurement2.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for CurrentLimitAutomatonTwoLevels
+ 'iMeasurement2' field value 'NGEN' not found for equipment type(s) Quadripole
+ Model CLA_NGEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/cla2MissingMeasurementSide2.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for CurrentLimitAutomatonTwoLevels
+ 'iMeasurement2Side' field is not set
+ Model CLA_NGEN cannot be instantiated
+ """),
+ Arguments.of("/warnings/tapChangerMissingBus.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for TapChangerBlockingAutomaton
+ 'uMeasurements' field value 'LOAD' not found for equipment type(s) BUS
+ 'uMeasurements' list is empty
+ Model ZAB cannot be instantiated
+ """),
+ Arguments.of("/warnings/tapChangerCompatible.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for TapChangerBlockingAutomaton
+ 'uMeasurements' field value 'GEN' not found for equipment type(s) LOAD/TWO_WINDINGS_TRANSFORMER
+ 'transformers' list is empty
+ Model ZAB cannot be instantiated
+ """)
);
}
private static Stream provideGenerator() {
return Stream.of(
- Arguments.of("/dynamicModels/gen.groovy", SynchronousGenerator.class, EurostagTutorialExample1Factory.create(), "generator_terminal"),
- Arguments.of("/dynamicModels/genTfo.groovy", SynchronousGenerator.class, EurostagTutorialExample1Factory.create(), "transformer_terminal1")
+ Arguments.of("/dynamicModels/gen.groovy", SynchronousGenerator.class, EurostagTutorialExample1Factory.create(), "generator_terminal",
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for GeneratorSynchronousThreeWindings
+ Model BBM_GEN instantiation successful
+ """),
+ Arguments.of("/dynamicModels/genTfo.groovy", SynchronousGenerator.class, EurostagTutorialExample1Factory.create(), "transformer_terminal1",
+ """
+ + DSL tests
+ + Groovy Dynamic Models Supplier
+ + DSL model builder for GeneratorSynchronousThreeWindingsPmConstVRNordicTfo
+ Model BBM_GEN instantiation successful
+ """)
);
}
}
diff --git a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/EventModelsSupplierTest.java b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/EventModelsSupplierTest.java
index 27702044d..0a37595ad 100644
--- a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/EventModelsSupplierTest.java
+++ b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/EventModelsSupplierTest.java
@@ -18,6 +18,7 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import com.powsybl.iidm.network.test.HvdcTestNetwork;
+import com.powsybl.iidm.network.test.SvcTestCaseFactory;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
@@ -46,9 +47,10 @@ void testEventModels(String groovyScriptName, Class extends AbstractEvent> mod
@ParameterizedTest(name = "{0}")
@MethodSource("provideWarningsModel")
- void testDslWarnings(String groovyScriptName, Network network) {
+ void testDslWarnings(String groovyScriptName, Network network, String report) {
EventModelsSupplier supplier = new GroovyEventModelsSupplier(getResourceAsStream(groovyScriptName), EXTENSIONS);
- assertTrue(supplier.get(network).isEmpty());
+ assertTrue(supplier.get(network, reporter).isEmpty());
+ checkReporter(report);
}
void assertEventModel(AbstractEvent em, String dynamicId, String equipmentStaticId, String lib, double startTime) {
@@ -76,12 +78,55 @@ private static Stream provideEventModelData() {
private static Stream provideWarningsModel() {
return Stream.of(
- Arguments.of("/eventWarnings/missingStaticId.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/eventWarnings/missingStartTime.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/eventWarnings/missingNodeFaultParameters.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/eventWarnings/missingAPVParameters.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/eventWarnings/missingDisconnectionEquipment.groovy", EurostagTutorialExample1Factory.create()),
- Arguments.of("/eventWarnings/missingDisconnectionSide.groovy", EurostagTutorialExample1Factory.create())
+ Arguments.of("/eventWarnings/missingStaticId.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Event Models Supplier
+ + DSL model builder for NodeFault
+ 'staticId' field value 'GEN' not found for equipment type(s) BUS
+ Model NodeFault_GEN cannot be instantiated
+ """),
+ Arguments.of("/eventWarnings/missingStartTime.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Event Models Supplier
+ + DSL model builder for NodeFault
+ 'startTime' field is not set
+ Model NodeFault_NGEN cannot be instantiated
+ """),
+ Arguments.of("/eventWarnings/missingNodeFaultParameters.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Event Models Supplier
+ + DSL model builder for NodeFault
+ faultTime should be strictly positive (0.0)
+ Model NodeFault_NGEN cannot be instantiated
+ """),
+ Arguments.of("/eventWarnings/missingAPVParameters.groovy", SvcTestCaseFactory.create(),
+ """
+ + DSL tests
+ + Groovy Event Models Supplier
+ + DSL model builder for Step
+ 'staticId' field value 'SVC2' not found for equipment type(s) GENERATOR/LOAD
+ 'deltaP' field is not set
+ Model Step_SVC2 cannot be instantiated
+ """),
+ Arguments.of("/eventWarnings/missingDisconnectionEquipment.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Event Models Supplier
+ + DSL model builder for Disconnect
+ 'staticId' field value 'NGEN' not found for equipment type(s) Disconnectable equipment
+ Model Disconnect_NGEN cannot be instantiated
+ """),
+ Arguments.of("/eventWarnings/missingDisconnectionSide.groovy", EurostagTutorialExample1Factory.create(),
+ """
+ + DSL tests
+ + Groovy Event Models Supplier
+ + DSL model builder for Disconnect
+ 'disconnectSide' field is set but GENERATOR GEN does not possess this option
+ Model Disconnect_GEN cannot be instantiated
+ """)
);
}
}
diff --git a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/ieee/AbstractIeeeTest.java b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/ieee/AbstractIeeeTest.java
index 0e5c8c374..3824017fa 100644
--- a/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/ieee/AbstractIeeeTest.java
+++ b/dynawaltz-dsl/src/test/java/com/powsybl/dynawaltz/dsl/ieee/AbstractIeeeTest.java
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.concurrent.ForkJoinPool;
+import static com.powsybl.commons.reporter.Reporter.NO_OP;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
@@ -69,7 +70,7 @@ protected void setup(String parametersFile, String networkParametersFile, String
List dynamicModelGroovyExtensions = GroovyExtension.find(DynamicModelGroovyExtension.class, DynaWaltzProvider.NAME);
dynamicModelsSupplier = new GroovyDynamicModelsSupplier(workingDir.resolve("dynamicModels.groovy"), dynamicModelGroovyExtensions);
} else {
- dynamicModelsSupplier = n -> Collections.emptyList();
+ dynamicModelsSupplier = (n, NO_OP) -> Collections.emptyList();
}
// Event models
@@ -116,7 +117,7 @@ public DynamicSimulationResult runSimulation(LocalCommandExecutor commandExecuto
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
return dynawoSimulation.run(network, dynamicModelsSupplier, eventModelsSupplier,
curvesSupplier, network.getVariantManager().getWorkingVariantId(),
- computationManager, parameters);
+ computationManager, parameters, NO_OP);
}
}
diff --git a/dynawaltz-dsl/src/test/resources/dynamicModels.groovy b/dynawaltz-dsl/src/test/resources/dynamicModels.groovy
index baf9282e9..a9849a1ac 100644
--- a/dynawaltz-dsl/src/test/resources/dynamicModels.groovy
+++ b/dynawaltz-dsl/src/test/resources/dynamicModels.groovy
@@ -5,16 +5,14 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-
-import com.powsybl.iidm.network.Branch
import com.powsybl.iidm.network.Bus
+import com.powsybl.iidm.network.Generator
import com.powsybl.iidm.network.Line
import com.powsybl.iidm.network.Load
-import com.powsybl.iidm.network.Generator
-
+import com.powsybl.iidm.network.TwoSides
for (Load load : network.loads) {
- if (load == "LOAD2") {
+ if (load.id == "LOAD2") {
LoadOneTransformer {
staticId load.id
// dynamicModelId "BBM_" + load.id (dynamicModelId could be optional and equal to staticId)
@@ -76,7 +74,7 @@ for (Line line : network.lines) {
dynamicModelId "BBM_" + line.id
parameterSetId "CLA"
iMeasurement line.id
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
Line {
diff --git a/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimit.groovy b/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimit.groovy
index 494926b7a..3d4ed0531 100644
--- a/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimit.groovy
+++ b/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimit.groovy
@@ -8,12 +8,12 @@
package dynamicModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
CurrentLimitAutomaton {
dynamicModelId "AM_NHV1_NHV2_1"
parameterSetId "CLA"
controlledQuadripole "NHV1_NHV2_2"
iMeasurement "NHV1_NHV2_1"
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimitTwoLevels.groovy b/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimitTwoLevels.groovy
index aba0b1b9c..2d47e3581 100644
--- a/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimitTwoLevels.groovy
+++ b/dynawaltz-dsl/src/test/resources/dynamicModels/currentLimitTwoLevels.groovy
@@ -8,14 +8,14 @@
package dynamicModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
CurrentLimitAutomatonTwoLevels {
dynamicModelId "AM_NHV1_NHV2_1"
parameterSetId "CLA"
controlledQuadripole "NHV1_NHV2_2"
iMeasurement1 "NHV1_NHV2_1"
- iMeasurement1Side Branch.Side.TWO
+ iMeasurement1Side TwoSides.TWO
iMeasurement2 "NGEN_NHV1"
- iMeasurement2Side Branch.Side.ONE
+ iMeasurement2Side TwoSides.ONE
}
diff --git a/dynawaltz-dsl/src/test/resources/dynamicModels/danglingHvdcException.groovy b/dynawaltz-dsl/src/test/resources/dynamicModels/danglingHvdcException.groovy
index 2fbfadcaf..f01664494 100644
--- a/dynawaltz-dsl/src/test/resources/dynamicModels/danglingHvdcException.groovy
+++ b/dynawaltz-dsl/src/test/resources/dynamicModels/danglingHvdcException.groovy
@@ -8,11 +8,11 @@
package dynamicModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
HvdcPV {
staticId "L"
dynamicModelId "BBM_HVDC_L"
parameterSetId "HVDC"
- dangling Branch.Side.ONE
+ dangling TwoSides.ONE
}
diff --git a/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcPDangling.groovy b/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcPDangling.groovy
index 780a0bec4..aa0169587 100644
--- a/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcPDangling.groovy
+++ b/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcPDangling.groovy
@@ -8,11 +8,11 @@
package dynamicModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
HvdcPVDanglingDiagramPQ {
staticId "L"
dynamicModelId "BBM_HVDC_L"
parameterSetId "HVDC"
- dangling Branch.Side.ONE
+ dangling TwoSides.ONE
}
diff --git a/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcVscDangling.groovy b/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcVscDangling.groovy
index a1290c328..6218b71f5 100644
--- a/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcVscDangling.groovy
+++ b/dynawaltz-dsl/src/test/resources/dynamicModels/hvdcVscDangling.groovy
@@ -8,11 +8,11 @@
package dynamicModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
HvdcVSCDanglingUdc {
staticId "L"
dynamicModelId "BBM_HVDC_L"
parameterSetId "HVDC"
- dangling Branch.Side.TWO
+ dangling TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/eventModels.groovy b/dynawaltz-dsl/src/test/resources/eventModels.groovy
index c632eda86..0e868bdee 100644
--- a/dynawaltz-dsl/src/test/resources/eventModels.groovy
+++ b/dynawaltz-dsl/src/test/resources/eventModels.groovy
@@ -5,13 +5,14 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+
import com.powsybl.iidm.network.Line
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
for (Line line : network.lines) {
Disconnect {
staticId line.id
startTime 4
- disconnectOnly Branch.Side.TWO
+ disconnectOnly TwoSides.TWO
}
}
diff --git a/dynawaltz-dsl/src/test/resources/eventModels/hvdcDisconnection.groovy b/dynawaltz-dsl/src/test/resources/eventModels/hvdcDisconnection.groovy
index d3a1af481..a41ad8f93 100644
--- a/dynawaltz-dsl/src/test/resources/eventModels/hvdcDisconnection.groovy
+++ b/dynawaltz-dsl/src/test/resources/eventModels/hvdcDisconnection.groovy
@@ -8,10 +8,10 @@
package eventModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
Disconnect {
staticId "L"
startTime 2
- disconnectOnly Branch.Side.TWO
+ disconnectOnly TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/eventModels/quadripoleDisconnection.groovy b/dynawaltz-dsl/src/test/resources/eventModels/quadripoleDisconnection.groovy
index 1e3c5ad9e..d7684f961 100644
--- a/dynawaltz-dsl/src/test/resources/eventModels/quadripoleDisconnection.groovy
+++ b/dynawaltz-dsl/src/test/resources/eventModels/quadripoleDisconnection.groovy
@@ -8,10 +8,10 @@
package eventModels
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
Disconnect {
staticId "NHV1_NHV2_1"
startTime 4
- disconnectOnly Branch.Side.ONE
+ disconnectOnly TwoSides.ONE
}
diff --git a/dynawaltz-dsl/src/test/resources/eventWarnings/missingAPVParameters.groovy b/dynawaltz-dsl/src/test/resources/eventWarnings/missingAPVParameters.groovy
index 7c95a02fd..94afd90f9 100644
--- a/dynawaltz-dsl/src/test/resources/eventWarnings/missingAPVParameters.groovy
+++ b/dynawaltz-dsl/src/test/resources/eventWarnings/missingAPVParameters.groovy
@@ -9,6 +9,6 @@
package eventWarnings
Step {
- staticId "NGEN"
+ staticId "SVC2"
startTime 2
}
diff --git a/dynawaltz-dsl/src/test/resources/eventWarnings/missingDisconnectionSide.groovy b/dynawaltz-dsl/src/test/resources/eventWarnings/missingDisconnectionSide.groovy
index 08821b753..4d4d6eb99 100644
--- a/dynawaltz-dsl/src/test/resources/eventWarnings/missingDisconnectionSide.groovy
+++ b/dynawaltz-dsl/src/test/resources/eventWarnings/missingDisconnectionSide.groovy
@@ -8,10 +8,10 @@
package eventWarnings
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
Disconnect {
staticId "GEN"
startTime 1
- disconnectOnly Branch.Side.ONE
+ disconnectOnly TwoSides.ONE
}
diff --git a/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/dynamicModels.groovy b/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/dynamicModels.groovy
index 40f4299e5..6a5457d7f 100644
--- a/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/dynamicModels.groovy
+++ b/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/dynamicModels.groovy
@@ -5,10 +5,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-import com.powsybl.iidm.network.Branch
-import com.powsybl.iidm.network.Load
import com.powsybl.iidm.network.Generator
-
+import com.powsybl.iidm.network.Load
+import com.powsybl.iidm.network.TwoSides
for (Load load : network.loads) {
if (load.id != "_LOAD___8_EC") {
@@ -38,7 +37,7 @@ CurrentLimitAutomaton {
parameterSetId "CLA_2_4"
controlledQuadripole "_BUS____2-BUS____4-1_AC"
iMeasurement "_BUS____2-BUS____4-1_AC"
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
CurrentLimitAutomaton {
@@ -46,6 +45,6 @@ CurrentLimitAutomaton {
parameterSetId "CLA_2_5"
controlledQuadripole "_BUS____2-BUS____5-1_AC"
iMeasurement "_BUS____2-BUS____5-1_AC"
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/eventModels.groovy b/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/eventModels.groovy
index 448840913..8e328b8c6 100644
--- a/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/eventModels.groovy
+++ b/dynawaltz-dsl/src/test/resources/ieee14-currentlimitautomaton/powsybl-inputs/eventModels.groovy
@@ -5,10 +5,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
Disconnect {
staticId "_BUS____1-BUS____5-1_AC"
startTime 5
- disconnectOnly Branch.Side.TWO
+ disconnectOnly TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/ieee14-disconnectline/powsybl-inputs/eventModels.groovy b/dynawaltz-dsl/src/test/resources/ieee14-disconnectline/powsybl-inputs/eventModels.groovy
index 585e7a483..f15f829a7 100644
--- a/dynawaltz-dsl/src/test/resources/ieee14-disconnectline/powsybl-inputs/eventModels.groovy
+++ b/dynawaltz-dsl/src/test/resources/ieee14-disconnectline/powsybl-inputs/eventModels.groovy
@@ -5,10 +5,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
Disconnect {
staticId "_BUS____1-BUS____5-1_AC"
startTime 1
- disconnectOnly Branch.Side.TWO
+ disconnectOnly TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurement2.groovy b/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurement2.groovy
index 918b54b70..3f9c32d81 100644
--- a/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurement2.groovy
+++ b/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurement2.groovy
@@ -8,14 +8,14 @@
package warnings
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
CurrentLimitAutomatonTwoLevels {
dynamicModelId "CLA_NGEN"
parameterSetId "CLA"
controlledQuadripole "NHV1_NHV2_2"
iMeasurement1 "NHV1_NHV2_1"
- iMeasurement1Side Branch.Side.TWO
+ iMeasurement1Side TwoSides.TWO
iMeasurement2 "NGEN"
- iMeasurement2Side Branch.Side.ONE
+ iMeasurement2Side TwoSides.ONE
}
diff --git a/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurementSide2.groovy b/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurementSide2.groovy
index 6723e4cb8..bcf6345ea 100644
--- a/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurementSide2.groovy
+++ b/dynawaltz-dsl/src/test/resources/warnings/cla2MissingMeasurementSide2.groovy
@@ -8,13 +8,13 @@
package warnings
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
CurrentLimitAutomatonTwoLevels {
dynamicModelId "CLA_NGEN"
parameterSetId "CLA"
controlledQuadripole "NHV1_NHV2_2"
iMeasurement1 "NHV1_NHV2_1"
- iMeasurement1Side Branch.Side.TWO
+ iMeasurement1Side TwoSides.TWO
iMeasurement2 "NHV1_NHV2_2"
}
diff --git a/dynawaltz-dsl/src/test/resources/warnings/claMissingControlled.groovy b/dynawaltz-dsl/src/test/resources/warnings/claMissingControlled.groovy
index 753e11468..0e7d57c6b 100644
--- a/dynawaltz-dsl/src/test/resources/warnings/claMissingControlled.groovy
+++ b/dynawaltz-dsl/src/test/resources/warnings/claMissingControlled.groovy
@@ -8,12 +8,12 @@
package warnings
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
CurrentLimitAutomaton {
dynamicModelId "CLA_NGEN"
parameterSetId "CLA"
controlledQuadripole "GEN"
iMeasurement "NHV1_NHV2_1"
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/warnings/claMissingMeasurement.groovy b/dynawaltz-dsl/src/test/resources/warnings/claMissingMeasurement.groovy
index 805d56a76..f5e5b3e21 100644
--- a/dynawaltz-dsl/src/test/resources/warnings/claMissingMeasurement.groovy
+++ b/dynawaltz-dsl/src/test/resources/warnings/claMissingMeasurement.groovy
@@ -8,12 +8,12 @@
package warnings
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
CurrentLimitAutomaton {
dynamicModelId "CLA_NGEN"
parameterSetId "CLA"
controlledQuadripole "NHV1_NHV2_2"
iMeasurement "NGEN"
- iMeasurementSide Branch.Side.TWO
+ iMeasurementSide TwoSides.TWO
}
diff --git a/dynawaltz-dsl/src/test/resources/warnings/missingDanglingProperty.groovy b/dynawaltz-dsl/src/test/resources/warnings/missingDanglingProperty.groovy
index 8eea58d83..2637a52e2 100644
--- a/dynawaltz-dsl/src/test/resources/warnings/missingDanglingProperty.groovy
+++ b/dynawaltz-dsl/src/test/resources/warnings/missingDanglingProperty.groovy
@@ -8,11 +8,11 @@
package warnings
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
HvdcPV {
staticId "L"
dynamicModelId "BBM_HVDC_L"
parameterSetId "HVDC"
- dangling Branch.Side.ONE
+ dangling TwoSides.ONE
}
diff --git a/dynawaltz/pom.xml b/dynawaltz/pom.xml
index 66da83472..d5e7ea19d 100644
--- a/dynawaltz/pom.xml
+++ b/dynawaltz/pom.xml
@@ -55,7 +55,7 @@
com.powsybl
- powsybl-iidm-xml-converter
+ powsybl-iidm-serde
com.powsybl
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzContext.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzContext.java
index 8f214d55d..bdf4ed3ab 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzContext.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzContext.java
@@ -7,6 +7,7 @@
package com.powsybl.dynawaltz;
import com.powsybl.commons.PowsyblException;
+import com.powsybl.commons.reporter.Reporter;
import com.powsybl.dynamicsimulation.Curve;
import com.powsybl.dynamicsimulation.DynamicSimulationParameters;
import com.powsybl.dynawaltz.models.*;
@@ -44,6 +45,7 @@ public class DynaWaltzContext {
private static final String MODEL_ID_EXCEPTION = "The model identified by the static id %s does not match the expected model (%s)";
private static final String MODEL_ID_LOG = "The model identified by the static id {} does not match the expected model ({})";
+ private final Reporter reporter;
private final Network network;
private final String workingVariantId;
private final DynamicSimulationParameters parameters;
@@ -61,13 +63,20 @@ public class DynaWaltzContext {
public DynaWaltzContext(Network network, String workingVariantId, List dynamicModels, List eventModels,
List curves, DynamicSimulationParameters parameters, DynaWaltzParameters dynaWaltzParameters) {
+ this(network, workingVariantId, dynamicModels, eventModels, curves, parameters, dynaWaltzParameters, Reporter.NO_OP);
+ }
+
+ public DynaWaltzContext(Network network, String workingVariantId, List dynamicModels, List eventModels,
+ List curves, DynamicSimulationParameters parameters, DynaWaltzParameters dynaWaltzParameters, Reporter reporter) {
+
+ this.reporter = DynawaltzReports.createDynaWaltzContextReporter(reporter);
this.network = Objects.requireNonNull(network);
this.workingVariantId = Objects.requireNonNull(workingVariantId);
this.dynamicModels = Objects.requireNonNull(dynamicModels).stream()
- .filter(distinctByDynamicId().and(distinctByStaticId()))
+ .filter(distinctByDynamicId(reporter).and(distinctByStaticId(reporter)))
.toList();
this.eventModels = Objects.requireNonNull(eventModels).stream()
- .filter(distinctByDynamicId())
+ .filter(distinctByDynamicId(reporter))
.toList();
this.staticIdBlackBoxModelMap = getInputBlackBoxDynamicModelStream()
.filter(EquipmentBlackBoxModel.class::isInstance)
@@ -184,22 +193,22 @@ public EquipmentConnectionPoint getConnectionPointDynamicModel(String staticId)
throw new PowsyblException(String.format(MODEL_ID_EXCEPTION, staticId, "ConnectionPoint"));
}
- protected static Predicate distinctByStaticId() {
+ protected static Predicate distinctByStaticId(Reporter reporter) {
Set seen = new HashSet<>();
return bbm -> {
if (bbm instanceof EquipmentBlackBoxModel eBbm && !seen.add(eBbm.getStaticId())) {
- LOGGER.warn("Duplicate static id found: {} -> dynamic model {} {} will be skipped", eBbm.getStaticId(), eBbm.getLib(), eBbm.getDynamicModelId());
+ DynawaltzReports.reportDuplicateStaticId(reporter, eBbm.getStaticId(), eBbm.getLib(), eBbm.getDynamicModelId());
return false;
}
return true;
};
}
- protected static Predicate distinctByDynamicId() {
+ protected static Predicate distinctByDynamicId(Reporter reporter) {
Set seen = new HashSet<>();
return bbm -> {
if (!seen.add(bbm.getDynamicModelId())) {
- LOGGER.warn("Duplicate dynamic id found: {} -> model {} will be skipped", bbm.getDynamicModelId(), bbm.getName());
+ DynawaltzReports.reportDuplicateDynamicId(reporter, bbm.getDynamicModelId(), bbm.getName());
return false;
}
return true;
@@ -283,4 +292,8 @@ public List getDynamicModelsParameters() {
public String getSimulationParFile() {
return getNetwork().getId() + ".par";
}
+
+ public Reporter getReporter() {
+ return reporter;
+ }
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzProvider.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzProvider.java
index 0df2081f7..2699ed989 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzProvider.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynaWaltzProvider.java
@@ -8,7 +8,7 @@
import com.google.auto.service.AutoService;
import com.powsybl.commons.config.PlatformConfig;
-import com.powsybl.commons.exceptions.UncheckedXmlStreamException;
+import com.powsybl.commons.reporter.Reporter;
import com.powsybl.computation.*;
import com.powsybl.dynamicsimulation.*;
import com.powsybl.dynawaltz.models.BlackBoxModel;
@@ -22,7 +22,7 @@
import com.powsybl.dynawo.commons.PowsyblDynawoVersion;
import com.powsybl.dynawo.commons.loadmerge.LoadsMerger;
import com.powsybl.iidm.network.Network;
-import com.powsybl.iidm.xml.NetworkXml;
+import com.powsybl.iidm.serde.NetworkSerDe;
import com.powsybl.timeseries.TimeSeries;
import com.powsybl.timeseries.TimeSeries.TimeFormat;
import com.powsybl.timeseries.TimeSeriesConstants;
@@ -30,9 +30,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.xml.stream.XMLStreamException;
import java.io.IOException;
-import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@@ -103,14 +101,15 @@ public static Command getVersionCommand(DynaWaltzConfig dynaWaltzConfig) {
@Override
public CompletableFuture run(Network network, DynamicModelsSupplier dynamicModelsSupplier, EventModelsSupplier eventModelsSupplier, CurvesSupplier curvesSupplier, String workingVariantId,
- ComputationManager computationManager, DynamicSimulationParameters parameters) {
+ ComputationManager computationManager, DynamicSimulationParameters parameters, Reporter reporter) {
Objects.requireNonNull(dynamicModelsSupplier);
Objects.requireNonNull(eventModelsSupplier);
Objects.requireNonNull(curvesSupplier);
Objects.requireNonNull(workingVariantId);
Objects.requireNonNull(parameters);
+ Objects.requireNonNull(reporter);
DynaWaltzParameters dynaWaltzParameters = getDynaWaltzSimulationParameters(parameters);
- return run(network, dynamicModelsSupplier, eventModelsSupplier, curvesSupplier, workingVariantId, computationManager, parameters, dynaWaltzParameters);
+ return run(network, dynamicModelsSupplier, eventModelsSupplier, curvesSupplier, workingVariantId, computationManager, parameters, dynaWaltzParameters, reporter);
}
private DynaWaltzParameters getDynaWaltzSimulationParameters(DynamicSimulationParameters parameters) {
@@ -122,22 +121,23 @@ private DynaWaltzParameters getDynaWaltzSimulationParameters(DynamicSimulationPa
}
private CompletableFuture run(Network network, DynamicModelsSupplier dynamicModelsSupplier, EventModelsSupplier eventsModelsSupplier, CurvesSupplier curvesSupplier,
- String workingVariantId, ComputationManager computationManager, DynamicSimulationParameters parameters, DynaWaltzParameters dynaWaltzParameters) {
+ String workingVariantId, ComputationManager computationManager, DynamicSimulationParameters parameters, DynaWaltzParameters dynaWaltzParameters, Reporter reporter) {
+ Reporter dsReporter = DynawaltzReports.createDynaWaltzReporter(reporter, network.getId());
network.getVariantManager().setWorkingVariant(workingVariantId);
ExecutionEnvironment execEnv = new ExecutionEnvironment(Collections.emptyMap(), WORKING_DIR_PREFIX, dynaWaltzConfig.isDebug());
Command versionCmd = getVersionCommand(dynaWaltzConfig);
DynawoUtil.requireDynaMinVersion(execEnv, computationManager, versionCmd, DynawoConstants.DYNAWO_CMD_NAME, false);
- List blackBoxModels = dynamicModelsSupplier.get(network).stream()
+ List blackBoxModels = dynamicModelsSupplier.get(network, dsReporter).stream()
.filter(BlackBoxModel.class::isInstance)
.map(BlackBoxModel.class::cast)
.collect(Collectors.toList());
- List blackBoxEventModels = eventsModelsSupplier.get(network).stream()
+ List blackBoxEventModels = eventsModelsSupplier.get(network, dsReporter).stream()
.filter(BlackBoxModel.class::isInstance)
.map(BlackBoxModel.class::cast)
.collect(Collectors.toList());
- DynaWaltzContext context = new DynaWaltzContext(network, workingVariantId, blackBoxModels, blackBoxEventModels, curvesSupplier.get(network), parameters, dynaWaltzParameters);
+ DynaWaltzContext context = new DynaWaltzContext(network, workingVariantId, blackBoxModels, blackBoxEventModels, curvesSupplier.get(network, dsReporter), parameters, dynaWaltzParameters, reporter);
return computationManager.execute(execEnv, new DynaWaltzHandler(context));
}
@@ -178,7 +178,7 @@ public DynamicSimulationResult after(Path workingDir, ExecutionReport report) th
if (parameters.isWriteFinalState()) {
Path outputNetworkFile = workingDir.resolve(OUTPUTS_FOLDER).resolve(FINAL_STATE_FOLDER).resolve(OUTPUT_IIDM_FILENAME);
if (Files.exists(outputNetworkFile)) {
- NetworkResultsUpdater.update(context.getNetwork(), NetworkXml.read(outputNetworkFile), context.getDynaWaltzParameters().isMergeLoads());
+ NetworkResultsUpdater.update(context.getNetwork(), NetworkSerDe.read(outputNetworkFile), context.getDynaWaltzParameters().isMergeLoads());
} else {
status = false;
}
@@ -204,27 +204,20 @@ public DynamicSimulationResult after(Path workingDir, ExecutionReport report) th
return new DynamicSimulationResultImpl(status, null, curves, DynamicSimulationResult.emptyTimeLine());
}
- private void writeInputFiles(Path workingDir) {
- try {
- DynawoUtil.writeIidm(dynawoInput, workingDir.resolve(NETWORK_FILENAME));
- JobsXml.write(workingDir, context);
- DydXml.write(workingDir, context);
- ParametersXml.write(workingDir, context);
- if (context.withCurves()) {
- CurvesXml.write(workingDir, context);
- }
- DumpFileParameters dumpFileParameters = context.getDynaWaltzParameters().getDumpFileParameters();
- if (dumpFileParameters.useDumpFile()) {
- Path dumpFilePath = dumpFileParameters.getDumpFilePath();
- if (dumpFilePath != null) {
- Files.copy(dumpFilePath, workingDir.resolve(dumpFileParameters.dumpFile()), StandardCopyOption.REPLACE_EXISTING);
- }
+ private void writeInputFiles(Path workingDir) throws IOException {
+ DynawoUtil.writeIidm(dynawoInput, workingDir.resolve(NETWORK_FILENAME));
+ JobsXml.write(workingDir, context);
+ DydXml.write(workingDir, context);
+ ParametersXml.write(workingDir, context);
+ if (context.withCurves()) {
+ CurvesXml.write(workingDir, context);
+ }
+ DumpFileParameters dumpFileParameters = context.getDynaWaltzParameters().getDumpFileParameters();
+ if (dumpFileParameters.useDumpFile()) {
+ Path dumpFilePath = dumpFileParameters.getDumpFilePath();
+ if (dumpFilePath != null) {
+ Files.copy(dumpFilePath, workingDir.resolve(dumpFileParameters.dumpFile()), StandardCopyOption.REPLACE_EXISTING);
}
-
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- } catch (XMLStreamException e) {
- throw new UncheckedXmlStreamException(e);
}
}
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynawaltzReports.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynawaltzReports.java
new file mode 100644
index 000000000..06ee86e81
--- /dev/null
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/DynawaltzReports.java
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2023, RTE (http://www.rte-france.com)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ * SPDX-License-Identifier: MPL-2.0
+ */
+package com.powsybl.dynawaltz;
+
+import com.powsybl.commons.reporter.Report;
+import com.powsybl.commons.reporter.Reporter;
+import com.powsybl.commons.reporter.TypedValue;
+
+/**
+ * @author Laurent Issertial
+ */
+public final class DynawaltzReports {
+
+ private DynawaltzReports() {
+ }
+
+ public static Reporter createDynaWaltzReporter(Reporter reporter, String networkId) {
+ return reporter.createSubReporter("dynawaltz",
+ "Dynawaltz dynamic simulation on network '${networkId}'",
+ "networkId", networkId);
+ }
+
+ public static Reporter createDynaWaltzContextReporter(Reporter reporter) {
+ return reporter.createSubReporter("dynawaltzContext",
+ "Dynawaltz models processing");
+ }
+
+ public static void reportDuplicateStaticId(Reporter reporter, String duplicateId, String modelName, String dynamicId) {
+ reporter.report(Report.builder()
+ .withKey("duplicateStaticId")
+ .withDefaultMessage("Duplicate static id found: ${duplicateId} -> model ${modelName} ${dynamicId} will be skipped")
+ .withValue("duplicateId", duplicateId)
+ .withValue("modelName", modelName)
+ .withValue("dynamicId", dynamicId)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build());
+ }
+
+ public static void reportDuplicateDynamicId(Reporter reporter, String duplicateId, String modelName) {
+ reporter.report(Report.builder()
+ .withKey("duplicateDynamicId")
+ .withDefaultMessage("Duplicate dynamic id found: ${duplicateId} -> model ${modelName} will be skipped")
+ .withValue("duplicateId", duplicateId)
+ .withValue("modelName", modelName)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build());
+ }
+
+ public static void reportEmptyTapChanger(Reporter reporter, String dynamicId) {
+ reporter.report(Report.builder()
+ .withKey("emptyTC")
+ .withDefaultMessage("TapChangerAutomaton ${dynamicId} load does not possess a transformer, the automaton will be skipped")
+ .withValue("dynamicId", dynamicId)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build());
+ }
+
+ public static void reportEmptyTapChangerBlockingAutomaton(Reporter reporter, String dynamicId) {
+ reporter.report(Report.builder()
+ .withKey("emptyTCB")
+ .withDefaultMessage("None of TapChangerBlockingAutomaton {} equipments are TapChangerModel, the automaton will be skipped")
+ .withValue("dynamicId", dynamicId)
+ .withSeverity(TypedValue.WARN_SEVERITY)
+ .build());
+ }
+}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerAutomaton.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerAutomaton.java
index 516d1c2d4..a1e8780fe 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerAutomaton.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerAutomaton.java
@@ -8,14 +8,13 @@
package com.powsybl.dynawaltz.models.automatons;
import com.powsybl.dynawaltz.DynaWaltzContext;
+import com.powsybl.dynawaltz.DynawaltzReports;
import com.powsybl.dynawaltz.models.AbstractPureDynamicBlackBoxModel;
import com.powsybl.dynawaltz.models.TransformerSide;
import com.powsybl.dynawaltz.models.VarConnection;
import com.powsybl.dynawaltz.models.loads.LoadWithTransformers;
import com.powsybl.dynawaltz.models.transformers.TapChangerModel;
import com.powsybl.iidm.network.Load;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
@@ -27,8 +26,6 @@
*/
public class TapChangerAutomaton extends AbstractPureDynamicBlackBoxModel implements TapChangerModel {
- private static final Logger LOGGER = LoggerFactory.getLogger(TapChangerAutomaton.class);
-
private final Load load;
private final TransformerSide side;
@@ -66,7 +63,7 @@ public void createMacroConnections(DynaWaltzContext context) {
boolean isSkipped = createMacroConnectionsOrSkip(load, LoadWithTransformers.class, this::getVarConnectionsWith, context);
if (isSkipped) {
connection = ConnectionState.NOT_CONNECTED;
- LOGGER.warn("TapChangerAutomaton {} load does not possess a transformer, the automaton will be skipped", getDynamicModelId());
+ DynawaltzReports.reportEmptyTapChanger(context.getReporter(), getDynamicModelId());
} else {
connection = ConnectionState.CONNECTED;
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerBlockingAutomaton.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerBlockingAutomaton.java
index 78777cf85..7ed93890c 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerBlockingAutomaton.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/automatons/TapChangerBlockingAutomaton.java
@@ -9,6 +9,7 @@
import com.powsybl.commons.PowsyblException;
import com.powsybl.dynawaltz.DynaWaltzContext;
+import com.powsybl.dynawaltz.DynawaltzReports;
import com.powsybl.dynawaltz.models.AbstractPureDynamicBlackBoxModel;
import com.powsybl.dynawaltz.models.MeasurementPointSuffix;
import com.powsybl.dynawaltz.models.VarConnection;
@@ -18,8 +19,6 @@
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.TwoWindingsTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
@@ -30,7 +29,6 @@
*/
public class TapChangerBlockingAutomaton extends AbstractPureDynamicBlackBoxModel {
- private static final Logger LOGGER = LoggerFactory.getLogger(TapChangerBlockingAutomaton.class);
private static final Set COMPATIBLE_EQUIPMENTS = EnumSet.of(IdentifiableType.LOAD, IdentifiableType.TWO_WINDINGS_TRANSFORMER);
private static final int MAX_MEASUREMENTS = 5;
@@ -104,7 +102,7 @@ public void createMacroConnections(DynaWaltzContext context) {
}
} else {
isConnected = false;
- LOGGER.warn("None of TapChangerBlockingAutomaton {} equipments are TapChangerModel, the automaton will be skipped", getDynamicModelId());
+ DynawaltzReports.reportEmptyTapChangerBlockingAutomaton(context.getReporter(), getDynamicModelId());
}
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/events/AbstractEvent.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/events/AbstractEvent.java
index 1891db848..813643272 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/events/AbstractEvent.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/events/AbstractEvent.java
@@ -25,12 +25,12 @@ public abstract class AbstractEvent extends AbstractPureDynamicBlackBoxModel imp
private final double startTime;
protected AbstractEvent(Identifiable> equipment, double startTime, String eventPrefix) {
- super(generateEventId(equipment.getId(), eventPrefix));
+ super(generateEventId(eventPrefix, equipment.getId()));
this.equipment = equipment;
this.startTime = startTime;
}
- private static String generateEventId(String equipmentStaticId, String eventPrefix) {
+ public static String generateEventId(String eventPrefix, String equipmentStaticId) {
return eventPrefix + equipmentStaticId;
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/utils/SideConverter.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/utils/SideConverter.java
index 2c368c76e..b98214c53 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/utils/SideConverter.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/models/utils/SideConverter.java
@@ -8,8 +8,7 @@
package com.powsybl.dynawaltz.models.utils;
import com.powsybl.dynawaltz.models.Side;
-import com.powsybl.iidm.network.Branch;
-import com.powsybl.iidm.network.HvdcLine;
+import com.powsybl.iidm.network.TwoSides;
/**
* @author Laurent Issertial {@literal }
@@ -19,17 +18,17 @@ public final class SideConverter {
private SideConverter() {
}
- public static Side convert(Branch.Side side) {
+ public static Side convert(TwoSides side) {
return switch (side) {
case ONE -> Side.ONE;
case TWO -> Side.TWO;
};
}
- public static HvdcLine.Side convert(Side side) {
+ public static TwoSides convert(Side side) {
return switch (side) {
- case ONE -> HvdcLine.Side.ONE;
- case TWO -> HvdcLine.Side.TWO;
+ case ONE -> TwoSides.ONE;
+ case TWO -> TwoSides.TWO;
};
}
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/XmlUtil.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/AbstractXmlDynawaltzWriter.java
similarity index 54%
rename from dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/XmlUtil.java
rename to dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/AbstractXmlDynawaltzWriter.java
index 59f93e77e..281ce2ff4 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/XmlUtil.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/AbstractXmlDynawaltzWriter.java
@@ -1,12 +1,13 @@
/**
- * Copyright (c) 2020, RTE (http://www.rte-france.com)
+ * Copyright (c) 2023, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ * SPDX-License-Identifier: MPL-2.0
*/
-
package com.powsybl.dynawaltz.xml;
+import com.powsybl.commons.exceptions.UncheckedXmlStreamException;
import com.powsybl.dynawaltz.DynaWaltzContext;
import javax.xml.stream.XMLStreamException;
@@ -22,39 +23,43 @@
import static com.powsybl.dynawaltz.xml.DynaWaltzXmlConstants.DYN_URI;
/**
- * @author Mathieu Bague {@literal }
+ * @author Florian Dupuy {@literal }
*/
-public final class XmlUtil {
+public abstract class AbstractXmlDynawaltzWriter implements XmlDynawaltzWriter {
- @FunctionalInterface
- public interface XmlDynawaltzWriter {
- void write(XMLStreamWriter writer, DynaWaltzContext dynaWaltzContext) throws XMLStreamException;
- }
+ private final String xmlFileName;
+ private final String xmlRootName;
- private XmlUtil() {
+ protected AbstractXmlDynawaltzWriter(String xmlFileName, String xmlRootName) {
+ this.xmlFileName = Objects.requireNonNull(xmlFileName);
+ this.xmlRootName = Objects.requireNonNull(xmlRootName);
}
- public static void write(Path file, DynaWaltzContext context, String elementName, XmlDynawaltzWriter xmlDynawaltzWriter) throws IOException, XMLStreamException {
- Objects.requireNonNull(file);
+ @Override
+ public void createXmlFileFromContext(Path workingDir, DynaWaltzContext context) throws IOException {
+ Objects.requireNonNull(workingDir);
Objects.requireNonNull(context);
- Objects.requireNonNull(elementName);
- Objects.requireNonNull(xmlDynawaltzWriter);
+ Path file = workingDir.resolve(xmlFileName);
try (Writer writer = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) {
XMLStreamWriter xmlWriter = XmlStreamWriterFactory.newInstance(writer);
try {
xmlWriter.writeStartDocument(StandardCharsets.UTF_8.toString(), "1.0");
xmlWriter.setPrefix(DYN_PREFIX, DYN_URI);
- xmlWriter.writeStartElement(DYN_URI, elementName);
+ xmlWriter.writeStartElement(DYN_URI, xmlRootName);
xmlWriter.writeNamespace(DYN_PREFIX, DYN_URI);
- xmlDynawaltzWriter.write(xmlWriter, context);
+ write(xmlWriter, context);
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
} finally {
xmlWriter.close();
}
+ } catch (XMLStreamException e) {
+ throw new UncheckedXmlStreamException(e);
}
}
+
+ abstract void write(XMLStreamWriter writer, DynaWaltzContext dynaWaltzContext) throws XMLStreamException;
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/CurvesXml.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/CurvesXml.java
index 1de66e92c..3fe6aec83 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/CurvesXml.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/CurvesXml.java
@@ -14,7 +14,6 @@
import javax.xml.stream.XMLStreamWriter;
import java.io.IOException;
import java.nio.file.Path;
-import java.util.Objects;
import static com.powsybl.dynawaltz.xml.DynaWaltzConstants.CRV_FILENAME;
import static com.powsybl.dynawaltz.xml.DynaWaltzXmlConstants.DYN_URI;
@@ -22,19 +21,18 @@
/**
* @author Marcos de Miguel {@literal }
*/
-public final class CurvesXml {
+public final class CurvesXml extends AbstractXmlDynawaltzWriter {
private CurvesXml() {
+ super(CRV_FILENAME, "curvesInput");
}
- public static void write(Path workingDir, DynaWaltzContext context) throws IOException, XMLStreamException {
- Objects.requireNonNull(workingDir);
- Path file = workingDir.resolve(CRV_FILENAME);
-
- XmlUtil.write(file, context, "curvesInput", CurvesXml::write);
+ public static void write(Path workingDir, DynaWaltzContext context) throws IOException {
+ new CurvesXml().createXmlFileFromContext(workingDir, context);
}
- private static void write(XMLStreamWriter writer, DynaWaltzContext context) throws XMLStreamException {
+ @Override
+ public void write(XMLStreamWriter writer, DynaWaltzContext context) throws XMLStreamException {
for (Curve curve : context.getCurves()) {
DynaWaltzCurve dynCurve = (DynaWaltzCurve) curve;
writer.writeEmptyElement(DYN_URI, "curve");
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/DydXml.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/DydXml.java
index c477e2b7f..6774e22e6 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/DydXml.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/DydXml.java
@@ -16,26 +16,24 @@
import javax.xml.stream.XMLStreamWriter;
import java.io.IOException;
import java.nio.file.Path;
-import java.util.Objects;
import static com.powsybl.dynawaltz.xml.DynaWaltzConstants.DYD_FILENAME;
/**
* @author Mathieu Bague {@literal }
*/
-public final class DydXml {
+public final class DydXml extends AbstractXmlDynawaltzWriter {
private DydXml() {
+ super(DYD_FILENAME, "dynamicModelsArchitecture");
}
- public static void write(Path workingDir, DynaWaltzContext context) throws IOException, XMLStreamException {
- Objects.requireNonNull(workingDir);
- Path file = workingDir.resolve(DYD_FILENAME);
-
- XmlUtil.write(file, context, "dynamicModelsArchitecture", DydXml::write);
+ public static void write(Path workingDir, DynaWaltzContext context) throws IOException {
+ new DydXml().createXmlFileFromContext(workingDir, context);
}
- private static void write(XMLStreamWriter writer, DynaWaltzContext context) throws XMLStreamException {
+ @Override
+ public void write(XMLStreamWriter writer, DynaWaltzContext context) throws XMLStreamException {
// loop over the values of the map indexed by dynamicIds to write only once objects with the same dynamicId
for (BlackBoxModel model : context.getBlackBoxDynamicModels()) {
model.write(writer, context);
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/JobsXml.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/JobsXml.java
index 329ad79f0..2dcf216b8 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/JobsXml.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/JobsXml.java
@@ -15,7 +15,6 @@
import javax.xml.stream.XMLStreamWriter;
import java.io.IOException;
import java.nio.file.Path;
-import java.util.Objects;
import static com.powsybl.dynawaltz.xml.DynaWaltzConstants.*;
import static com.powsybl.dynawaltz.xml.DynaWaltzXmlConstants.DYN_URI;
@@ -23,19 +22,18 @@
/**
* @author Marcos de Miguel {@literal }
*/
-public final class JobsXml {
+public final class JobsXml extends AbstractXmlDynawaltzWriter {
private JobsXml() {
+ super(JOBS_FILENAME, "jobs");
}
- public static void write(Path workingDir, DynaWaltzContext context) throws IOException, XMLStreamException {
- Objects.requireNonNull(workingDir);
- Path file = workingDir.resolve(JOBS_FILENAME);
-
- XmlUtil.write(file, context, "jobs", JobsXml::write);
+ public static void write(Path workingDir, DynaWaltzContext context) throws IOException {
+ new JobsXml().createXmlFileFromContext(workingDir, context);
}
- private static void write(XMLStreamWriter writer, DynaWaltzContext context) throws XMLStreamException {
+ @Override
+ public void write(XMLStreamWriter writer, DynaWaltzContext context) throws XMLStreamException {
writer.writeStartElement(DYN_URI, "job");
writer.writeAttribute("name", "Job");
writeSolver(writer, context);
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/ParametersXml.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/ParametersXml.java
index 2d19b6999..5b0039a06 100644
--- a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/ParametersXml.java
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/ParametersXml.java
@@ -9,6 +9,7 @@
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.exceptions.UncheckedXmlStreamException;
+import com.powsybl.commons.xml.XmlUtil;
import com.powsybl.dynawaltz.DynaWaltzContext;
import com.powsybl.dynawaltz.DynaWaltzParameters;
import com.powsybl.dynawaltz.parameters.Parameter;
@@ -93,8 +94,8 @@ public static ParametersSet load(Path parametersFile, String parameterSetId) {
private static List readAndClose(XMLStreamReader xmlReader) throws XMLStreamException {
List parametersSets = new ArrayList<>();
skipComments(xmlReader);
- com.powsybl.commons.xml.XmlUtil.readUntilEndElement(PARAMETERS_SET_ELEMENT_NAME, xmlReader, () -> {
- if (!xmlReader.getLocalName().equals("set")) {
+ XmlUtil.readSubElements(xmlReader, elementName -> {
+ if (!elementName.equals("set")) {
closeAndThrowException(xmlReader, xmlReader.getLocalName());
}
String parameterSetIdRead = xmlReader.getAttributeValue(null, "id");
@@ -107,40 +108,49 @@ private static List readAndClose(XMLStreamReader xmlReader) throw
private static ParametersSet readOneSetAndClose(XMLStreamReader xmlReader, String parameterSetId) throws XMLStreamException {
AtomicReference parametersSet = new AtomicReference<>();
skipComments(xmlReader);
- com.powsybl.commons.xml.XmlUtil.readUntilEndElement(PARAMETERS_SET_ELEMENT_NAME, xmlReader, () -> {
+ XmlUtil.readSubElements(xmlReader, elementName -> {
if (parametersSet.get() != null) {
return;
}
- if (!xmlReader.getLocalName().equals("set")) {
+ if (!elementName.equals("set")) {
closeAndThrowException(xmlReader, xmlReader.getLocalName());
}
- if (xmlReader.getAttributeValue(null, "id").equals(parameterSetId)) {
+ String idSetRead = xmlReader.getAttributeValue(null, "id");
+ if (idSetRead.equals(parameterSetId)) {
parametersSet.set(createParametersSet(xmlReader, parameterSetId));
} else {
- com.powsybl.commons.xml.XmlUtil.readUntilEndElement("set", xmlReader, () -> {
- });
+ XmlUtil.readSubElements(xmlReader);
}
});
xmlReader.close();
return parametersSet.get();
}
- private static ParametersSet createParametersSet(XMLStreamReader xmlReader, String parameterSetId) throws XMLStreamException {
+ private static ParametersSet createParametersSet(XMLStreamReader xmlReader, String parameterSetId) {
ParametersSet parametersSet = new ParametersSet(parameterSetId);
- com.powsybl.commons.xml.XmlUtil.readUntilEndElement("set", xmlReader, () -> {
- String name = xmlReader.getAttributeValue(null, "name");
- ParameterType type = ParameterType.valueOf(xmlReader.getAttributeValue(null, "type"));
- if (xmlReader.getLocalName().equals("par")) {
- String value = xmlReader.getAttributeValue(null, "value");
- parametersSet.addParameter(name, type, value);
- } else if (xmlReader.getLocalName().equals("reference")) {
- String origData = xmlReader.getAttributeValue(null, "origData");
- String origName = xmlReader.getAttributeValue(null, "origName");
- String componentId = xmlReader.getAttributeValue(null, "componentId");
- parametersSet.addReference(name, type, origData, origName, componentId);
- } else {
- closeAndThrowException(xmlReader, xmlReader.getLocalName());
+ XmlUtil.readSubElements(xmlReader, elementName -> {
+ try {
+ String name = xmlReader.getAttributeValue(null, "name");
+ ParameterType type = ParameterType.valueOf(xmlReader.getAttributeValue(null, "type"));
+ switch (elementName) {
+ case "par" -> {
+ String value = xmlReader.getAttributeValue(null, "value");
+ XmlUtil.readEndElementOrThrow(xmlReader);
+ parametersSet.addParameter(name, type, value);
+ }
+ case "reference" -> {
+ String origData = xmlReader.getAttributeValue(null, "origData");
+ String origName = xmlReader.getAttributeValue(null, "origName");
+ String componentId = xmlReader.getAttributeValue(null, "componentId");
+ XmlUtil.readEndElementOrThrow(xmlReader);
+ parametersSet.addReference(name, type, origData, origName, componentId);
+ }
+ default -> closeAndThrowException(xmlReader, xmlReader.getLocalName());
+ }
+ } catch (XMLStreamException e) {
+ throw new UncheckedXmlStreamException(e);
}
+
});
return parametersSet;
}
@@ -159,12 +169,16 @@ private static void skipComments(XMLStreamReader xmlReader) throws XMLStreamExce
}
}
- private static void closeAndThrowException(XMLStreamReader xmlReader, String unexpectedElement) throws XMLStreamException {
- xmlReader.close();
+ private static void closeAndThrowException(XMLStreamReader xmlReader, String unexpectedElement) {
+ try {
+ xmlReader.close();
+ } catch (XMLStreamException e) {
+ throw new UncheckedXmlStreamException(e);
+ }
throw new PowsyblException("Unexpected element: " + unexpectedElement);
}
- public static void write(Path workingDir, DynaWaltzContext context) throws IOException, XMLStreamException {
+ public static void write(Path workingDir, DynaWaltzContext context) {
Objects.requireNonNull(workingDir);
write(context.getDynamicModelsParameters(), context.getSimulationParFile(), workingDir, DYN_PREFIX);
@@ -174,7 +188,7 @@ public static void write(Path workingDir, DynaWaltzContext context) throws IOExc
write(List.of(parameters.getSolverParameters()), DynaWaltzParameters.SOLVER_OUTPUT_PARAMETERS_FILE, workingDir, "");
}
- private static void write(Collection parametersSets, String filename, Path workingDir, String dynPrefix) throws IOException, XMLStreamException {
+ private static void write(Collection parametersSets, String filename, Path workingDir, String dynPrefix) {
Path parametersPath = workingDir.resolve(filename);
try (Writer writer = Files.newBufferedWriter(parametersPath, StandardCharsets.UTF_8)) {
XMLStreamWriter xmlWriter = XmlStreamWriterFactory.newInstance(writer);
@@ -191,6 +205,10 @@ private static void write(Collection parametersSets, String filen
} finally {
xmlWriter.close();
}
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ } catch (XMLStreamException e) {
+ throw new UncheckedXmlStreamException(e);
}
}
diff --git a/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/XmlDynawaltzWriter.java b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/XmlDynawaltzWriter.java
new file mode 100644
index 000000000..4668e8f06
--- /dev/null
+++ b/dynawaltz/src/main/java/com/powsybl/dynawaltz/xml/XmlDynawaltzWriter.java
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) 2023, RTE (http://www.rte-france.com)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ * SPDX-License-Identifier: MPL-2.0
+ */
+package com.powsybl.dynawaltz.xml;
+
+import com.powsybl.dynawaltz.DynaWaltzContext;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+/**
+ * @author Florian Dupuy {@literal }
+ */
+@FunctionalInterface
+public interface XmlDynawaltzWriter {
+ void createXmlFileFromContext(Path workingDir, DynaWaltzContext context) throws IOException;
+}
diff --git a/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzParametersTest.java b/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzParametersTest.java
index c5c84add3..3a27d257a 100644
--- a/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzParametersTest.java
+++ b/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzParametersTest.java
@@ -9,7 +9,7 @@
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.config.InMemoryPlatformConfig;
import com.powsybl.commons.config.MapModuleConfig;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.dynamicsimulation.DynamicSimulationParameters;
import com.powsybl.dynamicsimulation.json.JsonDynamicSimulationParameters;
import com.powsybl.dynawaltz.DynaWaltzParameters.SolverType;
@@ -31,7 +31,7 @@
/**
* @author Marcos de Miguel {@literal }
*/
-class DynaWaltzParametersTest extends AbstractConverterTest {
+class DynaWaltzParametersTest extends AbstractSerDeTest {
public static final String USER_HOME = "/home/user/";
diff --git a/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzProviderTest.java b/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzProviderTest.java
index 8324633b4..c6dbbe031 100644
--- a/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzProviderTest.java
+++ b/dynawaltz/src/test/java/com/powsybl/dynawaltz/DynaWaltzProviderTest.java
@@ -7,7 +7,8 @@
package com.powsybl.dynawaltz;
import com.powsybl.commons.PowsyblException;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.reporter.Reporter;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.computation.ComputationManager;
import com.powsybl.computation.local.LocalCommandExecutor;
import com.powsybl.computation.local.LocalComputationConfig;
@@ -31,13 +32,14 @@
import java.util.Map;
import java.util.concurrent.ForkJoinPool;
+import static com.powsybl.commons.reporter.Reporter.NO_OP;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Florian Dupuy {@literal }
* @author Marcos de Miguel {@literal }
*/
-class DynaWaltzProviderTest extends AbstractConverterTest {
+class DynaWaltzProviderTest extends AbstractSerDeTest {
private static final String OUTPUT_IIDM_FILENAME = "outputIIDM.xml";
private DynaWaltzConfig config;
@@ -49,9 +51,8 @@ public void setUp() throws IOException {
}
public static class CurvesSupplierMock implements CurvesSupplier {
-
@Override
- public List get(Network network) {
+ public List get(Network network, Reporter reporter) {
return Collections.singletonList(new DynaWaltzCurve("bus", "uPu"));
}
}
@@ -86,9 +87,9 @@ void testWithMergeLoads() throws Exception {
ComputationManager computationManager = new LocalComputationManager(new LocalComputationConfig(tmpDir, 1), commandExecutor, ForkJoinPool.commonPool());
DynamicSimulation.Runner dynawoSimulation = DynamicSimulation.find();
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
- DynamicSimulationResult result = dynawoSimulation.run(network, n -> Collections.emptyList(), EventModelsSupplier.empty(),
+ DynamicSimulationResult result = dynawoSimulation.run(network, (n, r) -> Collections.emptyList(), EventModelsSupplier.empty(),
CurvesSupplier.empty(), network.getVariantManager().getWorkingVariantId(),
- computationManager, DynamicSimulationParameters.load());
+ computationManager, DynamicSimulationParameters.load(), NO_OP);
assertNotNull(result);
}
@@ -104,7 +105,7 @@ void testWithoutMergeLoads() throws Exception {
dynamicSimulationParameters.addExtension(DynaWaltzParameters.class, dynaWaltzParameters);
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
- DynamicSimulationResult result = dynawoSimulation.run(network, n -> Collections.emptyList(), EventModelsSupplier.empty(),
+ DynamicSimulationResult result = dynawoSimulation.run(network, (n, r) -> Collections.emptyList(), EventModelsSupplier.empty(),
CurvesSupplier.empty(), network.getVariantManager().getWorkingVariantId(),
computationManager, dynamicSimulationParameters);
assertNotNull(result);
@@ -128,9 +129,9 @@ void testWithDump() throws Exception {
dynamicSimulationParameters.addExtension(DynaWaltzParameters.class, dynaWaltzParameters);
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
- DynamicSimulationResult result = dynawoSimulation.run(network, n -> Collections.emptyList(), EventModelsSupplier.empty(),
+ DynamicSimulationResult result = dynawoSimulation.run(network, (n, r) -> Collections.emptyList(), EventModelsSupplier.empty(),
CurvesSupplier.empty(), network.getVariantManager().getWorkingVariantId(),
- computationManager, dynamicSimulationParameters);
+ computationManager, dynamicSimulationParameters, NO_OP);
assertNotNull(result);
}
@@ -141,9 +142,9 @@ void testFail() throws Exception {
ComputationManager computationManager = new LocalComputationManager(new LocalComputationConfig(tmpDir, 1), commandExecutor, ForkJoinPool.commonPool());
DynamicSimulation.Runner dynawoSimulation = DynamicSimulation.find();
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
- DynamicSimulationResult result = dynawoSimulation.run(network, n -> Collections.emptyList(), EventModelsSupplier.empty(),
+ DynamicSimulationResult result = dynawoSimulation.run(network, (n, r) -> Collections.emptyList(), EventModelsSupplier.empty(),
CurvesSupplier.empty(), network.getVariantManager().getWorkingVariantId(),
- computationManager, DynamicSimulationParameters.load());
+ computationManager, DynamicSimulationParameters.load(), NO_OP);
assertNotNull(result);
assertFalse(result.isOk());
}
@@ -155,9 +156,9 @@ void testWithoutCurves() throws Exception {
ComputationManager computationManager = new LocalComputationManager(new LocalComputationConfig(tmpDir, 1), commandExecutor, ForkJoinPool.commonPool());
DynamicSimulation.Runner dynawoSimulation = DynamicSimulation.find();
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
- DynamicSimulationResult result = dynawoSimulation.run(network, n -> Collections.emptyList(), EventModelsSupplier.empty(),
+ DynamicSimulationResult result = dynawoSimulation.run(network, (n, r) -> Collections.emptyList(), EventModelsSupplier.empty(),
new CurvesSupplierMock(), network.getVariantManager().getWorkingVariantId(),
- computationManager, DynamicSimulationParameters.load());
+ computationManager, DynamicSimulationParameters.load(), NO_OP);
assertNotNull(result);
assertFalse(result.isOk());
}
@@ -189,12 +190,12 @@ void testCallingBadVersionDynawo() throws Exception {
ComputationManager computationManager = new LocalComputationManager(new LocalComputationConfig(tmpDir, 1), commandExecutor, ForkJoinPool.commonPool());
DynamicSimulation.Runner dynawoSimulation = DynamicSimulation.find();
assertEquals(DynaWaltzProvider.NAME, dynawoSimulation.getName());
- DynamicModelsSupplier dms = n -> Collections.emptyList();
+ DynamicModelsSupplier dms = (n, r) -> Collections.emptyList();
EventModelsSupplier ems = EventModelsSupplier.empty();
CurvesSupplier cs = CurvesSupplier.empty();
String wvId = network.getVariantManager().getWorkingVariantId();
DynamicSimulationParameters dsp = DynamicSimulationParameters.load();
- PowsyblException e = assertThrows(PowsyblException.class, () -> dynawoSimulation.run(network, dms, ems, cs, wvId, computationManager, dsp));
+ PowsyblException e = assertThrows(PowsyblException.class, () -> dynawoSimulation.run(network, dms, ems, cs, wvId, computationManager, dsp, NO_OP));
assertEquals("dynawo version not supported. Must be >= " + DynawoConstants.VERSION_MIN, e.getMessage());
}
diff --git a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractDynamicModelXmlTest.java b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractDynamicModelXmlTest.java
index f8f909f3d..74a4f73a5 100644
--- a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractDynamicModelXmlTest.java
+++ b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractDynamicModelXmlTest.java
@@ -7,7 +7,7 @@
*/
package com.powsybl.dynawaltz.xml;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.dynamicsimulation.Curve;
import com.powsybl.dynamicsimulation.DynamicSimulationParameters;
import com.powsybl.dynawaltz.DynaWaltzContext;
@@ -37,7 +37,7 @@
/**
* @author Laurent Issertial {@literal }
*/
-public abstract class AbstractDynamicModelXmlTest extends AbstractConverterTest {
+public abstract class AbstractDynamicModelXmlTest extends AbstractSerDeTest {
protected Network network;
protected List dynamicModels = new ArrayList<>();
diff --git a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractParametrizedDynamicModelXmlTest.java b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractParametrizedDynamicModelXmlTest.java
index 253fd2dc5..c0a138037 100644
--- a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractParametrizedDynamicModelXmlTest.java
+++ b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/AbstractParametrizedDynamicModelXmlTest.java
@@ -7,7 +7,7 @@
*/
package com.powsybl.dynawaltz.xml;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.dynamicsimulation.Curve;
import com.powsybl.dynamicsimulation.DynamicSimulationParameters;
import com.powsybl.dynawaltz.DynaWaltzContext;
@@ -35,7 +35,7 @@
/**
* @author Laurent Issertial {@literal }
*/
-abstract class AbstractParametrizedDynamicModelXmlTest extends AbstractConverterTest {
+abstract class AbstractParametrizedDynamicModelXmlTest extends AbstractSerDeTest {
protected Network network;
protected List dynamicModels = new ArrayList<>();
diff --git a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/DynaWaltzTestUtil.java b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/DynaWaltzTestUtil.java
index 8dc9a2052..cc1f12c23 100644
--- a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/DynaWaltzTestUtil.java
+++ b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/DynaWaltzTestUtil.java
@@ -6,7 +6,7 @@
*/
package com.powsybl.dynawaltz.xml;
-import com.powsybl.commons.test.AbstractConverterTest;
+import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.dynamicsimulation.Curve;
import com.powsybl.dynawaltz.DynaWaltzCurve;
import com.powsybl.dynawaltz.models.BlackBoxModel;
@@ -43,7 +43,7 @@
/**
* @author Marcos de Miguel {@literal }
*/
-public class DynaWaltzTestUtil extends AbstractConverterTest {
+public class DynaWaltzTestUtil extends AbstractSerDeTest {
protected Network network;
protected List dynamicModels;
diff --git a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/ParametersXmlTest.java b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/ParametersXmlTest.java
index 8ee5e79bb..e71d57ba9 100644
--- a/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/ParametersXmlTest.java
+++ b/dynawaltz/src/test/java/com/powsybl/dynawaltz/xml/ParametersXmlTest.java
@@ -13,7 +13,6 @@
import org.junit.jupiter.api.Test;
import org.xml.sax.SAXException;
-import javax.xml.stream.XMLStreamException;
import java.io.IOException;
/**
@@ -22,7 +21,7 @@
class ParametersXmlTest extends DynaWaltzTestUtil {
@Test
- void writeOmegaRef() throws SAXException, IOException, XMLStreamException {
+ void writeOmegaRef() throws SAXException, IOException {
DynamicSimulationParameters parameters = DynamicSimulationParameters.load();
DynaWaltzParameters dynawoParameters = DynaWaltzParameters.load(PlatformConfig.defaultConfig(), fileSystem);
DynaWaltzContext context = new DynaWaltzContext(network, network.getVariantManager().getWorkingVariantId(), dynamicModels, eventModels, curves, parameters, dynawoParameters);
diff --git a/dynawo-integration-tests/src/test/java/com/powsybl/dynawo/it/DynaWaltzTest.java b/dynawo-integration-tests/src/test/java/com/powsybl/dynawo/it/DynaWaltzTest.java
index b60287a5c..09fce25bf 100644
--- a/dynawo-integration-tests/src/test/java/com/powsybl/dynawo/it/DynaWaltzTest.java
+++ b/dynawo-integration-tests/src/test/java/com/powsybl/dynawo/it/DynaWaltzTest.java
@@ -8,6 +8,7 @@
import com.powsybl.commons.datasource.ResourceDataSource;
import com.powsybl.commons.datasource.ResourceSet;
+import com.powsybl.commons.reporter.Reporter;
import com.powsybl.dynamicsimulation.*;
import com.powsybl.dynamicsimulation.groovy.*;
import com.powsybl.dynawaltz.DumpFileParameters;
@@ -81,7 +82,7 @@ void testIeee14() {
.setDefaultDumpFileParameters();
DynamicSimulationResult result = provider.run(network, dynamicModelsSupplier, eventModelsSupplier, curvesSupplier,
- VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters)
+ VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters, Reporter.NO_OP)
.join();
assertTrue(result.isOk());
@@ -125,7 +126,7 @@ void testIeee14WithDump() throws IOException {
.setDumpFileParameters(dumpFileParameters);
DynamicSimulationResult result = provider.run(network, dynamicModelsSupplier, eventModelsSupplier, curvesSupplier,
- VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters)
+ VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters, Reporter.NO_OP)
.join();
assertTrue(result.isOk());
@@ -140,7 +141,7 @@ void testIeee14WithDump() throws IOException {
dynaWaltzParameters.setDumpFileParameters(DumpFileParameters.createImportDumpFileParameters(dumpDir, dumpFile));
result = provider.run(network, dynamicModelsSupplier, eventModelsSupplier, curvesSupplier,
- VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters)
+ VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters, Reporter.NO_OP)
.join();
assertTrue(result.isOk());
@@ -165,7 +166,7 @@ void testSvc() {
.setDefaultDumpFileParameters();
DynamicSimulationResult result = provider.run(network, dynamicModelsSupplier, EventModelsSupplier.empty(), CurvesSupplier.empty(),
- VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters)
+ VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters, Reporter.NO_OP)
.join();
assertTrue(result.isOk());
@@ -193,7 +194,7 @@ void testHvdc() {
.setDefaultDumpFileParameters();
DynamicSimulationResult result = provider.run(network, dynamicModelsSupplier, EventModelsSupplier.empty(), CurvesSupplier.empty(),
- VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters)
+ VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters, Reporter.NO_OP)
.join();
assertTrue(result.isOk());
@@ -230,7 +231,7 @@ void testSmib() {
.setDefaultDumpFileParameters();
DynamicSimulationResult result = provider.run(network, dynamicModelsSupplier, eventModelsSupplier, curvesSupplier,
- VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters)
+ VariantManagerConstants.INITIAL_VARIANT_ID, computationManager, parameters, Reporter.NO_OP)
.join();
assertTrue(result.isOk());
diff --git a/dynawo-integration-tests/src/test/resources/ieee14/disconnectline/eventModels.groovy b/dynawo-integration-tests/src/test/resources/ieee14/disconnectline/eventModels.groovy
index 585e7a483..f15f829a7 100644
--- a/dynawo-integration-tests/src/test/resources/ieee14/disconnectline/eventModels.groovy
+++ b/dynawo-integration-tests/src/test/resources/ieee14/disconnectline/eventModels.groovy
@@ -5,10 +5,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-import com.powsybl.iidm.network.Branch
+import com.powsybl.iidm.network.TwoSides
Disconnect {
staticId "_BUS____1-BUS____5-1_AC"
startTime 1
- disconnectOnly Branch.Side.TWO
+ disconnectOnly TwoSides.TWO
}
diff --git a/pom.xml b/pom.xml
index ddfdb8c4c..ec3734768 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
17
- 6.0.1
+ 6.1.0-alpha-1
4.0.14
../distribution/target/site/jacoco-aggregate/jacoco.xml,