From 93d5ede9e80f28507c7daff75041c6da8d35d127 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Thu, 14 Sep 2023 17:12:48 +0200 Subject: [PATCH 001/228] fix path for getIndividualTimeSeriesFilePaths --- .../edu/ie3/datamodel/io/connectors/CsvFileConnector.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index 71147a7db..2f307b4be 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -20,10 +20,12 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -234,7 +236,10 @@ public BufferedReader initReader(Path filePath) throws FileNotFoundException { * @return A set of relative paths to time series files, with respect to the base folder path */ private Set getIndividualTimeSeriesFilePaths() { - Path baseDirectoryPath = baseDirectoryName.resolve(baseDirectoryName); + Path baseDirectoryPath = + Paths.get( + FilenameUtils.getFullPath(baseDirectoryName.toString()) + + FilenameUtils.getName(baseDirectoryName.toString())); try (Stream pathStream = Files.walk(baseDirectoryPath)) { return pathStream .map(baseDirectoryPath::relativize) From ee279122d40cecb8755da163ee64ae1327fab9e3 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Mon, 2 Oct 2023 12:45:16 +0200 Subject: [PATCH 002/228] fix cleanup error --- .../edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy index a48264940..b3c80fbcb 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy @@ -24,9 +24,12 @@ class BufferedCsvWriterTest extends Specification { } def cleanup() { - FileIOUtils.deleteRecursively(tmpDirectory) + try { + FileIOUtils.deleteRecursively(tmpDirectory) + } catch (IOException e) { + e.printStackTrace() + } } - def "The convenience constructor of the BufferedCsvWriter class works as expected."() { given: def baseDirectory = tmpDirectory From ca239c2b3c0b52ca82a2e7c21c0abf93d404bc48 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Mon, 2 Oct 2023 12:54:58 +0200 Subject: [PATCH 003/228] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5469a59c..b42d4eda9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed wrong rated power unit hint [#804](https://github.com/ie3-institute/PowerSystemDataModel/issues/804) - Fixed wrong hash code generation of ConnectorResult [#817](https://github.com/ie3-institute/PowerSystemDataModel/issues/817) +- Fixed wrong path for timeSeriesMapping [#886](https://github.com/ie3-institute/PowerSystemDataModel/issues/886) ### Changed - Removing deprecated classes and methods [#540](https://github.com/ie3-institute/PowerSystemDataModel/issues/540) From ca6aea236167a5ace1f52efc462a79690e037fc7 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Mon, 2 Oct 2023 13:22:46 +0200 Subject: [PATCH 004/228] remove logging --- .../edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy index b3c80fbcb..adf232c78 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.csv import edu.ie3.datamodel.exceptions.FileException import edu.ie3.datamodel.exceptions.SinkException import edu.ie3.util.io.FileIOUtils -import org.apache.commons.io.FilenameUtils import spock.lang.Shared import spock.lang.Specification @@ -27,7 +26,7 @@ class BufferedCsvWriterTest extends Specification { try { FileIOUtils.deleteRecursively(tmpDirectory) } catch (IOException e) { - e.printStackTrace() + } } def "The convenience constructor of the BufferedCsvWriter class works as expected."() { From 90a3f2fbc7ced03bcb9164175dae95f9124aa2cf Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Mon, 2 Oct 2023 13:28:52 +0200 Subject: [PATCH 005/228] fmt --- .../groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy index adf232c78..e45a8669f 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy @@ -26,7 +26,6 @@ class BufferedCsvWriterTest extends Specification { try { FileIOUtils.deleteRecursively(tmpDirectory) } catch (IOException e) { - } } def "The convenience constructor of the BufferedCsvWriter class works as expected."() { From 297f440335cb30e15a0390cd7ab698f439a62e27 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Mon, 2 Oct 2023 13:30:54 +0200 Subject: [PATCH 006/228] catch expression --- .../groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy index e45a8669f..456b48d9c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/csv/BufferedCsvWriterTest.groovy @@ -26,6 +26,7 @@ class BufferedCsvWriterTest extends Specification { try { FileIOUtils.deleteRecursively(tmpDirectory) } catch (IOException e) { + throw new FileException("Unable to delete recursively.", e) } } def "The convenience constructor of the BufferedCsvWriter class works as expected."() { From 616ce6d146ff2fd2fbcb8c8b858a6859be1fe4fe Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Wed, 8 Nov 2023 13:00:13 +0100 Subject: [PATCH 007/228] Improving column name validation --- .../exceptions/FactoryException.java | 2 +- .../edu/ie3/datamodel/io/factory/Factory.java | 83 +++++++++++++++---- .../input/AssetInputEntityFactory.java | 8 +- .../input/ConnectorInputEntityFactory.java | 2 +- .../input/CylindricalStorageInputFactory.java | 8 +- .../io/factory/input/LineInputFactory.java | 4 +- .../input/MeasurementUnitInputFactory.java | 4 +- .../io/factory/input/NodeInputFactory.java | 8 +- .../factory/input/OperatorInputFactory.java | 2 +- .../input/ThermalHouseInputFactory.java | 4 +- .../input/Transformer2WInputFactory.java | 4 +- .../input/Transformer3WInputFactory.java | 4 +- .../input/graphics/GraphicInputFactory.java | 6 +- .../input/participant/BmInputFactory.java | 6 +- .../input/participant/ChpInputFactory.java | 2 +- .../input/participant/EmInputFactory.java | 4 +- .../input/participant/EvcsInputFactory.java | 8 +- .../participant/FixedFeedInInputFactory.java | 4 +- .../input/participant/LoadInputFactory.java | 8 +- .../input/participant/PvInputFactory.java | 14 ++-- .../SystemParticipantInputEntityFactory.java | 6 +- .../input/participant/WecInputFactory.java | 2 +- .../result/ConnectorResultFactory.java | 17 ++-- .../result/FlexOptionsResultFactory.java | 8 +- .../io/factory/result/NodeResultFactory.java | 6 +- .../factory/result/SwitchResultFactory.java | 2 +- .../SystemParticipantResultFactory.java | 9 +- .../factory/result/ThermalResultFactory.java | 6 +- .../timeseries/CosmoIdCoordinateFactory.java | 10 +-- .../CosmoTimeBasedWeatherValueFactory.java | 10 +-- .../timeseries/IconIdCoordinateFactory.java | 4 +- .../IconTimeBasedWeatherValueFactory.java | 2 +- .../timeseries/SqlIdCoordinateFactory.java | 2 +- .../TimeBasedSimpleValueFactory.java | 18 ++-- .../TimeBasedWeatherValueFactory.java | 2 +- .../timeseries/TimeSeriesMappingFactory.java | 2 +- .../TimeSeriesMetaInformationFactory.java | 2 +- .../typeinput/LineTypeInputFactory.java | 6 +- .../SystemParticipantTypeInputFactory.java | 44 +++++----- .../Transformer2WTypeInputFactory.java | 28 +++---- .../Transformer3WTypeInputFactory.java | 40 ++++----- .../ie3/datamodel/io/source/DataSource.java | 3 +- .../ie3/datamodel/io/source/EntitySource.java | 24 +++--- .../datamodel/io/source/GraphicSource.java | 12 +-- .../datamodel/io/source/RawGridSource.java | 12 +-- .../io/source/ResultEntitySource.java | 2 +- .../datamodel/io/source/SourceValidator.java | 19 +++++ .../io/source/SystemParticipantSource.java | 6 +- .../datamodel/io/source/ThermalSource.java | 9 +- .../io/source/TimeSeriesMappingSource.java | 4 +- .../io/source/csv/CsvDataSource.java | 20 +++-- .../io/source/csv/CsvIdCoordinateSource.java | 3 + .../csv/CsvTimeSeriesMappingSource.java | 5 +- .../io/source/csv/CsvTimeSeriesSource.java | 12 ++- .../io/source/csv/CsvWeatherSource.java | 3 + .../influxdb/InfluxDbWeatherSource.java | 3 +- .../io/source/sql/SqlDataSource.java | 26 +++++- .../io/source/sql/SqlIdCoordinateSource.java | 10 ++- .../sql/SqlTimeSeriesMappingSource.java | 14 +++- .../io/source/sql/SqlTimeSeriesSource.java | 14 +++- .../input/AssetInputEntityFactoryTest.groovy | 41 ++++----- .../Transformer2WInputFactoryTest.groovy | 9 +- .../Transformer3WInputFactoryTest.groovy | 9 +- .../participant/EvcsInputFactoryTest.groovy | 2 +- .../FixedFeedInInputFactoryTest.groovy | 31 +++---- .../FlexOptionsResultFactoryTest.groovy | 21 ++--- .../result/NodeResultFactoryTest.groovy | 19 ++--- .../SystemParticipantResultFactoryTest.groovy | 22 ++--- .../CosmoIdCoordinateFactoryTest.groovy | 41 +++------ .../IconIdCoordinateFactoryTest.groovy | 27 ++---- .../TimeBasedSimpleValueFactoryTest.groovy | 4 +- ...stemParticipantTypeInputFactoryTest.groovy | 35 ++------ .../source/csv/CsvTimeSeriesSourceIT.groovy | 4 +- .../csv/CsvWeatherSourceCosmoTest.groovy | 10 +-- .../io/source/csv/_joint_grid/evcs_input.csv | 2 +- .../csv/_participants/fixed_feed_in_input.csv | 2 +- .../source/csv/_participants/load_input.csv | 2 +- .../io/source/csv/_participants/pv_input.csv | 2 +- .../csv/_participants/time_series_mapping.csv | 8 +- .../source/csv/_results/thermal_house_res.csv | 2 +- .../io/source/csv/_types/bm_type_input.csv | 2 +- .../io/source/csv/_types/chp_type_input.csv | 2 +- .../io/source/csv/_types/ev_type_input.csv | 2 +- .../io/source/csv/_types/hp_type_input.csv | 2 +- .../source/csv/_types/storage_type_input.csv | 2 +- .../io/source/csv/_types/wec_type_input.csv | 2 +- 86 files changed, 488 insertions(+), 429 deletions(-) create mode 100644 src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java diff --git a/src/main/java/edu/ie3/datamodel/exceptions/FactoryException.java b/src/main/java/edu/ie3/datamodel/exceptions/FactoryException.java index 75c0467f3..0a51c09bf 100644 --- a/src/main/java/edu/ie3/datamodel/exceptions/FactoryException.java +++ b/src/main/java/edu/ie3/datamodel/exceptions/FactoryException.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.exceptions; -/** Is thrown, when an something went wrong during entity creation process in a EntityFactory */ +/** Is thrown, when something went wrong during entity creation process in a EntityFactory */ public class FactoryException extends RuntimeException { public FactoryException(final String message, final Throwable cause) { super(message, cause); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index 0428701ec..1263cc5f2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -6,10 +6,11 @@ package edu.ie3.datamodel.io.factory; import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; +import edu.ie3.util.StringUtils; import java.util.*; -import java.util.function.IntFunction; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,7 +24,7 @@ * @param Type of the intended return type (might differ slightly from target class (cf. {@link * edu.ie3.datamodel.io.factory.timeseries.TimeBasedValueFactory})). */ -public abstract class Factory { +public abstract class Factory implements SourceValidator { public static final Logger log = LoggerFactory.getLogger(Factory.class); private final List> supportedClasses; @@ -48,15 +49,10 @@ public List> getSupportedClasses() { public Try get(D data) { isSupportedClass(data.getTargetClass()); - // magic: case-insensitive get/set calls on set strings - final List> allFields = getFields(data); - try { - validateParameters(data, allFields.toArray((IntFunction[]>) Set[]::new)); - // build the model return Success.of(buildModel(data)); - } catch (FactoryException e) { + } catch (Exception e) { return Failure.of( new FactoryException( "An error occurred when creating instance of " @@ -108,10 +104,47 @@ private void isSupportedClass(Class desiredClass) { * Returns list of sets of attribute names that the entity requires to be built. At least one of * these sets needs to be delivered for entity creation to be successful. * - * @param data EntityData (or subclass) containing the data * @return list of possible attribute sets */ - protected abstract List> getFields(D data); + protected abstract List> getFields(Class entityClass); + + /** + * Method for validating the found fields. + * + * @param foundFields that were found + * @param entityClass of the build data + */ + public void validate(Set foundFields, Class entityClass) { + List> fieldSets = + getFields(entityClass).stream().map(Factory::toSnakeCase).toList(); + Set harmonizedFoundFields = toSnakeCase(foundFields); + + // comparing the found fields to a list of possible fields (allows additional fields) + // if not all fields were found in a set, this set is filtered out + // all other fields are saved as a list + // allows snake, camel and mixed cases + List> validFieldSets = + fieldSets.stream() + .filter(s -> foundFields.containsAll(s) || harmonizedFoundFields.containsAll(s)) + .toList(); + + if (validFieldSets.isEmpty()) { + // build the exception string with extensive debug information + String providedKeysString = "[" + String.join(", ", foundFields) + "]"; + + String possibleOptions = getFieldsString(fieldSets).toString(); + + throw new FactoryException( + "The provided fields " + + providedKeysString + + " are invalid for instance of " + + entityClass.getSimpleName() + + ". \nThe following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of '" + + entityClass.getSimpleName() + + "' are possible (NOT case-sensitive!):\n" + + possibleOptions); + } + } /** * Validates the factory specific constructor parameters in two ways. 1) the biggest set of the @@ -148,7 +181,7 @@ protected int validateParameters(D data, Set... fieldSets) { String providedKeysString = "[" + String.join(", ", fieldsToValues.keySet()) + "]"; - String possibleOptions = getFieldsString(fieldSets).toString(); + String possibleOptions = getFieldsString(List.of(fieldSets)).toString(); throw new FactoryException( "The provided fields " @@ -165,11 +198,17 @@ protected int validateParameters(D data, Set... fieldSets) { } } - protected static StringBuilder getFieldsString(Set... fieldSets) { + protected static StringBuilder getFieldsString(List> fieldSets) { StringBuilder possibleOptions = new StringBuilder(); - for (int i = 0; i < fieldSets.length; i++) { - Set fieldSet = fieldSets[i]; - String option = i + ": [" + String.join(", ", fieldSet) + "]\n"; + for (int i = 0; i < fieldSets.size(); i++) { + Set fieldSet = fieldSets.get(i); + String option = + i + + ": [" + + String.join(", ", fieldSet) + + "] or [" + + String.join(", ", toCamelCase(fieldSet)) + + "]\n"; possibleOptions.append(option); } return possibleOptions; @@ -177,7 +216,7 @@ protected static StringBuilder getFieldsString(Set... fieldSets) { /** * Creates a new set of attribute names from given list of attributes. This method should always - * be used when returning attribute sets, i.e. through {@link #getFields(FactoryData)}. + * be used when returning attribute sets, i.e. through {@link #getFields(Class)}. * * @param attributes attribute names * @return new set exactly containing attribute names @@ -203,4 +242,16 @@ protected TreeSet expandSet(Set attributeSet, String... more) { newSet.addAll(Arrays.asList(more)); return newSet; } + + private static Set toSnakeCase(Set set) { + TreeSet newSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + newSet.addAll(set.stream().map(StringUtils::camelCaseToSnakeCase).toList()); + return newSet; + } + + private static Set toCamelCase(Set set) { + TreeSet newSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + newSet.addAll(set.stream().map(StringUtils::snakeCaseToCamelCase).toList()); + return newSet; + } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactory.java index 0da292f37..bfef41520 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactory.java @@ -25,8 +25,8 @@ public abstract class AssetInputEntityFactory { private static final String UUID = "uuid"; - private static final String OPERATES_FROM = "operatesfrom"; - private static final String OPERATES_UNTIL = "operatesuntil"; + private static final String OPERATES_FROM = "operatesFrom"; + private static final String OPERATES_UNTIL = "operatesUntil"; private static final String ID = "id"; protected AssetInputEntityFactory(Class... allowedClasses) { @@ -39,11 +39,11 @@ protected AssetInputEntityFactory(Class... allowedClasses) { *

The mandatory attributes required to create an {@link AssetInput} are enhanced with custom * attribute names that each subclass factory determines in {@link #getAdditionalFields()}. * - * @param data EntityData (or subclass) containing the data + * @param entityClass class of the entity * @return list of possible attribute sets */ @Override - protected List> getFields(D data) { + protected List> getFields(Class entityClass) { Set constructorParamsMin = newSet(UUID, ID); Set constructorParamsFrom = expandSet(constructorParamsMin, OPERATES_FROM); Set constructorParamsUntil = expandSet(constructorParamsMin, OPERATES_UNTIL); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityFactory.java index 4ef83352e..cc29c7e5e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityFactory.java @@ -29,7 +29,7 @@ abstract class ConnectorInputEntityFactory< * ConnectorInput}s. Thus, this attribute name declaration can be used in subclasses of {@link * ConnectorInputEntityFactory} */ - protected static final String PARALLEL_DEVICES = "paralleldevices"; + protected static final String PARALLEL_DEVICES = "parallelDevices"; protected ConnectorInputEntityFactory(Class... allowedClasses) { super(allowedClasses); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/CylindricalStorageInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/CylindricalStorageInputFactory.java index cd517423c..3b423465c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/CylindricalStorageInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/CylindricalStorageInputFactory.java @@ -18,10 +18,10 @@ public class CylindricalStorageInputFactory extends AssetInputEntityFactory { - private static final String STORAGE_VOLUME_LVL = "storagevolumelvl"; - private static final String STORAGE_VOLUME_LVL_MIN = "storagevolumelvlmin"; - private static final String INLET_TEMP = "inlettemp"; - private static final String RETURN_TEMP = "returntemp"; + private static final String STORAGE_VOLUME_LVL = "storageVolumeLvl"; + private static final String STORAGE_VOLUME_LVL_MIN = "storageVolumeLvlMin"; + private static final String INLET_TEMP = "inletTemp"; + private static final String RETURN_TEMP = "returnTemp"; private static final String C = "c"; public CylindricalStorageInputFactory() { diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/LineInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/LineInputFactory.java index e0c1154d8..ff8769100 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/LineInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/LineInputFactory.java @@ -23,8 +23,8 @@ public class LineInputFactory extends ConnectorInputEntityFactory> { private static final String LENGTH = "length"; - private static final String GEO_POSITION = "geoposition"; - private static final String OLM_CHARACTERISTIC = "olmcharacteristic"; + private static final String GEO_POSITION = "geoPosition"; + private static final String OLM_CHARACTERISTIC = "olmCharacteristic"; public LineInputFactory() { super(LineInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/MeasurementUnitInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/MeasurementUnitInputFactory.java index 7ed27292f..e15f6f494 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/MeasurementUnitInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/MeasurementUnitInputFactory.java @@ -13,8 +13,8 @@ public class MeasurementUnitInputFactory extends AssetInputEntityFactory { - private static final String V_MAG = "vmag"; - private static final String V_ANG = "vang"; + private static final String V_MAG = "vMag"; + private static final String V_ANG = "vAng"; private static final String P = "p"; private static final String Q = "q"; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java index 1110d5d51..96aa8859d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java @@ -16,10 +16,10 @@ import tech.units.indriya.ComparableQuantity; public class NodeInputFactory extends AssetInputEntityFactory { - private static final String V_TARGET = "vtarget"; + private static final String V_TARGET = "vTarget"; public static final String V_RATED = "vRated"; private static final String SLACK = "slack"; - private static final String GEO_POSITION = "geoposition"; + private static final String GEO_POSITION = "geoPosition"; public static final String VOLT_LVL = "voltLvl"; private static final String SUBNET = "subnet"; @@ -29,9 +29,7 @@ public NodeInputFactory() { @Override protected String[] getAdditionalFields() { - return new String[] { - V_TARGET, V_RATED.toLowerCase(), SLACK, GEO_POSITION, VOLT_LVL.toLowerCase(), SUBNET - }; + return new String[] {V_TARGET, V_RATED, SLACK, GEO_POSITION, VOLT_LVL, SUBNET}; } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java index 09dcdc881..5e7b0f1b5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java @@ -22,7 +22,7 @@ public OperatorInputFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { Set constructorParams = newSet(ENTITY_UUID, ENTITY_ID); return Collections.singletonList(constructorParams); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalHouseInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalHouseInputFactory.java index f60961cb6..6fab0fc61 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalHouseInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalHouseInputFactory.java @@ -18,8 +18,8 @@ public class ThermalHouseInputFactory extends AssetInputEntityFactory { - private static final String ETH_LOSSES = "ethlosses"; - private static final String ETH_CAPA = "ethcapa"; + private static final String ETH_LOSSES = "ethLosses"; + private static final String ETH_CAPA = "ethCapa"; private static final String TARGET_TEMPERATURE = "targetTemperature"; private static final String UPPER_TEMPERATURE_LIMIT = "upperTemperatureLimit"; private static final String LOWER_TEMPERATURE_LIMIT = "lowerTemperatureLimit"; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactory.java index 5b1909993..110f0572a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactory.java @@ -16,8 +16,8 @@ public class Transformer2WInputFactory extends ConnectorInputEntityFactory< Transformer2WInput, TypedConnectorInputEntityData> { - private static final String TAP_POS = "tappos"; - private static final String AUTO_TAP = "autotap"; + private static final String TAP_POS = "tapPos"; + private static final String AUTO_TAP = "autoTap"; public Transformer2WInputFactory() { super(Transformer2WInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactory.java index 59aec043b..c9987fe1f 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactory.java @@ -15,8 +15,8 @@ public class Transformer3WInputFactory extends ConnectorInputEntityFactory { - private static final String TAP_POS = "tappos"; - private static final String AUTO_TAP = "autotap"; + private static final String TAP_POS = "tapPos"; + private static final String AUTO_TAP = "autoTap"; public Transformer3WInputFactory() { super(Transformer3WInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/GraphicInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/GraphicInputFactory.java index 4dfb98676..c3a5a058b 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/GraphicInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/GraphicInputFactory.java @@ -23,7 +23,7 @@ public abstract class GraphicInputFactory { private static final String UUID = "uuid"; - private static final String GRAPHIC_LAYER = "graphiclayer"; + private static final String GRAPHIC_LAYER = "graphicLayer"; private static final String PATH_LINE_STRING = "path"; protected GraphicInputFactory(Class... allowedClasses) { @@ -36,11 +36,11 @@ protected GraphicInputFactory(Class... allowedClasses) { *

The mandatory attributes required to create an {@link GraphicInput} are enhanced with custom * attribute names that each subclass factory determines in {@link #getAdditionalFields()}. * - * @param data EntityData (or subclass) containing the data + * @param entityClass class of the entity * @return list of possible attribute sets */ @Override - protected List> getFields(D data) { + protected List> getFields(Class entityClass) { Set constructorParamsMin = newSet(UUID, GRAPHIC_LAYER, PATH_LINE_STRING); final String[] additionalFields = getAdditionalFields(); constructorParamsMin = expandSet(constructorParamsMin, additionalFields); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java index 799837d3c..656e66361 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java @@ -19,9 +19,9 @@ public class BmInputFactory extends SystemParticipantInputEntityFactory< BmInput, SystemParticipantTypedEntityData> { - private static final String MARKET_REACTION = "marketreaction"; - private static final String COST_CONTROLLED = "costcontrolled"; - private static final String FEED_IN_TARIFF = "feedintariff"; + private static final String MARKET_REACTION = "marketReaction"; + private static final String COST_CONTROLLED = "costControlled"; + private static final String FEED_IN_TARIFF = "feedInTariff"; public BmInputFactory() { super(BmInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java index f04b85e86..fd6411508 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java @@ -14,7 +14,7 @@ public class ChpInputFactory extends SystemParticipantInputEntityFactory { - private static final String MARKET_REACTION = "marketreaction"; + private static final String MARKET_REACTION = "marketReaction"; public ChpInputFactory() { super(ChpInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index f19475f96..aa12567a6 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -21,9 +21,9 @@ public class EmInputFactory extends SystemParticipantInputEntityFactory { private static final Logger logger = LoggerFactory.getLogger(EmInputFactory.class); - private static final String CONNECTED_ASSETS = "connectedassets"; + private static final String CONNECTED_ASSETS = "connectedAssets"; - private static final String CONTROL_STRATEGY = "controlstrategy"; + private static final String CONTROL_STRATEGY = "controlStrategy"; public EmInputFactory() { super(EmInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java index fb7419a75..6eb83d0bd 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java @@ -30,10 +30,10 @@ public class EvcsInputFactory extends SystemParticipantInputEntityFactory { private static final String TYPE = "type"; - private static final String CHARGING_POINTS = "chargingpoints"; - private static final String COS_PHI_RATED = "cosphirated"; - private static final String LOCATION_TYPE = "locationtype"; - private static final String V2G_SUPPORT = "v2gsupport"; + private static final String CHARGING_POINTS = "chargingPoints"; + private static final String COS_PHI_RATED = "cosPhiRated"; + private static final String LOCATION_TYPE = "locationType"; + private static final String V2G_SUPPORT = "v2gSupport"; public EvcsInputFactory() { super(EvcsInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java index 03ff6636f..25ba74543 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java @@ -18,8 +18,8 @@ public class FixedFeedInInputFactory extends SystemParticipantInputEntityFactory { - private static final String S_RATED = "srated"; - private static final String COSPHI_RATED = "cosphirated"; + private static final String S_RATED = "sRated"; + private static final String COSPHI_RATED = "cosPhiRated"; public FixedFeedInInputFactory() { super(FixedFeedInInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java index eb86cefc3..6ab009d90 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java @@ -24,11 +24,11 @@ public class LoadInputFactory extends SystemParticipantInputEntityFactory { private static final Logger logger = LoggerFactory.getLogger(LoadInputFactory.class); - private static final String LOAD_PROFILE = "loadprofile"; + private static final String LOAD_PROFILE = "loadProfile"; private static final String DSM = "dsm"; - private static final String E_CONS_ANNUAL = "econsannual"; - private static final String S_RATED = "srated"; - private static final String COS_PHI = "cosphirated"; + private static final String E_CONS_ANNUAL = "eConsAnnual"; + private static final String S_RATED = "sRated"; + private static final String COS_PHI = "cosPhiRated"; public LoadInputFactory() { super(LoadInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java index 9812354e3..34cf9cd34 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java @@ -21,13 +21,13 @@ public class PvInputFactory extends SystemParticipantInputEntityFactory { private static final String ALBEDO = "albedo"; private static final String AZIMUTH = "azimuth"; - private static final String ETA_CONV = "etaconv"; - private static final String ELEVATION_ANGLE = "elevationangle"; - private static final String KG = "kg"; - private static final String KT = "kt"; - private static final String MARKET_REACTION = "marketreaction"; - private static final String S_RATED = "srated"; - private static final String COS_PHI_RATED = "cosphirated"; + private static final String ETA_CONV = "etaConv"; + private static final String ELEVATION_ANGLE = "elevationAngle"; + private static final String KG = "kG"; + private static final String KT = "kT"; + private static final String MARKET_REACTION = "marketReaction"; + private static final String S_RATED = "sRated"; + private static final String COS_PHI_RATED = "cosPhiRated"; public PvInputFactory() { super(PvInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java index 212f9db96..b124ac9ec 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java @@ -30,15 +30,15 @@ abstract class SystemParticipantInputEntityFactory< T extends SystemParticipantInput, D extends NodeAssetInputEntityData> extends AssetInputEntityFactory { - private static final String Q_CHARACTERISTICS = "qcharacteristics"; + private static final String Q_CHARACTERISTICS = "qCharacteristics"; protected SystemParticipantInputEntityFactory(Class... allowedClasses) { super(allowedClasses); } @Override - protected List> getFields(D data) { - List> fields = super.getFields(data); + protected List> getFields(Class entityClass) { + List> fields = super.getFields(entityClass); for (Set set : fields) set.add(Q_CHARACTERISTICS); return fields; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java index 83bbbdd43..dfb2a8f8e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java @@ -16,7 +16,7 @@ public class WecInputFactory extends SystemParticipantInputEntityFactory< WecInput, SystemParticipantTypedEntityData> { - private static final String MARKET_REACTION = "marketreaction"; + private static final String MARKET_REACTION = "marketReaction"; public WecInputFactory() { super(WecInput.class); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java index 9444350ab..801341a2d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java @@ -21,13 +21,13 @@ public class ConnectorResultFactory extends ResultEntityFactory { - private static final String IAMAG = "iamag"; - private static final String IAANG = "iaang"; - private static final String IBMAG = "ibmag"; - private static final String IBANG = "ibang"; - private static final String ICMAG = "icmag"; - private static final String ICANG = "icang"; - private static final String TAPPOS = "tappos"; + private static final String IAMAG = "iAMag"; + private static final String IAANG = "iAAng"; + private static final String IBMAG = "iBMag"; + private static final String IBANG = "iBAng"; + private static final String ICMAG = "iCMag"; + private static final String ICANG = "iCAng"; + private static final String TAPPOS = "tapPos"; public ConnectorResultFactory() { super(LineResult.class, Transformer2WResult.class, Transformer3WResult.class); @@ -44,12 +44,11 @@ public ConnectorResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData simpleEntityData) { + protected List> getFields(Class entityClass) { /// all result models have the same constructor except StorageResult Set minConstructorParams = newSet(TIME, INPUT_MODEL, IAMAG, IAANG, IBMAG, IBANG); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); - final Class entityClass = simpleEntityData.getTargetClass(); if (entityClass.equals(Transformer2WResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, IAMAG, IAANG, IBMAG, IBANG, TAPPOS); optionalFields = expandSet(minConstructorParams, ENTITY_UUID); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java index 10ccfd1ba..aa33bdaf9 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java @@ -15,9 +15,9 @@ public class FlexOptionsResultFactory extends ResultEntityFactory { - private static final String P_REF = "pref"; - private static final String P_MIN = "pmin"; - private static final String P_MAX = "pmax"; + private static final String P_REF = "pRef"; + private static final String P_MIN = "pMin"; + private static final String P_MAX = "pMax"; public FlexOptionsResultFactory() { super(FlexOptionsResult.class); @@ -34,7 +34,7 @@ public FlexOptionsResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, P_REF, P_MIN, P_MAX); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java index 9f4a9b016..855fc5d83 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java @@ -15,8 +15,8 @@ import tech.units.indriya.ComparableQuantity; public class NodeResultFactory extends ResultEntityFactory { - private static final String VMAG = "vmag"; - private static final String VANG = "vang"; + private static final String VMAG = "vMag"; + private static final String VANG = "vAng"; public NodeResultFactory() { super(NodeResult.class); @@ -33,7 +33,7 @@ public NodeResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData entityData) { + protected List> getFields(Class entityClass) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, VMAG, VANG); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java index df24fe8ab..350885896 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java @@ -29,7 +29,7 @@ public SwitchResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, CLOSED); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java index 62aa0dc03..8a4b11af2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java @@ -27,7 +27,7 @@ public class SystemParticipantResultFactory extends ResultEntityFactory> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { /// all result models have the same constructor except StorageResult Set minConstructorParams = newSet(TIME, INPUT_MODEL, POWER, REACTIVE_POWER); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); - if (data.getTargetClass().equals(StorageResult.class) - || data.getTargetClass().equals(EvResult.class)) { + if (entityClass.equals(StorageResult.class) || entityClass.equals(EvResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, POWER, REACTIVE_POWER, SOC); optionalFields = expandSet(minConstructorParams, ENTITY_UUID); } - if (SystemParticipantWithHeatResult.class.isAssignableFrom(data.getTargetClass())) { + if (SystemParticipantWithHeatResult.class.isAssignableFrom(entityClass)) { minConstructorParams = expandSet(minConstructorParams, Q_DOT); optionalFields = expandSet(minConstructorParams, ENTITY_UUID); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java index 2d3e2c77c..2848fb52b 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java @@ -41,13 +41,13 @@ public ThermalResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData simpleEntityData) { + protected List> getFields(Class entityClass) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, Q_DOT); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); - if (simpleEntityData.getTargetClass().equals(ThermalHouseResult.class)) { + if (entityClass.equals(ThermalHouseResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, Q_DOT, INDOOR_TEMPERATURE); - } else if (simpleEntityData.getTargetClass().equals(CylindricalStorageResult.class)) { + } else if (entityClass.equals(CylindricalStorageResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, Q_DOT, ENERGY, FILL_LEVEL); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactory.java index 18920df21..3dcb3e083 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactory.java @@ -20,10 +20,10 @@ public class CosmoIdCoordinateFactory extends IdCoordinateFactory { private static final String TID = "tid"; private static final String COORDINATE_ID = "id"; - private static final String LONG_GEO = "longgeo"; - private static final String LAT_GEO = "latgeo"; - private static final String LONG_ROT = "longrot"; - private static final String LAT_ROT = "latrot"; + private static final String LONG_GEO = "longGeo"; + private static final String LAT_GEO = "latGeo"; + private static final String LONG_ROT = "longRot"; + private static final String LAT_ROT = "latRot"; @Override protected Pair buildModel(SimpleFactoryData data) { @@ -34,7 +34,7 @@ protected Pair buildModel(SimpleFactoryData data) { } @Override - protected List> getFields(SimpleFactoryData data) { + protected List> getFields(Class entityClass) { return Collections.singletonList( newSet(TID, COORDINATE_ID, LONG_GEO, LAT_GEO, LONG_ROT, LAT_ROT)); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java index a95affade..1bce91906 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java @@ -26,11 +26,11 @@ * value mapping in the typical PowerSystemDataModel (PSDM) column scheme */ public class CosmoTimeBasedWeatherValueFactory extends TimeBasedWeatherValueFactory { - private static final String DIFFUSE_IRRADIANCE = "diffuseirradiance"; - private static final String DIRECT_IRRADIANCE = "directirradiance"; + private static final String DIFFUSE_IRRADIANCE = "diffuseIrradiance"; + private static final String DIRECT_IRRADIANCE = "directIrradiance"; private static final String TEMPERATURE = "temperature"; - private static final String WIND_DIRECTION = "winddirection"; - private static final String WIND_VELOCITY = "windvelocity"; + private static final String WIND_DIRECTION = "windDirection"; + private static final String WIND_VELOCITY = "windVelocity"; public CosmoTimeBasedWeatherValueFactory(TimeUtil timeUtil) { super(timeUtil); @@ -50,7 +50,7 @@ public String getTimeFieldString() { } @Override - protected List> getFields(TimeBasedWeatherValueData data) { + protected List> getFields(Class entityClass) { Set minConstructorParams = newSet( UUID, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactory.java index 454c73157..39843178c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactory.java @@ -21,7 +21,7 @@ public class IconIdCoordinateFactory extends IdCoordinateFactory { private static final String COORDINATE_ID = "id"; private static final String LONG = "longitude"; private static final String LAT = "latitude"; - private static final String TYPE = "coordinatetype"; + private static final String TYPE = "coordinateType"; @Override protected Pair buildModel(SimpleFactoryData data) { @@ -32,7 +32,7 @@ protected Pair buildModel(SimpleFactoryData data) { } @Override - protected List> getFields(SimpleFactoryData data) { + protected List> getFields(Class entityClass) { return Collections.singletonList(newSet(COORDINATE_ID, LAT, LONG, TYPE)); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java index 1949bb2db..20d8e5bef 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java @@ -53,7 +53,7 @@ public String getTimeFieldString() { } @Override - protected List> getFields(TimeBasedWeatherValueData data) { + protected List> getFields(Class entityClass) { Set minParameters = newSet( TIME, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/SqlIdCoordinateFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/SqlIdCoordinateFactory.java index fb1d053f2..141d8dfd5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/SqlIdCoordinateFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/SqlIdCoordinateFactory.java @@ -39,7 +39,7 @@ protected Pair buildModel(SimpleFactoryData data) { } @Override - protected List> getFields(SimpleFactoryData data) { + protected List> getFields(Class entityClass) { return Collections.singletonList(newSet(COORDINATE_ID, COORDINATE)); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java index f71a00940..243c3986f 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java @@ -25,7 +25,7 @@ public class TimeBasedSimpleValueFactory /* Energy / Power */ private static final String ACTIVE_POWER = "p"; private static final String REACTIVE_POWER = "q"; - private static final String HEAT_DEMAND = "heatdemand"; + private static final String HEAT_DEMAND = "heatDemand"; private final TimeUtil timeUtil; @@ -87,24 +87,24 @@ protected TimeBasedValue buildModel(SimpleTimeBasedValueData data) { } @Override - protected List> getFields(SimpleTimeBasedValueData data) { + protected List> getFields(Class entityClass) { Set minConstructorParams = newSet(UUID, TIME); - if (EnergyPriceValue.class.isAssignableFrom(data.getTargetClass())) { + if (EnergyPriceValue.class.isAssignableFrom(entityClass)) { minConstructorParams.add(PRICE); - } else if (HeatAndSValue.class.isAssignableFrom(data.getTargetClass())) { + } else if (HeatAndSValue.class.isAssignableFrom(entityClass)) { minConstructorParams.addAll(Arrays.asList(ACTIVE_POWER, REACTIVE_POWER, HEAT_DEMAND)); - } else if (HeatAndPValue.class.isAssignableFrom(data.getTargetClass())) { + } else if (HeatAndPValue.class.isAssignableFrom(entityClass)) { minConstructorParams.addAll(Arrays.asList(ACTIVE_POWER, HEAT_DEMAND)); - } else if (HeatDemandValue.class.isAssignableFrom(data.getTargetClass())) { + } else if (HeatDemandValue.class.isAssignableFrom(entityClass)) { minConstructorParams.add(HEAT_DEMAND); - } else if (SValue.class.isAssignableFrom(data.getTargetClass())) { + } else if (SValue.class.isAssignableFrom(entityClass)) { minConstructorParams.addAll(Arrays.asList(ACTIVE_POWER, REACTIVE_POWER)); - } else if (PValue.class.isAssignableFrom(data.getTargetClass())) { + } else if (PValue.class.isAssignableFrom(entityClass)) { minConstructorParams.add(ACTIVE_POWER); } else { throw new FactoryException( - "The given factory cannot handle target class '" + data.getTargetClass() + "'."); + "The given factory cannot handle target class '" + entityClass + "'."); } return Collections.singletonList(minConstructorParams); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueFactory.java index 4ad3b3348..254de4a74 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueFactory.java @@ -18,7 +18,7 @@ public abstract class TimeBasedWeatherValueFactory extends TimeBasedValueFactory { protected static final String UUID = "uuid"; protected static final String TIME = "time"; - protected static final String COORDINATE_ID = "coordinateid"; + protected static final String COORDINATE_ID = "coordinateId"; protected final TimeUtil timeUtil; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java index 64aa90af4..5962ae2b7 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java @@ -26,7 +26,7 @@ public TimeSeriesMappingFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { return Collections.singletonList( Stream.of(UUID, PARTICIPANT, TIME_SERIES).collect(Collectors.toSet())); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java index fba7317a7..a5237275a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java @@ -30,7 +30,7 @@ public TimeSeriesMetaInformationFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { return Collections.singletonList( Stream.of(TIME_SERIES, COLUMN_SCHEME).collect(Collectors.toSet())); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java index 609a11849..a5a0faa5d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java @@ -23,15 +23,15 @@ public class LineTypeInputFactory extends AssetTypeInputEntityFactory> getFields(SimpleEntityData entityData) { + protected List> getFields(Class entityClass) { Set constructorParams = newSet(ENTITY_UUID, ENTITY_ID, B, G, R, X, I_MAX, V_RATED); return Collections.singletonList(constructorParams); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java index e0aa91bdf..7d6596cc6 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java @@ -27,35 +27,35 @@ public class SystemParticipantTypeInputFactory // SystemParticipantTypeInput parameters private static final String CAP_EX = "capex"; private static final String OP_EX = "opex"; - private static final String S_RATED = "srated"; - private static final String COS_PHI_RATED = "cosphirated"; + private static final String S_RATED = "sRated"; + private static final String COS_PHI_RATED = "cosPhiRated"; // required in multiple types - private static final String ETA_CONV = "etaconv"; - private static final String P_THERMAL = "pthermal"; - private static final String E_STORAGE = "estorage"; + private static final String ETA_CONV = "etaConv"; + private static final String P_THERMAL = "pThermal"; + private static final String E_STORAGE = "eStorage"; // EvTypeInput - private static final String E_CONS = "econs"; + private static final String E_CONS = "eCons"; // BmTypeInput - private static final String ACTIVE_POWER_GRADIENT = "activepowergradient"; + private static final String ACTIVE_POWER_GRADIENT = "activePowerGradient"; // WecTypeInput - private static final String ROTOR_AREA = "rotorarea"; - private static final String HUB_HEIGHT = "hubheight"; + private static final String ROTOR_AREA = "rotorArea"; + private static final String HUB_HEIGHT = "hubHeight"; // ChpTypeInput - private static final String ETA_EL = "etael"; - private static final String ETA_THERMAL = "etathermal"; - private static final String P_OWN = "pown"; + private static final String ETA_EL = "etaEl"; + private static final String ETA_THERMAL = "etaThermal"; + private static final String P_OWN = "pOwn"; // StorageTypeInput - private static final String P_MAX = "pmax"; + private static final String P_MAX = "pMax"; private static final String ETA = "eta"; private static final String DOD = "dod"; - private static final String LIFETIME = "lifetime"; - private static final String LIFECYCLE = "lifecycle"; + private static final String LIFETIME = "lifeTime"; + private static final String LIFECYCLE = "lifeCycle"; // WecTypeInput private static final String CP_CHARACTERISTIC = "cpCharacteristic"; @@ -71,24 +71,24 @@ public SystemParticipantTypeInputFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { Set standardConstructorParams = newSet(ENTITY_UUID, ENTITY_ID, CAP_EX, OP_EX, S_RATED, COS_PHI_RATED); Set constructorParameters = null; - if (data.getTargetClass().equals(EvTypeInput.class)) { + if (entityClass.equals(EvTypeInput.class)) { constructorParameters = expandSet(standardConstructorParams, E_STORAGE, E_CONS); - } else if (data.getTargetClass().equals(HpTypeInput.class)) { + } else if (entityClass.equals(HpTypeInput.class)) { constructorParameters = expandSet(standardConstructorParams, P_THERMAL); - } else if (data.getTargetClass().equals(BmTypeInput.class)) { + } else if (entityClass.equals(BmTypeInput.class)) { constructorParameters = expandSet(standardConstructorParams, ACTIVE_POWER_GRADIENT, ETA_CONV); - } else if (data.getTargetClass().equals(WecTypeInput.class)) { + } else if (entityClass.equals(WecTypeInput.class)) { constructorParameters = expandSet(standardConstructorParams, CP_CHARACTERISTIC, ETA_CONV, ROTOR_AREA, HUB_HEIGHT); - } else if (data.getTargetClass().equals(ChpTypeInput.class)) { // into new file + } else if (entityClass.equals(ChpTypeInput.class)) { // into new file constructorParameters = expandSet(standardConstructorParams, ETA_EL, ETA_THERMAL, P_THERMAL, P_OWN); - } else if (data.getTargetClass().equals(StorageTypeInput.class)) { + } else if (entityClass.equals(StorageTypeInput.class)) { constructorParameters = expandSet( standardConstructorParams, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java index a79236d49..8274d0665 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java @@ -17,26 +17,26 @@ public class Transformer2WTypeInputFactory extends AssetTypeInputEntityFactory { - private static final String R_SC = "rsc"; - private static final String X_SC = "xsc"; - private static final String S_RATED = "srated"; - private static final String V_RATED_A = "vrateda"; - private static final String V_RATED_B = "vratedb"; - private static final String G_M = "gm"; - private static final String B_M = "bm"; - private static final String D_V = "dv"; - private static final String D_PHI = "dphi"; - private static final String TAP_SIDE = "tapside"; - private static final String TAP_NEUTR = "tapneutr"; - private static final String TAP_MIN = "tapmin"; - private static final String TAP_MAX = "tapmax"; + private static final String R_SC = "rSc"; + private static final String X_SC = "xSc"; + private static final String S_RATED = "sRated"; + private static final String V_RATED_A = "vRatedA"; + private static final String V_RATED_B = "vRatedB"; + private static final String G_M = "gM"; + private static final String B_M = "bM"; + private static final String D_V = "dV"; + private static final String D_PHI = "dPhi"; + private static final String TAP_SIDE = "tapSide"; + private static final String TAP_NEUTR = "tapNeutr"; + private static final String TAP_MIN = "tapMin"; + private static final String TAP_MAX = "tapMax"; public Transformer2WTypeInputFactory() { super(Transformer2WTypeInput.class); } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { Set constructorParams = newSet( ENTITY_UUID, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java index a51f2ec7b..345b0728c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java @@ -17,32 +17,32 @@ public class Transformer3WTypeInputFactory extends AssetTypeInputEntityFactory { - private static final String S_RATED_A = "srateda"; - private static final String S_RATED_B = "sratedb"; - private static final String S_RATED_C = "sratedc"; - private static final String V_RATED_A = "vrateda"; - private static final String V_RATED_B = "vratedb"; - private static final String V_RATED_C = "vratedc"; - private static final String R_SC_A = "rsca"; - private static final String R_SC_B = "rscb"; - private static final String R_SC_C = "rscc"; - private static final String X_SC_A = "xsca"; - private static final String X_SC_B = "xscb"; - private static final String X_SC_C = "xscc"; - private static final String G_M = "gm"; - private static final String B_M = "bm"; - private static final String D_V = "dv"; - private static final String D_PHI = "dphi"; - private static final String TAP_NEUTR = "tapneutr"; - private static final String TAP_MIN = "tapmin"; - private static final String TAP_MAX = "tapmax"; + private static final String S_RATED_A = "sRatedA"; + private static final String S_RATED_B = "sRatedB"; + private static final String S_RATED_C = "sRatedC"; + private static final String V_RATED_A = "vRatedA"; + private static final String V_RATED_B = "vRatedB"; + private static final String V_RATED_C = "vRatedC"; + private static final String R_SC_A = "rScA"; + private static final String R_SC_B = "rScB"; + private static final String R_SC_C = "rScC"; + private static final String X_SC_A = "xScA"; + private static final String X_SC_B = "xScB"; + private static final String X_SC_C = "xScC"; + private static final String G_M = "gM"; + private static final String B_M = "bM"; + private static final String D_V = "dV"; + private static final String D_PHI = "dPhi"; + private static final String TAP_NEUTR = "tapNeutr"; + private static final String TAP_MIN = "tapMin"; + private static final String TAP_MAX = "tapMax"; public Transformer3WTypeInputFactory() { super(Transformer3WTypeInput.class); } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(Class entityClass) { Set constructorParams = newSet( ENTITY_UUID, diff --git a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java index 0687e9e50..f52d9b55e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java @@ -13,5 +13,6 @@ public interface DataSource { /** Creates a stream of maps that represent the rows in the database */ - Stream> getSourceData(Class entityClass); + Stream> getSourceData( + Class entityClass, SourceValidator validateSource); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index eec826f97..64a7b66ab 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -251,9 +251,9 @@ protected Stream> nodeAssetInputE * @return stream of the entity data wrapped in a {@link Try} */ protected Stream assetInputEntityDataStream( - Class entityClass, Collection operators) { + Class entityClass, SourceValidator validator, Collection operators) { return dataSource - .getSourceData(entityClass) + .getSourceData(entityClass, validator) .map( fieldsToAttributes -> assetInputEntityDataStream(entityClass, fieldsToAttributes, operators)); @@ -288,19 +288,12 @@ protected AssetInputEntityData assetInputEntityDataStream * @return stream of {@link SimpleEntityData} */ protected Stream simpleEntityDataStream( - Class entityClass) { + Class entityClass, SourceValidator validator) { return dataSource - .getSourceData(entityClass) + .getSourceData(entityClass, validator) .map(fieldsToAttributes -> new SimpleEntityData(fieldsToAttributes, entityClass)); } - protected Stream> assetInputEntityStream( - Class entityClass, - EntityFactory factory, - Collection operators) { - return assetInputEntityDataStream(entityClass, operators).map(factory::get); - } - /** * Returns a stream of {@link Try} entities that can be build by using {@link * NodeAssetInputEntityData} and their corresponding factory. @@ -319,7 +312,8 @@ protected Stream> nodeAssetEntit EntityFactory factory, Collection nodes, Collection operators) { - return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) + return nodeAssetInputEntityDataStream( + assetInputEntityDataStream(entityClass, factory, operators), nodes) .map(factory::get); } @@ -338,14 +332,16 @@ public Set> buildAssetInputEntit Class entityClass, EntityFactory factory, Collection operators) { - return assetInputEntityStream(entityClass, factory, operators).collect(Collectors.toSet()); + return assetInputEntityDataStream(entityClass, factory, operators) + .map(factory::get) + .collect(Collectors.toSet()); } @SuppressWarnings("unchecked") public Set> buildEntities( Class entityClass, EntityFactory factory) { return dataSource - .getSourceData(entityClass) + .getSourceData(entityClass, factory) .map( fieldsToAttributes -> { SimpleEntityData data = new SimpleEntityData(fieldsToAttributes, entityClass); diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 7cdc097ca..bc237aa1b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -91,7 +91,7 @@ public Set getNodeGraphicInput() throws SourceException { public Set getNodeGraphicInput(Set nodes) throws SourceException { return Try.scanCollection( - buildNodeGraphicEntityData(nodes) + buildNodeGraphicEntityData(nodes, nodeGraphicInputFactory) .map(nodeGraphicInputFactory::get) .collect(Collectors.toSet()), NodeGraphicInput.class) @@ -113,7 +113,7 @@ public Set getLineGraphicInput() throws SourceException { public Set getLineGraphicInput(Set lines) throws SourceException { return Try.scanCollection( - buildLineGraphicEntityData(lines) + buildLineGraphicEntityData(lines, lineGraphicInputFactory) .map(lineGraphicInputFactory::get) .collect(Collectors.toSet()), LineGraphicInput.class) @@ -140,9 +140,9 @@ public Set getLineGraphicInput(Set lines) throws So * @return a stream of tries of {@link NodeGraphicInput} entities */ protected Stream> buildNodeGraphicEntityData( - Set nodes) { + Set nodes, SourceValidator validator) { return dataSource - .getSourceData(NodeGraphicInput.class) + .getSourceData(NodeGraphicInput.class, validator) .map(fieldsToAttributes -> buildNodeGraphicEntityData(fieldsToAttributes, nodes)); } @@ -187,9 +187,9 @@ protected Try buildNodeGraphicEntit * @return a stream of tries of {@link LineGraphicInput} entities */ protected Stream> buildLineGraphicEntityData( - Set lines) { + Set lines, SourceValidator validator) { return dataSource - .getSourceData(LineGraphicInput.class) + .getSourceData(LineGraphicInput.class, validator) .map(fieldsToAttributes -> buildLineGraphicEntityData(fieldsToAttributes, lines)); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index b06d55d4d..986059dfc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -166,7 +166,7 @@ public Set getNodes() throws SourceException { */ public Set getNodes(Set operators) throws SourceException { return Try.scanCollection( - assetInputEntityDataStream(NodeInput.class, operators) + assetInputEntityDataStream(NodeInput.class, nodeInputFactory, operators) .map(nodeInputFactory::get) .collect(Collectors.toSet()), NodeInput.class) @@ -414,7 +414,7 @@ public Set> buildNodeInputEntiti Class entityClass, EntityFactory factory, Collection operators) { - return assetInputEntityDataStream(entityClass, operators) + return assetInputEntityDataStream(entityClass, factory, operators) .map(factory::get) .collect(Collectors.toSet()); } @@ -441,7 +441,9 @@ public Set> buildTransformer3WEntities return buildTransformer3WEntityData( buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(Transformer3WInput.class, operators), nodes), + assetInputEntityDataStream( + Transformer3WInput.class, transformer3WInputFactory, operators), + nodes), transformer3WTypeInputs), nodes) .map(transformer3WInputFactory::get) @@ -560,7 +562,7 @@ Stream> typedEntityStream( Collection types) { return buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(entityClass, operators), nodes), + assetInputEntityDataStream(entityClass, factory, operators), nodes), types) .map(factory::get); } @@ -572,7 +574,7 @@ Stream> untypedConnectorInputEntityStream( Set nodes, Set operators) { return buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(entityClass, operators), nodes) + assetInputEntityDataStream(entityClass, factory, operators), nodes) .map(factory::get); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index 87d9fcc21..b4cc69334 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -318,7 +318,7 @@ public Set getEmResults() { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- private Set getResultEntities( Class entityClass, SimpleEntityFactory factory) { - return simpleEntityDataStream(entityClass) + return simpleEntityDataStream(entityClass, factory) .map( entityData -> factory diff --git a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java new file mode 100644 index 000000000..f3f8ee9ef --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java @@ -0,0 +1,19 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.source; + +import java.util.Set; + +public interface SourceValidator { + + /** + * Method for validating a data source. + * + * @param foundFields fields that were found in the source data + * @param entityClass that should be buildable from the source data + */ + void validate(Set foundFields, Class entityClass); +} diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 3754362dd..293dc856d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -693,7 +693,7 @@ Stream> typedSystemParticipantEntityStream( Collection types) { return buildTypedSystemParticipantEntityData( nodeAssetInputEntityDataStream( - assetInputEntityDataStream(entityClass, operators), nodes), + assetInputEntityDataStream(entityClass, factory, operators), nodes), types) .map(factory::get); } @@ -708,7 +708,7 @@ private Stream> chpInputStream( return buildChpEntityData( buildTypedEntityData( nodeAssetInputEntityDataStream( - assetInputEntityDataStream(ChpInput.class, operators), nodes), + assetInputEntityDataStream(ChpInput.class, factory, operators), nodes), types), thermalStorages, thermalBuses) @@ -724,7 +724,7 @@ private Stream> hpInputStream( return buildHpEntityData( buildTypedEntityData( nodeAssetInputEntityDataStream( - assetInputEntityDataStream(HpInput.class, operators), nodes), + assetInputEntityDataStream(HpInput.class, factory, operators), nodes), types), thermalBuses) .map(factory::get); diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 48384565f..60da88bc1 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -262,7 +262,7 @@ public Try, FailureException> buildThermalHouseInputEntit Set thermalBuses = getThermalBuses(); return Try.scanCollection( - assetInputEntityDataStream(ThermalHouseInput.class, typeSource.getOperators()) + assetInputEntityDataStream(ThermalHouseInput.class, factory, typeSource.getOperators()) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) @@ -276,7 +276,7 @@ public Try, FailureException> buildThermalHouseInputEntit Collection operators, Collection thermalBuses) { return Try.scanCollection( - assetInputEntityDataStream(ThermalHouseInput.class, operators) + assetInputEntityDataStream(ThermalHouseInput.class, factory, operators) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) @@ -290,7 +290,8 @@ public Try, FailureException> buildCylindricalStora Set thermalBuses = getThermalBuses(); return Try.scanCollection( - assetInputEntityDataStream(CylindricalStorageInput.class, typeSource.getOperators()) + assetInputEntityDataStream( + CylindricalStorageInput.class, factory, typeSource.getOperators()) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) @@ -303,7 +304,7 @@ public Set> buildCylindricalStora CylindricalStorageInputFactory factory, Collection operators, Collection thermalBuses) { - return assetInputEntityDataStream(CylindricalStorageInput.class, operators) + return assetInputEntityDataStream(CylindricalStorageInput.class, factory, operators) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) diff --git a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java index 09d4530f9..03377241f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -36,7 +36,7 @@ protected TimeSeriesMappingSource() { * @return That mapping */ public Map getMapping() { - return getMappingSourceData() + return getMappingSourceData(mappingFactory) .map(this::createMappingEntry) .filter(Try::isSuccess) .map(t -> (Success) t) @@ -59,7 +59,7 @@ public Optional getTimeSeriesUuid(UUID modelIdentifier) { * * @return Stream of maps */ - public abstract Stream> getMappingSourceData(); + public abstract Stream> getMappingSourceData(SourceValidator validator); // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index 9a355e746..75fea3036 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.utils.validation.ValidationUtils; import edu.ie3.util.StringUtils; @@ -59,8 +60,9 @@ public CsvDataSource(String csvSep, Path folderPath, FileNamingStrategy fileNami } @Override - public Stream> getSourceData(Class entityClass) { - return buildStreamWithFieldsToAttributesMap(entityClass, connector); + public Stream> getSourceData( + Class entityClass, SourceValidator validator) { + return buildStreamWithFieldsToAttributesMap(entityClass, connector, validator); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -266,9 +268,12 @@ protected Predicate> isPresentCollectIfNot( * mapping (fieldName to fieldValue) */ protected Stream> buildStreamWithFieldsToAttributesMap( - Class entityClass, CsvFileConnector connector) { + Class entityClass, + CsvFileConnector connector, + SourceValidator validator) { try { - return buildStreamWithFieldsToAttributesMap(entityClass, connector.initReader(entityClass)); + return buildStreamWithFieldsToAttributesMap( + entityClass, connector.initReader(entityClass), validator); } catch (FileNotFoundException | ConnectorException e) { log.warn( "Unable to find file for entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); @@ -287,10 +292,15 @@ protected Stream> buildStreamWithFieldsToAttributesMap( * mapping (fieldName to fieldValue) */ protected Stream> buildStreamWithFieldsToAttributesMap( - Class entityClass, BufferedReader bufferedReader) { + Class entityClass, + BufferedReader bufferedReader, + SourceValidator validator) { try (BufferedReader reader = bufferedReader) { final String[] headline = parseCsvRow(reader.readLine(), csvSep); + // validating read file + validator.validate(Set.of(headline), entityClass); + // sanity check for headline if (!Arrays.asList(headline).contains("uuid")) { throw new SourceException( diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index d7f293f0f..81d40e0bb 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -162,6 +162,9 @@ protected Stream> buildStreamWithFieldsToAttributesMap() { try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); + // validating read file + factory.validate(Set.of(headline), Pair.class); + // by default try-with-resources closes the reader directly when we leave this method (which // is wanted to avoid a lock on the file), but this causes a closing of the stream as well. // As we still want to consume the data at other places, we start a new stream instead of diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index c6affdb71..8e9996f8d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.source.csv; import edu.ie3.datamodel.io.naming.FileNamingStrategy; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.nio.file.Path; import java.util.Map; @@ -21,8 +22,8 @@ public CsvTimeSeriesMappingSource( } @Override - public Stream> getMappingSourceData() { + public Stream> getMappingSourceData(SourceValidator validator) { return dataSource.buildStreamWithFieldsToAttributesMap( - MappingEntry.class, dataSource.connector); + MappingEntry.class, dataSource.connector, validator); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java index 4b8d55604..1ad3d5e5d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java @@ -12,6 +12,7 @@ import edu.ie3.datamodel.io.factory.timeseries.*; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesSource; +import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries; import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.*; @@ -99,7 +100,11 @@ public CsvTimeSeriesSource( /* Read in the full time series */ try { this.timeSeries = - buildIndividualTimeSeries(timeSeriesUuid, filePath, this::createTimeBasedValue); + buildIndividualTimeSeries( + timeSeriesUuid, + filePath, + this::createTimeBasedValue, + (Class) valueClass); } catch (SourceException e) { throw new IllegalArgumentException( "Unable to obtain time series with UUID '" @@ -140,13 +145,14 @@ public Optional getValue(ZonedDateTime time) { protected IndividualTimeSeries buildIndividualTimeSeries( UUID timeSeriesUuid, Path filePath, - Function, Try, FactoryException>> fieldToValueFunction) + Function, Try, FactoryException>> fieldToValueFunction, + Class entityClass) throws SourceException { try (BufferedReader reader = dataSource.connector.initReader(filePath)) { Try>, FailureException> timeBasedValues = Try.scanStream( dataSource - .buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) + .buildStreamWithFieldsToAttributesMap(entityClass, reader, valueFactory) .map(fieldToValueFunction), "TimeBasedValue"); return new IndividualTimeSeries<>( diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index 1997edbd1..6ece1f5c6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -179,6 +179,9 @@ private Stream> buildStreamWithFieldsToAttributesMap( try (BufferedReader reader = bufferedReader) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); + // validating read file + weatherFactory.validate(Set.of(headline), WeatherValue.class); + // by default try-with-resources closes the reader directly when we leave this method (which // is wanted to avoid a lock on the file), but this causes a closing of the stream as well. // As we still want to consume the data at other places, we start a new stream instead of diff --git a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java index de3269b61..cd769fc26 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java @@ -159,8 +159,7 @@ private Stream>> optTimeBasedValueStream( fieldToValue.entrySet().stream() .collect( Collectors.toMap( - entry -> - StringUtils.snakeCaseToCamelCase(entry.getKey()).toLowerCase(), + entry -> StringUtils.snakeCaseToCamelCase(entry.getKey()), Map.Entry::getValue)); /* Add a random UUID if necessary */ diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java index 9cd4e413f..ce1338158 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.util.StringUtils; import java.sql.PreparedStatement; @@ -35,6 +36,28 @@ public SqlDataSource( this.databaseNamingStrategy = databaseNamingStrategy; } + /** + * This method should be used to validate a given table. + * + * @param tableName name of the table + * @param entityClass class of the entity + * @param validator for validation + * @throws SQLException – if the connection could not be established + */ + protected void validateDBTable(String tableName, Class entityClass, SourceValidator validator) + throws SQLException { + ResultSet rs = connector.getConnection().getMetaData().getColumns(null, null, tableName, null); + + Set columnNames = new HashSet<>(); + + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + columnNames.add(StringUtils.snakeCaseToCamelCase(name)); + } + + validator.validate(columnNames, entityClass); + } + /** * Creates a base query string without closing semicolon of the following pattern:
* {@code SELECT * FROM .} @@ -109,7 +132,8 @@ protected List getDbTables(String schemaPattern, String tableNamePattern } @Override - public Stream> getSourceData(Class entityClass) { + public Stream> getSourceData( + Class entityClass, SourceValidator validator) { String explicitTableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); return buildStreamByTableName(explicitTableName); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index 9736d8beb..fd2ec84e8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -17,6 +17,7 @@ import edu.ie3.util.geo.GeoUtils; import java.sql.Array; import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.*; import javax.measure.quantity.Length; import org.apache.commons.lang3.tuple.Pair; @@ -45,7 +46,8 @@ public class SqlIdCoordinateSource implements IdCoordinateSource { private final SqlIdCoordinateFactory factory; public SqlIdCoordinateSource( - SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) { + SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) + throws SQLException { this.factory = factory; this.dataSource = dataSource; @@ -53,6 +55,9 @@ public SqlIdCoordinateSource( String dbPointColumnName = dataSource.getDbColumnName(factory.getCoordinateField(), coordinateTableName); + // validating table + dataSource.validateDBTable(coordinateTableName, Pair.class, factory); + // setup queries this.basicQuery = createBaseQueryString(dataSource.schemaName, coordinateTableName); this.queryForPoint = createQueryForPoint(dbIdColumnName); @@ -76,7 +81,8 @@ public SqlIdCoordinateSource( SqlConnector connector, String schemaName, String coordinateTableName, - SqlIdCoordinateFactory factory) { + SqlIdCoordinateFactory factory) + throws SQLException { this( factory, coordinateTableName, diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java index 65f65f436..7f952d4e4 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java @@ -7,16 +7,20 @@ import static edu.ie3.datamodel.io.source.sql.SqlDataSource.createBaseQueryString; +import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; +import java.sql.SQLException; import java.util.Map; import java.util.stream.Stream; public class SqlTimeSeriesMappingSource extends TimeSeriesMappingSource { private final EntityPersistenceNamingStrategy entityPersistenceNamingStrategy; private final String queryFull; + private final String tableName; private final SqlDataSource dataSource; public SqlTimeSeriesMappingSource( @@ -28,13 +32,19 @@ public SqlTimeSeriesMappingSource( connector, schemaName, new DatabaseNamingStrategy(entityPersistenceNamingStrategy)); this.entityPersistenceNamingStrategy = entityPersistenceNamingStrategy; - final String tableName = + this.tableName = entityPersistenceNamingStrategy.getEntityName(MappingEntry.class).orElseThrow(); this.queryFull = createBaseQueryString(schemaName, tableName); } @Override - public Stream> getMappingSourceData() { + public Stream> getMappingSourceData(SourceValidator validator) { + try { + dataSource.validateDBTable(tableName, TimeSeriesMappingSource.class, validator); + } catch (SQLException e) { + throw new FactoryException(e); + } + return dataSource.executeQuery(queryFull); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java index 126aefae5..3784d13c8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java @@ -19,6 +19,7 @@ import edu.ie3.datamodel.models.value.Value; import edu.ie3.datamodel.utils.TimeSeriesUtils; import edu.ie3.util.interval.ClosedInterval; +import java.sql.SQLException; import java.sql.Timestamp; import java.time.ZonedDateTime; import java.util.*; @@ -50,7 +51,8 @@ public SqlTimeSeriesSource( SqlDataSource sqlDataSource, UUID timeSeriesUuid, Class valueClass, - TimeBasedSimpleValueFactory factory) { + TimeBasedSimpleValueFactory factory) + throws SQLException { super(valueClass, factory); this.dataSource = sqlDataSource; @@ -63,6 +65,8 @@ public SqlTimeSeriesSource( final String tableName = sqlDataSource.databaseNamingStrategy.getTimeSeriesEntityName(columnScheme); + dataSource.validateDBTable(tableName, valueClass, factory); + String dbTimeColumnName = sqlDataSource.getDbColumnName(factory.getTimeFieldString(), tableName); @@ -88,7 +92,8 @@ public SqlTimeSeriesSource( DatabaseNamingStrategy namingStrategy, UUID timeSeriesUuid, Class valueClass, - TimeBasedSimpleValueFactory factory) { + TimeBasedSimpleValueFactory factory) + throws SQLException { this( new SqlDataSource(connector, schemaName, namingStrategy), timeSeriesUuid, @@ -113,7 +118,7 @@ public static SqlTimeSeriesSource createSource( DatabaseNamingStrategy namingStrategy, IndividualTimeSeriesMetaInformation metaInformation, String timePattern) - throws SourceException { + throws SourceException, SQLException { if (!TimeSeriesUtils.isSchemeAccepted(metaInformation.getColumnScheme())) throw new SourceException( "Unsupported column scheme '" + metaInformation.getColumnScheme() + "'."); @@ -130,7 +135,8 @@ private static SqlTimeSeriesSource create( DatabaseNamingStrategy namingStrategy, UUID timeSeriesUuid, Class valClass, - String timePattern) { + String timePattern) + throws SQLException { TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass, timePattern); return new SqlTimeSeriesSource<>( diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy index 424ad10ec..10395b2c8 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy @@ -274,31 +274,34 @@ class AssetInputEntityFactoryTest extends Specification implements FactoryTestHe } } - def "An AssetInputFactory should throw an exception on invalid or incomplete data "() { - given: "a system participant input type factory and model data" + def "An AssetInputFactory should throw an exception on invalid or incomplete fields"() { + given: def inputFactory = new TestAssetInputFactory() - Map parameter = [ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", - "operatesuntil": "2019-12-31T00:00:00+01:00[Europe/Berlin]" - ] - def inputClass = TestAssetInput + def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until") when: - Try input = inputFactory.get(new AssetInputEntityData(parameter, inputClass)) + Try input = Try.of(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) then: input.failure - input.exception.get().cause.message == - "The provided fields [operatesfrom, operatesuntil, uuid] with data \n" + - "{operatesfrom -> 2019-01-01T00:00:00+01:00[Europe/Berlin],\n" + - "operatesuntil -> 2019-12-31T00:00:00+01:00[Europe/Berlin],\n" + - "uuid -> 91ec3bcf-1777-4d38-af67-0bf7c9fa73c7} are invalid for instance of TestAssetInput. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'TestAssetInput' are possible (NOT case-sensitive!):\n" + - "0: [id, uuid]\n" + - "1: [id, operatesfrom, uuid]\n" + - "2: [id, operatesuntil, uuid]\n" + - "3: [id, operatesfrom, operatesuntil, uuid]\n" + input.exception.get().message == "The provided fields [operates_from, operates_until, uuid] are invalid for instance of TestAssetInput. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'TestAssetInput' are possible (NOT case-sensitive!):\n" + + "0: [id, uuid] or [id, uuid]\n" + + "1: [id, operates_from, uuid] or [id, operatesFrom, uuid]\n" + + "2: [id, operates_until, uuid] or [id, operatesUntil, uuid]\n" + + "3: [id, operates_from, operates_until, uuid] or [id, operatesFrom, operatesUntil, uuid]\n" + } + + def "An AssetInputFactory should allow additional fields"() { + given: + def inputFactory = new TestAssetInputFactory() + def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until", "id", "additional_field") + + when: + Try input = Try.of(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) + + then: + input.success } private static class TestAssetInput extends AssetInput { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy index 1c12b1e27..c357481f1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.factory.input import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.exceptions.TryException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput @@ -85,10 +86,12 @@ class Transformer2WInputFactoryTest extends Specification implements FactoryTest def typeInput = Mock(Transformer2WTypeInput) when: - inputFactory.get(new TypedConnectorInputEntityData(parameter, inputClass, operatorInput, nodeInputA, nodeInputB, typeInput)) + Try input = inputFactory.get(new TypedConnectorInputEntityData(parameter, inputClass, operatorInput, nodeInputA, nodeInputB, typeInput)) then: - def e = thrown(IllegalArgumentException) - e.message == "nodeA must be on the higher voltage side of the transformer" + input.failure + def e = input.exception.get() + e.cause.class == IllegalArgumentException + e.cause.message == "nodeA must be on the higher voltage side of the transformer" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy index f518207c2..4c74bf061 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy @@ -9,6 +9,7 @@ import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput +import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.Transformer3WInput import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput import edu.ie3.datamodel.utils.Try @@ -79,11 +80,13 @@ class Transformer3WInputFactoryTest extends Specification implements FactoryTes def typeInput = Mock(Transformer3WTypeInput) when: - inputFactory.get(new Transformer3WInputEntityData(parameter, inputClass, nodeInputA, nodeInputB, nodeInputC, typeInput)) + Try input = inputFactory.get(new Transformer3WInputEntityData(parameter, inputClass, nodeInputA, nodeInputB, nodeInputC, typeInput)) then: - def e = thrown(IllegalArgumentException) - e.message == "Voltage level of node a must be greater than voltage level of node b and voltage level of node b must be greater than voltage level of node c" + input.failure + def e = input.exception.get() + e.cause.class == IllegalArgumentException + e.cause.message == "Voltage level of node a must be greater than voltage level of node b and voltage level of node b must be greater than voltage level of node c" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy index 4f3412e23..50ea280f1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy @@ -139,6 +139,6 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { then: input.failure - input.exception.get().cause.message == "Exception while trying to parse field \"locationtype\" with supposed int value \"-- invalid --\"" + input.exception.get().cause.message == "Exception while trying to parse field \"locationType\" with supposed int value \"-- invalid --\"" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index fa7184b4b..e7a46b0c8 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -73,32 +73,21 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe } } - def "A FixedFeedInInputFactory should throw an exception on invalid or incomplete data (parameter missing)"() { - given: "a system participant input type factory and model data" + def "A FixedFeedInInputFactory should throw an exception on invalid or incomplete data fields"() { + given: def inputFactory = new FixedFeedInInputFactory() - Map parameter = [ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "TestID", - "srated" : "3", - "cosphirated": "4" - ] - def inputClass = FixedFeedInInput - def nodeInput = Mock(NodeInput) + def foundFields = inputFactory.newSet("uuid", "id", "s_rated", "cosphi_rated") when: - Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) + Try input = Try.of(() -> inputFactory.validate(foundFields, FixedFeedInInput), FactoryException) then: input.failure - input.exception.get().cause.message == "The provided fields [cosphirated, id, srated, uuid] with data \n" + - "{cosphirated -> 4,\n" + - "id -> TestID,\n" + - "srated -> 3,\n" + - "uuid -> 91ec3bcf-1777-4d38-af67-0bf7c9fa73c7} are invalid for instance of FixedFeedInInput. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" + - "0: [cosphirated, id, qcharacteristics, srated, uuid]\n" + - "1: [cosphirated, id, operatesfrom, qcharacteristics, srated, uuid]\n" + - "2: [cosphirated, id, operatesuntil, qcharacteristics, srated, uuid]\n" + - "3: [cosphirated, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" + input.exception.get().message == "The provided fields [cosphi_rated, id, s_rated, uuid] are invalid for instance of FixedFeedInInput. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" + + "0: [cos_phi_rated, id, q_characteristics, s_rated, uuid] or [cosPhiRated, id, qCharacteristics, sRated, uuid]\n" + + "1: [cos_phi_rated, id, operates_from, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesFrom, qCharacteristics, sRated, uuid]\n" + + "2: [cos_phi_rated, id, operates_until, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesUntil, qCharacteristics, sRated, uuid]\n" + + "3: [cos_phi_rated, id, operates_from, operates_until, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy index c46eabaea..b9bfa7709 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy @@ -53,25 +53,16 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH def "A FlexOptionsResultFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def resultFactory = new FlexOptionsResultFactory() - Map parameter = [ - "time" : "2020-01-30 17:26:44", - "inputModel": "91ec3bcf-1897-4d38-af67-0bf7c9fa73c7", - "pref" : "2", - "pmin" : "-1", - ] + def foundFields = resultFactory.newSet("time", "input_model", "p_ref", "p_min") when: - Try input = resultFactory.get(new SimpleEntityData(parameter, FlexOptionsResult)) + Try input = Try.of(() -> resultFactory.validate(foundFields, FlexOptionsResult), FactoryException) then: input.failure - input.exception.get().cause.message == "The provided fields [inputModel, pmin, pref, time] with data \n" + - "{inputModel -> 91ec3bcf-1897-4d38-af67-0bf7c9fa73c7,\n" + - "pmin -> -1,\n" + - "pref -> 2,\n" + - "time -> 2020-01-30 17:26:44} are invalid for instance of FlexOptionsResult. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FlexOptionsResult' are possible (NOT case-sensitive!):\n" + - "0: [inputModel, pmax, pmin, pref, time]\n" + - "1: [inputModel, pmax, pmin, pref, time, uuid]\n" + input.exception.get().message == "The provided fields [input_model, p_min, p_ref, time] are invalid for instance of FlexOptionsResult. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FlexOptionsResult' are possible (NOT case-sensitive!):\n" + + "0: [input_model, p_max, p_min, p_ref, time] or [inputModel, pMax, pMin, pRef, time]\n" + + "1: [input_model, p_max, p_min, p_ref, time, uuid] or [inputModel, pMax, pMin, pRef, time, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy index 9dbc4e294..2e6f50a85 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy @@ -51,23 +51,16 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { def "A NodeResultFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def resultFactory = new NodeResultFactory() - Map parameter = [ - "time" : "2020-01-30 17:26:44", - "inputModel": "91ec3bcf-1897-4d38-af67-0bf7c9fa73c7", - "vmag" : "2" - ] + def foundFields = resultFactory.newSet("time", "input_model", "v_mag") when: - Try input = resultFactory.get(new SimpleEntityData(parameter, NodeResult)) + Try input = Try.of(() -> resultFactory.validate(foundFields, NodeResult), FactoryException) then: input.failure - input.exception.get().cause.message == "The provided fields [inputModel, time, vmag] with data \n" + - "{inputModel -> 91ec3bcf-1897-4d38-af67-0bf7c9fa73c7,\n" + - "time -> 2020-01-30 17:26:44,\n" + - "vmag -> 2} are invalid for instance of NodeResult. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'NodeResult' are possible (NOT case-sensitive!):\n" + - "0: [inputModel, time, vang, vmag]\n" + - "1: [inputModel, time, uuid, vang, vmag]\n" + input.exception.get().message == "The provided fields [input_model, time, v_mag] are invalid for instance of NodeResult. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'NodeResult' are possible (NOT case-sensitive!):\n" + + "0: [input_model, time, v_ang, v_mag] or [inputModel, time, vAng, vMag]\n" + + "1: [input_model, time, uuid, v_ang, v_mag] or [inputModel, time, uuid, vAng, vMag]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy index 5ca875cda..947a5f5c5 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy @@ -127,23 +127,17 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor def "A SystemParticipantResultFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def resultFactory = new SystemParticipantResultFactory() - Map parameter = [ - "time" : "2020-01-30 17:26:44", - "inputModel": "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "q" : "2" - ] + def foundFields = resultFactory.newSet("time", "input_model", "q") + when: - Try result = resultFactory.get(new SimpleEntityData(parameter, WecResult)) + Try result = Try.of(() -> resultFactory.validate(foundFields, WecResult), FactoryException) then: result.failure - result.exception.get().cause.message == "The provided fields [inputModel, q, time] with data \n" + - "{inputModel -> 91ec3bcf-1777-4d38-af67-0bf7c9fa73c7,\n" + - "q -> 2,\n" + - "time -> 2020-01-30 17:26:44} are invalid for instance of WecResult. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'WecResult' are possible (NOT case-sensitive!):\n" + - "0: [inputModel, p, q, time]\n" + - "1: [inputModel, p, q, time, uuid]\n" + result.exception.get().message == "The provided fields [input_model, q, time] are invalid for instance of WecResult. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'WecResult' are possible (NOT case-sensitive!):\n" + + "0: [input_model, p, q, time] or [inputModel, p, q, time]\n" + + "1: [input_model, p, q, time, uuid] or [inputModel, p, q, time, uuid]\n" } def "A SystemParticipantResultFactory should be performant"() { @@ -162,7 +156,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor resultFactory.get(new SimpleEntityData(parameter, StorageResult)) } BigDecimal elapsedTime = (System - .currentTimeMillis() - startTime) / 1000.0 + .currentTimeMillis() - startTime) / 1000.0 elapsedTime < 2 } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy index 117999ce4..ad189ae73 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy @@ -5,7 +5,9 @@ */ package edu.ie3.datamodel.io.factory.timeseries +import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.SimpleFactoryData +import edu.ie3.datamodel.utils.Try import edu.ie3.util.geo.GeoUtils import org.apache.commons.lang3.tuple.Pair import org.locationtech.jts.geom.Point @@ -25,27 +27,14 @@ class CosmoIdCoordinateFactoryTest extends Specification { def expectedFields = [ "tid", "id", - "latrot", - "longrot", - "latgeo", - "longgeo" + "latRot", + "longRot", + "latGeo", + "longGeo" ] as Set - Map parameter = [ - "tid": "1", - "id": "106580", - "latgeo": "39.602772", - "longgeo": "1.279336", - "latrot": "-10", - "longrot": "-6.8125" - ] - - - def validSimpleFactoryData = new SimpleFactoryData(parameter, Pair) - - when: - def actual = factory.getFields(validSimpleFactoryData) + def actual = factory.getFields(Pair) then: actual.size() == 1 @@ -54,22 +43,16 @@ class CosmoIdCoordinateFactoryTest extends Specification { def "A COSMO id to coordinate factory refuses to build from invalid data"() { given: - Map parameter = [ - "tid": "1", - "id": "106580", - "latrot": "-10", - "longrot": "-6.8125" - ] - - def invalidSimpleFactoryData = new SimpleFactoryData(parameter, Pair) + def foundFields = factory.newSet("tid", "id", "latrot", "longrot") when: - def actual = factory.get(invalidSimpleFactoryData) + def actual = Try.of(() -> factory.validate(foundFields, Pair), FactoryException) then: actual.failure - actual.exception.get().cause.message.startsWith("The provided fields [id, latrot, longrot, tid] with data \n{id -> 106580,\nlatrot" + - " -> -10,\nlongrot -> -6.8125,\ntid -> 1} are invalid for instance of Pair.") + actual.exception.get().message == "The provided fields [id, latrot, longrot, tid] are invalid for instance of Pair. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + + "0: [id, lat_geo, lat_rot, long_geo, long_rot, tid] or [id, latGeo, latRot, longGeo, longRot, tid]\n" } def "A COSMO id to coordinate factory builds model from valid data"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index b40b44387..a38901edd 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -5,7 +5,9 @@ */ package edu.ie3.datamodel.io.factory.timeseries +import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.SimpleFactoryData +import edu.ie3.datamodel.utils.Try import edu.ie3.util.geo.GeoUtils import org.apache.commons.lang3.tuple.Pair import org.locationtech.jts.geom.Point @@ -26,18 +28,11 @@ class IconIdCoordinateFactoryTest extends Specification { "id", "latitude", "longitude", - "coordinatetype" + "coordinateType" ] as Set - Map parameter = [ - "id":"477295", - "latitude":"52.312", - "longitude":"12.812", - "coordinatetype":"ICON"] - - def validSimpleFactoryData = new SimpleFactoryData(parameter, Pair) when: - def actual = factory.getFields(validSimpleFactoryData) + def actual = factory.getFields(Pair) then: actual.size() == 1 @@ -46,20 +41,16 @@ class IconIdCoordinateFactoryTest extends Specification { def "A COSMO id to coordinate factory refuses to build from invalid data"() { given: - Map parameter = [ - "id":"477295", - "latitude":"52.312", - "coordinatetype":"ICON"] - - def invalidSimpleFactoryData = new SimpleFactoryData(parameter, Pair) + def foundFields = factory.newSet("id", "latitude", "coordinatetype") when: - def actual = factory.get(invalidSimpleFactoryData) + def actual = Try.of(() -> factory.validate(foundFields, Pair), FactoryException) then: actual.failure - actual.exception.get().cause.message.startsWith("The provided fields [coordinatetype, id, latitude] with data \n{coordinatetype -> " + - "ICON,\nid -> 477295,\nlatitude -> 52.312} are invalid for instance of Pair. ") + actual.exception.get().message == "The provided fields [coordinatetype, id, latitude] are invalid for instance of Pair. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + + "0: [coordinate_type, id, latitude, longitude] or [coordinateType, id, latitude, longitude]\n" } def "A COSMO id to coordinate factory builds model from valid data"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy index a91436c4e..e3169fc9e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy @@ -34,7 +34,7 @@ class TimeBasedSimpleValueFactoryTest extends Specification { data.targetClass >> valueClass expect: - factory.getFields(data) == expectedFields + factory.getFields(data.targetClass) == expectedFields where: valueClass || expectedFields @@ -93,7 +93,7 @@ class TimeBasedSimpleValueFactoryTest extends Specification { data.targetClass >> NodeInput when: - factory.getFields(data) + factory.getFields(data.targetClass) then: def e = thrown(FactoryException) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index b5f40c2ac..7e44fc75c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -280,40 +280,15 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def "A SystemParticipantTypeInputFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def typeInputFactory = new SystemParticipantTypeInputFactory() - Map parameter = [ - "uuid": "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id": "blablub", - "capex": "3", - "opex": "4", - "srated": "5", - "cosPhiRated": "6", - "estorage": "6", - "pmin": "7", - "pmax": "8", - "eta": "9", - "dod": "10", - "lifetime": "11" - ] + def foundFields = typeInputFactory.newSet("uuid", "id", "capex", "opex", "srated", "cosPhiRated", "estorage", "pmin", "pmax", "eta", "dod", "lifetime",) when: - Try input = typeInputFactory.get(new SimpleEntityData(parameter, StorageTypeInput)) + def input = Try.of(() -> typeInputFactory.validate(foundFields, StorageTypeInput), FactoryException) then: input.failure - input.exception.get().cause.message == "The provided fields [capex, cosPhiRated, dod, estorage, eta, id, lifetime, opex, pmax, pmin, srated, uuid] with data \n" + - "{capex -> 3,\n" + - "cosPhiRated -> 6,\n" + - "dod -> 10,\n" + - "estorage -> 6,\n" + - "eta -> 9,\n" + - "id -> blablub,\n" + - "lifetime -> 11,\n" + - "opex -> 4,\n" + - "pmax -> 8,\n" + - "pmin -> 7,\n" + - "srated -> 5,\n" + - "uuid -> 91ec3bcf-1777-4d38-af67-0bf7c9fa73c7} are invalid for instance of StorageTypeInput. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'StorageTypeInput' are possible (NOT case-sensitive!):\n" + - "0: [activepowergradient, capex, cosphirated, dod, estorage, eta, id, lifecycle, lifetime, opex, pmax, srated, uuid]\n" + input.exception.get().message == "The provided fields [capex, cosPhiRated, dod, estorage, eta, id, lifetime, opex, pmax, pmin, srated, uuid] are invalid for instance of StorageTypeInput. \n" + + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'StorageTypeInput' are possible (NOT case-sensitive!):\n" + + "0: [active_power_gradient, capex, cos_phi_rated, dod, e_storage, eta, id, life_cycle, life_time, opex, p_max, s_rated, uuid] or [activePowerGradient, capex, cosPhiRated, dod, eStorage, eta, id, lifeCycle, lifeTime, opex, pMax, sRated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy index de1857954..3dbf7940c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy @@ -35,7 +35,7 @@ class CsvTimeSeriesSourceIT extends Specification implements CsvTestDataMeta { def filePath = Path.of("file/not/found.csv") when: - source.buildIndividualTimeSeries(UUID.fromString("fbc59b5b-9307-4fb4-a406-c1f08f26fee5"), filePath, { null }) + source.buildIndividualTimeSeries(UUID.fromString("fbc59b5b-9307-4fb4-a406-c1f08f26fee5"), filePath, { null }, null) then: def ex = thrown(SourceException) @@ -49,7 +49,7 @@ class CsvTimeSeriesSourceIT extends Specification implements CsvTestDataMeta { def tsUuid = UUID.fromString("76c9d846-797c-4f07-b7ec-2245f679f5c7") when: - def actual = source.buildIndividualTimeSeries(tsUuid, filePath, { source.createTimeBasedValue(it) }) + def actual = source.buildIndividualTimeSeries(tsUuid, filePath, { source.createTimeBasedValue(it) }, HeatAndPValue) then: noExceptionThrown() diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceCosmoTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceCosmoTest.groovy index 25fc33d40..e4873c75e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceCosmoTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceCosmoTest.groovy @@ -120,12 +120,12 @@ class CsvWeatherSourceCosmoTest extends Specification implements CsvTestDataMeta def fieldToValues = [ "uuid" : "71a79f59-eebf-40c1-8358-ba7414077d57", "time" : "2020-10-16T12:40:42Z", - "coordinateid" : "5", - "directirradiance" : "1.234", - "diffuseirradiance": "5.678", + "coordinateId" : "5", + "directIrradiance" : "1.234", + "diffuseIrradiance": "5.678", "temperature" : "9.1011", - "windvelocity" : "12.1314", - "winddirection" : "15.1617" + "windVelocity" : "12.1314", + "windDirection" : "15.1617" ] def expectedValue = new TimeBasedValue( UUID.fromString("71a79f59-eebf-40c1-8358-ba7414077d57"), diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/evcs_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/evcs_input.csv index b9ddc711d..cf9538fba 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/evcs_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/evcs_input.csv @@ -1,3 +1,3 @@ -"uuid","cos_phi_rated","id","node","operates_from","operates_until","operator","q_characteristics","chargingpoints","type","location_type","v2gSupport" +"uuid","cos_phi_rated","id","node","operates_from","operates_until","operator","q_characteristics","charging_points","type","location_type","v2gSupport" 06a14909-366e-4e94-a593-1016e1455b30,0.9,test_evcs_1,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,cosPhiFixed:{(0.00,1.0)},4,ChargingStationType1,HOME,false 104acdaa-5dc5-4197-aed2-2fddb3c4f237,0.9,test_evcs_2,ed4697fd-016c-40c2-a66b-e793878dadea,,,,cosPhiFixed:{(0.00,1.0)},4,ChargingStationType1,HOME,false \ No newline at end of file diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/fixed_feed_in_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/fixed_feed_in_input.csv index 0cf4a3ec4..b96a7bb37 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/fixed_feed_in_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/fixed_feed_in_input.csv @@ -1,2 +1,2 @@ -uuid,cosphi_rated,id,node,operates_from,operates_until,operator,q_characteristics,s_rated +uuid,cos_phi_rated,id,node,operates_from,operates_until,operator,q_characteristics,s_rated 717af017-cc69-406f-b452-e022d7fb516a,0.95,test_fixedFeedInInput,4ca90220-74c2-4369-9afa-a18bf068840d,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,"cosPhiFixed:{(0.00,0.95)}",25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/load_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/load_input.csv index d961a158b..c35f3fe6a 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/load_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/load_input.csv @@ -1,2 +1,2 @@ -uuid,cosphi_rated,dsm,e_cons_annual,id,node,operates_from,operates_until,operator,q_characteristics,s_rated,load_profile +uuid,cos_phi_rated,dsm,e_cons_annual,id,node,operates_from,operates_until,operator,q_characteristics,s_rated,load_profile eaf77f7e-9001-479f-94ca-7fb657766f5f,0.95,false,4000.0,test_loadInput,4ca90220-74c2-4369-9afa-a18bf068840d,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,"cosPhiFixed:{(0.00,0.95)}",25.0,h0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/pv_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/pv_input.csv index 70b1881a7..795d9a173 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/pv_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/pv_input.csv @@ -1,2 +1,2 @@ -uuid,albedo,azimuth,cosphi_rated,eta_conv,elevation_angle,id,k_g,k_t,market_reaction,node,operates_from,operates_until,operator,q_characteristics,s_rated +uuid,albedo,azimuth,cos_phi_rated,eta_conv,elevation_angle,id,k_g,k_t,market_reaction,node,operates_from,operates_until,operator,q_characteristics,s_rated d56f15b7-8293-4b98-b5bd-58f6273ce229,0.20000000298023224,-8.926613807678223,0.95,98.0,41.01871871948242,test_pvInput,0.8999999761581421,1.0,false,4ca90220-74c2-4369-9afa-a18bf068840d,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,"cosPhiFixed:{(0.00,0.95)}",25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/time_series_mapping.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/time_series_mapping.csv index e03b276ad..565fcf11c 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/time_series_mapping.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/time_series_mapping.csv @@ -1,4 +1,4 @@ -"uuid";"participant";"time_series" -"58167015-d760-4f90-8109-f2ebd94cda91";"b86e95b0-e579-4a80-a534-37c7a470a409";"67600124-2475-4a62-a410-0dd6eabb9441" -"9a9ebfda-dc26-4a40-b9ca-25cd42f6cc3f";"c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8";"05a25fe7-11e5-4732-92b0-490cec171c78" -"9c1c53ea-e575-41a2-a373-a8b2d3ed2c39";"90a96daa-012b-4fea-82dc-24ba7a7ab81c";"05a25fe7-11e5-4732-92b0-490cec171c78" \ No newline at end of file +"uuid","participant","time_series" +"58167015-d760-4f90-8109-f2ebd94cda91","b86e95b0-e579-4a80-a534-37c7a470a409","67600124-2475-4a62-a410-0dd6eabb9441" +"9a9ebfda-dc26-4a40-b9ca-25cd42f6cc3f","c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8","05a25fe7-11e5-4732-92b0-490cec171c78" +"9c1c53ea-e575-41a2-a373-a8b2d3ed2c39","90a96daa-012b-4fea-82dc-24ba7a7ab81c","05a25fe7-11e5-4732-92b0-490cec171c78" \ No newline at end of file diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_results/thermal_house_res.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_results/thermal_house_res.csv index 19d5398ac..9b92587d4 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_results/thermal_house_res.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_results/thermal_house_res.csv @@ -1 +1 @@ -uuid,inputModel,qDot,indoorTemperature \ No newline at end of file +uuid,inputModel,qDot,indoorTemperature,time \ No newline at end of file diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/bm_type_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/bm_type_input.csv index 742bbfb0e..e00adbd76 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/bm_type_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/bm_type_input.csv @@ -1,2 +1,2 @@ -uuid,active_power_gradient,capex,cosphi_rated,eta_conv,id,opex,s_rated +uuid,active_power_gradient,capex,cos_phi_rated,eta_conv,id,opex,s_rated 5ebd8f7e-dedb-4017-bb86-6373c4b68eb8,25.0,100.0,0.95,98.0,test_bmTypeInput,50.0,25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/chp_type_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/chp_type_input.csv index 4e19b862a..416890a66 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/chp_type_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/chp_type_input.csv @@ -1,2 +1,2 @@ -uuid,capex,cosphi_rated,eta_el,eta_thermal,id,opex,p_own,p_thermal,s_rated +uuid,capex,cos_phi_rated,eta_el,eta_thermal,id,opex,p_own,p_thermal,s_rated 5ebd8f7e-dedb-4017-bb86-6373c4b68eb8,100.0,0.95,19.0,76.0,test_chpType,50.0,0.0,9.0,25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/ev_type_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/ev_type_input.csv index ab07e35fa..b27fe828c 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/ev_type_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/ev_type_input.csv @@ -1,2 +1,2 @@ -uuid,capex,cosphi_rated,e_cons,e_storage,id,opex,s_rated +uuid,capex,cos_phi_rated,e_cons,e_storage,id,opex,s_rated 5ebd8f7e-dedb-4017-bb86-6373c4b68eb8,100.0,0.95,5.0,100.0,test_evTypeInput,50.0,25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/hp_type_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/hp_type_input.csv index 6f943036a..d41d6d38c 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/hp_type_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/hp_type_input.csv @@ -1,2 +1,2 @@ -uuid,capex,cosphi_rated,id,opex,p_thermal,s_rated +uuid,capex,cos_phi_rated,id,opex,p_thermal,s_rated 5ebd8f7e-dedb-4017-bb86-6373c4b68eb8,100.0,0.95,test_hpTypeInput,50.0,9.0,25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/storage_type_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/storage_type_input.csv index 1c437b952..4497b6159 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/storage_type_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/storage_type_input.csv @@ -1,2 +1,2 @@ -uuid,active_power_gradient,capex,cosphi_rated,dod,e_storage,eta,id,life_cycle,life_time,opex,p_max,s_rated +uuid,active_power_gradient,capex,cos_phi_rated,dod,e_storage,eta,id,life_cycle,life_time,opex,p_max,s_rated 5ebd8f7e-dedb-4017-bb86-6373c4b68eb8,100.0,100.0,0.95,10.0,100.0,95.0,test_storageTypeInput,100,175316.4,50.0,15.0,25.0 diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/wec_type_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/wec_type_input.csv index 43184d4e0..0fdac436e 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/wec_type_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_types/wec_type_input.csv @@ -1,2 +1,2 @@ -uuid,capex,cosphi_rated,cp_characteristic,eta_conv,hub_height,id,opex,rotor_area,s_rated +uuid,capex,cos_phi_rated,cp_characteristic,eta_conv,hub_height,id,opex,rotor_area,s_rated 5ebd8f7e-dedb-4017-bb86-6373c4b68eb8,100.0,0.95,"cP:{(10.00,0.05),(15.00,0.10),(20.00,0.20)}",98.0,200.0,test_wecType,50.0,20.0,25.0 From 065e15b2268ae3f3e4c5c2a54dc007ae9554de57 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 13 Nov 2023 15:27:55 +0100 Subject: [PATCH 008/228] Some improvements. --- .../io/connectors/CouchbaseConnector.java | 32 +++++++++ .../io/connectors/InfluxDbConnector.java | 23 +++++++ .../datamodel/io/connectors/SqlConnector.java | 23 +++++++ .../edu/ie3/datamodel/io/factory/Factory.java | 66 ++++--------------- .../CosmoTimeBasedWeatherValueFactory.java | 6 +- .../IconTimeBasedWeatherValueFactory.java | 14 ++-- .../couchbase/CouchbaseWeatherSource.java | 2 + .../influxdb/InfluxDbWeatherSource.java | 4 +- .../io/source/sql/SqlDataSource.java | 24 +------ .../io/source/sql/SqlIdCoordinateSource.java | 2 +- .../sql/SqlTimeSeriesMappingSource.java | 2 +- .../io/source/sql/SqlTimeSeriesSource.java | 2 +- .../io/source/sql/SqlWeatherSource.java | 5 +- .../CosmoIdCoordinateFactoryTest.groovy | 8 +-- ...smoTimeBasedWeatherValueFactoryTest.groovy | 16 ++--- .../IconIdCoordinateFactoryTest.groovy | 2 +- .../TimeBasedSimpleValueFactoryTest.groovy | 6 +- 17 files changed, 127 insertions(+), 110 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java index 196a3beef..99230558e 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java @@ -9,10 +9,15 @@ import com.couchbase.client.java.AsyncCollection; import com.couchbase.client.java.Cluster; import com.couchbase.client.java.Collection; +import com.couchbase.client.java.json.JsonObject; import com.couchbase.client.java.kv.GetResult; import com.couchbase.client.java.kv.MutationResult; import com.couchbase.client.java.query.QueryResult; +import edu.ie3.datamodel.io.source.SourceValidator; +import java.time.Duration; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.CompletableFuture; /** @@ -36,6 +41,33 @@ public CouchbaseConnector(String url, String bucketName, String username, String cluster = Cluster.connect(url, username, password); } + /** + * This method should be used to validate a given couchbaseDb. + * + * @param entityClass class of the entity + * @param validator for validation + */ + @SuppressWarnings("unchecked") + public final void validateDb(Class entityClass, SourceValidator validator) { + String query = + "SELECT ARRAY_DISTINCT(ARRAY_AGG(v)) AS column FROM " + + bucketName + + " b UNNEST OBJECT_NAMES(b) AS v"; + cluster.bucket(bucketName).waitUntilReady(Duration.ofSeconds(30)); + + QueryResult queryResult = query(query).join(); + JsonObject jsonObject = queryResult.rowsAsObject().get(0); + Object columns = jsonObject.toMap().get("column"); + + Set set = new HashSet<>(); + + if (columns != null) { + set.addAll((List) columns); + } + + validator.validate(set, entityClass); + } + /** * Return the couchbase java sdk equivalent of a session - a collection - to the previously set * bucket diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java index 685e16614..bd1b700cc 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.connectors; +import edu.ie3.datamodel.io.source.SourceValidator; import java.util.*; import java.util.function.BinaryOperator; import java.util.stream.Collectors; @@ -38,6 +39,7 @@ public class InfluxDbConnector implements DataConnector { return maps; }; + private final String databaseName; private final String scenarioName; private final InfluxDB session; @@ -77,6 +79,7 @@ public InfluxDbConnector( */ public InfluxDbConnector( InfluxDB session, String scenarioName, String databaseName, boolean createDb) { + this.databaseName = databaseName; this.scenarioName = scenarioName; this.session = session; @@ -107,6 +110,26 @@ public InfluxDbConnector(String url, String databaseName) { this(url, databaseName, NO_SCENARIO, true, InfluxDB.LogLevel.NONE, BatchOptions.DEFAULTS); } + /** + * This method should be used to validate a given {@link InfluxDB}. + * + * @param entityClass class of the entity + * @param validator for validation + */ + public final void validateDb(Class entityClass, SourceValidator validator) { + QueryResult tagKeys = session.query(new Query("SHOW TAG KEYS ON " + databaseName)); + Map>> tagResults = parseQueryResult(tagKeys); + + QueryResult fieldKeys = session.query(new Query("SHOW FIELD KEYS ON " + databaseName)); + Map>> fieldResults = parseQueryResult(fieldKeys); + + Set set = new HashSet<>(); + tagResults.values().forEach(v -> v.stream().map(m -> m.get("tagKey")).forEach(set::add)); + fieldResults.values().forEach(v -> v.stream().map(m -> m.get("fieldKey")).forEach(set::add)); + + validator.validate(set, entityClass); + } + /** * Create the database of this connector if it doesn't exist yet * diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java index 8b13ec0d0..d88b4894e 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.connectors; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.util.StringUtils; import edu.ie3.util.TimeUtil; import java.sql.*; @@ -41,6 +42,28 @@ public SqlConnector(String jdbcUrl, String userName, String password) { connectionProps.put("password", password); } + /** + * This method should be used to validate a given sql table. + * + * @param tableName name of the table + * @param entityClass class of the entity + * @param validator for validation + * @throws SQLException – if the connection could not be established + */ + public void validateDBTable(String tableName, Class entityClass, SourceValidator validator) + throws SQLException { + ResultSet rs = getConnection().getMetaData().getColumns(null, null, tableName, null); + + Set columnNames = new HashSet<>(); + + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + columnNames.add(StringUtils.snakeCaseToCamelCase(name)); + } + + validator.validate(columnNames, entityClass); + } + /** * Executes the given query. For update queries please use {@link * SqlConnector#executeUpdate(String)}. diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index 1263cc5f2..e9e7a93f2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -109,7 +109,9 @@ private void isSupportedClass(Class desiredClass) { protected abstract List> getFields(Class entityClass); /** - * Method for validating the found fields. + * Method for validating the found fields. The found fields needs to fully contain at least one of the sets returned by {@link #getFields(Class)}. + * If the found fields don't contain all necessary fields, an {@link FactoryException} with a detail message is thrown. + * If the found fields contain more fields than necessary, these fields are ignored. * * @param foundFields that were found * @param entityClass of the build data @@ -146,58 +148,6 @@ public void validate(Set foundFields, Class entityClass) { } } - /** - * Validates the factory specific constructor parameters in two ways. 1) the biggest set of the - * provided field sets is compared against fields the class implements. If this test passes then - * we know for sure that the field names at least in the biggest constructor are equal to the - * provided factory strings 2) if 1) passes, the provided entity data (which is equal to the data - * e.g. read from the outside) is compared to all available constructor parameters provided by the - * fieldSets Array. If we find exactly one constructor, that matches the field names we can - * proceed. Otherwise a detailed exception message is thrown. - * - * @param data the entity containing at least the entity class as well a mapping of the provided - * field name strings to its value (e.g. a headline of a csv to column values) - * @param fieldSets a set containing all available constructor combinations as field names - * @return the index of the set in the fieldSets array that fits the provided entity data - */ - protected int validateParameters(D data, Set... fieldSets) { - Map fieldsToValues = data.getFieldsToValues(); - - // get all sets that match the fields to attributes - List> validFieldSets = - Arrays.stream(fieldSets).filter(x -> x.equals(fieldsToValues.keySet())).toList(); - - if (validFieldSets.size() == 1) { - // if we can identify a unique parameter set for a constructor, we take it and return the - // index - Set validFieldSet = validFieldSets.get(0); - return Arrays.asList(fieldSets).indexOf(validFieldSet); - } else { - // build the exception string with extensive debug information - String providedFieldMapString = - fieldsToValues.keySet().stream() - .map(key -> key + " -> " + fieldsToValues.get(key)) - .collect(Collectors.joining(",\n")); - - String providedKeysString = "[" + String.join(", ", fieldsToValues.keySet()) + "]"; - - String possibleOptions = getFieldsString(List.of(fieldSets)).toString(); - - throw new FactoryException( - "The provided fields " - + providedKeysString - + " with data \n{" - + providedFieldMapString - + "}" - + " are invalid for instance of " - + data.getTargetClass().getSimpleName() - + ". \nThe following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of '" - + data.getTargetClass().getSimpleName() - + "' are possible (NOT case-sensitive!):\n" - + possibleOptions); - } - } - protected static StringBuilder getFieldsString(List> fieldSets) { StringBuilder possibleOptions = new StringBuilder(); for (int i = 0; i < fieldSets.size(); i++) { @@ -243,15 +193,21 @@ protected TreeSet expandSet(Set attributeSet, String... more) { return newSet; } - private static Set toSnakeCase(Set set) { + protected static Set toSnakeCase(Set set) { TreeSet newSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); newSet.addAll(set.stream().map(StringUtils::camelCaseToSnakeCase).toList()); return newSet; } - private static Set toCamelCase(Set set) { + protected static Set toCamelCase(Set set) { TreeSet newSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); newSet.addAll(set.stream().map(StringUtils::snakeCaseToCamelCase).toList()); return newSet; } + + protected static Set toLowerCase(Set set) { + TreeSet newSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + newSet.addAll(set.stream().map(String::toLowerCase).toList()); + return newSet; + } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java index 1bce91906..21c61a9ec 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java @@ -12,7 +12,6 @@ import edu.ie3.util.quantities.PowerSystemUnits; import edu.ie3.util.quantities.interfaces.Irradiance; import java.time.ZonedDateTime; -import java.util.Collections; import java.util.List; import java.util.Set; import javax.measure.quantity.Angle; @@ -53,14 +52,13 @@ public String getTimeFieldString() { protected List> getFields(Class entityClass) { Set minConstructorParams = newSet( - UUID, - TIME, + COORDINATE_ID, DIFFUSE_IRRADIANCE, DIRECT_IRRADIANCE, TEMPERATURE, WIND_DIRECTION, WIND_VELOCITY); - return Collections.singletonList(minConstructorParams); + return List.of(minConstructorParams, toLowerCase(minConstructorParams)); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java index 20d8e5bef..e1b095116 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java @@ -56,12 +56,7 @@ public String getTimeFieldString() { protected List> getFields(Class entityClass) { Set minParameters = newSet( - TIME, - DIFFUSE_IRRADIANCE, - DIRECT_IRRADIANCE, - TEMPERATURE, - WIND_VELOCITY_U, - WIND_VELOCITY_V); + DIFFUSE_IRRADIANCE, DIRECT_IRRADIANCE, TEMPERATURE, WIND_VELOCITY_U, WIND_VELOCITY_V); Set allParameters = expandSet( minParameters, @@ -92,7 +87,12 @@ protected List> getFields(Class entityClass) { Set allParametersWithUuid = expandSet(allParameters, UUID); return Arrays.asList( - minParameters, allParameters, minParametersWithUuid, allParametersWithUuid); + minParameters, + allParameters, + minParametersWithUuid, + allParametersWithUuid, + toLowerCase(minParameters), + toLowerCase(allParameters)); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java index abfaca204..e84aef130 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java @@ -94,6 +94,8 @@ public CouchbaseWeatherSource( this.coordinateIdColumnName = coordinateIdColumnName; this.keyPrefix = keyPrefix; this.timeStampPattern = timeStampPattern; + + connector.validateDb(WeatherValue.class, weatherFactory); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java index cd769fc26..78a317c4b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java @@ -50,6 +50,8 @@ public InfluxDbWeatherSource( TimeBasedWeatherValueFactory weatherValueFactory) { super(idCoordinateSource, weatherValueFactory); this.connector = connector; + + connector.validateDb(WeatherValue.class, weatherValueFactory); } @Override @@ -224,6 +226,6 @@ private String createCoordinateConstraintString(int coordinateId) { */ protected Stream> filterEmptyOptionals( Stream>> elements) { - return elements.flatMap(Optional::stream).map(TimeBasedValue.class::cast); + return elements.flatMap(Optional::stream); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java index ce1338158..8f15ba0a8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java @@ -36,28 +36,6 @@ public SqlDataSource( this.databaseNamingStrategy = databaseNamingStrategy; } - /** - * This method should be used to validate a given table. - * - * @param tableName name of the table - * @param entityClass class of the entity - * @param validator for validation - * @throws SQLException – if the connection could not be established - */ - protected void validateDBTable(String tableName, Class entityClass, SourceValidator validator) - throws SQLException { - ResultSet rs = connector.getConnection().getMetaData().getColumns(null, null, tableName, null); - - Set columnNames = new HashSet<>(); - - while (rs.next()) { - String name = rs.getString("COLUMN_NAME"); - columnNames.add(StringUtils.snakeCaseToCamelCase(name)); - } - - validator.validate(columnNames, entityClass); - } - /** * Creates a base query string without closing semicolon of the following pattern:
* {@code SELECT * FROM .
} @@ -146,7 +124,7 @@ public Stream> getSourceData( *

(We cannot use {@link java.util.function.Function} here because it throws SQLException). */ @FunctionalInterface - interface AddParams { + protected interface AddParams { /** * Enhance a PreparedStatement by inserting parameters for wildcards * diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index fd2ec84e8..4349351e0 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -56,7 +56,7 @@ public SqlIdCoordinateSource( dataSource.getDbColumnName(factory.getCoordinateField(), coordinateTableName); // validating table - dataSource.validateDBTable(coordinateTableName, Pair.class, factory); + dataSource.connector.validateDBTable(coordinateTableName, Pair.class, factory); // setup queries this.basicQuery = createBaseQueryString(dataSource.schemaName, coordinateTableName); diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java index 7f952d4e4..8ec86c162 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java @@ -40,7 +40,7 @@ public SqlTimeSeriesMappingSource( @Override public Stream> getMappingSourceData(SourceValidator validator) { try { - dataSource.validateDBTable(tableName, TimeSeriesMappingSource.class, validator); + dataSource.connector.validateDBTable(tableName, TimeSeriesMappingSource.class, validator); } catch (SQLException e) { throw new FactoryException(e); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java index 3784d13c8..1100ad3c2 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java @@ -65,7 +65,7 @@ public SqlTimeSeriesSource( final String tableName = sqlDataSource.databaseNamingStrategy.getTimeSeriesEntityName(columnScheme); - dataSource.validateDBTable(tableName, valueClass, factory); + dataSource.connector.validateDBTable(tableName, valueClass, factory); String dbTimeColumnName = sqlDataSource.getDbColumnName(factory.getTimeFieldString(), tableName); diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java index d2aab44e1..4045d128e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java @@ -54,11 +54,14 @@ public SqlWeatherSource( IdCoordinateSource idCoordinateSource, String schemaName, String weatherTableName, - TimeBasedWeatherValueFactory weatherFactory) { + TimeBasedWeatherValueFactory weatherFactory) + throws SQLException { super(idCoordinateSource, weatherFactory); this.factoryCoordinateFieldName = weatherFactory.getCoordinateIdFieldString(); this.dataSource = new SqlDataSource(connector, schemaName, new DatabaseNamingStrategy()); + dataSource.connector.validateDBTable(weatherTableName, WeatherValue.class, weatherFactory); + String dbTimeColumnName = dataSource.getDbColumnName(weatherFactory.getTimeFieldString(), weatherTableName); String dbCoordinateIdColumnName = diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy index ad189ae73..2a18ea0e5 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy @@ -60,10 +60,10 @@ class CosmoIdCoordinateFactoryTest extends Specification { Map parameter = [ "tid": "1", "id": "106580", - "latgeo": "39.602772", - "longgeo": "1.279336", - "latrot": "-10", - "longrot": "-6.8125" + "latGeo": "39.602772", + "longGeo": "1.279336", + "latRot": "-10", + "longRot": "-6.8125" ] def validSimpleFactoryData = new SimpleFactoryData(parameter, Pair) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactoryTest.groovy index f83ec6a29..ac44095d8 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactoryTest.groovy @@ -24,11 +24,11 @@ class CosmoTimeBasedWeatherValueFactoryTest extends Specification { Map parameter = [ "uuid" : "980f7714-8def-479f-baae-4deed6c8d6d1", "time" : TimeUtil.withDefaults.toString(time), - "diffuseirradiance": "282.671997070312", - "directirradiance" : "286.872985839844", + "diffuseIrradiance": "282.671997070312", + "directIrradiance" : "286.872985839844", "temperature" : "", - "winddirection" : "0", - "windvelocity" : "1.66103506088257" + "windDirection" : "0", + "windVelocity" : "1.66103506088257" ] def data = new TimeBasedWeatherValueData(parameter, coordinate) @@ -57,11 +57,11 @@ class CosmoTimeBasedWeatherValueFactoryTest extends Specification { Map parameter = [ "time" : TimeUtil.withDefaults.toString(time), "uuid" : "980f7714-8def-479f-baae-4deed6c8d6d1", - "diffuseirradiance": "282.671997070312", - "directirradiance" : "286.872985839844", + "diffuseIrradiance": "282.671997070312", + "directIrradiance" : "286.872985839844", "temperature" : "278.019012451172", - "winddirection" : "0", - "windvelocity" : "1.66103506088257" + "windDirection" : "0", + "windVelocity" : "1.66103506088257" ] def data = new TimeBasedWeatherValueData(parameter, coordinate) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index a38901edd..e1ec0a0c0 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -59,7 +59,7 @@ class IconIdCoordinateFactoryTest extends Specification { "id":"477295", "latitude":"52.312", "longitude":"12.812", - "coordinatetype":"ICON"] + "coordinateType":"ICON"] def validSimpleFactoryData = new SimpleFactoryData(parameter, Pair) Pair expectedPair = Pair.of(477295, GeoUtils.buildPoint(52.312, 12.812)) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy index e3169fc9e..5b72b7e3a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactoryTest.groovy @@ -128,7 +128,7 @@ class TimeBasedSimpleValueFactoryTest extends Specification { "time": defaultTimeUtil.toString(time), "p": "500.0", "q": "165.0", - "heatdemand": "8.0" + "heatDemand": "8.0" ], HeatAndSValue) def expected = new TimeBasedValue( UUID.fromString("78ca078a-e6e9-4972-a58d-b2cadbc2df2c"), @@ -148,7 +148,7 @@ class TimeBasedSimpleValueFactoryTest extends Specification { "uuid": "78ca078a-e6e9-4972-a58d-b2cadbc2df2c", "time": defaultTimeUtil.toString(time), "p": "500.0", - "heatdemand": "8.0" + "heatDemand": "8.0" ], HeatAndPValue) def expected = new TimeBasedValue( UUID.fromString("78ca078a-e6e9-4972-a58d-b2cadbc2df2c"), @@ -167,7 +167,7 @@ class TimeBasedSimpleValueFactoryTest extends Specification { def data = new SimpleTimeBasedValueData([ "uuid": "78ca078a-e6e9-4972-a58d-b2cadbc2df2c", "time": defaultTimeUtil.toString(time), - "heatdemand": "8.0" + "heatDemand": "8.0" ], HeatDemandValue) def expected = new TimeBasedValue( UUID.fromString("78ca078a-e6e9-4972-a58d-b2cadbc2df2c"), From 651d9d126d8a4dcb01d1ffd8caa11131a1f709ac Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 13 Nov 2023 15:32:02 +0100 Subject: [PATCH 009/228] fmt --- src/main/java/edu/ie3/datamodel/io/factory/Factory.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index e9e7a93f2..c8b7d4af4 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -109,9 +109,10 @@ private void isSupportedClass(Class desiredClass) { protected abstract List> getFields(Class entityClass); /** - * Method for validating the found fields. The found fields needs to fully contain at least one of the sets returned by {@link #getFields(Class)}. - * If the found fields don't contain all necessary fields, an {@link FactoryException} with a detail message is thrown. - * If the found fields contain more fields than necessary, these fields are ignored. + * Method for validating the found fields. The found fields needs to fully contain at least one of + * the sets returned by {@link #getFields(Class)}. If the found fields don't contain all necessary + * fields, an {@link FactoryException} with a detail message is thrown. If the found fields + * contain more fields than necessary, these fields are ignored. * * @param foundFields that were found * @param entityClass of the build data From fdbe8a8f1f9e0bc4e7e807d39108e7f16c03bce8 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 14 Nov 2023 11:10:53 +0100 Subject: [PATCH 010/228] Some small changes. --- CHANGELOG.md | 3 +++ .../edu/ie3/datamodel/io/factory/Factory.java | 21 +++++++++++++++++-- .../input/AssetInputEntityFactoryTest.groovy | 6 +++--- .../Transformer2WInputFactoryTest.groovy | 4 +--- .../FixedFeedInInputFactoryTest.groovy | 4 ++-- .../FlexOptionsResultFactoryTest.groovy | 4 ++-- .../result/NodeResultFactoryTest.groovy | 4 ++-- .../SystemParticipantResultFactoryTest.groovy | 4 ++-- .../CosmoIdCoordinateFactoryTest.groovy | 2 +- .../IconIdCoordinateFactoryTest.groovy | 2 +- ...stemParticipantTypeInputFactoryTest.groovy | 2 +- 11 files changed, 37 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1a341398..c1ba25466 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed ### Changed +- Enhancing the error message for coordinate sources with invalid column names [#670](https://github.com/ie3-institute/PowerSystemDataModel/issues/670) +- Allowing for additional unused columns in sources [#839](https://github.com/ie3-institute/PowerSystemDataModel/issues/839) +- Improving column name validation to only run once per source [#849](https://github.com/ie3-institute/PowerSystemDataModel/issues/849) ## [4.1.0] - 2023-11-02 diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index c8b7d4af4..6681ad6f1 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -140,12 +140,29 @@ public void validate(Set foundFields, Class entityClass) { throw new FactoryException( "The provided fields " + providedKeysString - + " are invalid for instance of " + + " are invalid for instance of '" + entityClass.getSimpleName() - + ". \nThe following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of '" + + "'. \nThe following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of '" + entityClass.getSimpleName() + "' are possible (NOT case-sensitive!):\n" + possibleOptions); + } else { + // checking for additional fields + Set additionalFields = new HashSet<>(); + Set allFields = + validFieldSets.stream().flatMap(Collection::stream).collect(Collectors.toSet()); + + foundFields.stream().filter(e -> !allFields.contains(e)).forEach(additionalFields::add); + harmonizedFoundFields.stream() + .filter(e -> !allFields.contains(e)) + .forEach(additionalFields::add); + + if (!additionalFields.isEmpty()) { + log.debug( + "The following additional fields were found for instance of '{}': {}", + entityClass.getSimpleName(), + additionalFields); + } } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy index 10395b2c8..11d613bec 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy @@ -280,11 +280,11 @@ class AssetInputEntityFactoryTest extends Specification implements FactoryTestHe def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until") when: - Try input = Try.of(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) + Try input = Try.ofVoid(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) then: input.failure - input.exception.get().message == "The provided fields [operates_from, operates_until, uuid] are invalid for instance of TestAssetInput. \n" + + input.exception.get().message == "The provided fields [operates_from, operates_until, uuid] are invalid for instance of 'TestAssetInput'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'TestAssetInput' are possible (NOT case-sensitive!):\n" + "0: [id, uuid] or [id, uuid]\n" + "1: [id, operates_from, uuid] or [id, operatesFrom, uuid]\n" + @@ -298,7 +298,7 @@ class AssetInputEntityFactoryTest extends Specification implements FactoryTestHe def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until", "id", "additional_field") when: - Try input = Try.of(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) + Try input = Try.ofVoid(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) then: input.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy index c357481f1..99bd62bd3 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy @@ -6,15 +6,13 @@ package edu.ie3.datamodel.io.factory.input import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.exceptions.TryException -import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.utils.Try +import edu.ie3.test.common.GridTestData import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification -import edu.ie3.test.common.GridTestData import java.time.ZonedDateTime diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index e7a46b0c8..3532e2554 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -79,11 +79,11 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe def foundFields = inputFactory.newSet("uuid", "id", "s_rated", "cosphi_rated") when: - Try input = Try.of(() -> inputFactory.validate(foundFields, FixedFeedInInput), FactoryException) + Try input = Try.ofVoid(() -> inputFactory.validate(foundFields, FixedFeedInInput), FactoryException) then: input.failure - input.exception.get().message == "The provided fields [cosphi_rated, id, s_rated, uuid] are invalid for instance of FixedFeedInInput. \n" + + input.exception.get().message == "The provided fields [cosphi_rated, id, s_rated, uuid] are invalid for instance of 'FixedFeedInInput'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" + "0: [cos_phi_rated, id, q_characteristics, s_rated, uuid] or [cosPhiRated, id, qCharacteristics, sRated, uuid]\n" + "1: [cos_phi_rated, id, operates_from, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesFrom, qCharacteristics, sRated, uuid]\n" + diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy index b9bfa7709..bab574a5e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy @@ -56,11 +56,11 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH def foundFields = resultFactory.newSet("time", "input_model", "p_ref", "p_min") when: - Try input = Try.of(() -> resultFactory.validate(foundFields, FlexOptionsResult), FactoryException) + Try input = Try.ofVoid(() -> resultFactory.validate(foundFields, FlexOptionsResult), FactoryException) then: input.failure - input.exception.get().message == "The provided fields [input_model, p_min, p_ref, time] are invalid for instance of FlexOptionsResult. \n" + + input.exception.get().message == "The provided fields [input_model, p_min, p_ref, time] are invalid for instance of 'FlexOptionsResult'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FlexOptionsResult' are possible (NOT case-sensitive!):\n" + "0: [input_model, p_max, p_min, p_ref, time] or [inputModel, pMax, pMin, pRef, time]\n" + "1: [input_model, p_max, p_min, p_ref, time, uuid] or [inputModel, pMax, pMin, pRef, time, uuid]\n" diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy index 2e6f50a85..aea5c3be8 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy @@ -54,11 +54,11 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { def foundFields = resultFactory.newSet("time", "input_model", "v_mag") when: - Try input = Try.of(() -> resultFactory.validate(foundFields, NodeResult), FactoryException) + Try input = Try.ofVoid(() -> resultFactory.validate(foundFields, NodeResult), FactoryException) then: input.failure - input.exception.get().message == "The provided fields [input_model, time, v_mag] are invalid for instance of NodeResult. \n" + + input.exception.get().message == "The provided fields [input_model, time, v_mag] are invalid for instance of 'NodeResult'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'NodeResult' are possible (NOT case-sensitive!):\n" + "0: [input_model, time, v_ang, v_mag] or [inputModel, time, vAng, vMag]\n" + "1: [input_model, time, uuid, v_ang, v_mag] or [inputModel, time, uuid, vAng, vMag]\n" diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy index 947a5f5c5..fbc741f50 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy @@ -130,11 +130,11 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor def foundFields = resultFactory.newSet("time", "input_model", "q") when: - Try result = Try.of(() -> resultFactory.validate(foundFields, WecResult), FactoryException) + Try result = Try.ofVoid(() -> resultFactory.validate(foundFields, WecResult), FactoryException) then: result.failure - result.exception.get().message == "The provided fields [input_model, q, time] are invalid for instance of WecResult. \n" + + result.exception.get().message == "The provided fields [input_model, q, time] are invalid for instance of 'WecResult'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'WecResult' are possible (NOT case-sensitive!):\n" + "0: [input_model, p, q, time] or [inputModel, p, q, time]\n" + "1: [input_model, p, q, time, uuid] or [inputModel, p, q, time, uuid]\n" diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy index 2a18ea0e5..00115184e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy @@ -50,7 +50,7 @@ class CosmoIdCoordinateFactoryTest extends Specification { then: actual.failure - actual.exception.get().message == "The provided fields [id, latrot, longrot, tid] are invalid for instance of Pair. \n" + + actual.exception.get().message == "The provided fields [id, latrot, longrot, tid] are invalid for instance of 'Pair'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + "0: [id, lat_geo, lat_rot, long_geo, long_rot, tid] or [id, latGeo, latRot, longGeo, longRot, tid]\n" } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index e1ec0a0c0..be32388b0 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -48,7 +48,7 @@ class IconIdCoordinateFactoryTest extends Specification { then: actual.failure - actual.exception.get().message == "The provided fields [coordinatetype, id, latitude] are invalid for instance of Pair. \n" + + actual.exception.get().message == "The provided fields [coordinatetype, id, latitude] are invalid for instance of 'Pair'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + "0: [coordinate_type, id, latitude, longitude] or [coordinateType, id, latitude, longitude]\n" } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index 7e44fc75c..1f5856a47 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -287,7 +287,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac then: input.failure - input.exception.get().message == "The provided fields [capex, cosPhiRated, dod, estorage, eta, id, lifetime, opex, pmax, pmin, srated, uuid] are invalid for instance of StorageTypeInput. \n" + + input.exception.get().message == "The provided fields [capex, cosPhiRated, dod, estorage, eta, id, lifetime, opex, pmax, pmin, srated, uuid] are invalid for instance of 'StorageTypeInput'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'StorageTypeInput' are possible (NOT case-sensitive!):\n" + "0: [active_power_gradient, capex, cos_phi_rated, dod, e_storage, eta, id, life_cycle, life_time, opex, p_max, s_rated, uuid] or [activePowerGradient, capex, cosPhiRated, dod, eStorage, eta, id, lifeCycle, lifeTime, opex, pMax, sRated, uuid]\n" } From 1790e3a80d58472a508dfb5778f6eecf7f58061c Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 20 Nov 2023 13:49:52 +0100 Subject: [PATCH 011/228] Abstracting some method in `ValidationUtils`. --- .../DuplicateEntitiesException.java | 27 +++++ .../ie3/datamodel/utils/ExceptionUtils.java | 13 ++ .../GridContainerValidationUtils.java | 114 ++++++------------ .../utils/validation/ValidationUtils.java | 48 ++++++++ .../validation/ValidationUtilsTest.groovy | 111 +++++++++-------- 5 files changed, 186 insertions(+), 127 deletions(-) create mode 100644 src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java diff --git a/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java b/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java new file mode 100644 index 000000000..abf5f1d92 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java @@ -0,0 +1,27 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.exceptions; + +import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.utils.ExceptionUtils; +import java.util.Collection; + +public class DuplicateEntitiesException extends ValidationException { + + protected DuplicateEntitiesException(String s) { + super(s); + } + + protected DuplicateEntitiesException(String s, String entities) { + super(s + entities); + } + + public DuplicateEntitiesException(String fieldName, Collection entities) { + this( + "The following entities have duplicate '" + fieldName + "':", + ExceptionUtils.combine(entities)); + } +} diff --git a/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java b/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java index 018580d20..1569adf0e 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java @@ -5,7 +5,10 @@ */ package edu.ie3.datamodel.utils; +import edu.ie3.datamodel.models.UniqueEntity; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; public class ExceptionUtils { private ExceptionUtils() { @@ -24,4 +27,14 @@ public static String getMessages(List exceptions) { .reduce("", (a, b) -> a + "\n " + b) .replaceFirst("\n ", ""); } + + /** + * Combines multiple {@link UniqueEntity} into a string. + * + * @param entities to be combined + * @return a string + */ + public static String combine(Collection entities) { + return entities.stream().map(UniqueEntity::toString).collect(Collectors.joining("\n - ")); + } } diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java index 1ef47aeb5..27fd23d61 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java @@ -5,10 +5,8 @@ */ package edu.ie3.datamodel.utils.validation; -import edu.ie3.datamodel.exceptions.InvalidEntityException; -import edu.ie3.datamodel.exceptions.InvalidGridException; -import edu.ie3.datamodel.exceptions.UnsafeEntityException; -import edu.ie3.datamodel.exceptions.ValidationException; +import edu.ie3.datamodel.exceptions.*; +import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.AssetInput; import edu.ie3.datamodel.models.input.MeasurementUnitInput; import edu.ie3.datamodel.models.input.NodeInput; @@ -24,6 +22,7 @@ public class GridContainerValidationUtils extends ValidationUtils { + @Deprecated private static String duplicateUuidsString(String simpleName, Optional exceptionString) { return "The provided entities in '" + simpleName @@ -52,18 +51,10 @@ private GridContainerValidationUtils() { return List.of(isNull); } - List> exceptions = new ArrayList<>(); - /* sanity check to ensure distinct UUIDs */ - Optional exceptionString = - checkForDuplicateUuids(new HashSet<>(gridContainer.allEntitiesAsList())); - exceptions.add( - Try.ofVoid( - exceptionString.isPresent(), - () -> - new InvalidGridException( - duplicateUuidsString( - gridContainer.getClass().getSimpleName(), exceptionString)))); + List> exceptions = + new ArrayList<>( + checkForDuplicate(gridContainer.allEntitiesAsList(), UniqueEntity::getUuid)); exceptions.addAll(checkRawGridElements(gridContainer.getRawGrid())); exceptions.addAll( @@ -98,18 +89,10 @@ private GridContainerValidationUtils() { return List.of(isNull); } - List> exceptions = new ArrayList<>(); - /* sanity check to ensure distinct UUIDs */ - Optional exceptionString = - checkForDuplicateUuids(new HashSet<>(rawGridElements.allEntitiesAsList())); - exceptions.add( - Try.ofVoid( - exceptionString.isPresent(), - () -> - new InvalidGridException( - duplicateUuidsString( - rawGridElements.getClass().getSimpleName(), exceptionString)))); + List> exceptions = + new ArrayList<>( + checkForDuplicate(rawGridElements.allEntitiesAsList(), UniqueEntity::getUuid)); /* Checking nodes */ Set nodes = rawGridElements.getNodes(); @@ -183,18 +166,18 @@ private GridContainerValidationUtils() { * Checks the validity of type ids of every entity. * * @param rawGridElements the raw grid elements - * @return a list of try objects either containing an {@link UnsafeEntityException} or an empty - * Success + * @return a list of try objects either containing an {@link DuplicateEntitiesException} or an + * empty Success */ - protected static List> checkRawGridTypeIds( + protected static List> checkRawGridTypeIds( RawGridElements rawGridElements) { - List> exceptions = new ArrayList<>(); - exceptions.addAll(ValidationUtils.checkIds(rawGridElements.getNodes())); - exceptions.addAll(ValidationUtils.checkIds(rawGridElements.getLines())); - exceptions.addAll(ValidationUtils.checkIds(rawGridElements.getTransformer2Ws())); - exceptions.addAll(ValidationUtils.checkIds(rawGridElements.getTransformer3Ws())); - exceptions.addAll(ValidationUtils.checkIds(rawGridElements.getSwitches())); - exceptions.addAll(ValidationUtils.checkIds(rawGridElements.getMeasurementUnits())); + List> exceptions = new ArrayList<>(); + exceptions.addAll(checkForDuplicate(rawGridElements.getNodes(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(rawGridElements.getLines(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(rawGridElements.getTransformer2Ws(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(rawGridElements.getTransformer3Ws(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(rawGridElements.getSwitches(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(rawGridElements.getMeasurementUnits(), AssetInput::getId)); return exceptions; } @@ -217,19 +200,10 @@ protected static List> checkRawGridTypeIds( return List.of(isNull); } - List> exceptions = new ArrayList<>(); - // sanity check for distinct uuids - Optional exceptionString = - ValidationUtils.checkForDuplicateUuids( - new HashSet<>(systemParticipants.allEntitiesAsList())); - exceptions.add( - Try.ofVoid( - exceptionString.isPresent(), - () -> - new InvalidGridException( - duplicateUuidsString( - systemParticipants.getClass().getSimpleName(), exceptionString)))); + List> exceptions = + new ArrayList<>( + checkForDuplicate(systemParticipants.allEntitiesAsList(), UniqueEntity::getUuid)); exceptions.addAll(checkSystemParticipants(systemParticipants.getBmPlants(), nodes)); exceptions.addAll(checkSystemParticipants(systemParticipants.getChpPlants(), nodes)); @@ -274,23 +248,23 @@ protected static List> checkRawGridTypeIds( * Checks the validity of type ids of every entity. * * @param systemParticipants the system participants - * @return a list of try objects either containing an {@link UnsafeEntityException} or an empty - * Success + * @return a list of try objects either containing an {@link DuplicateEntitiesException} or an + * empty Success */ - protected static List> checkSystemParticipantsTypeIds( + protected static List> checkSystemParticipantsTypeIds( SystemParticipants systemParticipants) { - List> exceptions = new ArrayList<>(); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getBmPlants())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getChpPlants())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getEvCS())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getEvs())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getFixedFeedIns())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getHeatPumps())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getLoads())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getPvPlants())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getStorages())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getWecPlants())); - exceptions.addAll(ValidationUtils.checkIds(systemParticipants.getEmSystems())); + List> exceptions = new ArrayList<>(); + exceptions.addAll(checkForDuplicate(systemParticipants.getBmPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getChpPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getEvCS(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getEvs(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getFixedFeedIns(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getHeatPumps(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getLoads(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getPvPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getStorages(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getWecPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicate(systemParticipants.getEmSystems(), AssetInput::getId)); return exceptions; } @@ -312,18 +286,10 @@ protected static List> checkSystemParticipantsT return List.of(isNull); } - List> exceptions = new ArrayList<>(); - // sanity check for distinct uuids - Optional exceptionString = - checkForDuplicateUuids(new HashSet<>(graphicElements.allEntitiesAsList())); - exceptions.add( - Try.ofVoid( - exceptionString.isPresent(), - () -> - new InvalidGridException( - duplicateUuidsString( - graphicElements.getClass().getSimpleName(), exceptionString)))); + List> exceptions = + new ArrayList<>( + checkForDuplicate(graphicElements.allEntitiesAsList(), UniqueEntity::getUuid)); graphicElements .getNodeGraphics() diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index c09607a0d..585e1acd3 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -222,7 +222,10 @@ else if (SystemParticipantTypeInput.class.isAssignableFrom(assetTypeInput.getCla * @param inputs a set of asset inputs * @return a list of try objects either containing an {@link UnsafeEntityException} or an empty * Success + * @deprecated use {@link #checkForDuplicate(Collection, FieldSupplier)} with {@link + * AssetInput#getId()} as {@link FieldSupplier} instead */ + @Deprecated protected static List> checkIds( Set inputs) { List ids = new ArrayList<>(); @@ -359,7 +362,10 @@ public static Predicate distinctByKey(Function keyExtractor * * @param entities the entities that should be checkd for UUID uniqueness * @return either a string wrapped in an optional with duplicate UUIDs or an empty optional + * @deprecated use {@link #checkForDuplicate(Collection, FieldSupplier)} with {@link + * UniqueEntity#getUuid()} as {@link FieldSupplier} instead */ + @Deprecated protected static Optional checkForDuplicateUuids(Set entities) { if (distinctUuids(entities)) { return Optional.empty(); @@ -388,4 +394,46 @@ protected static Optional checkForDuplicateUuids(Set entit return Optional.of(duplicationsString); } + + /** + * Method to check for duplicate fields in a set of {@link UniqueEntity}. + * + * @param entities to be checked + * @param supplier for the field + * @return a list of {@link Try}. + * @param type of the field + * @param type of the {@link UniqueEntity} + */ + protected static + List> checkForDuplicate( + Collection entities, FieldSupplier supplier) { + Map> duplicates = + entities.stream().collect(Collectors.groupingBy(supplier::getField)); + + List> exceptions = new ArrayList<>(); + + duplicates.entrySet().stream() + .filter(e -> e.getValue().size() > 1) + .forEach( + duplicate -> { + A key = duplicate.getKey(); + exceptions.add( + Failure.ofVoid( + new DuplicateEntitiesException( + key.getClass().getSimpleName(), duplicates.get(key)))); + }); + + return exceptions; + } + + /** + * Supplier for unique entity fields. + * + * @param type of field + * @param type of unique entity + */ + @FunctionalInterface + protected interface FieldSupplier { + A getField(B entity); + } } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy index 26c43982d..aa2ee5295 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy @@ -5,17 +5,12 @@ */ package edu.ie3.datamodel.utils.validation -import static edu.ie3.datamodel.models.StandardUnits.* -import static edu.ie3.datamodel.utils.validation.DummyAssetInput.invalid -import static edu.ie3.datamodel.utils.validation.DummyAssetInput.valid -import static edu.ie3.util.quantities.PowerSystemUnits.OHM_PER_KILOMETRE -import static edu.ie3.util.quantities.PowerSystemUnits.PU - +import edu.ie3.datamodel.exceptions.DuplicateEntitiesException import edu.ie3.datamodel.exceptions.FailedValidationException import edu.ie3.datamodel.exceptions.InvalidEntityException -import edu.ie3.datamodel.exceptions.UnsafeEntityException import edu.ie3.datamodel.exceptions.ValidationException import edu.ie3.datamodel.models.OperationTime +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.AssetInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -31,6 +26,12 @@ import tech.units.indriya.quantity.Quantities import javax.measure.Quantity +import static edu.ie3.datamodel.models.StandardUnits.* +import static edu.ie3.datamodel.utils.validation.DummyAssetInput.invalid +import static edu.ie3.datamodel.utils.validation.DummyAssetInput.valid +import static edu.ie3.util.quantities.PowerSystemUnits.OHM_PER_KILOMETRE +import static edu.ie3.util.quantities.PowerSystemUnits.PU + class ValidationUtilsTest extends Specification { def "Smoke Test: Correct asset throws no exception"() { @@ -71,9 +72,12 @@ class ValidationUtilsTest extends Specification { } def "The validation utils should check for duplicates as expected"() { - expect: - ValidationUtils.checkForDuplicateUuids(collection) == checkResult + ValidationUtils.checkForDuplicate(collection, UniqueEntity::getUuid).every { + it.exception.map { + it.message + } == checkResult + } where: collection || checkResult @@ -96,8 +100,7 @@ class ValidationUtilsTest extends Specification { null, GermanVoltageLevelUtils.LV, 6) - ] as Set || Optional.of("9e37ce48-9650-44ec-b888-c2fd182aff01: 2\n" + - " - NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_f', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}\n" + + ] as Set || Optional.of("The following entities have duplicate 'UUID':NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_f', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}\n" + " - NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_g', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}") [ GridTestData.nodeD, @@ -133,32 +136,32 @@ class ValidationUtilsTest extends Specification { GridTestData.nodeA.copy().id(null).build() || new InvalidEntityException("No ID assigned", invalidAsset) GridTestData.nodeA.copy().operationTime(null).build() || new InvalidEntityException("Operation time of the asset is not defined", invalidAsset) GridTestData.nodeA.copy().operationTime(OperationTime.builder(). - withStart(TimeUtil.withDefaults.toZonedDateTime("2020-03-26 15:11:31")). - withEnd(TimeUtil.withDefaults.toZonedDateTime("2020-03-25 15:11:31")).build()).build() || new InvalidEntityException("Operation start time of the asset has to be before end time", invalidAsset) + withStart(TimeUtil.withDefaults.toZonedDateTime("2020-03-26 15:11:31")). + withEnd(TimeUtil.withDefaults.toZonedDateTime("2020-03-25 15:11:31")).build()).build() || new InvalidEntityException("Operation start time of the asset has to be before end time", invalidAsset) } def "The check for negative entities should work as expected"() { given: def asset = new LineTypeInput( - UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), - "lineType_AtoB", - Quantities.getQuantity(0d, SUSCEPTANCE_PER_LENGTH), - Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), - Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), - Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), - Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), - Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) - ) + UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), + "lineType_AtoB", + Quantities.getQuantity(0d, SUSCEPTANCE_PER_LENGTH), + Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), + Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), + Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), + Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), + Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) + ) def invalidAsset = new LineTypeInput( - UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), - "lineType_AtoB", - Quantities.getQuantity(-1d, SUSCEPTANCE_PER_LENGTH), // invalid value - Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), - Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), - Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), - Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), - Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) - ) + UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), + "lineType_AtoB", + Quantities.getQuantity(-1d, SUSCEPTANCE_PER_LENGTH), // invalid value + Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), + Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), + Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), + Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), + Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) + ) when: ValidationUtils.detectNegativeQuantities([asset.getB()] as Quantity[], asset) @@ -177,25 +180,25 @@ class ValidationUtilsTest extends Specification { def "The check for zero or negative entities should work as expected"() { given: def asset = new LineTypeInput( - UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), - "lineType_AtoB", - Quantities.getQuantity(1d, SUSCEPTANCE_PER_LENGTH), - Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), - Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), - Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), - Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), - Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) - ) + UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), + "lineType_AtoB", + Quantities.getQuantity(1d, SUSCEPTANCE_PER_LENGTH), + Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), + Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), + Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), + Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), + Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) + ) def invalidAsset = new LineTypeInput( - UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), - "lineType_AtoB", - Quantities.getQuantity(0d, SUSCEPTANCE_PER_LENGTH), // invalid value - Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), - Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), - Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), - Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), - Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) - ) + UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), + "lineType_AtoB", + Quantities.getQuantity(0d, SUSCEPTANCE_PER_LENGTH), // invalid value + Quantities.getQuantity(0d, CONDUCTANCE_PER_LENGTH), + Quantities.getQuantity(0.437d, OHM_PER_KILOMETRE), + Quantities.getQuantity(0.356d, OHM_PER_KILOMETRE), + Quantities.getQuantity(300d, ELECTRIC_CURRENT_MAGNITUDE), + Quantities.getQuantity(20d, RATED_VOLTAGE_MAGNITUDE) + ) when: ValidationUtils.detectZeroOrNegativeQuantities([asset.getB()] as Quantity[], asset) @@ -259,10 +262,12 @@ class ValidationUtilsTest extends Specification { ] when: - List> exceptions = ValidationUtils.checkIds(validAssetIds) + List> exceptions = ValidationUtils.checkForDuplicate(validAssetIds, AssetInput::getId) then: - exceptions.every { ex -> ex.success } + exceptions.every { + ex -> ex.success + } } def "Duplicate asset input ids leads to an exception"() { @@ -273,11 +278,11 @@ class ValidationUtilsTest extends Specification { ] when: - List> exceptions = ValidationUtils.checkIds(invalidAssetIds) + List> exceptions = ValidationUtils.checkForDuplicate(invalidAssetIds, AssetInput::getId) then: exceptions.size() == 1 exceptions.get(0).failure - exceptions.get(0).exception.get().message.contains("Entity may be unsafe because of: There is already an entity with the id invalid_asset") + exceptions.get(0).exception.get().message.contains("The following entities have duplicate 'String':AssetInput") } } From 0a8cc774ad5dfadfebaecf815c4e5d44911265c5 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 20 Nov 2023 13:54:11 +0100 Subject: [PATCH 012/228] Adding information to `CHANGELOG`. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1a341398..635605ea2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed ### Changed +- Abstracting some methods in `ValidationUtils` [#852](https://github.com/ie3-institute/PowerSystemDataModel/issues/852) ## [4.1.0] - 2023-11-02 From 6e9befa6c77fa27c37c0f3688b48dd9e33b2d9e6 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 20 Nov 2023 15:09:23 +0100 Subject: [PATCH 013/228] Throwing exception instead of using `safeMapGet`. --- CHANGELOG.md | 1 + .../ie3/datamodel/io/source/EntitySource.java | 31 +++++++------ .../io/source/SystemParticipantSource.java | 45 ++++++++++++------- 3 files changed, 45 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1a341398..4a80c6511 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed ### Changed +- Replacing `EntitySource.safeMapGet` by `EntitySource.getOrThrow` [#828](https://github.com/ie3-institute/PowerSystemDataModel/issues/828) ## [4.1.0] - 2023-11-02 diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index eec826f97..356ee1201 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -33,7 +33,6 @@ public abstract class EntitySource { protected static final String OPERATOR = "operator"; protected static final String NODE = "node"; protected static final String TYPE = "type"; - protected static final String FIELDS_TO_VALUES_MAP = "fieldsToValuesMap"; DataSource dataSource; @@ -51,13 +50,10 @@ protected String buildSkippingMessage( + missingElementsString; } - protected String safeMapGet(Map map, String key, String mapName) { - return Optional.ofNullable(map.get(key)) - .orElse( - "Key '" - + key - + "' not found" - + (mapName.isEmpty() ? "!" : " in map '" + mapName + "'!")); + protected String getOrThrow(Map map, String field) throws SourceException { + return Optional.ofNullable(map.get(field)) + .orElseThrow( + () -> new SourceException("Field " + field + " was not found in map " + map + ".")); } /** @@ -101,13 +97,15 @@ protected Try getAssetType( // if the type is not present we return an empty element and // log a warning if (assetType.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - skippedClassString, - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - TYPE + ": " + safeMapGet(fieldsToAttributes, TYPE, FIELDS_TO_VALUES_MAP)); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); + return Try.of( + () -> + buildSkippingMessage( + skippedClassString, + getOrThrow(fieldsToAttributes, "uuid"), + getOrThrow(fieldsToAttributes, "id"), + TYPE + ": " + getOrThrow(fieldsToAttributes, TYPE)), + SourceException.class) + .flatMap(message -> Failure.of(new SourceException("Failure due to: " + message))); } return new Success<>(assetType.get()); } @@ -271,7 +269,8 @@ protected AssetInputEntityData assetInputEntityDataStream operators, operatorUuid, entityClass.getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP)); + fieldsToAttributes.getOrDefault( + "uuid", "No 'uuid' found in map " + fieldsToAttributes + "!")); // remove fields that are passed as objects to constructor fieldsToAttributes.keySet().removeAll(new HashSet<>(Collections.singletonList(OPERATOR))); diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 3754362dd..32413a835 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -889,13 +889,17 @@ protected Try buildHpEntityData( // if the requested entity is not present we return an empty element and // log a warning if (hpInputEntityDataOpt.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - "thermalBus: " + safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); + return Try.of( + () -> + buildSkippingMessage( + typedEntityData.getTargetClass().getSimpleName(), + getOrThrow(fieldsToAttributes, "uuid"), + getOrThrow(fieldsToAttributes, "id"), + "thermalBus: " + getOrThrow(fieldsToAttributes, THERMAL_BUS)), + SourceException.class) + .flatMap( + skippingMessage -> + Failure.of(new SourceException("Failure due to: " + skippingMessage))); } return new Success<>(hpInputEntityDataOpt.get()); @@ -941,20 +945,29 @@ protected Try buildChpEntityData( StringBuilder sB = new StringBuilder(); if (thermalStorage.isEmpty()) { sB.append("thermalStorage: ") - .append(safeMapGet(fieldsToAttributes, THERMAL_STORAGE, FIELDS_TO_VALUES_MAP)); + .append( + fieldsToAttributes.getOrDefault( + THERMAL_STORAGE, + "No 'thermalStorage' found in map " + fieldsToAttributes + "!")); } if (thermalBus.isEmpty()) { sB.append("\nthermalBus: ") - .append(safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); + .append( + fieldsToAttributes.getOrDefault( + THERMAL_BUS, "No 'thermalBus' found in map " + fieldsToAttributes + "!")); } - String skippingMessage = - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - sB.toString()); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); + return Try.of( + () -> + buildSkippingMessage( + typedEntityData.getTargetClass().getSimpleName(), + getOrThrow(fieldsToAttributes, "uuid"), + getOrThrow(fieldsToAttributes, "id"), + sB.toString()), + SourceException.class) + .flatMap( + skippingMessage -> + Failure.of(new SourceException("Failure due to: " + skippingMessage))); } // remove fields that are passed as objects to constructor From 2104312d1bd15551f57321d15eb512b5e676cc27 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 20 Nov 2023 15:15:27 +0100 Subject: [PATCH 014/228] Removing deprecated methods. --- .../GridContainerValidationUtils.java | 9 --- .../utils/validation/ValidationUtils.java | 70 ------------------- 2 files changed, 79 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java index 27fd23d61..8ff8bc9cd 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java @@ -22,15 +22,6 @@ public class GridContainerValidationUtils extends ValidationUtils { - @Deprecated - private static String duplicateUuidsString(String simpleName, Optional exceptionString) { - return "The provided entities in '" - + simpleName - + "' contains duplicate UUIDs. " - + "This is not allowed!\nDuplicated uuids:\n\n" - + exceptionString; - } - /** Private Constructor as this class is not meant to be instantiated */ private GridContainerValidationUtils() { throw new IllegalStateException("Don't try and instantiate a Utility class."); diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index 585e1acd3..affc0bb69 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -216,37 +216,6 @@ else if (SystemParticipantTypeInput.class.isAssignableFrom(assetTypeInput.getCla return exceptions; } - /** - * Checks the validity of the ids for a given set of {@link AssetInput}. - * - * @param inputs a set of asset inputs - * @return a list of try objects either containing an {@link UnsafeEntityException} or an empty - * Success - * @deprecated use {@link #checkForDuplicate(Collection, FieldSupplier)} with {@link - * AssetInput#getId()} as {@link FieldSupplier} instead - */ - @Deprecated - protected static List> checkIds( - Set inputs) { - List ids = new ArrayList<>(); - List> exceptions = new ArrayList<>(); - - inputs.forEach( - input -> { - String id = input.getId(); - if (!ids.contains(id)) { - ids.add(id); - } else { - exceptions.add( - new Failure<>( - new UnsafeEntityException( - "There is already an entity with the id " + id, input))); - } - }); - - return exceptions; - } - /** * Checks, if the given object is null. If so, an {@link InvalidEntityException} wrapped in a * {@link Failure} is returned. @@ -356,45 +325,6 @@ public static Predicate distinctByKey(Function keyExtractor return t -> seen.add(keyExtractor.apply(t)); } - /** - * Checks if the provided set of unique entities only contains elements with distinct UUIDs and - * either returns a string with duplicated UUIDs or an empty optional otherwise. - * - * @param entities the entities that should be checkd for UUID uniqueness - * @return either a string wrapped in an optional with duplicate UUIDs or an empty optional - * @deprecated use {@link #checkForDuplicate(Collection, FieldSupplier)} with {@link - * UniqueEntity#getUuid()} as {@link FieldSupplier} instead - */ - @Deprecated - protected static Optional checkForDuplicateUuids(Set entities) { - if (distinctUuids(entities)) { - return Optional.empty(); - } - String duplicationsString = - entities.stream() - .collect(Collectors.groupingBy(UniqueEntity::getUuid, Collectors.counting())) - .entrySet() - .stream() - .filter(entry -> entry.getValue() > 1) - .map( - entry -> { - String duplicateEntitiesString = - entities.stream() - .filter(entity -> entity.getUuid().equals(entry.getKey())) - .map(UniqueEntity::toString) - .collect(Collectors.joining("\n - ")); - - return entry.getKey() - + ": " - + entry.getValue() - + "\n - " - + duplicateEntitiesString; - }) - .collect(Collectors.joining("\n\n")); - - return Optional.of(duplicationsString); - } - /** * Method to check for duplicate fields in a set of {@link UniqueEntity}. * From ad379c29de46a671409c5974e0929c1d357b5bd1 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Fri, 24 Nov 2023 10:54:21 +0100 Subject: [PATCH 015/228] Implementing requested changes. --- .../io/connectors/CouchbaseConnector.java | 5 +- .../io/connectors/CsvFileConnector.java | 59 ++++++++++++++ .../edu/ie3/datamodel/io/factory/Factory.java | 57 ++++++++----- .../CosmoTimeBasedWeatherValueFactory.java | 3 +- .../IconTimeBasedWeatherValueFactory.java | 9 +-- .../ie3/datamodel/io/source/DataSource.java | 3 +- .../ie3/datamodel/io/source/EntitySource.java | 18 +++-- .../datamodel/io/source/GraphicSource.java | 21 +++-- .../datamodel/io/source/RawGridSource.java | 24 ++++-- .../io/source/ResultEntitySource.java | 30 ++++++- .../datamodel/io/source/SourceValidator.java | 4 +- .../io/source/SystemParticipantSource.java | 24 +++++- .../datamodel/io/source/ThermalSource.java | 19 +++-- .../io/source/TimeSeriesMappingSource.java | 6 +- .../ie3/datamodel/io/source/TypeSource.java | 18 +++++ .../io/source/csv/CsvDataSource.java | 20 ++--- .../csv/CsvJointGridContainerSource.java | 11 +++ .../csv/CsvTimeSeriesMappingSource.java | 8 +- .../io/source/csv/CsvTimeSeriesSource.java | 12 +-- .../io/source/sql/SqlDataSource.java | 4 +- .../sql/SqlTimeSeriesMappingSource.java | 15 ++-- .../datamodel/io/factory/FactoryTest.groovy | 80 +++++++++++++++++++ .../input/AssetInputEntityFactoryTest.groovy | 18 +---- .../FixedFeedInInputFactoryTest.groovy | 8 +- .../FlexOptionsResultFactoryTest.groovy | 4 +- .../result/NodeResultFactoryTest.groovy | 4 +- .../SystemParticipantResultFactoryTest.groovy | 6 +- .../CosmoIdCoordinateFactoryTest.groovy | 2 +- .../IconIdCoordinateFactoryTest.groovy | 2 +- ...stemParticipantTypeInputFactoryTest.groovy | 2 +- .../io/source/EntitySourceTest.groovy | 5 ++ .../source/csv/CsvTimeSeriesSourceIT.groovy | 4 +- 32 files changed, 365 insertions(+), 140 deletions(-) create mode 100644 src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java index 51f4dd377..0686c640e 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java @@ -14,8 +14,8 @@ import com.couchbase.client.java.kv.GetResult; import com.couchbase.client.java.kv.MutationResult; import com.couchbase.client.java.query.QueryResult; -import java.time.Duration; import edu.ie3.datamodel.io.source.SourceValidator; +import edu.ie3.datamodel.models.value.WeatherValue; import java.time.Duration; import java.util.HashSet; import java.util.List; @@ -68,7 +68,8 @@ public CouchbaseConnector( * @param validator for validation */ @SuppressWarnings("unchecked") - public final void validateDb(Class entityClass, SourceValidator validator) { + public final void validateDb( + Class entityClass, SourceValidator validator) { String query = "SELECT ARRAY_DISTINCT(ARRAY_AGG(v)) AS column FROM " + bucketName diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index 71147a7db..6fc303fbd 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -6,16 +6,22 @@ package edu.ie3.datamodel.io.connectors; import edu.ie3.datamodel.exceptions.ConnectorException; +import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.IoUtil; import edu.ie3.datamodel.io.csv.*; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.naming.TimeSeriesMetaInformation; import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme; import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation; +import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.timeseries.TimeSeries; import edu.ie3.datamodel.models.timeseries.TimeSeriesEntry; import edu.ie3.datamodel.models.value.Value; +import edu.ie3.datamodel.utils.ExceptionUtils; +import edu.ie3.datamodel.utils.Try; +import edu.ie3.util.StringUtils; import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -51,6 +57,59 @@ public CsvFileConnector(Path baseDirectoryName, FileNamingStrategy fileNamingStr this.fileNamingStrategy = fileNamingStrategy; } + @SuppressWarnings("unchecked") + public void validate(Map, SourceValidator> pairs, String csvSep) { + List exceptions = new ArrayList<>(); + + pairs.forEach( + ((clz, validator) -> { + Class c = (Class) clz; + SourceValidator v = (SourceValidator) validator; + + Try.of(() -> getHeadlineFields(c, csvSep), SourceException.class) + .getData() + .flatMap( + headline -> + Try.ofVoid(() -> v.validate(headline, c), FactoryException.class) + .getException()) + .ifPresent(exceptions::add); + })); + + if (!exceptions.isEmpty()) { + throw new FactoryException( + "The following exception(s) occurred during validation: " + + ExceptionUtils.getMessages(exceptions)); + } + } + + /** + * Method for extracting the headline fields of a csv file. + * + * @param entityClass that should be buildable from the source data + * @param csvSep separator for headline + * @return a set of headline fields + * @throws SourceException if the file could not be read + */ + public Set getHeadlineFields(Class entityClass, String csvSep) + throws SourceException { + try (BufferedReader reader = initReader(entityClass)) { + // extracting headline fields + return Arrays.stream(reader.readLine().split(csvSep + "(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1)) + .map( + maybeStartEndQuotedString -> + StringUtils.unquoteStartEnd(maybeStartEndQuotedString.trim()) + .replaceAll("\"{2}", "\"") + .trim()) + .collect(Collectors.toSet()); + } catch (ConnectorException | IOException e) { + throw new SourceException( + "Unable to find file for entity '" + + entityClass.getSimpleName() + + "': " + + e.getMessage()); + } + } + public synchronized BufferedCsvWriter getOrInitWriter( Class clz, String[] headerElements, String csvSep) throws ConnectorException { diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index 6681ad6f1..61cbb7978 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -24,7 +24,7 @@ * @param Type of the intended return type (might differ slightly from target class (cf. {@link * edu.ie3.datamodel.io.factory.timeseries.TimeBasedValueFactory})). */ -public abstract class Factory implements SourceValidator { +public abstract class Factory implements SourceValidator { public static final Logger log = LoggerFactory.getLogger(Factory.class); private final List> supportedClasses; @@ -52,7 +52,7 @@ public Try get(D data) { try { // build the model return Success.of(buildModel(data)); - } catch (Exception e) { + } catch (FactoryException | IllegalArgumentException e) { return Failure.of( new FactoryException( "An error occurred when creating instance of " @@ -104,36 +104,57 @@ private void isSupportedClass(Class desiredClass) { * Returns list of sets of attribute names that the entity requires to be built. At least one of * these sets needs to be delivered for entity creation to be successful. * + * @param entityClass class that can be used to specify the fields that are returned * @return list of possible attribute sets */ protected abstract List> getFields(Class entityClass); + /** + * Method to find and return additional fields that were found in a source. This method will + * return the additional fields that were found in the valid set with the least additional fields. + * + * @param actualFields found in the source + * @param validFieldSets that contains at least all fields found in the source + * @return a set of additional fields + */ + protected Set getAdditionalFields( + Set actualFields, List> validFieldSets) { + // checking for additional fields + // and returning the set with the least additional fields + return validFieldSets.stream() + .map( + s -> { + Set set = new HashSet<>(actualFields); + set.removeAll(s); + return set; + }) + .min(Comparator.comparing(Collection::size)) + .orElse(Collections.emptySet()); + } + /** * Method for validating the found fields. The found fields needs to fully contain at least one of * the sets returned by {@link #getFields(Class)}. If the found fields don't contain all necessary * fields, an {@link FactoryException} with a detail message is thrown. If the found fields * contain more fields than necessary, these fields are ignored. * - * @param foundFields that were found + * @param actualFields that were found * @param entityClass of the build data */ - public void validate(Set foundFields, Class entityClass) { - List> fieldSets = - getFields(entityClass).stream().map(Factory::toSnakeCase).toList(); - Set harmonizedFoundFields = toSnakeCase(foundFields); + public void validate(Set actualFields, Class entityClass) { + List> fieldSets = getFields(entityClass); + Set harmonizedFoundFields = toCamelCase(actualFields); // comparing the found fields to a list of possible fields (allows additional fields) // if not all fields were found in a set, this set is filtered out // all other fields are saved as a list // allows snake, camel and mixed cases List> validFieldSets = - fieldSets.stream() - .filter(s -> foundFields.containsAll(s) || harmonizedFoundFields.containsAll(s)) - .toList(); + fieldSets.stream().filter(harmonizedFoundFields::containsAll).toList(); if (validFieldSets.isEmpty()) { // build the exception string with extensive debug information - String providedKeysString = "[" + String.join(", ", foundFields) + "]"; + String providedKeysString = "[" + String.join(", ", actualFields) + "]"; String possibleOptions = getFieldsString(fieldSets).toString(); @@ -147,19 +168,11 @@ public void validate(Set foundFields, Class entityClass) { + "' are possible (NOT case-sensitive!):\n" + possibleOptions); } else { - // checking for additional fields - Set additionalFields = new HashSet<>(); - Set allFields = - validFieldSets.stream().flatMap(Collection::stream).collect(Collectors.toSet()); - - foundFields.stream().filter(e -> !allFields.contains(e)).forEach(additionalFields::add); - harmonizedFoundFields.stream() - .filter(e -> !allFields.contains(e)) - .forEach(additionalFields::add); + Set additionalFields = getAdditionalFields(harmonizedFoundFields, validFieldSets); if (!additionalFields.isEmpty()) { log.debug( - "The following additional fields were found for instance of '{}': {}", + "The following additional fields were found for entity class of '{}': {}", entityClass.getSimpleName(), additionalFields); } @@ -175,7 +188,7 @@ protected static StringBuilder getFieldsString(List> fieldSets) { + ": [" + String.join(", ", fieldSet) + "] or [" - + String.join(", ", toCamelCase(fieldSet)) + + String.join(", ", toSnakeCase(fieldSet)) + "]\n"; possibleOptions.append(option); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java index 21c61a9ec..f8d267187 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/CosmoTimeBasedWeatherValueFactory.java @@ -12,6 +12,7 @@ import edu.ie3.util.quantities.PowerSystemUnits; import edu.ie3.util.quantities.interfaces.Irradiance; import java.time.ZonedDateTime; +import java.util.Collections; import java.util.List; import java.util.Set; import javax.measure.quantity.Angle; @@ -58,7 +59,7 @@ protected List> getFields(Class entityClass) { TEMPERATURE, WIND_DIRECTION, WIND_VELOCITY); - return List.of(minConstructorParams, toLowerCase(minConstructorParams)); + return Collections.singletonList(minConstructorParams); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java index e1b095116..6b3fd419e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java @@ -62,7 +62,7 @@ protected List> getFields(Class entityClass) { minParameters, "albrad", "asobs", - "aswdifus", + "aswdifuS", "tG", "u10m", "u20m", @@ -87,12 +87,7 @@ protected List> getFields(Class entityClass) { Set allParametersWithUuid = expandSet(allParameters, UUID); return Arrays.asList( - minParameters, - allParameters, - minParametersWithUuid, - allParametersWithUuid, - toLowerCase(minParameters), - toLowerCase(allParameters)); + minParameters, allParameters, minParametersWithUuid, allParametersWithUuid); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java index f52d9b55e..0687e9e50 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java @@ -13,6 +13,5 @@ public interface DataSource { /** Creates a stream of maps that represent the rows in the database */ - Stream> getSourceData( - Class entityClass, SourceValidator validateSource); + Stream> getSourceData(Class entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 3c7a880d5..91be9395e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -39,6 +39,9 @@ public abstract class EntitySource { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + /** Returns a map: class to {@link SourceValidator}. */ + public abstract Map, SourceValidator> getValidationMapping(); + protected String buildSkippingMessage( String entityDesc, String entityUuid, String entityId, String missingElementsString) { return "Skipping " @@ -249,9 +252,9 @@ protected Stream> nodeAssetInputE * @return stream of the entity data wrapped in a {@link Try} */ protected Stream assetInputEntityDataStream( - Class entityClass, SourceValidator validator, Collection operators) { + Class entityClass, Collection operators) { return dataSource - .getSourceData(entityClass, validator) + .getSourceData(entityClass) .map( fieldsToAttributes -> assetInputEntityDataStream(entityClass, fieldsToAttributes, operators)); @@ -289,9 +292,9 @@ protected AssetInputEntityData assetInputEntityDataStream * @return stream of {@link SimpleEntityData} */ protected Stream simpleEntityDataStream( - Class entityClass, SourceValidator validator) { + Class entityClass) { return dataSource - .getSourceData(entityClass, validator) + .getSourceData(entityClass) .map(fieldsToAttributes -> new SimpleEntityData(fieldsToAttributes, entityClass)); } @@ -313,8 +316,7 @@ protected Stream> nodeAssetEntit EntityFactory factory, Collection nodes, Collection operators) { - return nodeAssetInputEntityDataStream( - assetInputEntityDataStream(entityClass, factory, operators), nodes) + return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) .map(factory::get); } @@ -333,7 +335,7 @@ public Set> buildAssetInputEntit Class entityClass, EntityFactory factory, Collection operators) { - return assetInputEntityDataStream(entityClass, factory, operators) + return assetInputEntityDataStream(entityClass, operators) .map(factory::get) .collect(Collectors.toSet()); } @@ -342,7 +344,7 @@ public Set> buildAssetInputEntit public Set> buildEntities( Class entityClass, EntityFactory factory) { return dataSource - .getSourceData(entityClass, factory) + .getSourceData(entityClass) .map( fieldsToAttributes -> { SimpleEntityData data = new SimpleEntityData(fieldsToAttributes, entityClass); diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index ae97091de..5767e7f03 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import static java.util.Map.entry; + import edu.ie3.datamodel.exceptions.GraphicSourceException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData; @@ -50,6 +52,13 @@ public GraphicSource(TypeSource typeSource, RawGridSource rawGridSource, DataSou this.nodeGraphicInputFactory = new NodeGraphicInputFactory(); } + @Override + public Map, SourceValidator> getValidationMapping() { + return Map.ofEntries( + entry(NodeGraphicInput.class, nodeGraphicInputFactory), + entry(LineGraphicInput.class, lineGraphicInputFactory)); + } + /** Returns the graphic elements of the grid or throws a {@link SourceException} */ public GraphicElements getGraphicElements() throws SourceException { @@ -91,7 +100,7 @@ public Set getNodeGraphicInput() throws SourceException { public Set getNodeGraphicInput(Set nodes) throws SourceException { return Try.scanCollection( - buildNodeGraphicEntityData(nodes, nodeGraphicInputFactory) + buildNodeGraphicEntityData(nodes) .map(nodeGraphicInputFactory::get) .collect(Collectors.toSet()), NodeGraphicInput.class) @@ -113,7 +122,7 @@ public Set getLineGraphicInput() throws SourceException { public Set getLineGraphicInput(Set lines) throws SourceException { return Try.scanCollection( - buildLineGraphicEntityData(lines, lineGraphicInputFactory) + buildLineGraphicEntityData(lines) .map(lineGraphicInputFactory::get) .collect(Collectors.toSet()), LineGraphicInput.class) @@ -140,9 +149,9 @@ public Set getLineGraphicInput(Set lines) throws So * @return a stream of tries of {@link NodeGraphicInput} entities */ protected Stream> buildNodeGraphicEntityData( - Set nodes, SourceValidator validator) { + Set nodes) { return dataSource - .getSourceData(NodeGraphicInput.class, validator) + .getSourceData(NodeGraphicInput.class) .map(fieldsToAttributes -> buildNodeGraphicEntityData(fieldsToAttributes, nodes)); } @@ -187,9 +196,9 @@ protected Try buildNodeGraphicEntit * @return a stream of tries of {@link LineGraphicInput} entities */ protected Stream> buildLineGraphicEntityData( - Set lines, SourceValidator validator) { + Set lines) { return dataSource - .getSourceData(LineGraphicInput.class, validator) + .getSourceData(LineGraphicInput.class) .map(fieldsToAttributes -> buildLineGraphicEntityData(fieldsToAttributes, lines)); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index d5f0e3cbd..2ca424231 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import static java.util.Map.entry; + import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.RawGridException; import edu.ie3.datamodel.exceptions.SourceException; @@ -69,6 +71,16 @@ public RawGridSource(TypeSource typeSource, DataSource dataSource) { this.measurementUnitInputFactory = new MeasurementUnitInputFactory(); } + @Override + public Map, SourceValidator> getValidationMapping() { + return Map.ofEntries( + entry(NodeInput.class, nodeInputFactory), + entry(LineInput.class, lineInputFactory), + entry(Transformer2WInput.class, transformer2WInputFactory), + entry(SwitchInput.class, switchInputFactory), + entry(MeasurementUnitInput.class, measurementUnitInputFactory)); + } + /** * Should return either a consistent instance of {@link RawGridElements} or throw a {@link * SourceException}. The decision to throw a {@link SourceException} instead of returning the @@ -166,7 +178,7 @@ public Set getNodes() throws SourceException { */ public Set getNodes(Set operators) throws SourceException { return Try.scanCollection( - assetInputEntityDataStream(NodeInput.class, nodeInputFactory, operators) + assetInputEntityDataStream(NodeInput.class, operators) .map(nodeInputFactory::get) .collect(Collectors.toSet()), NodeInput.class) @@ -414,7 +426,7 @@ public Set> buildNodeInputEntiti Class entityClass, EntityFactory factory, Collection operators) { - return assetInputEntityDataStream(entityClass, factory, operators) + return assetInputEntityDataStream(entityClass, operators) .map(factory::get) .collect(Collectors.toSet()); } @@ -441,9 +453,7 @@ public Set> buildTransformer3WEntities return buildTransformer3WEntityData( buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( - assetInputEntityDataStream( - Transformer3WInput.class, transformer3WInputFactory, operators), - nodes), + assetInputEntityDataStream(Transformer3WInput.class, operators), nodes), transformer3WTypeInputs), nodes) .map(transformer3WInputFactory::get) @@ -562,7 +572,7 @@ Stream> typedEntityStream( Collection types) { return buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(entityClass, factory, operators), nodes), + assetInputEntityDataStream(entityClass, operators), nodes), types) .map(factory::get); } @@ -574,7 +584,7 @@ Stream> untypedConnectorInputEntityStream( Set nodes, Set operators) { return buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(entityClass, factory, operators), nodes) + assetInputEntityDataStream(entityClass, operators), nodes) .map(factory::get); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index b4cc69334..0378f0ab4 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import static java.util.Map.entry; + import edu.ie3.datamodel.io.factory.SimpleEntityFactory; import edu.ie3.datamodel.io.factory.result.*; import edu.ie3.datamodel.models.result.NodeResult; @@ -16,6 +18,7 @@ import edu.ie3.datamodel.models.result.system.*; import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult; import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult; +import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -60,6 +63,31 @@ public ResultEntitySource(DataSource dataSource, String dtfPattern) { this.flexOptionsResultFactory = new FlexOptionsResultFactory(); } + @Override + public Map, SourceValidator> getValidationMapping() { + return Map.ofEntries( + entry(LoadResult.class, systemParticipantResultFactory), + entry(FixedFeedInResult.class, systemParticipantResultFactory), + entry(BmResult.class, systemParticipantResultFactory), + entry(PvResult.class, systemParticipantResultFactory), + entry(ChpResult.class, systemParticipantResultFactory), + entry(WecResult.class, systemParticipantResultFactory), + entry(StorageResult.class, systemParticipantResultFactory), + entry(EvcsResult.class, systemParticipantResultFactory), + entry(EvResult.class, systemParticipantResultFactory), + entry(HpResult.class, systemParticipantResultFactory), + entry(EmResult.class, systemParticipantResultFactory), + entry(ThermalHouseResult.class, thermalResultFactory), + entry(CylindricalStorageResult.class, thermalResultFactory), + entry(SwitchResult.class, switchResultFactory), + entry(NodeResult.class, nodeResultFactory), + entry(SystemParticipantResult.class, connectorResultFactory), + entry(LineResult.class, connectorResultFactory), + entry(Transformer2WResult.class, connectorResultFactory), + entry(Transformer3WResult.class, connectorResultFactory), + entry(FlexOptionsResult.class, flexOptionsResultFactory)); + } + /** * Returns a unique set of {@link NodeResult} instances. * @@ -318,7 +346,7 @@ public Set getEmResults() { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- private Set getResultEntities( Class entityClass, SimpleEntityFactory factory) { - return simpleEntityDataStream(entityClass, factory) + return simpleEntityDataStream(entityClass) .map( entityData -> factory diff --git a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java index f3f8ee9ef..39aeb1f98 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java @@ -7,7 +7,7 @@ import java.util.Set; -public interface SourceValidator { +public interface SourceValidator { /** * Method for validating a data source. @@ -15,5 +15,5 @@ public interface SourceValidator { * @param foundFields fields that were found in the source data * @param entityClass that should be buildable from the source data */ - void validate(Set foundFields, Class entityClass); + void validate(Set foundFields, Class entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 19295f7a1..a0bf8d2c6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import static java.util.Map.entry; + import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.exceptions.SystemParticipantsException; @@ -77,6 +79,22 @@ public SystemParticipantSource( this.emInputFactory = new EmInputFactory(); } + @Override + public Map, SourceValidator> getValidationMapping() { + return Map.ofEntries( + entry(BmInput.class, bmInputFactory), + entry(ChpTypeInput.class, chpInputFactory), + entry(EvInput.class, evcsInputFactory), + entry(FixedFeedInInput.class, fixedFeedInInputFactory), + entry(HpInput.class, hpInputFactory), + entry(LoadInput.class, loadInputFactory), + entry(PvInput.class, pvInputFactory), + entry(StorageInput.class, storageInputFactory), + entry(WecInput.class, wecInputFactory), + entry(EvcsInput.class, evcsInputFactory), + entry(EmInput.class, emInputFactory)); + } + /** * Should return either a consistent instance of {@link SystemParticipants} or throw a {@link * SourceException}. The decision to throw a {@link SourceException} instead of returning the @@ -693,7 +711,7 @@ Stream> typedSystemParticipantEntityStream( Collection types) { return buildTypedSystemParticipantEntityData( nodeAssetInputEntityDataStream( - assetInputEntityDataStream(entityClass, factory, operators), nodes), + assetInputEntityDataStream(entityClass, operators), nodes), types) .map(factory::get); } @@ -708,7 +726,7 @@ private Stream> chpInputStream( return buildChpEntityData( buildTypedEntityData( nodeAssetInputEntityDataStream( - assetInputEntityDataStream(ChpInput.class, factory, operators), nodes), + assetInputEntityDataStream(ChpInput.class, operators), nodes), types), thermalStorages, thermalBuses) @@ -724,7 +742,7 @@ private Stream> hpInputStream( return buildHpEntityData( buildTypedEntityData( nodeAssetInputEntityDataStream( - assetInputEntityDataStream(HpInput.class, factory, operators), nodes), + assetInputEntityDataStream(HpInput.class, operators), nodes), types), thermalBuses) .map(factory::get); diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 60da88bc1..af41fbb2b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import static java.util.Map.entry; + import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.SourceException; @@ -46,6 +48,14 @@ public ThermalSource(TypeSource typeSource, DataSource dataSource) { this.thermalHouseInputFactory = new ThermalHouseInputFactory(); } + @Override + public Map, SourceValidator> getValidationMapping() { + return Map.ofEntries( + entry(ThermalBusInput.class, thermalBusInputFactory), + entry(CylindricalStorageInput.class, cylindricalStorageInputFactory), + entry(ThermalHouseInput.class, thermalHouseInputFactory)); + } + /** * Returns a unique set of {@link ThermalBusInput} instances. * @@ -262,7 +272,7 @@ public Try, FailureException> buildThermalHouseInputEntit Set thermalBuses = getThermalBuses(); return Try.scanCollection( - assetInputEntityDataStream(ThermalHouseInput.class, factory, typeSource.getOperators()) + assetInputEntityDataStream(ThermalHouseInput.class, typeSource.getOperators()) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) @@ -276,7 +286,7 @@ public Try, FailureException> buildThermalHouseInputEntit Collection operators, Collection thermalBuses) { return Try.scanCollection( - assetInputEntityDataStream(ThermalHouseInput.class, factory, operators) + assetInputEntityDataStream(ThermalHouseInput.class, operators) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) @@ -290,8 +300,7 @@ public Try, FailureException> buildCylindricalStora Set thermalBuses = getThermalBuses(); return Try.scanCollection( - assetInputEntityDataStream( - CylindricalStorageInput.class, factory, typeSource.getOperators()) + assetInputEntityDataStream(CylindricalStorageInput.class, typeSource.getOperators()) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) @@ -304,7 +313,7 @@ public Set> buildCylindricalStora CylindricalStorageInputFactory factory, Collection operators, Collection thermalBuses) { - return assetInputEntityDataStream(CylindricalStorageInput.class, factory, operators) + return assetInputEntityDataStream(CylindricalStorageInput.class, operators) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) diff --git a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java index 03377241f..0f85a4084 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -24,7 +24,7 @@ */ public abstract class TimeSeriesMappingSource { - private final TimeSeriesMappingFactory mappingFactory; + protected final TimeSeriesMappingFactory mappingFactory; protected TimeSeriesMappingSource() { this.mappingFactory = new TimeSeriesMappingFactory(); @@ -36,7 +36,7 @@ protected TimeSeriesMappingSource() { * @return That mapping */ public Map getMapping() { - return getMappingSourceData(mappingFactory) + return getMappingSourceData() .map(this::createMappingEntry) .filter(Try::isSuccess) .map(t -> (Success) t) @@ -59,7 +59,7 @@ public Optional getTimeSeriesUuid(UUID modelIdentifier) { * * @return Stream of maps */ - public abstract Stream> getMappingSourceData(SourceValidator validator); + public abstract Stream> getMappingSourceData(); // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index a7412cedc..f7bea01c8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import static java.util.Map.entry; + import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.OperatorInputFactory; import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory; @@ -17,6 +19,7 @@ import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.utils.Try; +import java.util.Map; import java.util.Set; /** @@ -45,6 +48,21 @@ public TypeSource(DataSource dataSource) { this.systemParticipantTypeInputFactory = new SystemParticipantTypeInputFactory(); } + @Override + public Map, SourceValidator> getValidationMapping() { + return Map.ofEntries( + entry(OperatorInput.class, operatorInputFactory), + entry(LineTypeInput.class, lineTypeInputFactory), + entry(Transformer2WTypeInput.class, transformer2WTypeInputFactory), + entry(Transformer3WTypeInput.class, transformer3WTypeInputFactory), + entry(BmTypeInput.class, systemParticipantTypeInputFactory), + entry(ChpTypeInput.class, systemParticipantTypeInputFactory), + entry(EvTypeInput.class, systemParticipantTypeInputFactory), + entry(HpTypeInput.class, systemParticipantTypeInputFactory), + entry(StorageTypeInput.class, systemParticipantTypeInputFactory), + entry(WecTypeInput.class, systemParticipantTypeInputFactory)); + } + /** * Returns a set of {@link Transformer2WTypeInput} instances. This set has to be unique in the * sense of object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index 75fea3036..9a355e746 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -10,7 +10,6 @@ import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; -import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.utils.validation.ValidationUtils; import edu.ie3.util.StringUtils; @@ -60,9 +59,8 @@ public CsvDataSource(String csvSep, Path folderPath, FileNamingStrategy fileNami } @Override - public Stream> getSourceData( - Class entityClass, SourceValidator validator) { - return buildStreamWithFieldsToAttributesMap(entityClass, connector, validator); + public Stream> getSourceData(Class entityClass) { + return buildStreamWithFieldsToAttributesMap(entityClass, connector); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -268,12 +266,9 @@ protected Predicate> isPresentCollectIfNot( * mapping (fieldName to fieldValue) */ protected Stream> buildStreamWithFieldsToAttributesMap( - Class entityClass, - CsvFileConnector connector, - SourceValidator validator) { + Class entityClass, CsvFileConnector connector) { try { - return buildStreamWithFieldsToAttributesMap( - entityClass, connector.initReader(entityClass), validator); + return buildStreamWithFieldsToAttributesMap(entityClass, connector.initReader(entityClass)); } catch (FileNotFoundException | ConnectorException e) { log.warn( "Unable to find file for entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); @@ -292,15 +287,10 @@ protected Stream> buildStreamWithFieldsToAttributesMap( * mapping (fieldName to fieldValue) */ protected Stream> buildStreamWithFieldsToAttributesMap( - Class entityClass, - BufferedReader bufferedReader, - SourceValidator validator) { + Class entityClass, BufferedReader bufferedReader) { try (BufferedReader reader = bufferedReader) { final String[] headline = parseCsvRow(reader.readLine(), csvSep); - // validating read file - validator.validate(Set.of(headline), entityClass); - // sanity check for headline if (!Arrays.asList(headline).contains("uuid")) { throw new SourceException( diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 2fa9e0f2a..5420b85f8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -18,7 +18,9 @@ import edu.ie3.datamodel.models.input.container.SystemParticipants; import edu.ie3.datamodel.utils.Try; import java.nio.file.Path; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** Convenience class for cases where all used data comes from CSV sources */ public class CsvJointGridContainerSource { @@ -52,6 +54,15 @@ public static JointGridContainer read( new SystemParticipantSource(typeSource, thermalSource, rawGridSource, dataSource); GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); + /* validating sources */ + Map, SourceValidator> validationMapping = + new HashMap<>(typeSource.getValidationMapping()); + validationMapping.putAll(rawGridSource.getValidationMapping()); + validationMapping.putAll(thermalSource.getValidationMapping()); + validationMapping.putAll(systemParticipantSource.getValidationMapping()); + validationMapping.putAll(graphicSource.getValidationMapping()); + dataSource.connector.validate(validationMapping, csvSep); + /* Loading models */ Try rawGridElements = Try.of(rawGridSource::getGridData, SourceException.class); diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index 8e9996f8d..12c4182c8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.source.csv; import edu.ie3.datamodel.io.naming.FileNamingStrategy; -import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.nio.file.Path; import java.util.Map; @@ -19,11 +18,14 @@ public class CsvTimeSeriesMappingSource extends TimeSeriesMappingSource { public CsvTimeSeriesMappingSource( String csvSep, Path gridFolderPath, FileNamingStrategy fileNamingStrategy) { this.dataSource = new CsvDataSource(csvSep, gridFolderPath, fileNamingStrategy); + + // validating + dataSource.connector.validate(Map.of(MappingEntry.class, mappingFactory), dataSource.csvSep); } @Override - public Stream> getMappingSourceData(SourceValidator validator) { + public Stream> getMappingSourceData() { return dataSource.buildStreamWithFieldsToAttributesMap( - MappingEntry.class, dataSource.connector, validator); + MappingEntry.class, dataSource.connector); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java index 1ad3d5e5d..4b8d55604 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java @@ -12,7 +12,6 @@ import edu.ie3.datamodel.io.factory.timeseries.*; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesSource; -import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries; import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.*; @@ -100,11 +99,7 @@ public CsvTimeSeriesSource( /* Read in the full time series */ try { this.timeSeries = - buildIndividualTimeSeries( - timeSeriesUuid, - filePath, - this::createTimeBasedValue, - (Class) valueClass); + buildIndividualTimeSeries(timeSeriesUuid, filePath, this::createTimeBasedValue); } catch (SourceException e) { throw new IllegalArgumentException( "Unable to obtain time series with UUID '" @@ -145,14 +140,13 @@ public Optional getValue(ZonedDateTime time) { protected IndividualTimeSeries buildIndividualTimeSeries( UUID timeSeriesUuid, Path filePath, - Function, Try, FactoryException>> fieldToValueFunction, - Class entityClass) + Function, Try, FactoryException>> fieldToValueFunction) throws SourceException { try (BufferedReader reader = dataSource.connector.initReader(filePath)) { Try>, FailureException> timeBasedValues = Try.scanStream( dataSource - .buildStreamWithFieldsToAttributesMap(entityClass, reader, valueFactory) + .buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) .map(fieldToValueFunction), "TimeBasedValue"); return new IndividualTimeSeries<>( diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java index 8f15ba0a8..f6841c3e2 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java @@ -9,7 +9,6 @@ import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; -import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.util.StringUtils; import java.sql.PreparedStatement; @@ -110,8 +109,7 @@ protected List getDbTables(String schemaPattern, String tableNamePattern } @Override - public Stream> getSourceData( - Class entityClass, SourceValidator validator) { + public Stream> getSourceData(Class entityClass) { String explicitTableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); return buildStreamByTableName(explicitTableName); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java index 8ec86c162..fa084c3d8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java @@ -7,11 +7,9 @@ import static edu.ie3.datamodel.io.source.sql.SqlDataSource.createBaseQueryString; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; -import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.sql.SQLException; import java.util.Map; @@ -26,7 +24,8 @@ public class SqlTimeSeriesMappingSource extends TimeSeriesMappingSource { public SqlTimeSeriesMappingSource( SqlConnector connector, String schemaName, - EntityPersistenceNamingStrategy entityPersistenceNamingStrategy) { + EntityPersistenceNamingStrategy entityPersistenceNamingStrategy) + throws SQLException { this.dataSource = new SqlDataSource( connector, schemaName, new DatabaseNamingStrategy(entityPersistenceNamingStrategy)); @@ -35,16 +34,12 @@ public SqlTimeSeriesMappingSource( this.tableName = entityPersistenceNamingStrategy.getEntityName(MappingEntry.class).orElseThrow(); this.queryFull = createBaseQueryString(schemaName, tableName); + + dataSource.connector.validateDBTable(tableName, TimeSeriesMappingSource.class, mappingFactory); } @Override - public Stream> getMappingSourceData(SourceValidator validator) { - try { - dataSource.connector.validateDBTable(tableName, TimeSeriesMappingSource.class, validator); - } catch (SQLException e) { - throw new FactoryException(e); - } - + public Stream> getMappingSourceData() { return dataSource.executeQuery(queryFull); } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy new file mode 100644 index 000000000..e7dc42212 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy @@ -0,0 +1,80 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.io.factory + +import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.utils.Try +import spock.lang.Shared +import spock.lang.Specification + +class FactoryTest extends Specification { + @Shared + private DummyFactory factory = new DummyFactory(String) + + + def "A Factory can return additional fields correctly"() { + when: + def additional = factory.getAdditionalFields(actualFields as Set, validFieldSets) + + then: + additional == expected as Set + + where: + actualFields | validFieldSets | expected + [ + "uuid", + "id", + "time", + "value_1" + ] | [ + ["uuid", "value_1"] as Set, + ["id", "time", "value_1"] as Set + ] | ["uuid"] + [ + "uuid", + "id", + "time", + "value_1", + "value_2", + "value_3" + ] | [ + ["uuid", "value_1", "value_3"] as Set, + ["id", "time", "value_1"] as Set + ] | ["id", "time", "value_2"] + } + + def "A Factory should allow additional fields"() { + given: + def foundFields = factory.newSet("uuid", "id", "time", "value_1", "value_2", "value_3") + + when: + Try input = Try.ofVoid(() -> factory.validate(foundFields, String), FactoryException) + + then: + input.success + } + + + private class DummyFactory extends Factory { + + protected DummyFactory(Class... supportedClasses) { + super(supportedClasses) + } + + @Override + protected String buildModel(SimpleFactoryData data) { + return null + } + + @Override + protected List> getFields(Class entityClass) { + return [ + ["uuid", "value1", "value3"] as Set, + ["id", "time", "value1"] as Set + ] + } + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy index 11d613bec..8243a5b3d 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy @@ -287,21 +287,9 @@ class AssetInputEntityFactoryTest extends Specification implements FactoryTestHe input.exception.get().message == "The provided fields [operates_from, operates_until, uuid] are invalid for instance of 'TestAssetInput'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'TestAssetInput' are possible (NOT case-sensitive!):\n" + "0: [id, uuid] or [id, uuid]\n" + - "1: [id, operates_from, uuid] or [id, operatesFrom, uuid]\n" + - "2: [id, operates_until, uuid] or [id, operatesUntil, uuid]\n" + - "3: [id, operates_from, operates_until, uuid] or [id, operatesFrom, operatesUntil, uuid]\n" - } - - def "An AssetInputFactory should allow additional fields"() { - given: - def inputFactory = new TestAssetInputFactory() - def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until", "id", "additional_field") - - when: - Try input = Try.ofVoid(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) - - then: - input.success + "1: [id, operatesFrom, uuid] or [id, operates_from, uuid]\n" + + "2: [id, operatesUntil, uuid] or [id, operates_until, uuid]\n" + + "3: [id, operatesFrom, operatesUntil, uuid] or [id, operates_from, operates_until, uuid]\n" } private static class TestAssetInput extends AssetInput { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index 3532e2554..1091238cb 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -85,9 +85,9 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe input.failure input.exception.get().message == "The provided fields [cosphi_rated, id, s_rated, uuid] are invalid for instance of 'FixedFeedInInput'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" + - "0: [cos_phi_rated, id, q_characteristics, s_rated, uuid] or [cosPhiRated, id, qCharacteristics, sRated, uuid]\n" + - "1: [cos_phi_rated, id, operates_from, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesFrom, qCharacteristics, sRated, uuid]\n" + - "2: [cos_phi_rated, id, operates_until, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesUntil, qCharacteristics, sRated, uuid]\n" + - "3: [cos_phi_rated, id, operates_from, operates_until, q_characteristics, s_rated, uuid] or [cosPhiRated, id, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid]\n" + "0: [cosPhiRated, id, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, q_characteristics, s_rated, uuid]\n" + + "1: [cosPhiRated, id, operatesFrom, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_from, q_characteristics, s_rated, uuid]\n" + + "2: [cosPhiRated, id, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_until, q_characteristics, s_rated, uuid]\n" + + "3: [cosPhiRated, id, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_from, operates_until, q_characteristics, s_rated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy index bab574a5e..6831a7746 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy @@ -62,7 +62,7 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH input.failure input.exception.get().message == "The provided fields [input_model, p_min, p_ref, time] are invalid for instance of 'FlexOptionsResult'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FlexOptionsResult' are possible (NOT case-sensitive!):\n" + - "0: [input_model, p_max, p_min, p_ref, time] or [inputModel, pMax, pMin, pRef, time]\n" + - "1: [input_model, p_max, p_min, p_ref, time, uuid] or [inputModel, pMax, pMin, pRef, time, uuid]\n" + "0: [inputModel, pMax, pMin, pRef, time] or [input_model, p_max, p_min, p_ref, time]\n" + + "1: [inputModel, pMax, pMin, pRef, time, uuid] or [input_model, p_max, p_min, p_ref, time, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy index aea5c3be8..7767998d6 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy @@ -60,7 +60,7 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { input.failure input.exception.get().message == "The provided fields [input_model, time, v_mag] are invalid for instance of 'NodeResult'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'NodeResult' are possible (NOT case-sensitive!):\n" + - "0: [input_model, time, v_ang, v_mag] or [inputModel, time, vAng, vMag]\n" + - "1: [input_model, time, uuid, v_ang, v_mag] or [inputModel, time, uuid, vAng, vMag]\n" + "0: [inputModel, time, vAng, vMag] or [input_model, time, v_ang, v_mag]\n" + + "1: [inputModel, time, uuid, vAng, vMag] or [input_model, time, uuid, v_ang, v_mag]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy index efa30db11..5c4983db3 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy @@ -136,8 +136,8 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor result.failure result.exception.get().message == "The provided fields [input_model, q, time] are invalid for instance of 'WecResult'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'WecResult' are possible (NOT case-sensitive!):\n" + - "0: [input_model, p, q, time] or [inputModel, p, q, time]\n" + - "1: [input_model, p, q, time, uuid] or [inputModel, p, q, time, uuid]\n" + "0: [inputModel, p, q, time] or [input_model, p, q, time]\n" + + "1: [inputModel, p, q, time, uuid] or [input_model, p, q, time, uuid]\n" } def "A SystemParticipantResultFactory should be performant"() { @@ -156,7 +156,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor resultFactory.get(new SimpleEntityData(parameter, StorageResult)) } BigDecimal elapsedTime = (System - .currentTimeMillis() - startTime) / 1000.0 + .currentTimeMillis() - startTime) / 1000.0 elapsedTime < 3 } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy index 00115184e..fc7534a04 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy @@ -52,7 +52,7 @@ class CosmoIdCoordinateFactoryTest extends Specification { actual.failure actual.exception.get().message == "The provided fields [id, latrot, longrot, tid] are invalid for instance of 'Pair'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + - "0: [id, lat_geo, lat_rot, long_geo, long_rot, tid] or [id, latGeo, latRot, longGeo, longRot, tid]\n" + "0: [id, latGeo, latRot, longGeo, longRot, tid] or [id, lat_geo, lat_rot, long_geo, long_rot, tid]\n" } def "A COSMO id to coordinate factory builds model from valid data"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index be32388b0..fbc664d34 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -50,7 +50,7 @@ class IconIdCoordinateFactoryTest extends Specification { actual.failure actual.exception.get().message == "The provided fields [coordinatetype, id, latitude] are invalid for instance of 'Pair'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + - "0: [coordinate_type, id, latitude, longitude] or [coordinateType, id, latitude, longitude]\n" + "0: [coordinateType, id, latitude, longitude] or [coordinate_type, id, latitude, longitude]\n" } def "A COSMO id to coordinate factory builds model from valid data"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index 1f5856a47..8f6340c8c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -289,6 +289,6 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac input.failure input.exception.get().message == "The provided fields [capex, cosPhiRated, dod, estorage, eta, id, lifetime, opex, pmax, pmin, srated, uuid] are invalid for instance of 'StorageTypeInput'. \n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'StorageTypeInput' are possible (NOT case-sensitive!):\n" + - "0: [active_power_gradient, capex, cos_phi_rated, dod, e_storage, eta, id, life_cycle, life_time, opex, p_max, s_rated, uuid] or [activePowerGradient, capex, cosPhiRated, dod, eStorage, eta, id, lifeCycle, lifeTime, opex, pMax, sRated, uuid]\n" + "0: [activePowerGradient, capex, cosPhiRated, dod, eStorage, eta, id, lifeCycle, lifeTime, opex, pMax, sRated, uuid] or [active_power_gradient, capex, cos_phi_rated, dod, e_storage, eta, id, life_cycle, life_time, opex, p_max, s_rated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 4b51be15b..32f4fd439 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -24,6 +24,11 @@ class EntitySourceTest extends Specification { DummyEntitySource(CsvDataSource dataSource) { this.dataSource = dataSource } + + @Override + Map, SourceValidator> getValidationMapping() { + return null + } } @Shared diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy index 3dbf7940c..de1857954 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy @@ -35,7 +35,7 @@ class CsvTimeSeriesSourceIT extends Specification implements CsvTestDataMeta { def filePath = Path.of("file/not/found.csv") when: - source.buildIndividualTimeSeries(UUID.fromString("fbc59b5b-9307-4fb4-a406-c1f08f26fee5"), filePath, { null }, null) + source.buildIndividualTimeSeries(UUID.fromString("fbc59b5b-9307-4fb4-a406-c1f08f26fee5"), filePath, { null }) then: def ex = thrown(SourceException) @@ -49,7 +49,7 @@ class CsvTimeSeriesSourceIT extends Specification implements CsvTestDataMeta { def tsUuid = UUID.fromString("76c9d846-797c-4f07-b7ec-2245f679f5c7") when: - def actual = source.buildIndividualTimeSeries(tsUuid, filePath, { source.createTimeBasedValue(it) }, HeatAndPValue) + def actual = source.buildIndividualTimeSeries(tsUuid, filePath, { source.createTimeBasedValue(it) }) then: noExceptionThrown() From ca77ddb2260c8efe6988097998b40994fb6f90ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Nov 2023 09:55:47 +0000 Subject: [PATCH 016/228] Bump com.github.spotbugs from 5.2.3 to 5.2.4 (#941) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c0d3a0a32..74c38e0c9 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'signing' id 'pmd' // code check, working on source code id 'com.diffplug.spotless' version '6.22.0' //code format - id 'com.github.spotbugs' version '5.2.3' // code check, working on byte code + id 'com.github.spotbugs' version '5.2.4' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation id 'jacoco' // java code coverage plugin From 36723be12c9e09cb5254cf227377043343fd342e Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 27 Nov 2023 12:45:59 +0100 Subject: [PATCH 017/228] Implementing requested changes. --- .../ie3/datamodel/io/source/EntitySource.java | 44 +++++++++++------- .../io/source/SystemParticipantSource.java | 45 +++++++------------ 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 3dff1ac76..550c76111 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -33,6 +33,7 @@ public abstract class EntitySource { protected static final String OPERATOR = "operator"; protected static final String NODE = "node"; protected static final String TYPE = "type"; + protected static final String FIELDS_TO_VALUES_MAP = "fieldsToValuesMap"; DataSource dataSource; @@ -50,10 +51,24 @@ protected String buildSkippingMessage( + missingElementsString; } - protected String getOrThrow(Map map, String field) throws SourceException { - return Optional.ofNullable(map.get(field)) - .orElseThrow( - () -> new SourceException("Field " + field + " was not found in map " + map + ".")); + /** + * Method for retrieving an element from a map. If the map doesn't contain the key an error + * message is build and returned instead. + * + *

Should not be used for other purposes than creating error messages. + * + * @param map with value + * @param key for the value + * @param mapName name of the map used for the error message + * @return either the value or an error message + */ + protected String safeMapGet(Map map, String key, String mapName) { + return Optional.ofNullable(map.get(key)) + .orElse( + "Key '" + + key + + "' not found" + + (mapName.isEmpty() ? "!" : " in map '" + mapName + "'!")); } /** @@ -79,7 +94,7 @@ protected Optional findFirstEntityByUuid( * the provided fields to values mapping. The provided fields to values mapping needs to have one * and only one field with key {@link #TYPE} and a corresponding UUID value. If the type can be * found in the provided collection based on the UUID it is returned wrapped in a {@link Success}. - * Otherwise a {@link Failure} is returned and a warning is logged. + * Otherwise, a {@link Failure} is returned and a warning is logged. * * @param types a collection of types that should be used for searching * @param fieldsToAttributes the field name to value mapping incl. the key {@link #TYPE} @@ -97,15 +112,13 @@ protected Try getAssetType( // if the type is not present we return an empty element and // log a warning if (assetType.isEmpty()) { - return Try.of( - () -> - buildSkippingMessage( - skippedClassString, - getOrThrow(fieldsToAttributes, "uuid"), - getOrThrow(fieldsToAttributes, "id"), - TYPE + ": " + getOrThrow(fieldsToAttributes, TYPE)), - SourceException.class) - .flatMap(message -> Failure.of(new SourceException("Failure due to: " + message))); + String skippingMessage = + buildSkippingMessage( + skippedClassString, + safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), + safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), + TYPE + ": " + safeMapGet(fieldsToAttributes, TYPE, FIELDS_TO_VALUES_MAP)); + return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); } return new Success<>(assetType.get()); } @@ -270,8 +283,7 @@ protected AssetInputEntityData assetInputEntityDataStream operators, operatorUuid, entityClass.getSimpleName(), - fieldsToAttributes.getOrDefault( - "uuid", "No 'uuid' found in map " + fieldsToAttributes + "!")); + safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP)); // remove fields that are passed as objects to constructor fieldsToAttributes.keySet().removeAll(new HashSet<>(Collections.singletonList(OPERATOR))); diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index a1a4e5130..d00f4e37a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -889,17 +889,13 @@ protected Try buildHpEntityData( // if the requested entity is not present we return an empty element and // log a warning if (hpInputEntityDataOpt.isEmpty()) { - return Try.of( - () -> - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - getOrThrow(fieldsToAttributes, "uuid"), - getOrThrow(fieldsToAttributes, "id"), - "thermalBus: " + getOrThrow(fieldsToAttributes, THERMAL_BUS)), - SourceException.class) - .flatMap( - skippingMessage -> - Failure.of(new SourceException("Failure due to: " + skippingMessage))); + String skippingMessage = + buildSkippingMessage( + typedEntityData.getTargetClass().getSimpleName(), + safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), + safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), + "thermalBus: " + safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); + return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); } return new Success<>(hpInputEntityDataOpt.get()); @@ -948,29 +944,20 @@ protected Try buildChpEntityData( StringBuilder sB = new StringBuilder(); if (thermalStorage.isEmpty()) { sB.append("thermalStorage: ") - .append( - fieldsToAttributes.getOrDefault( - THERMAL_STORAGE, - "No 'thermalStorage' found in map " + fieldsToAttributes + "!")); + .append(safeMapGet(fieldsToAttributes, THERMAL_STORAGE, FIELDS_TO_VALUES_MAP)); } if (thermalBus.isEmpty()) { sB.append("\nthermalBus: ") - .append( - fieldsToAttributes.getOrDefault( - THERMAL_BUS, "No 'thermalBus' found in map " + fieldsToAttributes + "!")); + .append(safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); } - return Try.of( - () -> - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - getOrThrow(fieldsToAttributes, "uuid"), - getOrThrow(fieldsToAttributes, "id"), - sB.toString()), - SourceException.class) - .flatMap( - skippingMessage -> - Failure.of(new SourceException("Failure due to: " + skippingMessage))); + String skippingMessage = + buildSkippingMessage( + typedEntityData.getTargetClass().getSimpleName(), + safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), + safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), + sB.toString()); + return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); } // remove fields that are passed as objects to constructor From 26194f10b0f1164f9edd04158a7a1c7ceb4dcaf4 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 27 Nov 2023 13:11:28 +0100 Subject: [PATCH 018/228] Implementing requested changes. --- .../DuplicateEntitiesException.java | 2 +- .../ie3/datamodel/utils/ExceptionUtils.java | 4 +- .../GridContainerValidationUtils.java | 42 +++++++------- .../utils/validation/ValidationUtils.java | 57 +++++++------------ .../validation/ValidationUtilsTest.groovy | 43 ++++---------- 5 files changed, 54 insertions(+), 94 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java b/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java index abf5f1d92..c8c2ac7da 100644 --- a/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java +++ b/src/main/java/edu/ie3/datamodel/exceptions/DuplicateEntitiesException.java @@ -21,7 +21,7 @@ protected DuplicateEntitiesException(String s, String entities) { public DuplicateEntitiesException(String fieldName, Collection entities) { this( - "The following entities have duplicate '" + fieldName + "':", + "The following entities have duplicate '" + fieldName + "': ", ExceptionUtils.combine(entities)); } } diff --git a/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java b/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java index 1569adf0e..ebbaa61f8 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java @@ -35,6 +35,8 @@ public static String getMessages(List exceptions) { * @return a string */ public static String combine(Collection entities) { - return entities.stream().map(UniqueEntity::toString).collect(Collectors.joining("\n - ")); + return "{" + + entities.stream().map(UniqueEntity::toString).collect(Collectors.joining(", ")) + + "}"; } } diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java index 8ff8bc9cd..77388c6d4 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java @@ -45,7 +45,7 @@ private GridContainerValidationUtils() { /* sanity check to ensure distinct UUIDs */ List> exceptions = new ArrayList<>( - checkForDuplicate(gridContainer.allEntitiesAsList(), UniqueEntity::getUuid)); + checkForDuplicates(gridContainer.allEntitiesAsList(), UniqueEntity::getUuid)); exceptions.addAll(checkRawGridElements(gridContainer.getRawGrid())); exceptions.addAll( @@ -83,7 +83,7 @@ private GridContainerValidationUtils() { /* sanity check to ensure distinct UUIDs */ List> exceptions = new ArrayList<>( - checkForDuplicate(rawGridElements.allEntitiesAsList(), UniqueEntity::getUuid)); + checkForDuplicates(rawGridElements.allEntitiesAsList(), UniqueEntity::getUuid)); /* Checking nodes */ Set nodes = rawGridElements.getNodes(); @@ -163,12 +163,12 @@ private GridContainerValidationUtils() { protected static List> checkRawGridTypeIds( RawGridElements rawGridElements) { List> exceptions = new ArrayList<>(); - exceptions.addAll(checkForDuplicate(rawGridElements.getNodes(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(rawGridElements.getLines(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(rawGridElements.getTransformer2Ws(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(rawGridElements.getTransformer3Ws(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(rawGridElements.getSwitches(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(rawGridElements.getMeasurementUnits(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(rawGridElements.getNodes(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(rawGridElements.getLines(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(rawGridElements.getTransformer2Ws(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(rawGridElements.getTransformer3Ws(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(rawGridElements.getSwitches(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(rawGridElements.getMeasurementUnits(), AssetInput::getId)); return exceptions; } @@ -194,7 +194,7 @@ protected static List> checkRawGridTypeIds // sanity check for distinct uuids List> exceptions = new ArrayList<>( - checkForDuplicate(systemParticipants.allEntitiesAsList(), UniqueEntity::getUuid)); + checkForDuplicates(systemParticipants.allEntitiesAsList(), UniqueEntity::getUuid)); exceptions.addAll(checkSystemParticipants(systemParticipants.getBmPlants(), nodes)); exceptions.addAll(checkSystemParticipants(systemParticipants.getChpPlants(), nodes)); @@ -245,17 +245,17 @@ protected static List> checkRawGridTypeIds protected static List> checkSystemParticipantsTypeIds( SystemParticipants systemParticipants) { List> exceptions = new ArrayList<>(); - exceptions.addAll(checkForDuplicate(systemParticipants.getBmPlants(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getChpPlants(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getEvCS(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getEvs(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getFixedFeedIns(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getHeatPumps(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getLoads(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getPvPlants(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getStorages(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getWecPlants(), AssetInput::getId)); - exceptions.addAll(checkForDuplicate(systemParticipants.getEmSystems(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getBmPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getChpPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getEvCS(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getEvs(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getFixedFeedIns(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getHeatPumps(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getLoads(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getPvPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getStorages(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getWecPlants(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getEmSystems(), AssetInput::getId)); return exceptions; } @@ -280,7 +280,7 @@ protected static List> checkSystemParticip // sanity check for distinct uuids List> exceptions = new ArrayList<>( - checkForDuplicate(graphicElements.allEntitiesAsList(), UniqueEntity::getUuid)); + checkForDuplicates(graphicElements.allEntitiesAsList(), UniqueEntity::getUuid)); graphicElements .getNodeGraphics() diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index affc0bb69..035075adc 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -299,20 +299,6 @@ protected static void detectMalformedQuantities( } } - /** - * Determines if the provided set only contains elements with distinct UUIDs - * - * @param entities the set that should be checked - * @return true if all UUIDs of the provided entities are unique, false otherwise - */ - private static boolean distinctUuids(Set entities) { - return entities.stream() - .filter(distinctByKey(UniqueEntity::getUuid)) - .collect(Collectors.toSet()) - .size() - == entities.size(); - } - /** * Predicate that can be used to filter elements based on a given Function * @@ -331,39 +317,34 @@ public static Predicate distinctByKey(Function keyExtractor * @param entities to be checked * @param supplier for the field * @return a list of {@link Try}. - * @param type of the field - * @param type of the {@link UniqueEntity} + * @param type of the {@link UniqueEntity} + * @param type of the field */ - protected static - List> checkForDuplicate( - Collection entities, FieldSupplier supplier) { - Map> duplicates = + protected static + List> checkForDuplicates( + Collection entities, FieldSupplier supplier) { + Map> duplicates = entities.stream().collect(Collectors.groupingBy(supplier::getField)); - List> exceptions = new ArrayList<>(); - - duplicates.entrySet().stream() + return duplicates.entrySet().stream() .filter(e -> e.getValue().size() > 1) - .forEach( - duplicate -> { - A key = duplicate.getKey(); - exceptions.add( - Failure.ofVoid( - new DuplicateEntitiesException( - key.getClass().getSimpleName(), duplicates.get(key)))); - }); - - return exceptions; + .map( + duplicate -> + (Try) + Failure.ofVoid( + new DuplicateEntitiesException( + duplicate.getKey().getClass().getSimpleName(), duplicate.getValue()))) + .toList(); } /** - * Supplier for unique entity fields. + * Supplier for unique entity fields that returns a field of type F given an entity of type E. * - * @param type of field - * @param type of unique entity + * @param type of unique entity + * @param type of field */ @FunctionalInterface - protected interface FieldSupplier { - A getField(B entity); + protected interface FieldSupplier { + F getField(E entity); } } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy index aa2ee5295..d6971bcb0 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy @@ -45,36 +45,12 @@ class ValidationUtilsTest extends Specification { noExceptionThrown() } - def "The validation utils should determine if a collection with UniqueEntity's is distinct by their uuid"() { - - expect: - ValidationUtils.distinctUuids(collection) == distinct - - where: - collection || distinct - [ - GridTestData.nodeF, - new NodeInput( - UUID.fromString("9e37ce48-9650-44ec-b888-c2fd182aff01"), "node_g", OperatorInput.NO_OPERATOR_ASSIGNED, - OperationTime.notLimited() - , - Quantities.getQuantity(1d, PU), - false, - null, - GermanVoltageLevelUtils.LV, - 6) - ] as Set || false - [ - GridTestData.nodeD, - GridTestData.nodeE - ] as Set || true - [] as Set || true - } - def "The validation utils should check for duplicates as expected"() { expect: - ValidationUtils.checkForDuplicate(collection, UniqueEntity::getUuid).every { - it.exception.map { + def tries = ValidationUtils.checkForDuplicates(collection, UniqueEntity::getUuid) + + if (!tries.isEmpty()) { + tries.get(0).exception.map { it.message } == checkResult } @@ -100,8 +76,9 @@ class ValidationUtilsTest extends Specification { null, GermanVoltageLevelUtils.LV, 6) - ] as Set || Optional.of("The following entities have duplicate 'UUID':NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_f', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}\n" + - " - NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_g', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}") + ] as Set || Optional.of("The following entities have duplicate 'UUID': " + + "{NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_f', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}, " + + "NodeInput{uuid=9e37ce48-9650-44ec-b888-c2fd182aff01, id='node_g', operator=f15105c4-a2de-4ab8-a621-4bc98e372d92, operationTime=OperationTime{startDate=null, endDate=null, isLimited=false}, vTarget=1 p.u., slack=false, geoPosition=null, voltLvl=CommonVoltageLevel{id='Niederspannung', nominalVoltage=0.4 kV, synonymousIds=[Niederspannung, lv, ns], voltageRange=Interval [0.0 kV, 10 kV)}, subnet=6}}") [ GridTestData.nodeD, GridTestData.nodeE @@ -262,7 +239,7 @@ class ValidationUtilsTest extends Specification { ] when: - List> exceptions = ValidationUtils.checkForDuplicate(validAssetIds, AssetInput::getId) + List> exceptions = ValidationUtils.checkForDuplicates(validAssetIds, AssetInput::getId) then: exceptions.every { @@ -278,11 +255,11 @@ class ValidationUtilsTest extends Specification { ] when: - List> exceptions = ValidationUtils.checkForDuplicate(invalidAssetIds, AssetInput::getId) + List> exceptions = ValidationUtils.checkForDuplicates(invalidAssetIds, AssetInput::getId) then: exceptions.size() == 1 exceptions.get(0).failure - exceptions.get(0).exception.get().message.contains("The following entities have duplicate 'String':AssetInput") + exceptions.get(0).exception.get().message.startsWith("The following entities have duplicate 'String': {AssetInput{uuid=") } } From ce9c6ce3eb4326452160d782f073f2a2c04ad75c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 10:36:18 +0000 Subject: [PATCH 019/228] Bump com.diffplug.spotless from 6.22.0 to 6.23.0 (#943) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 74c38e0c9..6112230eb 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'maven-publish' id 'signing' id 'pmd' // code check, working on source code - id 'com.diffplug.spotless' version '6.22.0' //code format + id 'com.diffplug.spotless' version '6.23.0' //code format id 'com.github.spotbugs' version '5.2.4' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation From bda0e11c0fbb3cc4ae19122ba638fc8ad7ce6303 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 28 Nov 2023 12:15:56 +0100 Subject: [PATCH 020/228] Fix dev CI (removed plugin) --- Jenkinsfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index cf2156d11..1a6029879 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -451,7 +451,6 @@ def constantBranchesProps() { [ string(defaultValue: '', description: '', name: 'deploy', trim: true) ]), - [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false], [$class: 'ThrottleJobProperty', categories: [], limitOneJobWithMatchingParams: false, maxConcurrentPerNode: 0, maxConcurrentTotal: 0, paramsToUseForLimit: '', throttleEnabled: true, throttleOption: 'project'] ]) } From 3998ee35829c925f09000adcd47b0fb798334a44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:08:26 +0000 Subject: [PATCH 021/228] Bump sphinx-rtd-theme from 1.3.0 to 2.0.0 in /docs/readthedocs (#944) --- docs/readthedocs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/requirements.txt b/docs/readthedocs/requirements.txt index 6e3fa7773..cb581e840 100644 --- a/docs/readthedocs/requirements.txt +++ b/docs/readthedocs/requirements.txt @@ -1,6 +1,6 @@ commonmark==0.9.1 recommonmark==0.7.1 Sphinx==7.2.6 -sphinx-rtd-theme==1.3.0 +sphinx-rtd-theme==2.0.0 myst-parser==2.0.0 markdown-it-py==3.0.0 From 4bcf4c9df56ffa01f658b356448dd0287b25ea31 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 28 Nov 2023 16:23:47 +0100 Subject: [PATCH 022/228] Works without casting with collect(Collectors.toList()) --- .../ie3/datamodel/utils/validation/ValidationUtils.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index 035075adc..9cdd9add2 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -330,11 +330,10 @@ List> checkForDuplicates( .filter(e -> e.getValue().size() > 1) .map( duplicate -> - (Try) - Failure.ofVoid( - new DuplicateEntitiesException( - duplicate.getKey().getClass().getSimpleName(), duplicate.getValue()))) - .toList(); + Failure.ofVoid( + new DuplicateEntitiesException( + duplicate.getKey().getClass().getSimpleName(), duplicate.getValue()))) + .collect(Collectors.toList()); } /** From 68565cdf825b765d3fc2ecb8dc657ca89dbe9247 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:14:05 +0000 Subject: [PATCH 023/228] Bump com.diffplug.spotless from 6.23.0 to 6.23.2 (#948) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6112230eb..534d1edb4 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'maven-publish' id 'signing' id 'pmd' // code check, working on source code - id 'com.diffplug.spotless' version '6.23.0' //code format + id 'com.diffplug.spotless' version '6.23.2' //code format id 'com.github.spotbugs' version '5.2.4' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation From c1a7f222747a07e283887ceb593699f407c62793 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 14:00:16 +0000 Subject: [PATCH 024/228] Bump com.github.spotbugs from 5.2.4 to 5.2.5 (#949) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 534d1edb4..dd78d050b 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'signing' id 'pmd' // code check, working on source code id 'com.diffplug.spotless' version '6.23.2' //code format - id 'com.github.spotbugs' version '5.2.4' // code check, working on byte code + id 'com.github.spotbugs' version '5.2.5' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation id 'jacoco' // java code coverage plugin From 1597c3e258ea66a5d61f6745f97de77dca373a18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 14:15:34 +0000 Subject: [PATCH 025/228] Bump commons-io:commons-io from 2.15.0 to 2.15.1 (#947) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dd78d050b..c78353c1c 100644 --- a/build.gradle +++ b/build.gradle @@ -93,7 +93,7 @@ dependencies { implementation 'com.couchbase.client:java-client:3.5.0' runtimeOnly 'org.postgresql:postgresql:42.7.0' // postgresql jdbc driver required during runtime - implementation 'commons-io:commons-io:2.15.0' // I/O functionalities + implementation 'commons-io:commons-io:2.15.1' // I/O functionalities implementation 'org.apache.commons:commons-compress:1.25.0' // I/O functionalities implementation 'org.apache.commons:commons-lang3:3.14.0' } From 8b306b5e1ac1e62459245ecf78a72646e6e05a54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 14:24:46 +0000 Subject: [PATCH 026/228] Bump org.apache.groovy:groovy from 4.0.15 to 4.0.16 (#946) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c78353c1c..7eae79cfe 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ ext { //version (changing these should be considered thoroughly!) javaVersion = JavaVersion.VERSION_17 groovyVersion = "4.0" - groovyBinaryVersion = "4.0.15" + groovyBinaryVersion = "4.0.16" testcontainersVersion = '1.19.3' scriptsLocation = 'gradle' + File.separator + 'scripts' + File.separator //location of script plugins From fd3bb766e86ff5c6ead2b6c1d74ef0592d18eb6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 09:24:59 +0000 Subject: [PATCH 027/228] Bump com.diffplug.spotless from 6.23.2 to 6.23.3 (#951) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7eae79cfe..32a8ddd02 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'maven-publish' id 'signing' id 'pmd' // code check, working on source code - id 'com.diffplug.spotless' version '6.23.2' //code format + id 'com.diffplug.spotless' version '6.23.3' //code format id 'com.github.spotbugs' version '5.2.5' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation From f37d7b6fa8cd9f32be8e677962ff26ba3e2a01bd Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 5 Dec 2023 13:55:00 +0100 Subject: [PATCH 028/228] Implementing requested changes. --- .../io/connectors/CouchbaseConnector.java | 14 +--- .../io/connectors/CsvFileConnector.java | 59 ---------------- .../io/connectors/InfluxDbConnector.java | 12 +--- .../datamodel/io/connectors/SqlConnector.java | 23 ------- .../edu/ie3/datamodel/io/factory/Factory.java | 25 ++++--- .../ie3/datamodel/io/source/DataSource.java | 9 +++ .../ie3/datamodel/io/source/EntitySource.java | 21 +++++- .../datamodel/io/source/GraphicSource.java | 14 ++-- .../io/source/IdCoordinateSource.java | 9 +++ .../datamodel/io/source/RawGridSource.java | 31 ++++----- .../io/source/ResultEntitySource.java | 68 ++++++++++++------- .../datamodel/io/source/SourceValidator.java | 6 +- .../io/source/SystemParticipantSource.java | 31 +++++---- .../datamodel/io/source/ThermalSource.java | 15 ++-- .../io/source/TimeSeriesMappingSource.java | 9 +-- .../ie3/datamodel/io/source/TypeSource.java | 49 +++++++++---- .../datamodel/io/source/WeatherSource.java | 9 +++ .../couchbase/CouchbaseWeatherSource.java | 15 +++- .../io/source/csv/CsvDataSource.java | 10 +++ .../io/source/csv/CsvIdCoordinateSource.java | 10 +++ .../csv/CsvJointGridContainerSource.java | 24 ++++--- .../csv/CsvTimeSeriesMappingSource.java | 12 +++- .../io/source/csv/CsvWeatherSource.java | 8 +++ .../influxdb/InfluxDbWeatherSource.java | 12 +++- .../io/source/sql/SqlDataSource.java | 45 ++++++++++++ .../io/source/sql/SqlIdCoordinateSource.java | 15 ++-- .../sql/SqlTimeSeriesMappingSource.java | 12 +++- .../io/source/sql/SqlTimeSeriesSource.java | 11 ++- .../io/source/sql/SqlWeatherSource.java | 12 +++- .../ie3/datamodel/utils/ExceptionUtils.java | 26 +++++++ .../java/edu/ie3/datamodel/utils/Try.java | 46 +++++++++++++ .../input/AssetInputEntityFactoryTest.groovy | 12 ++-- .../FixedFeedInInputFactoryTest.groovy | 12 ++-- .../FlexOptionsResultFactoryTest.groovy | 8 +-- .../result/NodeResultFactoryTest.groovy | 8 +-- .../SystemParticipantResultFactoryTest.groovy | 10 +-- .../CosmoIdCoordinateFactoryTest.groovy | 6 +- .../IconIdCoordinateFactoryTest.groovy | 6 +- ...stemParticipantTypeInputFactoryTest.groovy | 6 +- .../io/source/EntitySourceTest.groovy | 5 +- .../io/source/IdCoordinateSourceMock.groovy | 6 ++ .../ie3/test/common/WeatherTestData.groovy | 6 ++ 42 files changed, 474 insertions(+), 273 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java index 0686c640e..42f7a8f82 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java @@ -14,8 +14,6 @@ import com.couchbase.client.java.kv.GetResult; import com.couchbase.client.java.kv.MutationResult; import com.couchbase.client.java.query.QueryResult; -import edu.ie3.datamodel.io.source.SourceValidator; -import edu.ie3.datamodel.models.value.WeatherValue; import java.time.Duration; import java.util.HashSet; import java.util.List; @@ -61,15 +59,9 @@ public CouchbaseConnector( cluster = Cluster.connect(url, clusterOptions); } - /** - * This method should be used to validate a given couchbaseDb. - * - * @param entityClass class of the entity - * @param validator for validation - */ + /** Returns a set of found fields. */ @SuppressWarnings("unchecked") - public final void validateDb( - Class entityClass, SourceValidator validator) { + public Set getSourceFields(Class entityClass) { String query = "SELECT ARRAY_DISTINCT(ARRAY_AGG(v)) AS column FROM " + bucketName @@ -86,7 +78,7 @@ public final void validateDb( set.addAll((List) columns); } - validator.validate(set, entityClass); + return set; } /** diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index 6fc303fbd..71147a7db 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -6,22 +6,16 @@ package edu.ie3.datamodel.io.connectors; import edu.ie3.datamodel.exceptions.ConnectorException; -import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.IoUtil; import edu.ie3.datamodel.io.csv.*; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.naming.TimeSeriesMetaInformation; import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme; import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation; -import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.timeseries.TimeSeries; import edu.ie3.datamodel.models.timeseries.TimeSeriesEntry; import edu.ie3.datamodel.models.value.Value; -import edu.ie3.datamodel.utils.ExceptionUtils; -import edu.ie3.datamodel.utils.Try; -import edu.ie3.util.StringUtils; import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -57,59 +51,6 @@ public CsvFileConnector(Path baseDirectoryName, FileNamingStrategy fileNamingStr this.fileNamingStrategy = fileNamingStrategy; } - @SuppressWarnings("unchecked") - public void validate(Map, SourceValidator> pairs, String csvSep) { - List exceptions = new ArrayList<>(); - - pairs.forEach( - ((clz, validator) -> { - Class c = (Class) clz; - SourceValidator v = (SourceValidator) validator; - - Try.of(() -> getHeadlineFields(c, csvSep), SourceException.class) - .getData() - .flatMap( - headline -> - Try.ofVoid(() -> v.validate(headline, c), FactoryException.class) - .getException()) - .ifPresent(exceptions::add); - })); - - if (!exceptions.isEmpty()) { - throw new FactoryException( - "The following exception(s) occurred during validation: " - + ExceptionUtils.getMessages(exceptions)); - } - } - - /** - * Method for extracting the headline fields of a csv file. - * - * @param entityClass that should be buildable from the source data - * @param csvSep separator for headline - * @return a set of headline fields - * @throws SourceException if the file could not be read - */ - public Set getHeadlineFields(Class entityClass, String csvSep) - throws SourceException { - try (BufferedReader reader = initReader(entityClass)) { - // extracting headline fields - return Arrays.stream(reader.readLine().split(csvSep + "(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1)) - .map( - maybeStartEndQuotedString -> - StringUtils.unquoteStartEnd(maybeStartEndQuotedString.trim()) - .replaceAll("\"{2}", "\"") - .trim()) - .collect(Collectors.toSet()); - } catch (ConnectorException | IOException e) { - throw new SourceException( - "Unable to find file for entity '" - + entityClass.getSimpleName() - + "': " - + e.getMessage()); - } - } - public synchronized BufferedCsvWriter getOrInitWriter( Class clz, String[] headerElements, String csvSep) throws ConnectorException { diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java index bd1b700cc..86805779f 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.connectors; -import edu.ie3.datamodel.io.source.SourceValidator; import java.util.*; import java.util.function.BinaryOperator; import java.util.stream.Collectors; @@ -110,13 +109,8 @@ public InfluxDbConnector(String url, String databaseName) { this(url, databaseName, NO_SCENARIO, true, InfluxDB.LogLevel.NONE, BatchOptions.DEFAULTS); } - /** - * This method should be used to validate a given {@link InfluxDB}. - * - * @param entityClass class of the entity - * @param validator for validation - */ - public final void validateDb(Class entityClass, SourceValidator validator) { + /** Returns the fields found in the source. */ + public Set getSourceFields(Class entityClass) { QueryResult tagKeys = session.query(new Query("SHOW TAG KEYS ON " + databaseName)); Map>> tagResults = parseQueryResult(tagKeys); @@ -127,7 +121,7 @@ public final void validateDb(Class entityClass, SourceValidator validator) { tagResults.values().forEach(v -> v.stream().map(m -> m.get("tagKey")).forEach(set::add)); fieldResults.values().forEach(v -> v.stream().map(m -> m.get("fieldKey")).forEach(set::add)); - validator.validate(set, entityClass); + return set; } /** diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java index d88b4894e..8b13ec0d0 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/SqlConnector.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.connectors; -import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.util.StringUtils; import edu.ie3.util.TimeUtil; import java.sql.*; @@ -42,28 +41,6 @@ public SqlConnector(String jdbcUrl, String userName, String password) { connectionProps.put("password", password); } - /** - * This method should be used to validate a given sql table. - * - * @param tableName name of the table - * @param entityClass class of the entity - * @param validator for validation - * @throws SQLException – if the connection could not be established - */ - public void validateDBTable(String tableName, Class entityClass, SourceValidator validator) - throws SQLException { - ResultSet rs = getConnection().getMetaData().getColumns(null, null, tableName, null); - - Set columnNames = new HashSet<>(); - - while (rs.next()) { - String name = rs.getString("COLUMN_NAME"); - columnNames.add(StringUtils.snakeCaseToCamelCase(name)); - } - - validator.validate(columnNames, entityClass); - } - /** * Executes the given query. For update queries please use {@link * SqlConnector#executeUpdate(String)}. diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index 61cbb7978..e3c4fc67e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -140,8 +140,10 @@ protected Set getAdditionalFields( * * @param actualFields that were found * @param entityClass of the build data + * @return either an exception wrapped by a {@link Failure} or an empty success */ - public void validate(Set actualFields, Class entityClass) { + public Try validate( + Set actualFields, Class entityClass) { List> fieldSets = getFields(entityClass); Set harmonizedFoundFields = toCamelCase(actualFields); @@ -158,15 +160,16 @@ public void validate(Set actualFields, Class entityClass) { String possibleOptions = getFieldsString(fieldSets).toString(); - throw new FactoryException( - "The provided fields " - + providedKeysString - + " are invalid for instance of '" - + entityClass.getSimpleName() - + "'. \nThe following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of '" - + entityClass.getSimpleName() - + "' are possible (NOT case-sensitive!):\n" - + possibleOptions); + return Failure.of( + new FactoryException( + "The provided fields " + + providedKeysString + + " are invalid for instance of '" + + entityClass.getSimpleName() + + "'. \nThe following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of '" + + entityClass.getSimpleName() + + "' are possible (NOT case-sensitive!):\n" + + possibleOptions)); } else { Set additionalFields = getAdditionalFields(harmonizedFoundFields, validFieldSets); @@ -176,6 +179,8 @@ public void validate(Set actualFields, Class entityClass) { entityClass.getSimpleName(), additionalFields); } + + return Success.empty(); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java index 0687e9e50..d41a4b731 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.models.UniqueEntity; import java.util.*; import java.util.stream.Stream; @@ -12,6 +13,14 @@ /** Interface that include functionalities for data sources in the database table, csv file etc. */ public interface DataSource { + /** + * Method to retrieve the fields found in the source. + * + * @param entityClass class of the source + * @return the found fields + */ + Set getSourceFields(Class entityClass) throws SourceException; + /** Creates a stream of maps that represent the rows in the database */ Stream> getSourceData(Class entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 2f2c9335d..5e0a4ae2d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -39,8 +39,25 @@ public abstract class EntitySource { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - /** Returns a map: class to {@link SourceValidator}. */ - public abstract Map, SourceValidator> getValidationMapping(); + public abstract void validate(); + + /** + * Method for validating a single source. + * + * @param entityClass class to be validated + * @param validator used to validate + * @return either a {@link FactoryException} wrapped by a failure or an empty success + * @param type of the class + */ + protected final Try validate( + Class entityClass, SourceValidator validator) { + try { + Set actualFields = dataSource.getSourceFields(entityClass); + return validator.validate(actualFields, entityClass); + } catch (SourceException e) { + return Failure.of(new FactoryException(e.getCause())); + } + } protected String buildSkippingMessage( String entityDesc, String entityUuid, String entityId, String missingElementsString) { diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 5767e7f03..8799cc5a4 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -5,8 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import static java.util.Map.entry; - +import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.GraphicSourceException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData; @@ -53,10 +52,13 @@ public GraphicSource(TypeSource typeSource, RawGridSource rawGridSource, DataSou } @Override - public Map, SourceValidator> getValidationMapping() { - return Map.ofEntries( - entry(NodeGraphicInput.class, nodeGraphicInputFactory), - entry(LineGraphicInput.class, lineGraphicInputFactory)); + public void validate() { + List exceptions = + Try.getExceptions( + validate(NodeGraphicInput.class, nodeGraphicInputFactory), + validate(LineGraphicInput.class, lineGraphicInputFactory)); + + exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); } /** Returns the graphic elements of the grid or throws a {@link SourceException} */ diff --git a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java index a41232c53..d0374c2f6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.util.geo.CoordinateDistance; import edu.ie3.util.geo.GeoUtils; import java.util.*; @@ -19,6 +20,14 @@ */ public interface IdCoordinateSource { + /** + * Method to retrieve the fields found in the source. + * + * @param entityClass class of the source + * @return the found fields + */ + Set getSourceFields(Class entityClass) throws SourceException; + /** * Get the matching coordinate for the given ID * diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index 2ca424231..cc75ce44e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -5,30 +5,21 @@ */ package edu.ie3.datamodel.io.source; -import static java.util.Map.entry; - import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.RawGridException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.input.*; import edu.ie3.datamodel.models.input.*; -import edu.ie3.datamodel.models.input.MeasurementUnitInput; -import edu.ie3.datamodel.models.input.NodeInput; -import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.connector.*; -import edu.ie3.datamodel.models.input.connector.LineInput; -import edu.ie3.datamodel.models.input.connector.SwitchInput; -import edu.ie3.datamodel.models.input.connector.Transformer2WInput; -import edu.ie3.datamodel.models.input.connector.Transformer3WInput; import edu.ie3.datamodel.models.input.connector.type.LineTypeInput; import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput; import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.container.RawGridElements; import edu.ie3.datamodel.utils.Try; -import edu.ie3.datamodel.utils.Try.*; +import edu.ie3.datamodel.utils.Try.Failure; +import edu.ie3.datamodel.utils.Try.Success; import java.util.*; -import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -72,13 +63,17 @@ public RawGridSource(TypeSource typeSource, DataSource dataSource) { } @Override - public Map, SourceValidator> getValidationMapping() { - return Map.ofEntries( - entry(NodeInput.class, nodeInputFactory), - entry(LineInput.class, lineInputFactory), - entry(Transformer2WInput.class, transformer2WInputFactory), - entry(SwitchInput.class, switchInputFactory), - entry(MeasurementUnitInput.class, measurementUnitInputFactory)); + public void validate() { + List exceptions = + Try.getExceptions( + validate(NodeInput.class, nodeInputFactory), + validate(LineInput.class, lineInputFactory), + validate(Transformer2WInput.class, transformer2WInputFactory), + validate(Transformer3WInput.class, transformer3WInputFactory), + validate(SwitchInput.class, switchInputFactory), + validate(MeasurementUnitInput.class, measurementUnitInputFactory)); + + exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index 0378f0ab4..a29d3af84 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -5,8 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import static java.util.Map.entry; - +import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.io.factory.SimpleEntityFactory; import edu.ie3.datamodel.io.factory.result.*; import edu.ie3.datamodel.models.result.NodeResult; @@ -18,10 +17,12 @@ import edu.ie3.datamodel.models.result.system.*; import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult; import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link ResultEntity} container @@ -64,28 +65,45 @@ public ResultEntitySource(DataSource dataSource, String dtfPattern) { } @Override - public Map, SourceValidator> getValidationMapping() { - return Map.ofEntries( - entry(LoadResult.class, systemParticipantResultFactory), - entry(FixedFeedInResult.class, systemParticipantResultFactory), - entry(BmResult.class, systemParticipantResultFactory), - entry(PvResult.class, systemParticipantResultFactory), - entry(ChpResult.class, systemParticipantResultFactory), - entry(WecResult.class, systemParticipantResultFactory), - entry(StorageResult.class, systemParticipantResultFactory), - entry(EvcsResult.class, systemParticipantResultFactory), - entry(EvResult.class, systemParticipantResultFactory), - entry(HpResult.class, systemParticipantResultFactory), - entry(EmResult.class, systemParticipantResultFactory), - entry(ThermalHouseResult.class, thermalResultFactory), - entry(CylindricalStorageResult.class, thermalResultFactory), - entry(SwitchResult.class, switchResultFactory), - entry(NodeResult.class, nodeResultFactory), - entry(SystemParticipantResult.class, connectorResultFactory), - entry(LineResult.class, connectorResultFactory), - entry(Transformer2WResult.class, connectorResultFactory), - entry(Transformer3WResult.class, connectorResultFactory), - entry(FlexOptionsResult.class, flexOptionsResultFactory)); + public void validate() { + List exceptions = + new ArrayList<>( + Stream.of( + LoadResult.class, + FixedFeedInResult.class, + BmResult.class, + PvResult.class, + ChpResult.class, + WecResult.class, + StorageResult.class, + EvcsResult.class, + EvResult.class, + HpResult.class, + EmResult.class) + .map(c -> validate(c, systemParticipantResultFactory).getException()) + .flatMap(Optional::stream) + .toList()); + + validate(ThermalHouseResult.class, thermalResultFactory) + .getException() + .ifPresent(exceptions::add); + validate(CylindricalStorageResult.class, thermalResultFactory) + .getException() + .ifPresent(exceptions::add); + validate(SwitchResult.class, switchResultFactory).getException().ifPresent(exceptions::add); + validate(NodeResult.class, nodeResultFactory).getException().ifPresent(exceptions::add); + validate(LineResult.class, connectorResultFactory).getException().ifPresent(exceptions::add); + validate(Transformer2WResult.class, connectorResultFactory) + .getException() + .ifPresent(exceptions::add); + validate(Transformer3WResult.class, connectorResultFactory) + .getException() + .ifPresent(exceptions::add); + validate(FlexOptionsResult.class, flexOptionsResultFactory) + .getException() + .ifPresent(exceptions::add); + + exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java index 39aeb1f98..4c932c7c5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.utils.Try; +import edu.ie3.datamodel.utils.Try.Failure; import java.util.Set; public interface SourceValidator { @@ -14,6 +17,7 @@ public interface SourceValidator { * * @param foundFields fields that were found in the source data * @param entityClass that should be buildable from the source data + * @return either an exception wrapped by a {@link Failure} or an empty success */ - void validate(Set foundFields, Class entityClass); + Try validate(Set foundFields, Class entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index a0bf8d2c6..a5d473370 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -5,8 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import static java.util.Map.entry; - import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.exceptions.SystemParticipantsException; @@ -80,19 +78,22 @@ public SystemParticipantSource( } @Override - public Map, SourceValidator> getValidationMapping() { - return Map.ofEntries( - entry(BmInput.class, bmInputFactory), - entry(ChpTypeInput.class, chpInputFactory), - entry(EvInput.class, evcsInputFactory), - entry(FixedFeedInInput.class, fixedFeedInInputFactory), - entry(HpInput.class, hpInputFactory), - entry(LoadInput.class, loadInputFactory), - entry(PvInput.class, pvInputFactory), - entry(StorageInput.class, storageInputFactory), - entry(WecInput.class, wecInputFactory), - entry(EvcsInput.class, evcsInputFactory), - entry(EmInput.class, emInputFactory)); + public void validate() { + List exceptions = + Try.getExceptions( + validate(BmInput.class, bmInputFactory), + validate(ChpInput.class, chpInputFactory), + validate(EvInput.class, evInputFactory), + validate(FixedFeedInInput.class, fixedFeedInInputFactory), + validate(HpInput.class, hpInputFactory), + validate(LoadInput.class, loadInputFactory), + validate(PvInput.class, pvInputFactory), + validate(StorageInput.class, storageInputFactory), + validate(WecInput.class, wecInputFactory), + validate(EvcsInput.class, evcsInputFactory), + validate(EmInput.class, emInputFactory)); + + exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index af41fbb2b..93bd9754d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -5,8 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import static java.util.Map.entry; - import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.SourceException; @@ -49,11 +47,14 @@ public ThermalSource(TypeSource typeSource, DataSource dataSource) { } @Override - public Map, SourceValidator> getValidationMapping() { - return Map.ofEntries( - entry(ThermalBusInput.class, thermalBusInputFactory), - entry(CylindricalStorageInput.class, cylindricalStorageInputFactory), - entry(ThermalHouseInput.class, thermalHouseInputFactory)); + public void validate() { + List exceptions = + Try.getExceptions( + validate(ThermalBusInput.class, thermalBusInputFactory), + validate(CylindricalStorageInput.class, cylindricalStorageInputFactory), + validate(ThermalHouseInput.class, thermalHouseInputFactory)); + + exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java index 0f85a4084..72f213d00 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -6,15 +6,13 @@ package edu.ie3.datamodel.io.source; import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.factory.timeseries.TimeSeriesMappingFactory; import edu.ie3.datamodel.models.input.InputEntity; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -61,6 +59,9 @@ public Optional getTimeSeriesUuid(UUID modelIdentifier) { */ public abstract Stream> getMappingSourceData(); + /** Returns the fields found in the source */ + public abstract Set getSourceFields() throws SourceException; + // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- private Try createMappingEntry( diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index f7bea01c8..bbde7017b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -5,8 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import static java.util.Map.entry; - +import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.OperatorInputFactory; import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory; @@ -19,8 +18,11 @@ import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.utils.Try; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import java.util.Set; +import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link @@ -49,18 +51,35 @@ public TypeSource(DataSource dataSource) { } @Override - public Map, SourceValidator> getValidationMapping() { - return Map.ofEntries( - entry(OperatorInput.class, operatorInputFactory), - entry(LineTypeInput.class, lineTypeInputFactory), - entry(Transformer2WTypeInput.class, transformer2WTypeInputFactory), - entry(Transformer3WTypeInput.class, transformer3WTypeInputFactory), - entry(BmTypeInput.class, systemParticipantTypeInputFactory), - entry(ChpTypeInput.class, systemParticipantTypeInputFactory), - entry(EvTypeInput.class, systemParticipantTypeInputFactory), - entry(HpTypeInput.class, systemParticipantTypeInputFactory), - entry(StorageTypeInput.class, systemParticipantTypeInputFactory), - entry(WecTypeInput.class, systemParticipantTypeInputFactory)); + public void validate() { + validate(OperatorInput.class, operatorInputFactory) + .ifFailure( + e -> + log.warn( + "The source for '{}' could not be validated due to: {}", + OperatorInput.class, + e)); + + List exceptions = + new ArrayList<>( + Try.getExceptions( + validate(LineTypeInput.class, lineTypeInputFactory), + validate(Transformer2WTypeInput.class, transformer2WTypeInputFactory), + validate(Transformer3WTypeInput.class, transformer3WTypeInputFactory))); + + exceptions.addAll( + Stream.of( + EvTypeInput.class, + HpTypeInput.class, + BmTypeInput.class, + WecTypeInput.class, + ChpTypeInput.class, + StorageTypeInput.class) + .map(c -> validate(c, systemParticipantTypeInputFactory).getException()) + .flatMap(Optional::stream) + .toList()); + + exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java index 31f5150f0..a1b4b29f0 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java @@ -40,6 +40,15 @@ protected WeatherSource( this.weatherFactory = weatherFactory; } + /** + * Method to retrieve the fields found in the source. + * + * @param entityClass class of the source + * @return the found fields + */ + public abstract Set getSourceFields(Class entityClass) + throws SourceException; + // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- public abstract Map> getWeather( diff --git a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java index e84aef130..f1a50d0fc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java @@ -10,6 +10,7 @@ import com.couchbase.client.java.json.JsonObject; import com.couchbase.client.java.kv.GetResult; import com.couchbase.client.java.query.QueryResult; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.CouchbaseConnector; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory; @@ -59,7 +60,8 @@ public CouchbaseWeatherSource( IdCoordinateSource coordinateSource, String coordinateIdColumnName, TimeBasedWeatherValueFactory weatherFactory, - String timeStampPattern) { + String timeStampPattern) + throws SourceException { this( connector, coordinateSource, @@ -88,14 +90,21 @@ public CouchbaseWeatherSource( String coordinateIdColumnName, String keyPrefix, TimeBasedWeatherValueFactory weatherFactory, - String timeStampPattern) { + String timeStampPattern) + throws SourceException { super(idCoordinateSource, weatherFactory); this.connector = connector; this.coordinateIdColumnName = coordinateIdColumnName; this.keyPrefix = keyPrefix; this.timeStampPattern = timeStampPattern; - connector.validateDb(WeatherValue.class, weatherFactory); + weatherFactory.validate(getSourceFields(WeatherValue.class), WeatherValue.class); + } + + @Override + public Set getSourceFields(Class entityClass) + throws SourceException { + return connector.getSourceFields(entityClass); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index 9a355e746..baf343e69 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -58,6 +58,16 @@ public CsvDataSource(String csvSep, Path folderPath, FileNamingStrategy fileNami this.connector = new CsvFileConnector(folderPath, fileNamingStrategy); } + @Override + public Set getSourceFields(Class entityClass) + throws SourceException { + try (BufferedReader reader = connector.initReader(entityClass)) { + return Arrays.stream(parseCsvRow(reader.readLine(), csvSep)).collect(Collectors.toSet()); + } catch (ConnectorException | IOException e) { + throw new SourceException("The following exception was thrown while reading a source: ", e); + } + } + @Override public Stream> getSourceData(Class entityClass) { return buildStreamWithFieldsToAttributesMap(entityClass, connector); diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index 81d40e0bb..1cbf60f20 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -86,6 +86,16 @@ private Map invert(Map map) { return inv; } + @Override + public Set getSourceFields(Class entityClass) throws SourceException { + try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { + return Arrays.stream(dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep)) + .collect(Collectors.toSet()); + } catch (IOException e) { + throw new SourceException("The following exception was thrown while reading a source: ", e); + } + } + @Override public Optional getCoordinate(int id) { return Optional.ofNullable(idToCoordinate.get(id)); diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 5420b85f8..e4e46238d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source.csv; +import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.FileException; import edu.ie3.datamodel.exceptions.InvalidGridException; import edu.ie3.datamodel.exceptions.SourceException; @@ -16,11 +17,10 @@ import edu.ie3.datamodel.models.input.container.JointGridContainer; import edu.ie3.datamodel.models.input.container.RawGridElements; import edu.ie3.datamodel.models.input.container.SystemParticipants; +import edu.ie3.datamodel.utils.ExceptionUtils; import edu.ie3.datamodel.utils.Try; import java.nio.file.Path; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** Convenience class for cases where all used data comes from CSV sources */ public class CsvJointGridContainerSource { @@ -55,13 +55,17 @@ public static JointGridContainer read( GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* validating sources */ - Map, SourceValidator> validationMapping = - new HashMap<>(typeSource.getValidationMapping()); - validationMapping.putAll(rawGridSource.getValidationMapping()); - validationMapping.putAll(thermalSource.getValidationMapping()); - validationMapping.putAll(systemParticipantSource.getValidationMapping()); - validationMapping.putAll(graphicSource.getValidationMapping()); - dataSource.connector.validate(validationMapping, csvSep); + List validationException = + Try.getExceptions( + Try.ofVoid(typeSource::validate, FactoryException.class), + Try.ofVoid(rawGridSource::validate, FactoryException.class), + Try.ofVoid(systemParticipantSource::validate, FactoryException.class), + Try.ofVoid(graphicSource::validate, FactoryException.class)); + + if (!validationException.isEmpty()) { + throw new FactoryException( + "Validation failed due to: " + ExceptionUtils.getFullMessages(validationException)); + } /* Loading models */ Try rawGridElements = diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index 12c4182c8..b06ae4231 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -5,10 +5,12 @@ */ package edu.ie3.datamodel.io.source.csv; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.nio.file.Path; import java.util.Map; +import java.util.Set; import java.util.stream.Stream; public class CsvTimeSeriesMappingSource extends TimeSeriesMappingSource { @@ -16,11 +18,12 @@ public class CsvTimeSeriesMappingSource extends TimeSeriesMappingSource { private final CsvDataSource dataSource; public CsvTimeSeriesMappingSource( - String csvSep, Path gridFolderPath, FileNamingStrategy fileNamingStrategy) { + String csvSep, Path gridFolderPath, FileNamingStrategy fileNamingStrategy) + throws SourceException { this.dataSource = new CsvDataSource(csvSep, gridFolderPath, fileNamingStrategy); // validating - dataSource.connector.validate(Map.of(MappingEntry.class, mappingFactory), dataSource.csvSep); + mappingFactory.validate(getSourceFields(), MappingEntry.class); } @Override @@ -28,4 +31,9 @@ public Stream> getMappingSourceData() { return dataSource.buildStreamWithFieldsToAttributesMap( MappingEntry.class, dataSource.connector); } + + @Override + public Set getSourceFields() throws SourceException { + return dataSource.getSourceFields(MappingEntry.class); + } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index 6ece1f5c6..b7f45fa1b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source.csv; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; @@ -60,6 +61,13 @@ public CsvWeatherSource( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + /** Returns an empty set for now. */ + @Override + public Set getSourceFields(Class entityClass) + throws SourceException { + return Collections.emptySet(); + } + @Override public Map> getWeather( ClosedInterval timeInterval) { diff --git a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java index 78a317c4b..ec3a3d3e2 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source.influxdb; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.InfluxDbConnector; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory; @@ -47,11 +48,18 @@ public class InfluxDbWeatherSource extends WeatherSource { public InfluxDbWeatherSource( InfluxDbConnector connector, IdCoordinateSource idCoordinateSource, - TimeBasedWeatherValueFactory weatherValueFactory) { + TimeBasedWeatherValueFactory weatherValueFactory) + throws SourceException { super(idCoordinateSource, weatherValueFactory); this.connector = connector; - connector.validateDb(WeatherValue.class, weatherValueFactory); + weatherValueFactory.validate(getSourceFields(WeatherValue.class), WeatherValue.class); + } + + @Override + public Set getSourceFields(Class entityClass) + throws SourceException { + return connector.getSourceFields(entityClass); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java index f6841c3e2..7322c0fc6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.source.sql; import edu.ie3.datamodel.exceptions.InvalidColumnNameException; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; @@ -108,6 +109,50 @@ protected List getDbTables(String schemaPattern, String tableNamePattern return tableNames; } + @Override + public Set getSourceFields(Class entityClass) + throws SourceException { + try { + String tableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); + ResultSet rs = + connector.getConnection().getMetaData().getColumns(null, null, tableName, null); + Set columnNames = new HashSet<>(); + + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + columnNames.add(StringUtils.snakeCaseToCamelCase(name)); + } + + return columnNames; + } catch (NoSuchElementException | SQLException e) { + throw new SourceException("The following exception was thrown while reading a source: ", e); + } + } + + /** + * Method that uses the table name to retrieve all field names. + * + * @param tableName to be used + * @return a set of found fields + * @throws SourceException - if an error occurred + */ + public Set getSourceFields(String tableName) throws SourceException { + try { + ResultSet rs = + connector.getConnection().getMetaData().getColumns(null, null, tableName, null); + Set columnNames = new HashSet<>(); + + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + columnNames.add(StringUtils.snakeCaseToCamelCase(name)); + } + + return columnNames; + } catch (NoSuchElementException | SQLException e) { + throw new SourceException("The following exception was thrown while reading a source: ", e); + } + } + @Override public Stream> getSourceData(Class entityClass) { String explicitTableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index 4349351e0..022932e95 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -7,6 +7,7 @@ import static edu.ie3.datamodel.io.source.sql.SqlDataSource.createBaseQueryString; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.factory.SimpleFactoryData; import edu.ie3.datamodel.io.factory.timeseries.SqlIdCoordinateFactory; @@ -17,7 +18,6 @@ import edu.ie3.util.geo.GeoUtils; import java.sql.Array; import java.sql.PreparedStatement; -import java.sql.SQLException; import java.util.*; import javax.measure.quantity.Length; import org.apache.commons.lang3.tuple.Pair; @@ -41,22 +41,24 @@ public class SqlIdCoordinateSource implements IdCoordinateSource { private final String queryForBoundingBox; private final String queryForNearestPoints; + private final String coordinateTableName; private final SqlDataSource dataSource; private final SqlIdCoordinateFactory factory; public SqlIdCoordinateSource( SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) - throws SQLException { + throws SourceException { this.factory = factory; this.dataSource = dataSource; + this.coordinateTableName = coordinateTableName; String dbIdColumnName = dataSource.getDbColumnName(factory.getIdField(), coordinateTableName); String dbPointColumnName = dataSource.getDbColumnName(factory.getCoordinateField(), coordinateTableName); // validating table - dataSource.connector.validateDBTable(coordinateTableName, Pair.class, factory); + factory.validate(getSourceFields(Pair.class), Pair.class); // setup queries this.basicQuery = createBaseQueryString(dataSource.schemaName, coordinateTableName); @@ -82,13 +84,18 @@ public SqlIdCoordinateSource( String schemaName, String coordinateTableName, SqlIdCoordinateFactory factory) - throws SQLException { + throws SourceException { this( factory, coordinateTableName, new SqlDataSource(connector, schemaName, new DatabaseNamingStrategy())); } + @Override + public Set getSourceFields(Class entityClass) throws SourceException { + return dataSource.getSourceFields(coordinateTableName); + } + @Override public Optional getCoordinate(int id) { List values = executeQueryToList(queryForPoint, ps -> ps.setInt(1, id)); diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java index fa084c3d8..f9491c403 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java @@ -7,12 +7,13 @@ import static edu.ie3.datamodel.io.source.sql.SqlDataSource.createBaseQueryString; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; -import java.sql.SQLException; import java.util.Map; +import java.util.Set; import java.util.stream.Stream; public class SqlTimeSeriesMappingSource extends TimeSeriesMappingSource { @@ -25,7 +26,7 @@ public SqlTimeSeriesMappingSource( SqlConnector connector, String schemaName, EntityPersistenceNamingStrategy entityPersistenceNamingStrategy) - throws SQLException { + throws SourceException { this.dataSource = new SqlDataSource( connector, schemaName, new DatabaseNamingStrategy(entityPersistenceNamingStrategy)); @@ -35,11 +36,16 @@ public SqlTimeSeriesMappingSource( entityPersistenceNamingStrategy.getEntityName(MappingEntry.class).orElseThrow(); this.queryFull = createBaseQueryString(schemaName, tableName); - dataSource.connector.validateDBTable(tableName, TimeSeriesMappingSource.class, mappingFactory); + mappingFactory.validate(getSourceFields(), MappingEntry.class); } @Override public Stream> getMappingSourceData() { return dataSource.executeQuery(queryFull); } + + @Override + public Set getSourceFields() throws SourceException { + return dataSource.getSourceFields(tableName); + } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java index 1100ad3c2..2873b927e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java @@ -19,7 +19,6 @@ import edu.ie3.datamodel.models.value.Value; import edu.ie3.datamodel.utils.TimeSeriesUtils; import edu.ie3.util.interval.ClosedInterval; -import java.sql.SQLException; import java.sql.Timestamp; import java.time.ZonedDateTime; import java.util.*; @@ -52,7 +51,7 @@ public SqlTimeSeriesSource( UUID timeSeriesUuid, Class valueClass, TimeBasedSimpleValueFactory factory) - throws SQLException { + throws SourceException { super(valueClass, factory); this.dataSource = sqlDataSource; @@ -65,7 +64,7 @@ public SqlTimeSeriesSource( final String tableName = sqlDataSource.databaseNamingStrategy.getTimeSeriesEntityName(columnScheme); - dataSource.connector.validateDBTable(tableName, valueClass, factory); + factory.validate(dataSource.getSourceFields(tableName), valueClass); String dbTimeColumnName = sqlDataSource.getDbColumnName(factory.getTimeFieldString(), tableName); @@ -93,7 +92,7 @@ public SqlTimeSeriesSource( UUID timeSeriesUuid, Class valueClass, TimeBasedSimpleValueFactory factory) - throws SQLException { + throws SourceException { this( new SqlDataSource(connector, schemaName, namingStrategy), timeSeriesUuid, @@ -118,7 +117,7 @@ public static SqlTimeSeriesSource createSource( DatabaseNamingStrategy namingStrategy, IndividualTimeSeriesMetaInformation metaInformation, String timePattern) - throws SourceException, SQLException { + throws SourceException { if (!TimeSeriesUtils.isSchemeAccepted(metaInformation.getColumnScheme())) throw new SourceException( "Unsupported column scheme '" + metaInformation.getColumnScheme() + "'."); @@ -136,7 +135,7 @@ private static SqlTimeSeriesSource create( UUID timeSeriesUuid, Class valClass, String timePattern) - throws SQLException { + throws SourceException { TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass, timePattern); return new SqlTimeSeriesSource<>( diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java index 4045d128e..9e3cbc85c 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java @@ -30,6 +30,7 @@ public class SqlWeatherSource extends WeatherSource { private static final String WHERE = " WHERE "; private final String factoryCoordinateFieldName; + private final String tableName; /** * Queries that are available within this source. Motivation to have them as field value is to @@ -55,12 +56,13 @@ public SqlWeatherSource( String schemaName, String weatherTableName, TimeBasedWeatherValueFactory weatherFactory) - throws SQLException { + throws SourceException { super(idCoordinateSource, weatherFactory); this.factoryCoordinateFieldName = weatherFactory.getCoordinateIdFieldString(); this.dataSource = new SqlDataSource(connector, schemaName, new DatabaseNamingStrategy()); + this.tableName = weatherTableName; - dataSource.connector.validateDBTable(weatherTableName, WeatherValue.class, weatherFactory); + weatherFactory.validate(getSourceFields(WeatherValue.class), WeatherValue.class); String dbTimeColumnName = dataSource.getDbColumnName(weatherFactory.getTimeFieldString(), weatherTableName); @@ -78,6 +80,12 @@ public SqlWeatherSource( schemaName, weatherTableName, dbTimeColumnName, dbCoordinateIdColumnName); } + @Override + public Set getSourceFields(Class entityClass) + throws SourceException { + return dataSource.getSourceFields(tableName); + } + @Override public Map> getWeather( ClosedInterval timeInterval) throws SourceException { diff --git a/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java b/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java index ebbaa61f8..ec5851441 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ExceptionUtils.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.utils; import edu.ie3.datamodel.models.UniqueEntity; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -28,6 +29,19 @@ public static String getMessages(List exceptions) { .replaceFirst("\n ", ""); } + /** + * Creates a string containing multiple exception messages. + * + * @param exceptions list of exceptions + * @return str containing the messages + */ + public static String getFullMessages(List exceptions) { + return exceptions.stream() + .map(e -> e.getMessage() + printStackTrace(e.getStackTrace())) + .reduce("", (a, b) -> a + "\n " + b) + .replaceFirst("\n ", ""); + } + /** * Combines multiple {@link UniqueEntity} into a string. * @@ -39,4 +53,16 @@ public static String combine(Collection entities) { + entities.stream().map(UniqueEntity::toString).collect(Collectors.joining(", ")) + "}"; } + + /** + * Method for combining {@link StackTraceElement}s. + * + * @param elements to be combined + * @return a string + */ + public static String printStackTrace(StackTraceElement... elements) { + return Arrays.stream(elements) + .map(StackTraceElement::toString) + .collect(Collectors.joining("\n ")); + } } diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index 06a9a5526..c3b348b0f 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.TryException; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -106,6 +107,17 @@ public static List getExceptions( return tries.stream().filter(Try::isFailure).map(t -> ((Failure) t).get()).toList(); } + /** + * Method to retrieve the exceptions from all {@link Failure} objects. + * + * @param tries array of {@link Try} objects + * @return a list of {@link Exception}'s + */ + @SafeVarargs + public static List getExceptions(Try... tries) { + return Arrays.stream(tries).filter(Try::isFailure).map(t -> ((Failure) t).get()).toList(); + } + /** * Method to scan a collection of {@link Try} objects for {@link Failure}'s. * @@ -181,6 +193,20 @@ public static Try, FailureException> scanStre // functional methods + /** + * Method to consume the contained data. + * + * @param consumer operation to compute + */ + public abstract void ifSuccess(Consumer consumer); + + /** + * Method to consume the exception + * + * @param consumer operation to compute + */ + public abstract void ifFailure(Consumer consumer); + /** * Method to transform the data if this object is a {@link Success}. * @@ -274,6 +300,16 @@ public Optional getException() { return Optional.empty(); } + @Override + public void ifSuccess(Consumer consumer) { + consumer.accept(data); + } + + @Override + public void ifFailure(Consumer consumer) { + // does nothing + } + @SuppressWarnings("unchecked") @Override public Try flatMap(Function> mapper) { @@ -359,6 +395,16 @@ public Optional getException() { return exception != null ? Optional.of(exception) : Optional.empty(); } + @Override + public void ifSuccess(Consumer consumer) { + // does nothing + } + + @Override + public void ifFailure(Consumer consumer) { + consumer.accept(exception); + } + @SuppressWarnings("unchecked") @Override public Try flatMap(Function> mapper) { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy index 8243a5b3d..b2255e6bc 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy @@ -280,16 +280,16 @@ class AssetInputEntityFactoryTest extends Specification implements FactoryTestHe def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until") when: - Try input = Try.ofVoid(() -> inputFactory.validate(foundFields, TestAssetInput), FactoryException) + Try input = inputFactory.validate(foundFields, TestAssetInput) then: input.failure input.exception.get().message == "The provided fields [operates_from, operates_until, uuid] are invalid for instance of 'TestAssetInput'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'TestAssetInput' are possible (NOT case-sensitive!):\n" + - "0: [id, uuid] or [id, uuid]\n" + - "1: [id, operatesFrom, uuid] or [id, operates_from, uuid]\n" + - "2: [id, operatesUntil, uuid] or [id, operates_until, uuid]\n" + - "3: [id, operatesFrom, operatesUntil, uuid] or [id, operates_from, operates_until, uuid]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'TestAssetInput' are possible (NOT case-sensitive!):\n" + + "0: [id, uuid] or [id, uuid]\n" + + "1: [id, operatesFrom, uuid] or [id, operates_from, uuid]\n" + + "2: [id, operatesUntil, uuid] or [id, operates_until, uuid]\n" + + "3: [id, operatesFrom, operatesUntil, uuid] or [id, operates_from, operates_until, uuid]\n" } private static class TestAssetInput extends AssetInput { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index 1091238cb..918c09d6e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -79,15 +79,15 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe def foundFields = inputFactory.newSet("uuid", "id", "s_rated", "cosphi_rated") when: - Try input = Try.ofVoid(() -> inputFactory.validate(foundFields, FixedFeedInInput), FactoryException) + Try input = inputFactory.validate(foundFields, FixedFeedInInput) then: input.failure input.exception.get().message == "The provided fields [cosphi_rated, id, s_rated, uuid] are invalid for instance of 'FixedFeedInInput'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" + - "0: [cosPhiRated, id, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, q_characteristics, s_rated, uuid]\n" + - "1: [cosPhiRated, id, operatesFrom, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_from, q_characteristics, s_rated, uuid]\n" + - "2: [cosPhiRated, id, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_until, q_characteristics, s_rated, uuid]\n" + - "3: [cosPhiRated, id, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_from, operates_until, q_characteristics, s_rated, uuid]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" + + "0: [cosPhiRated, id, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, q_characteristics, s_rated, uuid]\n" + + "1: [cosPhiRated, id, operatesFrom, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_from, q_characteristics, s_rated, uuid]\n" + + "2: [cosPhiRated, id, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_until, q_characteristics, s_rated, uuid]\n" + + "3: [cosPhiRated, id, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, operates_from, operates_until, q_characteristics, s_rated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy index 6831a7746..62d414823 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy @@ -56,13 +56,13 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH def foundFields = resultFactory.newSet("time", "input_model", "p_ref", "p_min") when: - Try input = Try.ofVoid(() -> resultFactory.validate(foundFields, FlexOptionsResult), FactoryException) + Try input = resultFactory.validate(foundFields, FlexOptionsResult) then: input.failure input.exception.get().message == "The provided fields [input_model, p_min, p_ref, time] are invalid for instance of 'FlexOptionsResult'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FlexOptionsResult' are possible (NOT case-sensitive!):\n" + - "0: [inputModel, pMax, pMin, pRef, time] or [input_model, p_max, p_min, p_ref, time]\n" + - "1: [inputModel, pMax, pMin, pRef, time, uuid] or [input_model, p_max, p_min, p_ref, time, uuid]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FlexOptionsResult' are possible (NOT case-sensitive!):\n" + + "0: [inputModel, pMax, pMin, pRef, time] or [input_model, p_max, p_min, p_ref, time]\n" + + "1: [inputModel, pMax, pMin, pRef, time, uuid] or [input_model, p_max, p_min, p_ref, time, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy index 7767998d6..400126349 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy @@ -54,13 +54,13 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { def foundFields = resultFactory.newSet("time", "input_model", "v_mag") when: - Try input = Try.ofVoid(() -> resultFactory.validate(foundFields, NodeResult), FactoryException) + Try input = resultFactory.validate(foundFields, NodeResult) then: input.failure input.exception.get().message == "The provided fields [input_model, time, v_mag] are invalid for instance of 'NodeResult'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'NodeResult' are possible (NOT case-sensitive!):\n" + - "0: [inputModel, time, vAng, vMag] or [input_model, time, v_ang, v_mag]\n" + - "1: [inputModel, time, uuid, vAng, vMag] or [input_model, time, uuid, v_ang, v_mag]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'NodeResult' are possible (NOT case-sensitive!):\n" + + "0: [inputModel, time, vAng, vMag] or [input_model, time, v_ang, v_mag]\n" + + "1: [inputModel, time, uuid, vAng, vMag] or [input_model, time, uuid, v_ang, v_mag]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy index 5c4983db3..416e03eb0 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy @@ -130,14 +130,14 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor def foundFields = resultFactory.newSet("time", "input_model", "q") when: - Try result = Try.ofVoid(() -> resultFactory.validate(foundFields, WecResult), FactoryException) + Try result = resultFactory.validate(foundFields, WecResult) then: result.failure result.exception.get().message == "The provided fields [input_model, q, time] are invalid for instance of 'WecResult'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'WecResult' are possible (NOT case-sensitive!):\n" + - "0: [inputModel, p, q, time] or [input_model, p, q, time]\n" + - "1: [inputModel, p, q, time, uuid] or [input_model, p, q, time, uuid]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'WecResult' are possible (NOT case-sensitive!):\n" + + "0: [inputModel, p, q, time] or [input_model, p, q, time]\n" + + "1: [inputModel, p, q, time, uuid] or [input_model, p, q, time, uuid]\n" } def "A SystemParticipantResultFactory should be performant"() { @@ -156,7 +156,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor resultFactory.get(new SimpleEntityData(parameter, StorageResult)) } BigDecimal elapsedTime = (System - .currentTimeMillis() - startTime) / 1000.0 + .currentTimeMillis() - startTime) / 1000.0 elapsedTime < 3 } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy index fc7534a04..1f0b9deaa 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy @@ -46,13 +46,13 @@ class CosmoIdCoordinateFactoryTest extends Specification { def foundFields = factory.newSet("tid", "id", "latrot", "longrot") when: - def actual = Try.of(() -> factory.validate(foundFields, Pair), FactoryException) + def actual = factory.validate(foundFields, Pair) then: actual.failure actual.exception.get().message == "The provided fields [id, latrot, longrot, tid] are invalid for instance of 'Pair'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + - "0: [id, latGeo, latRot, longGeo, longRot, tid] or [id, lat_geo, lat_rot, long_geo, long_rot, tid]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + + "0: [id, latGeo, latRot, longGeo, longRot, tid] or [id, lat_geo, lat_rot, long_geo, long_rot, tid]\n" } def "A COSMO id to coordinate factory builds model from valid data"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index fbc664d34..e5e5e0b34 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -44,13 +44,13 @@ class IconIdCoordinateFactoryTest extends Specification { def foundFields = factory.newSet("id", "latitude", "coordinatetype") when: - def actual = Try.of(() -> factory.validate(foundFields, Pair), FactoryException) + def actual = factory.validate(foundFields, Pair) then: actual.failure actual.exception.get().message == "The provided fields [coordinatetype, id, latitude] are invalid for instance of 'Pair'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + - "0: [coordinateType, id, latitude, longitude] or [coordinate_type, id, latitude, longitude]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'Pair' are possible (NOT case-sensitive!):\n" + + "0: [coordinateType, id, latitude, longitude] or [coordinate_type, id, latitude, longitude]\n" } def "A COSMO id to coordinate factory builds model from valid data"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index 8f6340c8c..ceeb5df2a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -283,12 +283,12 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def foundFields = typeInputFactory.newSet("uuid", "id", "capex", "opex", "srated", "cosPhiRated", "estorage", "pmin", "pmax", "eta", "dod", "lifetime",) when: - def input = Try.of(() -> typeInputFactory.validate(foundFields, StorageTypeInput), FactoryException) + def input = typeInputFactory.validate(foundFields, StorageTypeInput) then: input.failure input.exception.get().message == "The provided fields [capex, cosPhiRated, dod, estorage, eta, id, lifetime, opex, pmax, pmin, srated, uuid] are invalid for instance of 'StorageTypeInput'. \n" + - "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'StorageTypeInput' are possible (NOT case-sensitive!):\n" + - "0: [activePowerGradient, capex, cosPhiRated, dod, eStorage, eta, id, lifeCycle, lifeTime, opex, pMax, sRated, uuid] or [active_power_gradient, capex, cos_phi_rated, dod, e_storage, eta, id, life_cycle, life_time, opex, p_max, s_rated, uuid]\n" + "The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'StorageTypeInput' are possible (NOT case-sensitive!):\n" + + "0: [activePowerGradient, capex, cosPhiRated, dod, eStorage, eta, id, lifeCycle, lifeTime, opex, pMax, sRated, uuid] or [active_power_gradient, capex, cos_phi_rated, dod, e_storage, eta, id, life_cycle, life_time, opex, p_max, s_rated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 32f4fd439..88efb0213 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.source import edu.ie3.datamodel.io.factory.input.ThermalBusInputFactory import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.csv.CsvDataSource +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput import edu.ie3.test.common.SystemParticipantTestData as sptd @@ -17,6 +18,7 @@ import spock.lang.Shared import spock.lang.Specification import java.nio.file.Path +import java.util.function.Function class EntitySourceTest extends Specification { @@ -26,8 +28,7 @@ class EntitySourceTest extends Specification { } @Override - Map, SourceValidator> getValidationMapping() { - return null + void validate() { } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy index 0e2e4a8da..3f4c7bb4f 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source +import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.util.geo.CoordinateDistance import org.locationtech.jts.geom.Point import tech.units.indriya.ComparableQuantity @@ -13,6 +14,11 @@ import javax.measure.quantity.Length class IdCoordinateSourceMock implements IdCoordinateSource { + @Override + Set getSourceFields(Class entityClass) throws SourceException { + return [] as Set + } + @Override Optional getCoordinate(int id) { return Optional.empty() diff --git a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy index 950705e57..ef45c0db2 100644 --- a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy @@ -5,6 +5,7 @@ */ package edu.ie3.test.common +import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.source.IdCoordinateSource import edu.ie3.datamodel.io.source.csv.CsvTestDataMeta import edu.ie3.util.geo.CoordinateDistance @@ -20,6 +21,11 @@ abstract class WeatherTestData { static final class DummyIdCoordinateSource implements CsvTestDataMeta, IdCoordinateSource { + @Override + Set getSourceFields(Class entityClass) throws SourceException { + return [] as Set + } + Optional getCoordinate(int id) { switch (id) { case 193186: return Optional.of(GeoUtils.buildPoint(7d, 49d)) From 1bc54883fa4494cff5e10c44a3aade14dc99fd17 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 5 Dec 2023 16:10:40 +0100 Subject: [PATCH 029/228] Some improvements. --- .../io/connectors/CouchbaseConnector.java | 7 ++- .../io/connectors/InfluxDbConnector.java | 6 +- .../ie3/datamodel/io/source/DataSource.java | 5 +- .../ie3/datamodel/io/source/EntitySource.java | 12 ++-- .../datamodel/io/source/GraphicSource.java | 9 +-- .../io/source/IdCoordinateSource.java | 5 +- .../datamodel/io/source/RawGridSource.java | 16 ++--- .../io/source/ResultEntitySource.java | 61 +++++++------------ .../io/source/SystemParticipantSource.java | 26 ++++---- .../datamodel/io/source/ThermalSource.java | 10 +-- .../io/source/TimeSeriesMappingSource.java | 4 +- .../ie3/datamodel/io/source/TypeSource.java | 45 ++++---------- .../datamodel/io/source/WeatherSource.java | 6 +- .../couchbase/CouchbaseWeatherSource.java | 13 ++-- .../io/source/csv/CsvDataSource.java | 12 ++-- .../io/source/csv/CsvIdCoordinateSource.java | 15 +++-- .../csv/CsvJointGridContainerSource.java | 17 ++---- .../csv/CsvTimeSeriesMappingSource.java | 5 +- .../io/source/csv/CsvWeatherSource.java | 10 ++- .../influxdb/InfluxDbWeatherSource.java | 10 ++- .../io/source/sql/SqlDataSource.java | 22 ++++--- .../io/source/sql/SqlIdCoordinateSource.java | 10 ++- .../sql/SqlTimeSeriesMappingSource.java | 5 +- .../io/source/sql/SqlTimeSeriesSource.java | 13 ++-- .../io/source/sql/SqlWeatherSource.java | 9 ++- .../io/source/EntitySourceTest.groovy | 6 +- .../io/source/IdCoordinateSourceMock.groovy | 4 +- .../ie3/test/common/WeatherTestData.groovy | 4 +- 28 files changed, 149 insertions(+), 218 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java index 42f7a8f82..2f15783ab 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java @@ -17,6 +17,7 @@ import java.time.Duration; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -59,9 +60,9 @@ public CouchbaseConnector( cluster = Cluster.connect(url, clusterOptions); } - /** Returns a set of found fields. */ + /** Returns the option for a set of found fields. */ @SuppressWarnings("unchecked") - public Set getSourceFields(Class entityClass) { + public Optional> getSourceFields(Class entityClass) { String query = "SELECT ARRAY_DISTINCT(ARRAY_AGG(v)) AS column FROM " + bucketName @@ -78,7 +79,7 @@ public Set getSourceFields(Class entityClass) { set.addAll((List) columns); } - return set; + return Optional.of(set); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java index 86805779f..079d36922 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java @@ -109,8 +109,8 @@ public InfluxDbConnector(String url, String databaseName) { this(url, databaseName, NO_SCENARIO, true, InfluxDB.LogLevel.NONE, BatchOptions.DEFAULTS); } - /** Returns the fields found in the source. */ - public Set getSourceFields(Class entityClass) { + /** Returns the option for fields found in the source. */ + public Optional> getSourceFields(Class entityClass) { QueryResult tagKeys = session.query(new Query("SHOW TAG KEYS ON " + databaseName)); Map>> tagResults = parseQueryResult(tagKeys); @@ -121,7 +121,7 @@ public Set getSourceFields(Class entityClass) { tagResults.values().forEach(v -> v.stream().map(m -> m.get("tagKey")).forEach(set::add)); fieldResults.values().forEach(v -> v.stream().map(m -> m.get("fieldKey")).forEach(set::add)); - return set; + return Optional.of(set); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java index d41a4b731..7fb36eb8f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.models.UniqueEntity; import java.util.*; import java.util.stream.Stream; @@ -17,9 +16,9 @@ public interface DataSource { * Method to retrieve the fields found in the source. * * @param entityClass class of the source - * @return the found fields + * @return an option for the found fields */ - Set getSourceFields(Class entityClass) throws SourceException; + Optional> getSourceFields(Class entityClass); /** Creates a stream of maps that represent the rows in the database */ Stream> getSourceData(Class entityClass); diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 5e0a4ae2d..71373bbfc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -46,17 +46,13 @@ public abstract class EntitySource { * * @param entityClass class to be validated * @param validator used to validate - * @return either a {@link FactoryException} wrapped by a failure or an empty success * @param type of the class */ - protected final Try validate( + protected final void validate( Class entityClass, SourceValidator validator) { - try { - Set actualFields = dataSource.getSourceFields(entityClass); - return validator.validate(actualFields, entityClass); - } catch (SourceException e) { - return Failure.of(new FactoryException(e.getCause())); - } + dataSource + .getSourceFields(entityClass) + .ifPresent(s -> validator.validate(s, entityClass).getOrThrow()); } protected String buildSkippingMessage( diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 8799cc5a4..4d8a577d5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.GraphicSourceException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData; @@ -53,12 +52,8 @@ public GraphicSource(TypeSource typeSource, RawGridSource rawGridSource, DataSou @Override public void validate() { - List exceptions = - Try.getExceptions( - validate(NodeGraphicInput.class, nodeGraphicInputFactory), - validate(LineGraphicInput.class, lineGraphicInputFactory)); - - exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); + validate(NodeGraphicInput.class, nodeGraphicInputFactory); + validate(LineGraphicInput.class, lineGraphicInputFactory); } /** Returns the graphic elements of the grid or throws a {@link SourceException} */ diff --git a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java index d0374c2f6..f9b3768db 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.util.geo.CoordinateDistance; import edu.ie3.util.geo.GeoUtils; import java.util.*; @@ -24,9 +23,9 @@ public interface IdCoordinateSource { * Method to retrieve the fields found in the source. * * @param entityClass class of the source - * @return the found fields + * @return an option for the found fields */ - Set getSourceFields(Class entityClass) throws SourceException; + Optional> getSourceFields(Class entityClass); /** * Get the matching coordinate for the given ID diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index cc75ce44e..a32ac1902 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -64,16 +64,12 @@ public RawGridSource(TypeSource typeSource, DataSource dataSource) { @Override public void validate() { - List exceptions = - Try.getExceptions( - validate(NodeInput.class, nodeInputFactory), - validate(LineInput.class, lineInputFactory), - validate(Transformer2WInput.class, transformer2WInputFactory), - validate(Transformer3WInput.class, transformer3WInputFactory), - validate(SwitchInput.class, switchInputFactory), - validate(MeasurementUnitInput.class, measurementUnitInputFactory)); - - exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); + validate(NodeInput.class, nodeInputFactory); + validate(LineInput.class, lineInputFactory); + validate(Transformer2WInput.class, transformer2WInputFactory); + validate(Transformer3WInput.class, transformer3WInputFactory); + validate(SwitchInput.class, switchInputFactory); + validate(MeasurementUnitInput.class, measurementUnitInputFactory); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index a29d3af84..b77feb5cc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.io.factory.SimpleEntityFactory; import edu.ie3.datamodel.io.factory.result.*; import edu.ie3.datamodel.models.result.NodeResult; @@ -17,12 +16,10 @@ import edu.ie3.datamodel.models.result.system.*; import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult; import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link ResultEntity} container @@ -66,44 +63,28 @@ public ResultEntitySource(DataSource dataSource, String dtfPattern) { @Override public void validate() { - List exceptions = - new ArrayList<>( - Stream.of( - LoadResult.class, - FixedFeedInResult.class, - BmResult.class, - PvResult.class, - ChpResult.class, - WecResult.class, - StorageResult.class, - EvcsResult.class, - EvResult.class, - HpResult.class, - EmResult.class) - .map(c -> validate(c, systemParticipantResultFactory).getException()) - .flatMap(Optional::stream) - .toList()); + List.of( + LoadResult.class, + FixedFeedInResult.class, + BmResult.class, + PvResult.class, + ChpResult.class, + WecResult.class, + StorageResult.class, + EvcsResult.class, + EvResult.class, + HpResult.class, + EmResult.class) + .forEach(c -> validate(c, systemParticipantResultFactory)); - validate(ThermalHouseResult.class, thermalResultFactory) - .getException() - .ifPresent(exceptions::add); - validate(CylindricalStorageResult.class, thermalResultFactory) - .getException() - .ifPresent(exceptions::add); - validate(SwitchResult.class, switchResultFactory).getException().ifPresent(exceptions::add); - validate(NodeResult.class, nodeResultFactory).getException().ifPresent(exceptions::add); - validate(LineResult.class, connectorResultFactory).getException().ifPresent(exceptions::add); - validate(Transformer2WResult.class, connectorResultFactory) - .getException() - .ifPresent(exceptions::add); - validate(Transformer3WResult.class, connectorResultFactory) - .getException() - .ifPresent(exceptions::add); - validate(FlexOptionsResult.class, flexOptionsResultFactory) - .getException() - .ifPresent(exceptions::add); - - exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); + validate(ThermalHouseResult.class, thermalResultFactory); + validate(CylindricalStorageResult.class, thermalResultFactory); + validate(SwitchResult.class, switchResultFactory); + validate(NodeResult.class, nodeResultFactory); + validate(LineResult.class, connectorResultFactory); + validate(Transformer2WResult.class, connectorResultFactory); + validate(Transformer3WResult.class, connectorResultFactory); + validate(FlexOptionsResult.class, flexOptionsResultFactory); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index a5d473370..67e15ed4f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -79,21 +79,17 @@ public SystemParticipantSource( @Override public void validate() { - List exceptions = - Try.getExceptions( - validate(BmInput.class, bmInputFactory), - validate(ChpInput.class, chpInputFactory), - validate(EvInput.class, evInputFactory), - validate(FixedFeedInInput.class, fixedFeedInInputFactory), - validate(HpInput.class, hpInputFactory), - validate(LoadInput.class, loadInputFactory), - validate(PvInput.class, pvInputFactory), - validate(StorageInput.class, storageInputFactory), - validate(WecInput.class, wecInputFactory), - validate(EvcsInput.class, evcsInputFactory), - validate(EmInput.class, emInputFactory)); - - exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); + validate(BmInput.class, bmInputFactory); + validate(ChpInput.class, chpInputFactory); + validate(EvInput.class, evInputFactory); + validate(FixedFeedInInput.class, fixedFeedInInputFactory); + validate(HpInput.class, hpInputFactory); + validate(LoadInput.class, loadInputFactory); + validate(PvInput.class, pvInputFactory); + validate(StorageInput.class, storageInputFactory); + validate(WecInput.class, wecInputFactory); + validate(EvcsInput.class, evcsInputFactory); + validate(EmInput.class, emInputFactory); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 93bd9754d..385629564 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -48,13 +48,9 @@ public ThermalSource(TypeSource typeSource, DataSource dataSource) { @Override public void validate() { - List exceptions = - Try.getExceptions( - validate(ThermalBusInput.class, thermalBusInputFactory), - validate(CylindricalStorageInput.class, cylindricalStorageInputFactory), - validate(ThermalHouseInput.class, thermalHouseInputFactory)); - - exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); + validate(ThermalBusInput.class, thermalBusInputFactory); + validate(CylindricalStorageInput.class, cylindricalStorageInputFactory); + validate(ThermalHouseInput.class, thermalHouseInputFactory); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java index 72f213d00..548080aaf 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -59,8 +59,8 @@ public Optional getTimeSeriesUuid(UUID modelIdentifier) { */ public abstract Stream> getMappingSourceData(); - /** Returns the fields found in the source */ - public abstract Set getSourceFields() throws SourceException; + /** Returns the option for fields found in the source */ + public abstract Optional> getSourceFields() throws SourceException; // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index bbde7017b..b8420c364 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.OperatorInputFactory; import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory; @@ -18,11 +17,8 @@ import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.utils.Try; -import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.Set; -import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link @@ -52,34 +48,19 @@ public TypeSource(DataSource dataSource) { @Override public void validate() { - validate(OperatorInput.class, operatorInputFactory) - .ifFailure( - e -> - log.warn( - "The source for '{}' could not be validated due to: {}", - OperatorInput.class, - e)); - - List exceptions = - new ArrayList<>( - Try.getExceptions( - validate(LineTypeInput.class, lineTypeInputFactory), - validate(Transformer2WTypeInput.class, transformer2WTypeInputFactory), - validate(Transformer3WTypeInput.class, transformer3WTypeInputFactory))); - - exceptions.addAll( - Stream.of( - EvTypeInput.class, - HpTypeInput.class, - BmTypeInput.class, - WecTypeInput.class, - ChpTypeInput.class, - StorageTypeInput.class) - .map(c -> validate(c, systemParticipantTypeInputFactory).getException()) - .flatMap(Optional::stream) - .toList()); - - exceptions.forEach(e -> log.warn("The following exception was thrown while validating: ", e)); + validate(OperatorInput.class, operatorInputFactory); + validate(LineTypeInput.class, lineTypeInputFactory); + validate(Transformer2WTypeInput.class, transformer2WTypeInputFactory); + validate(Transformer3WTypeInput.class, transformer3WTypeInputFactory); + + List.of( + EvTypeInput.class, + HpTypeInput.class, + BmTypeInput.class, + WecTypeInput.class, + ChpTypeInput.class, + StorageTypeInput.class) + .forEach(c -> validate(c, systemParticipantTypeInputFactory)); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java index a1b4b29f0..bb579a90c 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java @@ -44,10 +44,10 @@ protected WeatherSource( * Method to retrieve the fields found in the source. * * @param entityClass class of the source - * @return the found fields + * @return an option for fields found in the source */ - public abstract Set getSourceFields(Class entityClass) - throws SourceException; + public abstract Optional> getSourceFields( + Class entityClass); // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- diff --git a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java index f1a50d0fc..257acc678 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java @@ -10,7 +10,6 @@ import com.couchbase.client.java.json.JsonObject; import com.couchbase.client.java.kv.GetResult; import com.couchbase.client.java.query.QueryResult; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.CouchbaseConnector; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory; @@ -60,8 +59,7 @@ public CouchbaseWeatherSource( IdCoordinateSource coordinateSource, String coordinateIdColumnName, TimeBasedWeatherValueFactory weatherFactory, - String timeStampPattern) - throws SourceException { + String timeStampPattern) { this( connector, coordinateSource, @@ -90,20 +88,19 @@ public CouchbaseWeatherSource( String coordinateIdColumnName, String keyPrefix, TimeBasedWeatherValueFactory weatherFactory, - String timeStampPattern) - throws SourceException { + String timeStampPattern) { super(idCoordinateSource, weatherFactory); this.connector = connector; this.coordinateIdColumnName = coordinateIdColumnName; this.keyPrefix = keyPrefix; this.timeStampPattern = timeStampPattern; - weatherFactory.validate(getSourceFields(WeatherValue.class), WeatherValue.class); + getSourceFields(WeatherValue.class) + .ifPresent(s -> weatherFactory.validate(s, WeatherValue.class).getOrThrow()); } @Override - public Set getSourceFields(Class entityClass) - throws SourceException { + public Optional> getSourceFields(Class entityClass) { return connector.getSourceFields(entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index baf343e69..ea39eac0a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -59,12 +59,16 @@ public CsvDataSource(String csvSep, Path folderPath, FileNamingStrategy fileNami } @Override - public Set getSourceFields(Class entityClass) - throws SourceException { + public Optional> getSourceFields(Class entityClass) { try (BufferedReader reader = connector.initReader(entityClass)) { - return Arrays.stream(parseCsvRow(reader.readLine(), csvSep)).collect(Collectors.toSet()); + return Optional.of( + Arrays.stream(parseCsvRow(reader.readLine(), csvSep)).collect(Collectors.toSet())); } catch (ConnectorException | IOException e) { - throw new SourceException("The following exception was thrown while reading a source: ", e); + log.warn( + "The source for the entity '{}' couldn't be read and therefore not be validated! Cause: {}", + entityClass, + e.getMessage()); + return Optional.empty(); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index 1cbf60f20..05db85a0a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -87,12 +87,17 @@ private Map invert(Map map) { } @Override - public Set getSourceFields(Class entityClass) throws SourceException { + public Optional> getSourceFields(Class entityClass) { try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { - return Arrays.stream(dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep)) - .collect(Collectors.toSet()); + return Optional.of( + Arrays.stream(dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep)) + .collect(Collectors.toSet())); } catch (IOException e) { - throw new SourceException("The following exception was thrown while reading a source: ", e); + log.warn( + "The source for the entity '{}' couldn't be read and therefore not be validated!", + entityClass, + e); + return Optional.empty(); } } @@ -173,7 +178,7 @@ protected Stream> buildStreamWithFieldsToAttributesMap() { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); // validating read file - factory.validate(Set.of(headline), Pair.class); + factory.validate(Set.of(headline), Pair.class).getOrThrow(); // by default try-with-resources closes the reader directly when we leave this method (which // is wanted to avoid a lock on the file), but this causes a closing of the stream as well. diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index e4e46238d..8aa9b1cb7 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source.csv; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.FileException; import edu.ie3.datamodel.exceptions.InvalidGridException; import edu.ie3.datamodel.exceptions.SourceException; @@ -17,7 +16,6 @@ import edu.ie3.datamodel.models.input.container.JointGridContainer; import edu.ie3.datamodel.models.input.container.RawGridElements; import edu.ie3.datamodel.models.input.container.SystemParticipants; -import edu.ie3.datamodel.utils.ExceptionUtils; import edu.ie3.datamodel.utils.Try; import java.nio.file.Path; import java.util.*; @@ -55,17 +53,10 @@ public static JointGridContainer read( GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* validating sources */ - List validationException = - Try.getExceptions( - Try.ofVoid(typeSource::validate, FactoryException.class), - Try.ofVoid(rawGridSource::validate, FactoryException.class), - Try.ofVoid(systemParticipantSource::validate, FactoryException.class), - Try.ofVoid(graphicSource::validate, FactoryException.class)); - - if (!validationException.isEmpty()) { - throw new FactoryException( - "Validation failed due to: " + ExceptionUtils.getFullMessages(validationException)); - } + typeSource.validate(); + rawGridSource.validate(); + systemParticipantSource.validate(); + graphicSource.validate(); /* Loading models */ Try rawGridElements = diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index b06ae4231..7d4244428 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.nio.file.Path; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Stream; @@ -23,7 +24,7 @@ public CsvTimeSeriesMappingSource( this.dataSource = new CsvDataSource(csvSep, gridFolderPath, fileNamingStrategy); // validating - mappingFactory.validate(getSourceFields(), MappingEntry.class); + getSourceFields().ifPresent(s -> mappingFactory.validate(s, MappingEntry.class).getOrThrow()); } @Override @@ -33,7 +34,7 @@ public Stream> getMappingSourceData() { } @Override - public Set getSourceFields() throws SourceException { + public Optional> getSourceFields() throws SourceException { return dataSource.getSourceFields(MappingEntry.class); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index b7f45fa1b..a246ce024 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source.csv; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; @@ -61,11 +60,10 @@ public CsvWeatherSource( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - /** Returns an empty set for now. */ + /** Returns an empty optional for now. */ @Override - public Set getSourceFields(Class entityClass) - throws SourceException { - return Collections.emptySet(); + public Optional> getSourceFields(Class entityClass) { + return Optional.empty(); } @Override @@ -188,7 +186,7 @@ private Stream> buildStreamWithFieldsToAttributesMap( final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); // validating read file - weatherFactory.validate(Set.of(headline), WeatherValue.class); + weatherFactory.validate(Set.of(headline), WeatherValue.class).getOrThrow(); // by default try-with-resources closes the reader directly when we leave this method (which // is wanted to avoid a lock on the file), but this causes a closing of the stream as well. diff --git a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java index ec3a3d3e2..464e26f32 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source.influxdb; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.InfluxDbConnector; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory; @@ -48,17 +47,16 @@ public class InfluxDbWeatherSource extends WeatherSource { public InfluxDbWeatherSource( InfluxDbConnector connector, IdCoordinateSource idCoordinateSource, - TimeBasedWeatherValueFactory weatherValueFactory) - throws SourceException { + TimeBasedWeatherValueFactory weatherValueFactory) { super(idCoordinateSource, weatherValueFactory); this.connector = connector; - weatherValueFactory.validate(getSourceFields(WeatherValue.class), WeatherValue.class); + getSourceFields(WeatherValue.class) + .ifPresent(s -> weatherValueFactory.validate(s, WeatherValue.class).getOrThrow()); } @Override - public Set getSourceFields(Class entityClass) - throws SourceException { + public Optional> getSourceFields(Class entityClass) { return connector.getSourceFields(entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java index 7322c0fc6..fd5ed3e18 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.source.sql; import edu.ie3.datamodel.exceptions.InvalidColumnNameException; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; @@ -110,8 +109,7 @@ protected List getDbTables(String schemaPattern, String tableNamePattern } @Override - public Set getSourceFields(Class entityClass) - throws SourceException { + public Optional> getSourceFields(Class entityClass) { try { String tableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); ResultSet rs = @@ -123,9 +121,13 @@ public Set getSourceFields(Class entityClass) columnNames.add(StringUtils.snakeCaseToCamelCase(name)); } - return columnNames; + return Optional.of(columnNames); } catch (NoSuchElementException | SQLException e) { - throw new SourceException("The following exception was thrown while reading a source: ", e); + log.warn( + "The source for the entity '{}' couldn't be read and therefore not be validated! Cause: {}", + entityClass, + e.getMessage()); + return Optional.empty(); } } @@ -133,10 +135,9 @@ public Set getSourceFields(Class entityClass) * Method that uses the table name to retrieve all field names. * * @param tableName to be used - * @return a set of found fields - * @throws SourceException - if an error occurred + * @return an option for a set of found fields */ - public Set getSourceFields(String tableName) throws SourceException { + public Optional> getSourceFields(String tableName) { try { ResultSet rs = connector.getConnection().getMetaData().getColumns(null, null, tableName, null); @@ -147,9 +148,10 @@ public Set getSourceFields(String tableName) throws SourceException { columnNames.add(StringUtils.snakeCaseToCamelCase(name)); } - return columnNames; + return Optional.of(columnNames); } catch (NoSuchElementException | SQLException e) { - throw new SourceException("The following exception was thrown while reading a source: ", e); + log.warn("The table '{}' couldn't be read and therefore not be validated!", tableName, e); + return Optional.empty(); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index 022932e95..6dfbbe157 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -47,8 +47,7 @@ public class SqlIdCoordinateSource implements IdCoordinateSource { private final SqlIdCoordinateFactory factory; public SqlIdCoordinateSource( - SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) - throws SourceException { + SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) { this.factory = factory; this.dataSource = dataSource; this.coordinateTableName = coordinateTableName; @@ -58,7 +57,7 @@ public SqlIdCoordinateSource( dataSource.getDbColumnName(factory.getCoordinateField(), coordinateTableName); // validating table - factory.validate(getSourceFields(Pair.class), Pair.class); + getSourceFields(Pair.class).ifPresent(s -> factory.validate(s, Pair.class).getOrThrow()); // setup queries this.basicQuery = createBaseQueryString(dataSource.schemaName, coordinateTableName); @@ -83,8 +82,7 @@ public SqlIdCoordinateSource( SqlConnector connector, String schemaName, String coordinateTableName, - SqlIdCoordinateFactory factory) - throws SourceException { + SqlIdCoordinateFactory factory) { this( factory, coordinateTableName, @@ -92,7 +90,7 @@ public SqlIdCoordinateSource( } @Override - public Set getSourceFields(Class entityClass) throws SourceException { + public Optional> getSourceFields(Class entityClass) { return dataSource.getSourceFields(coordinateTableName); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java index f9491c403..b5f817058 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java @@ -13,6 +13,7 @@ import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Stream; @@ -36,7 +37,7 @@ public SqlTimeSeriesMappingSource( entityPersistenceNamingStrategy.getEntityName(MappingEntry.class).orElseThrow(); this.queryFull = createBaseQueryString(schemaName, tableName); - mappingFactory.validate(getSourceFields(), MappingEntry.class); + getSourceFields().ifPresent(s -> mappingFactory.validate(s, MappingEntry.class).getOrThrow()); } @Override @@ -45,7 +46,7 @@ public Stream> getMappingSourceData() { } @Override - public Set getSourceFields() throws SourceException { + public Optional> getSourceFields() throws SourceException { return dataSource.getSourceFields(tableName); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java index 2873b927e..8cbffccc5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java @@ -50,8 +50,7 @@ public SqlTimeSeriesSource( SqlDataSource sqlDataSource, UUID timeSeriesUuid, Class valueClass, - TimeBasedSimpleValueFactory factory) - throws SourceException { + TimeBasedSimpleValueFactory factory) { super(valueClass, factory); this.dataSource = sqlDataSource; @@ -64,7 +63,9 @@ public SqlTimeSeriesSource( final String tableName = sqlDataSource.databaseNamingStrategy.getTimeSeriesEntityName(columnScheme); - factory.validate(dataSource.getSourceFields(tableName), valueClass); + dataSource + .getSourceFields(tableName) + .ifPresent(s -> factory.validate(s, valueClass).getOrThrow()); String dbTimeColumnName = sqlDataSource.getDbColumnName(factory.getTimeFieldString(), tableName); @@ -91,8 +92,7 @@ public SqlTimeSeriesSource( DatabaseNamingStrategy namingStrategy, UUID timeSeriesUuid, Class valueClass, - TimeBasedSimpleValueFactory factory) - throws SourceException { + TimeBasedSimpleValueFactory factory) { this( new SqlDataSource(connector, schemaName, namingStrategy), timeSeriesUuid, @@ -134,8 +134,7 @@ private static SqlTimeSeriesSource create( DatabaseNamingStrategy namingStrategy, UUID timeSeriesUuid, Class valClass, - String timePattern) - throws SourceException { + String timePattern) { TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass, timePattern); return new SqlTimeSeriesSource<>( diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java index 9e3cbc85c..6e69d808a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java @@ -55,14 +55,14 @@ public SqlWeatherSource( IdCoordinateSource idCoordinateSource, String schemaName, String weatherTableName, - TimeBasedWeatherValueFactory weatherFactory) - throws SourceException { + TimeBasedWeatherValueFactory weatherFactory) { super(idCoordinateSource, weatherFactory); this.factoryCoordinateFieldName = weatherFactory.getCoordinateIdFieldString(); this.dataSource = new SqlDataSource(connector, schemaName, new DatabaseNamingStrategy()); this.tableName = weatherTableName; - weatherFactory.validate(getSourceFields(WeatherValue.class), WeatherValue.class); + getSourceFields(WeatherValue.class) + .ifPresent(s -> weatherFactory.validate(s, WeatherValue.class).getOrThrow()); String dbTimeColumnName = dataSource.getDbColumnName(weatherFactory.getTimeFieldString(), weatherTableName); @@ -81,8 +81,7 @@ public SqlWeatherSource( } @Override - public Set getSourceFields(Class entityClass) - throws SourceException { + public Optional> getSourceFields(Class entityClass) { return dataSource.getSourceFields(tableName); } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 88efb0213..507d9fb0e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -5,20 +5,18 @@ */ package edu.ie3.datamodel.io.source +import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.ThermalBusInputFactory import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.csv.CsvDataSource -import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput -import edu.ie3.test.common.SystemParticipantTestData as sptd import edu.ie3.test.common.GridTestData as gtd - +import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Shared import spock.lang.Specification import java.nio.file.Path -import java.util.function.Function class EntitySourceTest extends Specification { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy index 3f4c7bb4f..992e868de 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy @@ -15,8 +15,8 @@ import javax.measure.quantity.Length class IdCoordinateSourceMock implements IdCoordinateSource { @Override - Set getSourceFields(Class entityClass) throws SourceException { - return [] as Set + Optional> getSourceFields(Class entityClass) throws SourceException { + return Optional.empty() } @Override diff --git a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy index ef45c0db2..0f19dcbd8 100644 --- a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy @@ -22,8 +22,8 @@ abstract class WeatherTestData { static final class DummyIdCoordinateSource implements CsvTestDataMeta, IdCoordinateSource { @Override - Set getSourceFields(Class entityClass) throws SourceException { - return [] as Set + Optional> getSourceFields(Class entityClass) throws SourceException { + return Optional.empty() } Optional getCoordinate(int id) { From 494eba0a5517b2eef3d25c984de834cce018fa4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 09:35:14 +0000 Subject: [PATCH 030/228] Bump org.postgresql:postgresql from 42.7.0 to 42.7.1 (#953) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 32a8ddd02..d28387d40 100644 --- a/build.gradle +++ b/build.gradle @@ -91,7 +91,7 @@ dependencies { // Databases implementation 'org.influxdb:influxdb-java:2.23' implementation 'com.couchbase.client:java-client:3.5.0' - runtimeOnly 'org.postgresql:postgresql:42.7.0' // postgresql jdbc driver required during runtime + runtimeOnly 'org.postgresql:postgresql:42.7.1' // postgresql jdbc driver required during runtime implementation 'commons-io:commons-io:2.15.1' // I/O functionalities implementation 'org.apache.commons:commons-compress:1.25.0' // I/O functionalities From 477d766c5cbee6ab39a27c1056ad4600f1d2b011 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:01:36 +0000 Subject: [PATCH 031/228] Bump com.couchbase.client:java-client from 3.5.0 to 3.5.1 (#956) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d28387d40..9fd992de8 100644 --- a/build.gradle +++ b/build.gradle @@ -90,7 +90,7 @@ dependencies { // Databases implementation 'org.influxdb:influxdb-java:2.23' - implementation 'com.couchbase.client:java-client:3.5.0' + implementation 'com.couchbase.client:java-client:3.5.1' runtimeOnly 'org.postgresql:postgresql:42.7.1' // postgresql jdbc driver required during runtime implementation 'commons-io:commons-io:2.15.1' // I/O functionalities From 7d2437e6627ae16e8085ca2dc6f7d8f267e705de Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 16:30:42 +0100 Subject: [PATCH 032/228] Separating em units from system participants --- .../uml/main/input/ModelContainerConcept.puml | 2 +- .../input/participant/EmInputFactory.java | 22 ++---- .../ie3/datamodel/io/sink/CsvFileSink.java | 8 +-- .../io/source/EnergyManagementSource.java | 68 ++++++++++++++++++ .../io/source/SystemParticipantSource.java | 50 +------------- .../csv/CsvJointGridContainerSource.java | 9 +-- .../container/EnergyManagementUnits.java | 55 +++++++++++++++ .../models/input/container/GridContainer.java | 30 +++++++- .../input/container/JointGridContainer.java | 9 ++- .../input/container/SubGridContainer.java | 10 ++- .../input/container/SystemParticipants.java | 69 +++++-------------- .../models/input/system/EmInput.java | 57 +++------------ .../utils/ContainerNodeUpdateUtil.java | 2 + .../ie3/datamodel/utils/ContainerUtils.java | 31 ++++++--- .../GridContainerValidationUtils.java | 5 +- .../participant/EmInputFactoryTest.groovy | 37 ++-------- .../csv/CsvEnergyManagementSourceTest.groovy | 36 ++++++++++ .../csv/CsvSystemParticipantSourceTest.groovy | 62 +++++------------ .../container/JointGridContainerTest.groovy | 9 ++- .../container/SystemParticipantsTest.groovy | 13 ++-- .../datamodel/utils/ContainerUtilsTest.groovy | 8 +++ .../ie3/test/common/ComplexTopology.groovy | 22 +++--- .../common/EnergyManagementTestData.groovy | 30 ++++++++ .../ie3/test/common/SampleJointGrid.groovy | 11 +-- .../common/SystemParticipantTestData.groovy | 45 ++++-------- .../io/source/csv/_participants/em_input.csv | 4 +- 26 files changed, 375 insertions(+), 329 deletions(-) create mode 100644 src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java create mode 100644 src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java create mode 100644 src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy create mode 100644 src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy diff --git a/docs/uml/main/input/ModelContainerConcept.puml b/docs/uml/main/input/ModelContainerConcept.puml index e96c699e8..2583a8fc9 100644 --- a/docs/uml/main/input/ModelContainerConcept.puml +++ b/docs/uml/main/input/ModelContainerConcept.puml @@ -42,7 +42,7 @@ package models.input.container { class SystemParticipants { - bmPlants: Set - chpPlants: Set - - evCS: Set + - evcs: Set - evs: Set - fixedFeedIns: Set - heatPumps: Set diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index f19475f96..3e2e39d60 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -6,19 +6,17 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; +import edu.ie3.datamodel.io.factory.input.AssetInputEntityFactory; import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EmInput; -import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class EmInputFactory - extends SystemParticipantInputEntityFactory { +public class EmInputFactory extends AssetInputEntityFactory { private static final Logger logger = LoggerFactory.getLogger(EmInputFactory.class); private static final String CONNECTED_ASSETS = "connectedassets"; @@ -36,11 +34,9 @@ protected String[] getAdditionalFields() { @Override protected EmInput buildModel( - NodeAssetInputEntityData data, + AssetInputEntityData data, UUID uuid, String id, - NodeInput node, - ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { ControlStrategy controlStrategy; @@ -58,14 +54,6 @@ protected EmInput buildModel( if (connectedAssets.length == 0) logger.warn("There are no connected assets for energy management system \"{}\".", id); - return new EmInput( - uuid, - id, - operator, - operationTime, - node, - qCharacteristics, - connectedAssets, - controlStrategy); + return new EmInput(uuid, id, operator, operationTime, connectedAssets, controlStrategy); } } diff --git a/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java b/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java index da67f99a0..530818677 100644 --- a/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java +++ b/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java @@ -170,7 +170,7 @@ public void persistJointGrid(JointGridContainer jointGridContainer) { SystemParticipants systemParticipants = jointGridContainer.getSystemParticipants(); Set bmPlants = systemParticipants.getBmPlants(); Set chpPlants = systemParticipants.getChpPlants(); - Set evCS = systemParticipants.getEvCS(); + Set evcs = systemParticipants.getEvcs(); Set evs = systemParticipants.getEvs(); Set fixedFeedIns = systemParticipants.getFixedFeedIns(); Set heatPumps = systemParticipants.getHeatPumps(); @@ -178,7 +178,6 @@ public void persistJointGrid(JointGridContainer jointGridContainer) { Set pvPlants = systemParticipants.getPvPlants(); Set storages = systemParticipants.getStorages(); Set wecPlants = systemParticipants.getWecPlants(); - Set emSystems = systemParticipants.getEmSystems(); // get graphic elements (just for better readability, we could also just get them directly // below) @@ -211,15 +210,14 @@ public void persistJointGrid(JointGridContainer jointGridContainer) { measurementUnits, bmPlants, chpPlants, - evCS, + evcs, evs, fixedFeedIns, heatPumps, loads, pvPlants, storages, - wecPlants, - emSystems) + wecPlants) .flatMap(Collection::stream) .map(Extractor::extractOperator) .flatMap(Optional::stream) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java new file mode 100644 index 000000000..51e120b1f --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -0,0 +1,68 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.source; + +import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; +import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.container.EnergyManagementUnits; +import edu.ie3.datamodel.models.input.system.EmInput; +import edu.ie3.datamodel.utils.Try; +import java.util.Set; + +public class EnergyManagementSource extends EntitySource { + + private final TypeSource typeSource; + + private final EmInputFactory emInputFactory; + + public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { + this.typeSource = typeSource; + this.dataSource = dataSource; + + this.emInputFactory = new EmInputFactory(); + } + + /** + * Returns a unique set of {@link EmInput} instances. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as + * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. + * + * @return a set of object and uuid unique {@link EmInput} entities + */ + public EnergyManagementUnits getEmUnits() throws SourceException { + Set operators = typeSource.getOperators(); + return getEmUnits(operators); + } + + /** + * This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as + * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. + * + *

In contrast to {@link #getEmUnits()} this method provides the ability to pass in an already + * existing set of {@link OperatorInput} entities, the {@link EmInput} instances depend on. Doing + * so, already loaded nodes can be recycled to improve performance and prevent unnecessary loading + * operations. + * + *

If something fails during the creation process a {@link SourceException} is thrown, else a + * set with all entities that has been able to be build is returned. + * + * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for + * the returning instances + * @return a set of object and uuid unique {@link EmInput} entities + */ + public EnergyManagementUnits getEmUnits(Set operators) throws SourceException { + Set emUnits = + Try.scanCollection( + buildAssetInputEntities(EmInput.class, emInputFactory, operators), EmInput.class) + .transformF(SourceException::new) + .getOrThrow(); + return new EnergyManagementUnits(emUnits); + } +} diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index d00f4e37a..53b727bd8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -50,7 +50,6 @@ public class SystemParticipantSource extends EntitySource { private final StorageInputFactory storageInputFactory; private final WecInputFactory wecInputFactory; private final EvcsInputFactory evcsInputFactory; - private final EmInputFactory emInputFactory; public SystemParticipantSource( TypeSource typeSource, @@ -74,7 +73,6 @@ public SystemParticipantSource( this.storageInputFactory = new StorageInputFactory(); this.wecInputFactory = new WecInputFactory(); this.evcsInputFactory = new EvcsInputFactory(); - this.emInputFactory = new EmInputFactory(); } /** @@ -136,8 +134,6 @@ public SystemParticipants getSystemParticipants() throws SourceException { SourceException.class); Try, SourceException> hpInputs = Try.of(() -> getHeatPumps(nodes, operators, hpTypes, thermalBuses), SourceException.class); - Try, SourceException> emInputs = - Try.of(() -> getEmSystems(nodes, operators), SourceException.class); List exceptions = Try.getExceptions( @@ -151,8 +147,7 @@ public SystemParticipants getSystemParticipants() throws SourceException { evs, evcs, chpInputs, - hpInputs, - emInputs)); + hpInputs)); if (!exceptions.isEmpty()) { throw new SystemParticipantsException( @@ -172,8 +167,7 @@ public SystemParticipants getSystemParticipants() throws SourceException { loads.getOrThrow(), pvInputs.getOrThrow(), storages.getOrThrow(), - wecInputs.getOrThrow(), - emInputs.getOrThrow()); + wecInputs.getOrThrow()); } } @@ -527,46 +521,6 @@ public Set getEvs( .getOrThrow(); } - /** - * Returns a unique set of {@link EmInput} instances. - * - *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link - * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. - * - * @return a set of object and uuid unique {@link EmInput} entities - */ - public Set getEmSystems() throws SourceException { - Set operators = typeSource.getOperators(); - return getEmSystems(rawGridSource.getNodes(operators), operators); - } - - /** - * This set has to be unique in the sense of object uniqueness but also in the sense of {@link - * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. - * - *

In contrast to {@link #getHeatPumps()} this method provides the ability to pass in an - * already existing set of {@link NodeInput} and {@link OperatorInput} entities, the {@link - * EmInput} instances depend on. Doing so, already loaded nodes can be recycled to improve - * performance and prevent unnecessary loading operations. - * - *

If something fails during the creation process a {@link SourceException} is thrown, else a - * set with all entities that has been able to be build is returned. - * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link EmInput} entities - */ - public Set getEmSystems(Set nodes, Set operators) - throws SourceException { - return Try.scanCollection( - buildNodeAssetEntities(EmInput.class, emInputFactory, nodes, operators), EmInput.class) - .transformF(SourceException::new) - .getOrThrow(); - } - public Set getChpPlants() throws SourceException { Set operators = typeSource.getOperators(); Set thermalBuses = thermalSource.getThermalBuses(operators); diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 2fa9e0f2a..708d546e6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -12,10 +12,7 @@ import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.*; -import edu.ie3.datamodel.models.input.container.GraphicElements; -import edu.ie3.datamodel.models.input.container.JointGridContainer; -import edu.ie3.datamodel.models.input.container.RawGridElements; -import edu.ie3.datamodel.models.input.container.SystemParticipants; +import edu.ie3.datamodel.models.input.container.*; import edu.ie3.datamodel.utils.Try; import java.nio.file.Path; import java.util.List; @@ -50,6 +47,7 @@ public static JointGridContainer read( ThermalSource thermalSource = new ThermalSource(typeSource, dataSource); SystemParticipantSource systemParticipantSource = new SystemParticipantSource(typeSource, thermalSource, rawGridSource, dataSource); + EnergyManagementSource emSource = new EnergyManagementSource(typeSource, dataSource); GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* Loading models */ @@ -57,6 +55,8 @@ public static JointGridContainer read( Try.of(rawGridSource::getGridData, SourceException.class); Try systemParticipants = Try.of(systemParticipantSource::getSystemParticipants, SourceException.class); + Try emUnits = + Try.of(emSource::getEmUnits, SourceException.class); Try graphicElements = Try.of(graphicSource::getGraphicElements, SourceException.class); @@ -73,6 +73,7 @@ public static JointGridContainer read( gridName, rawGridElements.getOrThrow(), systemParticipants.getOrThrow(), + emUnits.getOrThrow(), graphicElements.getOrThrow()); } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java new file mode 100644 index 000000000..9dc4ab86e --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java @@ -0,0 +1,55 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models.input.container; + +import edu.ie3.datamodel.models.input.system.EmInput; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** Represents the accumulation of energy management units */ +public class EnergyManagementUnits { + + protected final Map emUnits; + + public EnergyManagementUnits(Set emUnits) { + this.emUnits = + emUnits.stream().collect(Collectors.toMap(EmInput::getUuid, Function.identity())); + } + + /** + * Combine different already existing containers + * + * @param emUnits already existing containers + */ + public EnergyManagementUnits(Collection emUnits) { + this.emUnits = + emUnits.stream() + .flatMap(units -> units.emUnits.entrySet().stream()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + public Set getEmUnits() { + return new HashSet<>(emUnits.values()); + } + + // TODO useful once #957 is implemented + public Map getEmUnitsMap() { + return emUnits; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EnergyManagementUnits that)) return false; + return Objects.equals(emUnits, that.emUnits); + } + + @Override + public int hashCode() { + return Objects.hash(emUnits); + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java index 3c076cfff..9c914499f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java +++ b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java @@ -15,6 +15,8 @@ public abstract class GridContainer implements InputContainer { protected final RawGridElements rawGrid; /** Accumulated system participant elements */ protected final SystemParticipants systemParticipants; + /** Accumulated energy management units */ + protected final EnergyManagementUnits emUnits; /** Accumulated graphic data entities (node graphics, line graphics) */ protected final GraphicElements graphics; @@ -22,11 +24,13 @@ protected GridContainer( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, + EnergyManagementUnits emUnits, GraphicElements graphics) { this.gridName = gridName; this.rawGrid = rawGrid; this.systemParticipants = systemParticipants; + this.emUnits = emUnits; this.graphics = graphics; } @@ -35,6 +39,7 @@ public List allEntitiesAsList() { List allEntities = new LinkedList<>(); allEntities.addAll(rawGrid.allEntitiesAsList()); allEntities.addAll(systemParticipants.allEntitiesAsList()); + allEntities.addAll(emUnits.getEmUnits()); allEntities.addAll(graphics.allEntitiesAsList()); return Collections.unmodifiableList(allEntities); } @@ -55,6 +60,10 @@ public SystemParticipants getSystemParticipants() { return systemParticipants; } + public EnergyManagementUnits getEmUnits() { + return emUnits; + } + public GraphicElements getGraphics() { return graphics; } @@ -66,12 +75,13 @@ public boolean equals(Object o) { return gridName.equals(that.gridName) && rawGrid.equals(that.rawGrid) && systemParticipants.equals(that.systemParticipants) + && emUnits.equals(that.emUnits) && graphics.equals(that.graphics); } @Override public int hashCode() { - return Objects.hash(gridName, rawGrid, systemParticipants, graphics); + return Objects.hash(gridName, rawGrid, systemParticipants, emUnits, graphics); } @Override @@ -91,6 +101,7 @@ protected abstract static class GridContainerCopyBuilder { private final Set bmPlants; private final Set chpPlants; - private final Set evCS; + private final Set evcs; private final Set evs; private final Set fixedFeedIns; private final Set heatPumps; @@ -24,23 +24,21 @@ public class SystemParticipants implements InputContainer pvPlants; private final Set storages; private final Set wecPlants; - private final Set emSystems; public SystemParticipants( Set bmPlants, Set chpPlants, - Set evCS, + Set evcs, Set evs, Set fixedFeedIns, Set heatPumps, Set loads, Set pvPlants, Set storages, - Set wecPlants, - Set emSystems) { + Set wecPlants) { this.bmPlants = bmPlants; this.chpPlants = chpPlants; - this.evCS = evCS; + this.evcs = evcs; this.evs = evs; this.fixedFeedIns = fixedFeedIns; this.heatPumps = heatPumps; @@ -48,7 +46,6 @@ public SystemParticipants( this.pvPlants = pvPlants; this.storages = storages; this.wecPlants = wecPlants; - this.emSystems = emSystems; } /** @@ -65,9 +62,9 @@ public SystemParticipants(Collection systemParticipants) { systemParticipants.stream() .flatMap(participants -> participants.chpPlants.stream()) .collect(Collectors.toSet()); - this.evCS = + this.evcs = systemParticipants.stream() - .flatMap(participants -> participants.evCS.stream()) + .flatMap(participants -> participants.evcs.stream()) .collect(Collectors.toSet()); this.evs = systemParticipants.stream() @@ -97,10 +94,6 @@ public SystemParticipants(Collection systemParticipants) { systemParticipants.stream() .flatMap(participants -> participants.wecPlants.stream()) .collect(Collectors.toSet()); - this.emSystems = - systemParticipants.stream() - .flatMap(participants -> participants.emSystems.stream()) - .collect(Collectors.toSet()); } /** @@ -122,7 +115,7 @@ public SystemParticipants(List systemParticipants) { .filter(ChpInput.class::isInstance) .map(ChpInput.class::cast) .collect(Collectors.toSet()); - this.evCS = + this.evcs = systemParticipants.parallelStream() .filter(EvcsInput.class::isInstance) .map(EvcsInput.class::cast) @@ -162,11 +155,6 @@ public SystemParticipants(List systemParticipants) { .filter(WecInput.class::isInstance) .map(WecInput.class::cast) .collect(Collectors.toSet()); - this.emSystems = - systemParticipants.parallelStream() - .filter(EmInput.class::isInstance) - .map(EmInput.class::cast) - .collect(Collectors.toSet()); } @Override @@ -174,7 +162,7 @@ public final List allEntitiesAsList() { List allEntities = new ArrayList<>(); allEntities.addAll(bmPlants); allEntities.addAll(chpPlants); - allEntities.addAll(evCS); + allEntities.addAll(evcs); allEntities.addAll(evs); allEntities.addAll(fixedFeedIns); allEntities.addAll(heatPumps); @@ -182,7 +170,6 @@ public final List allEntitiesAsList() { allEntities.addAll(pvPlants); allEntities.addAll(storages); allEntities.addAll(wecPlants); - allEntities.addAll(emSystems); return Collections.unmodifiableList(allEntities); } @@ -201,8 +188,8 @@ public Set getChpPlants() { } /** @return unmodifiable Set of all ev charging stations in this grid */ - public Set getEvCS() { - return Collections.unmodifiableSet(evCS); + public Set getEvcs() { + return Collections.unmodifiableSet(evcs); } /** @return unmodifiable Set of all electric vehicles in this grid */ @@ -240,17 +227,13 @@ public Set getWecPlants() { return Collections.unmodifiableSet(wecPlants); } - public Set getEmSystems() { - return Collections.unmodifiableSet(emSystems); - } - @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof SystemParticipants that)) return false; return Objects.equals(bmPlants, that.bmPlants) && Objects.equals(chpPlants, that.chpPlants) - && Objects.equals(evCS, that.evCS) + && Objects.equals(evcs, that.evcs) && Objects.equals(evs, that.evs) && Objects.equals(fixedFeedIns, that.fixedFeedIns) && Objects.equals(heatPumps, that.heatPumps) @@ -265,7 +248,7 @@ public int hashCode() { return Objects.hash( bmPlants, chpPlants, - evCS, + evcs, evs, fixedFeedIns, heatPumps, @@ -287,7 +270,7 @@ public static class SystemParticipantsCopyBuilder implements InputContainerCopyBuilder { private Set bmPlants; private Set chpPlants; - private Set evCS; + private Set evcs; private Set evs; private Set fixedFeedIns; private Set heatPumps; @@ -295,7 +278,6 @@ public static class SystemParticipantsCopyBuilder private Set pvPlants; private Set storages; private Set wecPlants; - private Set emSystems; /** * Constructor for {@link SystemParticipantsCopyBuilder} @@ -305,7 +287,7 @@ public static class SystemParticipantsCopyBuilder protected SystemParticipantsCopyBuilder(SystemParticipants systemParticipants) { this.bmPlants = systemParticipants.bmPlants; this.chpPlants = systemParticipants.chpPlants; - this.evCS = systemParticipants.evCS; + this.evcs = systemParticipants.evcs; this.evs = systemParticipants.evs; this.fixedFeedIns = systemParticipants.fixedFeedIns; this.heatPumps = systemParticipants.heatPumps; @@ -313,7 +295,6 @@ protected SystemParticipantsCopyBuilder(SystemParticipants systemParticipants) { this.pvPlants = systemParticipants.pvPlants; this.storages = systemParticipants.storages; this.wecPlants = systemParticipants.wecPlants; - this.emSystems = systemParticipants.emSystems; } /** @@ -341,11 +322,11 @@ public SystemParticipantsCopyBuilder chpPlants(Set chpPlants) { /** * Method to alter {@link EvcsInput} * - * @param evCS set of altered biomass electric vehicle charging stations + * @param evcs set of altered biomass electric vehicle charging stations * @return this instance of {@link SystemParticipantsCopyBuilder} */ - public SystemParticipantsCopyBuilder evCS(Set evCS) { - this.evCS = evCS; + public SystemParticipantsCopyBuilder evcs(Set evcs) { + this.evcs = evcs; return this; } @@ -426,31 +407,19 @@ public SystemParticipantsCopyBuilder wecPlants(Set wecPlants) { return this; } - /** - * Method to alter {@link EmInput} - * - * @param emSystems set of altered energy management systems - * @return this instance of {@link SystemParticipantsCopyBuilder} - */ - public SystemParticipantsCopyBuilder emSystems(Set emSystems) { - this.emSystems = emSystems; - return this; - } - @Override public SystemParticipants build() { return new SystemParticipants( bmPlants, chpPlants, - evCS, + evcs, evs, fixedFeedIns, heatPumps, loads, pvPlants, storages, - wecPlants, - emSystems); + wecPlants); } } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java index eeac609aa..f9bbbaa9f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java @@ -8,14 +8,13 @@ import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.EmControlStrategy; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.NodeInput; +import edu.ie3.datamodel.models.input.AssetInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.Arrays; import java.util.Objects; import java.util.UUID; -public class EmInput extends SystemParticipantInput { +public class EmInput extends AssetInput { /** Reference via UUID to all SystemParticipantInputs connected to this model */ private final UUID[] connectedAssets; @@ -29,8 +28,6 @@ public class EmInput extends SystemParticipantInput { * @param id of the asset * @param operator of the asset * @param operationTime time for which the entity is operated - * @param node the asset is connected to - * @param qCharacteristics description of a reactive power characteristic * @param connectedAssets array of all connected assets * @param controlStrategy control strategy used for this model */ @@ -39,11 +36,9 @@ public EmInput( String id, OperatorInput operator, OperationTime operationTime, - NodeInput node, - ReactivePowerCharacteristic qCharacteristics, UUID[] connectedAssets, ControlStrategy controlStrategy) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime); this.connectedAssets = connectedAssets; this.controlStrategy = controlStrategy; } @@ -55,8 +50,6 @@ public EmInput( * @param id of the asset * @param operator of the asset * @param operationTime time for which the entity is operated - * @param node the asset is connected to - * @param qCharacteristics description of a reactive power characteristic * @param connectedAssets array of all connected assets * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy * key @@ -66,11 +59,9 @@ public EmInput( String id, OperatorInput operator, OperationTime operationTime, - NodeInput node, - ReactivePowerCharacteristic qCharacteristics, UUID[] connectedAssets, String emControlStrategy) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime); this.connectedAssets = connectedAssets; this.controlStrategy = EmControlStrategy.get(emControlStrategy); } @@ -80,19 +71,11 @@ public EmInput( * * @param uuid of the input entity * @param id of the asset - * @param node the asset is connected to - * @param qCharacteristics description of a reactive power characteristic * @param connectedAssets array of all connected assets * @param controlStrategy control strategy used for this model */ - public EmInput( - UUID uuid, - String id, - NodeInput node, - ReactivePowerCharacteristic qCharacteristics, - UUID[] connectedAssets, - ControlStrategy controlStrategy) { - super(uuid, id, node, qCharacteristics); + public EmInput(UUID uuid, String id, UUID[] connectedAssets, ControlStrategy controlStrategy) { + super(uuid, id); this.connectedAssets = connectedAssets; this.controlStrategy = controlStrategy; } @@ -102,20 +85,12 @@ public EmInput( * * @param uuid of the input entity * @param id of the asset - * @param node the asset is connected to - * @param qCharacteristics description of a reactive power characteristic * @param connectedAssets array of all connected assets * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy * key */ - public EmInput( - UUID uuid, - String id, - NodeInput node, - ReactivePowerCharacteristic qCharacteristics, - UUID[] connectedAssets, - String emControlStrategy) { - super(uuid, id, node, qCharacteristics); + public EmInput(UUID uuid, String id, UUID[] connectedAssets, String emControlStrategy) { + super(uuid, id); this.connectedAssets = connectedAssets; this.controlStrategy = EmControlStrategy.get(emControlStrategy); } @@ -158,10 +133,6 @@ public String toString() { + getOperator().getUuid() + ", operationTime=" + getOperationTime() - + ", node=" - + getNode().getUuid() - + ", qCharacteristics='" - + getqCharacteristics() + ", connectedAssets=" + Arrays.toString(connectedAssets) + ", controlStrategy=" @@ -169,8 +140,7 @@ public String toString() { + '}'; } - public static class EmInputCopyBuilder - extends SystemParticipantInputCopyBuilder { + public static class EmInputCopyBuilder extends AssetInputCopyBuilder { private UUID[] connectedAssets; @@ -195,14 +165,7 @@ public EmInputCopyBuilder controlStrategy(ControlStrategy controlStrategy) { @Override public EmInput build() { return new EmInput( - getUuid(), - getId(), - getOperator(), - getOperationTime(), - getNode(), - getqCharacteristics(), - connectedAssets, - controlStrategy); + getUuid(), getId(), getOperator(), getOperationTime(), connectedAssets, controlStrategy); } @Override diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java index 4778fabea..a482ce658 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java @@ -77,6 +77,7 @@ public static JointGridContainer updateGridWithNodes( grid.getGridName(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), + grid.getEmUnits(), updatedEntities.graphicElements()); } @@ -112,6 +113,7 @@ public static SubGridContainer updateGridWithNodes( grid.getSubnet(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), + grid.getEmUnits(), updatedEntities.graphicElements()); } diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java index bf1eb0615..d0484a499 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java @@ -291,7 +291,7 @@ private static ComparableQuantity calcImpedance( /** * Filters all raw grid elements for the provided subnet. For each transformer all nodes (and not - * only the the node of the grid the transformer is located in) are added as well. Two winding + * only the node of the grid the transformer is located in) are added as well. Two winding * transformers are counted, if the low voltage node is in the queried subnet. Three winding * transformers are counted, as long as any of the three nodes is in the queried subnet. * @@ -358,7 +358,7 @@ public static RawGridElements filterForSubnet(RawGridElements input, int subnet) public static SystemParticipants filterForSubnet(SystemParticipants input, int subnet) { Set bmPlants = filterParticipants(input.getBmPlants(), subnet); Set chpPlants = filterParticipants(input.getChpPlants(), subnet); - Set evcsInputs = filterParticipants(input.getEvCS(), subnet); + Set evcsInputs = filterParticipants(input.getEvcs(), subnet); Set evs = filterParticipants(input.getEvs(), subnet); Set fixedFeedIns = filterParticipants(input.getFixedFeedIns(), subnet); Set heatpumps = filterParticipants(input.getHeatPumps(), subnet); @@ -366,7 +366,6 @@ public static SystemParticipants filterForSubnet(SystemParticipants input, int s Set pvs = filterParticipants(input.getPvPlants(), subnet); Set storages = filterParticipants(input.getStorages(), subnet); Set wecPlants = filterParticipants(input.getWecPlants(), subnet); - Set emSystems = filterParticipants(input.getEmSystems(), subnet); return new SystemParticipants( bmPlants, @@ -378,8 +377,7 @@ public static SystemParticipants filterForSubnet(SystemParticipants input, int s loads, pvs, storages, - wecPlants, - emSystems); + wecPlants); } /** @@ -503,6 +501,7 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, + EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { /* Collect the different sub nets. Through the validation of lines, it is ensured, that no galvanically connected @@ -511,7 +510,8 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( /* Build the single sub grid models */ HashMap subgrids = - buildSubGridContainers(gridName, subnetNumbers, rawGrid, systemParticipants, graphics); + buildSubGridContainers( + gridName, subnetNumbers, rawGrid, systemParticipants, energyManagementUnits, graphics); /* Build the graph structure denoting the topology of the grid */ return buildSubGridTopologyGraph(subgrids, rawGrid); @@ -542,6 +542,7 @@ private static HashMap buildSubGridContainers( SortedSet subnetNumbers, RawGridElements rawGrid, SystemParticipants systemParticipants, + EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { HashMap subGrids = new HashMap<>(subnetNumbers.size()); @@ -554,7 +555,12 @@ private static HashMap buildSubGridContainers( subGrids.put( subnetNumber, new SubGridContainer( - gridName, subnetNumber, rawGridElements, systemParticipantElements, graphicElements)); + gridName, + subnetNumber, + rawGridElements, + systemParticipantElements, + energyManagementUnits, // TODO filtering (part of #957) + graphicElements)); } return subGrids; } @@ -806,6 +812,9 @@ public static JointGridContainer combineToJointGrid( GraphicElements graphicElements = new GraphicElements( subGridContainers.stream().map(GridContainer::getGraphics).collect(Collectors.toSet())); + EnergyManagementUnits energyManagementUnits = + new EnergyManagementUnits( + subGridContainers.stream().map(GridContainer::getEmUnits).collect(Collectors.toSet())); Map subGridMapping = subGridContainers.stream() @@ -814,7 +823,12 @@ public static JointGridContainer combineToJointGrid( SubGridTopologyGraph subGridTopologyGraph = buildSubGridTopologyGraph(subGridMapping, rawGrid); return new JointGridContainer( - gridName, rawGrid, systemParticipants, graphicElements, subGridTopologyGraph); + gridName, + rawGrid, + systemParticipants, + energyManagementUnits, + graphicElements, + subGridTopologyGraph); } /** @@ -987,6 +1001,7 @@ public static SubGridContainer withTrafoNodeAsSlack(final SubGridContainer subGr subGridContainer.getRawGrid().getSwitches(), subGridContainer.getRawGrid().getMeasurementUnits()), subGridContainer.getSystemParticipants(), + subGridContainer.getEmUnits(), new GraphicElements(newNodeGraphics, subGridContainer.getGraphics().getLineGraphics())); } } diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java index 77388c6d4..086cc5387 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/GridContainerValidationUtils.java @@ -198,7 +198,7 @@ protected static List> checkRawGridTypeIds exceptions.addAll(checkSystemParticipants(systemParticipants.getBmPlants(), nodes)); exceptions.addAll(checkSystemParticipants(systemParticipants.getChpPlants(), nodes)); - exceptions.addAll(checkSystemParticipants(systemParticipants.getEvCS(), nodes)); + exceptions.addAll(checkSystemParticipants(systemParticipants.getEvcs(), nodes)); exceptions.addAll(checkSystemParticipants(systemParticipants.getFixedFeedIns(), nodes)); exceptions.addAll(checkSystemParticipants(systemParticipants.getHeatPumps(), nodes)); exceptions.addAll(checkSystemParticipants(systemParticipants.getLoads(), nodes)); @@ -247,7 +247,7 @@ protected static List> checkSystemParticip List> exceptions = new ArrayList<>(); exceptions.addAll(checkForDuplicates(systemParticipants.getBmPlants(), AssetInput::getId)); exceptions.addAll(checkForDuplicates(systemParticipants.getChpPlants(), AssetInput::getId)); - exceptions.addAll(checkForDuplicates(systemParticipants.getEvCS(), AssetInput::getId)); + exceptions.addAll(checkForDuplicates(systemParticipants.getEvcs(), AssetInput::getId)); exceptions.addAll(checkForDuplicates(systemParticipants.getEvs(), AssetInput::getId)); exceptions.addAll(checkForDuplicates(systemParticipants.getFixedFeedIns(), AssetInput::getId)); exceptions.addAll(checkForDuplicates(systemParticipants.getHeatPumps(), AssetInput::getId)); @@ -255,7 +255,6 @@ protected static List> checkSystemParticip exceptions.addAll(checkForDuplicates(systemParticipants.getPvPlants(), AssetInput::getId)); exceptions.addAll(checkForDuplicates(systemParticipants.getStorages(), AssetInput::getId)); exceptions.addAll(checkForDuplicates(systemParticipants.getWecPlants(), AssetInput::getId)); - exceptions.addAll(checkForDuplicates(systemParticipants.getEmSystems(), AssetInput::getId)); return exceptions; } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index ba8ae0d84..32809d6c7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -6,19 +6,14 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData import edu.ie3.datamodel.models.ControlStrategy import edu.ie3.datamodel.models.EmControlStrategy -import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EmInput -import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicPoint import edu.ie3.datamodel.utils.Try -import edu.ie3.util.quantities.PowerSystemUnits import spock.lang.Specification -import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime class EmInputFactoryTest extends Specification { @@ -40,17 +35,15 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "qcharacteristics": "cosPhiFixed:{(0.0,1.0)}", "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914 a17aa6f0-e663-4186-ac34-a7b68573938b", "controlstrategy" : "self_optimization" ] def inputClass = EmInput - def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new AssetInputEntityData(parameter, inputClass, operatorInput)) then: input.success @@ -63,12 +56,6 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert node == nodeInput - assert qCharacteristics.with { - assert points == Collections.unmodifiableSortedSet([ - new CharacteristicPoint(Quantities.getQuantity(0d, PowerSystemUnits.PU), Quantities.getQuantity(1d, PowerSystemUnits.PU)) - ] as TreeSet) - } assert connectedAssets == [ UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914"), UUID.fromString("a17aa6f0-e663-4186-ac34-a7b68573938b") @@ -85,17 +72,15 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "qcharacteristics": "cosPhiFixed:{(0.0,1.0)}", "connectedassets" : "", "controlstrategy" : "self_optimization" ] def inputClass = EmInput - def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new AssetInputEntityData(parameter, inputClass, operatorInput)) then: input.success @@ -108,12 +93,6 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert node == nodeInput - assert qCharacteristics.with { - assert points == Collections.unmodifiableSortedSet([ - new CharacteristicPoint(Quantities.getQuantity(0d, PowerSystemUnits.PU), Quantities.getQuantity(1d, PowerSystemUnits.PU)) - ] as TreeSet) - } assert connectedAssets == [] as UUID[] assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION } @@ -125,17 +104,15 @@ class EmInputFactoryTest extends Specification { Map parameter = [ "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", "id" : "TestID", - "qcharacteristics": "cosPhiFixed:{(0.0,1.0)}", "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914", "controlstrategy" : " -- invalid --" ] def inputClass = EmInput - def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new AssetInputEntityData(parameter, inputClass, operatorInput)) then: input.success @@ -146,12 +123,6 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.empty assert operator == operatorInput assert id == parameter["id"] - assert node == nodeInput - assert qCharacteristics.with { - assert points == Collections.unmodifiableSortedSet([ - new CharacteristicPoint(Quantities.getQuantity(0d, PowerSystemUnits.PU), Quantities.getQuantity(1d, PowerSystemUnits.PU)) - ] as TreeSet) - } assert connectedAssets == [ UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914") ] as UUID[] diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy new file mode 100644 index 000000000..8e595a467 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -0,0 +1,36 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.io.source.csv + +import edu.ie3.datamodel.exceptions.SourceException +import edu.ie3.datamodel.io.source.EnergyManagementSource +import edu.ie3.datamodel.io.source.TypeSource +import edu.ie3.datamodel.models.input.OperatorInput +import edu.ie3.datamodel.utils.Try +import edu.ie3.test.common.EnergyManagementTestData +import spock.lang.Specification + +class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { + + def "An EnergyManagementSource with csv input should return data from valid em input file as expected"() { + given: + def csvEnergyManagementSource = new EnergyManagementSource( + Mock(TypeSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def emUnits = Try.of(() -> csvEnergyManagementSource.getEmUnits(operators.toSet()), SourceException) + + emUnits.success + emUnits.data.get().emUnits.size() == 1 + emUnits.data.get().emUnits == resultingSet as Set + + where: + operators || resultingSet + [EnergyManagementTestData.emInput.operator] || [EnergyManagementTestData.emInput] + [] || [EnergyManagementTestData.emInput.copy().operator(OperatorInput.NO_OPERATOR_ASSIGNED).build()] + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index 43b2764a2..4881b9212 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -35,7 +35,7 @@ import spock.lang.Specification class CsvSystemParticipantSourceTest extends Specification implements CsvTestDataMeta { - def "A CsvSystemParticipantSource should provide an instance of SystemParticipants based on valid input data correctly"() { + def "A SystemParticipantSource with csv input should provide an instance of SystemParticipants based on valid input data correctly"() { given: def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) def thermalSource = new ThermalSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) @@ -50,7 +50,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat def systemParticipants = csvSystemParticipantSource.systemParticipants then: - systemParticipants.allEntitiesAsList().size() == 11 + systemParticipants.allEntitiesAsList().size() == 10 systemParticipants.pvPlants.first().uuid == sptd.pvInput.uuid systemParticipants.bmPlants.first().uuid == sptd.bmInput.uuid systemParticipants.chpPlants.first().uuid == sptd.chpInput.uuid @@ -60,11 +60,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat systemParticipants.loads.first().uuid == sptd.loadInput.uuid systemParticipants.wecPlants.first().uuid == sptd.wecInput.uuid systemParticipants.storages.first().uuid == sptd.storageInput.uuid - systemParticipants.evCS.first().uuid == sptd.evcsInput.uuid - systemParticipants.emSystems.first().uuid == sptd.emInput.uuid + systemParticipants.evcs.first().uuid == sptd.evcsInput.uuid } - def "A CsvSystemParticipantSource should process invalid input data as expected when requested to provide an instance of SystemParticipants"() { + def "A SystemParticipantSource with csv input should process invalid input data as expected when requested to provide an instance of SystemParticipants"() { given: def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) def thermalSource = new ThermalSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) @@ -92,13 +91,13 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Exception ex = systemParticipants.exception.get() ex.class == SystemParticipantsException - ex.message.startsWith("11 error(s) occurred while initializing system participants. " + + ex.message.startsWith("10 error(s) occurred while initializing system participants. " + "edu.ie3.datamodel.exceptions.FailureException: 1 exception(s) occurred within \"FixedFeedInInput\" data, one is: " + "edu.ie3.datamodel.exceptions.FactoryException: edu.ie3.datamodel.exceptions.SourceException: " + "Failure due to: Skipping FixedFeedInInput with uuid ") } - def "A CsvSystemParticipantSource should build typed entity from valid and invalid input data as expected"() { + def "A SystemParticipantSource with csv input should build typed entity from valid and invalid input data as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -126,7 +125,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.chpTypeInput] | sptd.chpInput.node | sptd.chpInput.operator | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] | ChpInput || true || new SystemParticipantTypedEntityData<>([:], clazz, operator, node, sptd.chpTypeInput) } - def "A CsvSystemParticipantSource should build hp input entity from valid and invalid input data as expected"() { + def "A SystemParticipantSource with csv input should build hp input entity from valid and invalid input data as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -154,7 +153,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], sptd.hpInput.operator, sptd.hpInput.node, sptd.hpTypeInput, sptd.hpInput.thermalBus) } - def "A CsvSystemParticipantSource should build chp input entity from valid and invalid input data as expected"(List thermalStorages, List thermalBuses, Map fieldsToAttributes, boolean resultIsPresent, ChpInputEntityData resultData) { + def "A SystemParticipantSource with csv input should build chp input entity from valid and invalid input data as expected"(List thermalStorages, List thermalBuses, Map fieldsToAttributes, boolean resultIsPresent, ChpInputEntityData resultData) { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -187,7 +186,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat ] as List | [sptd.chpInput.thermalBus] as List | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], sptd.chpInput.operator, sptd.chpInput.node, sptd.chpTypeInput, sptd.chpInput.thermalBus, sptd.chpInput.thermalStorage) } - def "A CsvSystemParticipantSource should return data from a valid heat pump input file as expected"() { + def "A SystemParticipantSource with csv input should return data from a valid heat pump input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -217,7 +216,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from a valid chp input file as expected"() { + def "A SystemParticipantSource with csv input should return data from a valid chp input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -251,7 +250,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.chpInput.node] | [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] as List || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid ev input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid ev input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -280,7 +279,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [] | [] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid wec input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid wec input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -309,7 +308,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [] | [] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid storage input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid storage input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -338,7 +337,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [] | [] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid bm input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid bm input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -367,7 +366,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [] | [] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid ev charging station input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid ev charging station input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -395,7 +394,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat []| []|| 0 || [] } - def "A CsvSystemParticipantSource should return data from valid load input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid load input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -423,7 +422,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid pv input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid pv input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -451,7 +450,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [] | [] || 0 || [] } - def "A CsvSystemParticipantSource should return data from valid fixedFeedIn input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid fixedFeedIn input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), @@ -482,29 +481,4 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat ] as List || 0 || [] [] | [] as List || 0 || [] } - - def "A CsvSystemParticipantSource should return data from valid em input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEmSystems(nodes as Set, operators as Set), SourceException) - - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } - - where: - nodes | operators || resultingSize || resultingSet - [sptd.emInput.node] | [sptd.emInput.operator] || 1 || [sptd.emInput] - [] | [sptd.pvInput.operator] || 0 || [] - [] | [] || 0 || [] - } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index 0baa37cc0..049640241 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -5,10 +5,12 @@ */ package edu.ie3.datamodel.models.input.container +import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification +import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants class JointGridContainerTest extends Specification { @@ -29,7 +31,7 @@ class JointGridContainerTest extends Specification { def "A single subgrid can be used to build a JointGridContainer"() { when: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) then: noExceptionThrown() @@ -38,9 +40,10 @@ class JointGridContainerTest extends Specification { def "A JointGridContainer's copy method should work as expected"() { given: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) def rawGrid = new RawGridElements(List.of(GridTestData.lineAtoB, GridTestData.transformerAtoBtoC)) def systemParticipants = new SystemParticipants(List.of(SystemParticipantTestData.bmInput)) + def emUnits = new EnergyManagementUnits(Set.of(EnergyManagementTestData.emInput)) def graphics = new GraphicElements(Set.of(GridTestData.nodeGraphicD), Set.of(GridTestData.lineGraphicCtoD)) when: @@ -48,6 +51,7 @@ class JointGridContainerTest extends Specification { .gridName("new grid name") .rawGrid(rawGrid) .systemParticipants(systemParticipants) + .emUnits(emUnits) .graphics(graphics) .build() @@ -55,6 +59,7 @@ class JointGridContainerTest extends Specification { modifiedJointGridContainer.gridName == "new grid name" modifiedJointGridContainer.rawGrid == rawGrid modifiedJointGridContainer.systemParticipants == systemParticipants + modifiedJointGridContainer.emUnits == emUnits modifiedJointGridContainer.graphics == graphics } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy index d24239bbd..612dd50ad 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy @@ -22,8 +22,7 @@ class SystemParticipantsTest extends Specification { Collections.singleton(SystemParticipantTestData.loadInput), Collections.singleton(SystemParticipantTestData.pvInput), Collections.singleton(SystemParticipantTestData.storageInput), - Collections.singleton(SystemParticipantTestData.wecInput), - Collections.singleton(SystemParticipantTestData.emInput) + Collections.singleton(SystemParticipantTestData.wecInput) ) when: @@ -45,8 +44,7 @@ class SystemParticipantsTest extends Specification { Collections.singleton(SystemParticipantTestData.loadInput), Collections.singleton(SystemParticipantTestData.pvInput), Collections.singleton(SystemParticipantTestData.storageInput), - Collections.singleton(SystemParticipantTestData.wecInput), - Collections.singleton(SystemParticipantTestData.emInput) + Collections.singleton(SystemParticipantTestData.wecInput) ) def modifiedBmInput = SystemParticipantTestData.bmInput.copy().id("modified").build() @@ -59,13 +57,12 @@ class SystemParticipantsTest extends Specification { def modifiedPvInput = SystemParticipantTestData.pvInput.copy().id("modified").build() def modifiedStorageInput = SystemParticipantTestData.storageInput.copy().id("modified").build() def modifiedWecInput = SystemParticipantTestData.wecInput.copy().id("modified").build() - def modifiedEmInput = SystemParticipantTestData.emInput.copy().id("modified").build() when: def modifiedSystemParticipants = systemParticipants.copy() .bmPlants(Set.of(modifiedBmInput)) .chpPlants(Set.of(modifiedChpInput)) - .evCS(Set.of(modifiedEvCSInput)) + .evcs(Set.of(modifiedEvCSInput)) .evs(Set.of(modifiedEvInput)) .fixedFeedIn(Set.of(modifiedFixedFeedInInput)) .heatPumps(Set.of(modifiedHpInput)) @@ -73,13 +70,12 @@ class SystemParticipantsTest extends Specification { .pvPlants(Set.of(modifiedPvInput)) .storages(Set.of(modifiedStorageInput)) .wecPlants(Set.of(modifiedWecInput)) - .emSystems(Set.of(modifiedEmInput)) .build() then: modifiedSystemParticipants.bmPlants.first() == modifiedBmInput modifiedSystemParticipants.chpPlants.first() == modifiedChpInput - modifiedSystemParticipants.evCS.first() == modifiedEvCSInput + modifiedSystemParticipants.evcs.first() == modifiedEvCSInput modifiedSystemParticipants.evs.first() == modifiedEvInput modifiedSystemParticipants.fixedFeedIns.first() == modifiedFixedFeedInInput modifiedSystemParticipants.heatPumps.first() == modifiedHpInput @@ -87,6 +83,5 @@ class SystemParticipantsTest extends Specification { modifiedSystemParticipants.pvPlants.first() == modifiedPvInput modifiedSystemParticipants.storages.first() == modifiedStorageInput modifiedSystemParticipants.wecPlants.first() == modifiedWecInput - modifiedSystemParticipants.emSystems.first() == modifiedEmInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy index 9d1c8f96c..997b6a518 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy @@ -294,6 +294,7 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics HashMap expectedSubGrids = ComplexTopology.expectedSubGrids @@ -304,6 +305,7 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGrid, systemParticipants, + emUnits, graphics) then: @@ -323,6 +325,7 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGridInput= ComplexTopology.grid.rawGrid SystemParticipants systemParticipantsInput = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphicsInput = ComplexTopology.grid.graphics HashMap unmodifiedSubGrids = ComplexTopology.expectedSubGrids @@ -332,6 +335,7 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGridInput, systemParticipantsInput, + emUnits, graphicsInput) when: @@ -386,12 +390,14 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics Map subgrids = ContainerUtils.buildSubGridContainers( gridName, subNetNumbers, rawGrid, systemParticipants, + emUnits, graphics) SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -409,6 +415,7 @@ class ContainerUtilsTest extends Specification { String gridName = ComplexTopology.gridName RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticpants = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -417,6 +424,7 @@ class ContainerUtilsTest extends Specification { gridName, rawGrid, systemParticpants, + emUnits, graphics) then: diff --git a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy index e97f57972..f050362f1 100644 --- a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy +++ b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy @@ -5,6 +5,7 @@ */ package edu.ie3.test.common +import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants import edu.ie3.datamodel.graph.SubGridGate import edu.ie3.datamodel.graph.SubGridTopologyGraph @@ -13,7 +14,6 @@ import edu.ie3.datamodel.models.input.container.GraphicElements import edu.ie3.datamodel.models.input.container.JointGridContainer import edu.ie3.datamodel.models.input.container.RawGridElements import edu.ie3.datamodel.models.input.container.SubGridContainer -import edu.ie3.datamodel.models.input.container.SystemParticipants import org.jgrapht.graph.DirectedMultigraph class ComplexTopology extends GridTestData { @@ -45,6 +45,7 @@ class ComplexTopology extends GridTestData { gridName, rawGrid, emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set)) @@ -64,18 +65,8 @@ class ComplexTopology extends GridTestData { [transformerAtoBtoC] as Set, [] as Set, [] as Set), - new SystemParticipants( - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set), + emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -92,6 +83,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -108,6 +100,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -124,6 +117,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -143,6 +137,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -162,6 +157,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy new file mode 100644 index 000000000..b13e2cb9d --- /dev/null +++ b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy @@ -0,0 +1,30 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.test.common + +import edu.ie3.datamodel.models.input.container.EnergyManagementUnits +import edu.ie3.datamodel.models.input.system.EmInput + +class EnergyManagementTestData { + + public static final UUID[] connectedAssets = new UUID[]{ + SystemParticipantTestData.loadInput.getUuid(), + SystemParticipantTestData.pvInput.getUuid() + } + public static final String emControlStrategy = "self_optimization" + + public static final emInput = new EmInput( + UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), + "test_emInput", + SystemParticipantTestData.operator, + SystemParticipantTestData.operationTime, + connectedAssets, + emControlStrategy + ) + + public static EnergyManagementUnits emptyEnergyManagementUnits = + new EnergyManagementUnits([] as List) +} diff --git a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy index a9f1aeb63..443c45ae9 100644 --- a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy +++ b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy @@ -13,6 +13,7 @@ import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput +import edu.ie3.datamodel.models.input.container.EnergyManagementUnits import edu.ie3.datamodel.models.input.container.GraphicElements import edu.ie3.datamodel.models.input.container.JointGridContainer import edu.ie3.datamodel.models.input.container.RawGridElements @@ -47,6 +48,7 @@ class SampleJointGrid extends SystemParticipantTestData { "sampleGrid", rawGridElements, systemParticipants(rawGridElements), + new EnergyManagementUnits(Collections.emptySet()), new GraphicElements(Collections.emptySet())) } @@ -127,19 +129,18 @@ class SampleJointGrid extends SystemParticipantTestData { Collections.emptySet(), Collections.emptySet(), Collections.emptySet(), - new HashSet<>(Arrays.asList(loadInput, loadInput1)), + Set.of(loadInput, loadInput1), Collections.singleton(pvInput), Collections.singleton(storageInput), - Collections.emptySet(), Collections.emptySet()) } private static RawGridElements jointSampleRawGridElements() throws ParseException { return new RawGridElements( - new HashSet<>(Arrays.asList(nodeA, nodeB, nodeC, nodeD, nodeE, nodeF, nodeG)), - new HashSet<>(Arrays.asList(lineAB, lineAC, lineBC, lineDE, lineDF, lineEF)), - new HashSet<>(Arrays.asList(transformerDtoA, transformerGtoD)), + Set.of(nodeA, nodeB, nodeC, nodeD, nodeE, nodeF, nodeG), + Set.of(lineAB, lineAC, lineBC, lineDE, lineDF, lineEF), + Set.of(transformerDtoA, transformerGtoD), Collections.emptySet(), Collections.emptySet(), Collections.emptySet()) diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index bfafb5d6b..55258a05e 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -312,22 +312,6 @@ class SystemParticipantTestData { v2gSupport ) - // Energy Management - public static final UUID[] connectedAssets = new UUID[]{ - loadInput.getUuid(), pvInput.getUuid() - } - public static final String emControlStrategy = "self_optimization" - public static final emInput = new EmInput( - UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), - "test_emInput", - operator, - operationTime, - participantNode, - cosPhiFixed, - connectedAssets, - emControlStrategy - ) - public static allParticipants = [ fixedFeedInInput, pvInput, @@ -337,22 +321,19 @@ class SystemParticipantTestData { wecInput, evInput, chpInput, - hpInput, - emInput + hpInput ] - static SystemParticipants getEmptySystemParticipants() { - return new SystemParticipants( - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set, - [] as Set) - } + public static SystemParticipants emptySystemParticipants = + new SystemParticipants( + [] as Set, + [] as Set, + [] as Set, + [] as Set, + [] as Set, + [] as Set, + [] as Set, + [] as Set, + [] as Set, + [] as Set) } diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv index ad93c0222..5cc111444 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv @@ -1,2 +1,2 @@ -uuid,connected_assets,control_strategy,id,node,operates_from,operates_until,operator,q_characteristics -977157f4-25e5-4c72-bf34-440edc778792,eaf77f7e-9001-479f-94ca-7fb657766f5f d56f15b7-8293-4b98-b5bd-58f6273ce229,self_optimization,test_emInput,4ca90220-74c2-4369-9afa-a18bf068840d,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,cosPhiFixed:{(0.00,0.95)} +uuid,connected_assets,control_strategy,id,operates_from,operates_until,operator +977157f4-25e5-4c72-bf34-440edc778792,eaf77f7e-9001-479f-94ca-7fb657766f5f d56f15b7-8293-4b98-b5bd-58f6273ce229,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510 From a00691d0b57688fdd0f9d2951171b3328ec6fb13 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 16:40:45 +0100 Subject: [PATCH 033/228] Fixing tests --- .../datamodel/io/sink/CsvFileSinkTest.groovy | 3 +- .../models/input/system/EmInputTest.groovy | 45 ++++++++----------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 62491ebc6..fbec773aa 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -7,6 +7,7 @@ package edu.ie3.datamodel.io.sink import edu.ie3.datamodel.models.result.system.EmResult import edu.ie3.datamodel.models.result.system.FlexOptionsResult +import edu.ie3.test.common.EnergyManagementTestData import java.nio.file.Path @@ -171,7 +172,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { ThermalUnitInputTestData.thermalHouseInput, SystemParticipantTestData.evcsInput, SystemParticipantTestData.loadInput, - SystemParticipantTestData.emInput + EnergyManagementTestData.emInput ]) csvFileSink.shutdown() diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 20e6bbe31..5ac0f27f1 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -7,10 +7,9 @@ package edu.ie3.datamodel.models.input.system import static edu.ie3.datamodel.models.ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY import edu.ie3.datamodel.models.ControlStrategy -import edu.ie3.test.common.SystemParticipantTestData +import edu.ie3.test.common.EnergyManagementTestData import spock.lang.Specification - class EmInputTest extends Specification { def "The EmInput constructors work as expected"() { @@ -18,66 +17,59 @@ class EmInputTest extends Specification { def emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", - SystemParticipantTestData.participantNode, - SystemParticipantTestData.cosPhiFixed, - SystemParticipantTestData.connectedAssets, - SystemParticipantTestData.emControlStrategy + EnergyManagementTestData.connectedAssets, + EnergyManagementTestData.emControlStrategy ) then: emInput.with { assert uuid == UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792") assert id == "test_emInput" - assert qCharacteristics == SystemParticipantTestData.cosPhiFixed - assert connectedAssets == SystemParticipantTestData.connectedAssets - assert controlStrategy.key == SystemParticipantTestData.emControlStrategy + assert connectedAssets == EnergyManagementTestData.connectedAssets + assert controlStrategy.key == EnergyManagementTestData.emControlStrategy } } def "EmInputs are comparable"() { given: - def emInputA = SystemParticipantTestData.emInput + def emInputA = EnergyManagementTestData.emInput expect: (emInputA == emInputB) == isEqual where: - emInputB || isEqual - SystemParticipantTestData.emInput || true - SystemParticipantTestData.emInput.copy().build() || true - SystemParticipantTestData.emInput.copy().id("otherId").build() || false + emInputB || isEqual + EnergyManagementTestData.emInput || true + EnergyManagementTestData.emInput.copy().build() || true + EnergyManagementTestData.emInput.copy().id("otherId").build() || false } def "The EmInput to String method work as expected"() { given: - def emInputToString = SystemParticipantTestData.emInput.toString() + def emInputToString = EnergyManagementTestData.emInput.toString() expect: emInputToString == "EmInput{" + "uuid=" + - SystemParticipantTestData.emInput.uuid + + EnergyManagementTestData.emInput.uuid + ", id='" + - SystemParticipantTestData.emInput.id + + EnergyManagementTestData.emInput.id + ", operator=" + - SystemParticipantTestData.emInput.operator.uuid + + EnergyManagementTestData.emInput.operator.uuid + ", operationTime=" + - SystemParticipantTestData.emInput.operationTime + - ", node=" + - SystemParticipantTestData.emInput.node.uuid + - ", qCharacteristics='" + - SystemParticipantTestData.emInput.qCharacteristics + + EnergyManagementTestData.emInput.operationTime + ", connectedAssets=" + - Arrays.toString(SystemParticipantTestData.emInput.connectedAssets) + + Arrays.toString(EnergyManagementTestData.emInput.connectedAssets) + ", controlStrategy=" + - SystemParticipantTestData.emInput.controlStrategy + + EnergyManagementTestData.emInput.controlStrategy + '}' } def "A EmInput copy method should work as expected"() { given: - def emInput = SystemParticipantTestData.emInput + def emInput = EnergyManagementTestData.emInput def newConnectedAssets = [ UUID.randomUUID(), UUID.randomUUID() @@ -93,7 +85,6 @@ class EmInputTest extends Specification { assert operationTime == emInput.operationTime assert operator == emInput.operator assert id == emInput.id - assert qCharacteristics == emInput.qCharacteristics assert connectedAssets == newConnectedAssets assert controlStrategy == NO_CONTROL_STRATEGY } From 9340ff82467a73455b0e1a98abf561f2026a7be7 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 16:54:35 +0100 Subject: [PATCH 034/228] Sorting groovy imports --- gradle/scripts/spotless.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/scripts/spotless.gradle b/gradle/scripts/spotless.gradle index 29ea009b7..839c3496e 100644 --- a/gradle/scripts/spotless.gradle +++ b/gradle/scripts/spotless.gradle @@ -17,6 +17,7 @@ spotless { /* cf. https://github.com/diffplug/spotless/tree/master/plugin-gradle */ groovy { + importOrder('\\#', '', 'java') licenseHeader ie3LicHead // the Groovy Eclipse formatter extends the Java Eclipse formatter, // so it formats Java files by default (unless `excludeJava` is used). From c1da9d7e086cfcd7a85f9229decc773a1023148f Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 16:55:13 +0100 Subject: [PATCH 035/228] Reverting groovy spotless fix (not needed anymore) --- gradle/scripts/spotless.gradle | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gradle/scripts/spotless.gradle b/gradle/scripts/spotless.gradle index 839c3496e..7d547fb29 100644 --- a/gradle/scripts/spotless.gradle +++ b/gradle/scripts/spotless.gradle @@ -21,16 +21,14 @@ spotless { licenseHeader ie3LicHead // the Groovy Eclipse formatter extends the Java Eclipse formatter, // so it formats Java files by default (unless `excludeJava` is used). - // FIXME rolled back greclipse version https://github.com/diffplug/spotless/issues/1860 - greclipse('4.27').configFile('greclipse.properties') + greclipse().configFile('greclipse.properties') indentWithSpaces 2 } groovyGradle { // same as groovy, but for .gradle (defaults to '*.gradle') target '*.gradle', 'gradle/scripts/*.gradle' - // FIXME rolled back greclipse version https://github.com/diffplug/spotless/issues/1860 - greclipse('4.27') + greclipse() indentWithSpaces 2 } From d85a199806f35b1fc895fbb97f7a3fb0f3c66e1f Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 16:55:28 +0100 Subject: [PATCH 036/228] New groovy format with sorted imports --- .../io/connectors/CsvFileConnectorTest.groovy | 4 ++-- .../factory/input/LineInputFactoryTest.groovy | 8 ++++---- .../factory/input/NodeInputFactoryTest.groovy | 2 +- .../input/Transformer2WInputFactoryTest.groovy | 2 +- .../input/Transformer3WInputFactoryTest.groovy | 1 - .../input/participant/BmInputFactoryTest.groovy | 6 +++--- .../participant/ChpInputFactoryTest.groovy | 7 +++---- .../input/participant/EmInputFactoryTest.groovy | 2 +- .../input/participant/EvInputFactoryTest.groovy | 6 +++--- .../participant/EvcsInputFactoryTest.groovy | 2 +- .../FixedFeedInInputFactoryTest.groovy | 6 +++--- .../input/participant/HpInputFactoryTest.groovy | 6 +++--- .../participant/LoadInputFactoryTest.groovy | 4 ++-- .../input/participant/PvInputFactoryTest.groovy | 6 +++--- .../participant/StorageInputFactoryTest.groovy | 6 +++--- .../participant/WecInputFactoryTest.groovy | 6 +++--- .../typeinput/LineTypeInputFactoryTest.groovy | 4 ++-- ...SystemParticipantTypeInputFactoryTest.groovy | 6 +++--- .../Transformer3WTypeInputFactoryTest.groovy | 4 ++-- .../EntityPersistenceNamingStrategyTest.groovy | 2 +- .../io/naming/FileNamingStrategyTest.groovy | 2 +- .../input/InputEntityProcessorTest.groovy | 4 ++-- .../result/ResultEntityProcessorTest.groovy | 3 +-- .../datamodel/io/sink/CsvFileSinkTest.groovy | 17 ++++++++--------- .../ie3/datamodel/io/sink/InfluxDbSinkIT.groovy | 2 +- .../datamodel/io/source/EntitySourceTest.groovy | 3 +-- .../io/source/csv/CsvDataSourceTest.groovy | 1 - .../source/csv/CsvResultEntitySourceTest.groovy | 3 +-- .../io/source/csv/CsvThermalSourceTest.groovy | 2 +- .../io/source/csv/CsvTimeSeriesSourceIT.groovy | 6 +++--- .../source/csv/CsvTimeSeriesSourceTest.groovy | 10 ++++------ .../io/source/csv/CsvTypeSourceTest.groovy | 2 +- .../source/csv/CsvWeatherSourceIconTest.groovy | 2 +- .../io/source/sql/SqlTimeSeriesSourceIT.groovy | 3 +-- .../models/CommonVoltageLevelTest.groovy | 6 +++--- .../models/GermanVoltageLevelUtilsTest.groovy | 6 +++--- .../container/JointGridContainerTest.groovy | 4 ++-- .../models/input/system/BmInputTest.groovy | 4 ++-- .../models/input/system/EmInputTest.groovy | 1 + .../models/input/system/LoadInputTest.groovy | 8 ++++---- .../models/input/system/PvInputTest.groovy | 8 ++++---- .../ChargingPointTypeUtilsTest.groovy | 6 +++--- .../CharacteristicPointTest.groovy | 8 ++++---- .../characteristic/OlmCharacteristicTest.groovy | 6 +++--- .../ReactivePowerCharacteristicTest.groovy | 4 ++-- .../characteristic/WecCharacteristicTest.groovy | 6 +++--- .../datamodel/utils/ContainerUtilsTest.groovy | 6 +++--- .../datamodel/utils/GridAndGeoUtilsTest.groovy | 7 +++---- .../SystemParticipantValidationUtilsTest.groovy | 6 +++--- .../utils/validation/ValidationUtilsTest.groovy | 12 ++++++------ .../edu/ie3/test/common/ComplexTopology.groovy | 1 + .../edu/ie3/test/common/GridTestData.groovy | 6 +++--- .../ie3/test/common/ResultEntityTestData.groovy | 2 +- .../edu/ie3/test/common/SampleJointGrid.groovy | 4 ++-- .../common/SystemParticipantTestData.groovy | 4 ++-- .../ie3/test/common/TimeSeriesTestData.groovy | 10 +++++----- .../edu/ie3/test/common/TypeTestData.groovy | 6 +++--- .../edu/ie3/test/common/WeatherTestData.groovy | 2 +- 58 files changed, 137 insertions(+), 146 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy index 3b8eede71..69231768b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy @@ -6,11 +6,11 @@ package edu.ie3.datamodel.io.connectors import edu.ie3.datamodel.exceptions.ConnectorException -import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation -import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.csv.CsvFileDefinition +import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation import edu.ie3.datamodel.io.naming.DefaultDirectoryHierarchy import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy +import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/LineInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/LineInputFactoryTest.groovy index 067353976..8a0ed78b6 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/LineInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/LineInputFactoryTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.io.factory.input +import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput @@ -19,12 +22,9 @@ import org.locationtech.jts.geom.LineString import spock.lang.Specification import tech.units.indriya.quantity.Quantities +import java.time.ZonedDateTime import javax.measure.quantity.Dimensionless import javax.measure.quantity.Speed -import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND -import static edu.ie3.util.quantities.PowerSystemUnits.PU class LineInputFactoryTest extends Specification implements FactoryTestHelper { def "A LineInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/NodeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/NodeInputFactoryTest.groovy index f9f28cafe..8fba840d1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/NodeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/NodeInputFactoryTest.groovy @@ -15,8 +15,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.ComparableQuantity -import javax.measure.quantity.ElectricPotential import java.time.ZonedDateTime +import javax.measure.quantity.ElectricPotential class NodeInputFactoryTest extends Specification implements FactoryTestHelper { def "A NodeInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy index 1c12b1e27..a6e3cb3d2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer2WInputFactoryTest.groovy @@ -11,9 +11,9 @@ import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.utils.Try +import edu.ie3.test.common.GridTestData import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification -import edu.ie3.test.common.GridTestData import java.time.ZonedDateTime diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy index f518207c2..fab738f0a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/Transformer3WInputFactoryTest.groovy @@ -86,4 +86,3 @@ class Transformer3WInputFactoryTest extends Specification implements FactoryTes e.message == "Voltage level of node a must be greater than voltage level of node b and voltage level of node b must be greater than voltage level of node c" } } - diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy index 04d9e40b7..48b7a5410 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput @@ -17,10 +19,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class BmInputFactoryTest extends Specification implements FactoryTestHelper { def "A BmInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy index 373da8d5b..eba32b0f9 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -18,10 +20,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class ChpInputFactoryTest extends Specification implements FactoryTestHelper { def "A ChpInputFactory should contain exactly the expected class for parsing"() { @@ -78,4 +78,3 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { } } } - diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index ba8ae0d84..d3ad3d869 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -18,8 +18,8 @@ import edu.ie3.util.quantities.PowerSystemUnits import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime +import javax.measure.quantity.Dimensionless class EmInputFactoryTest extends Specification { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy index 2d8b5c0d0..34a68ea5c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -16,10 +18,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class EvInputFactoryTest extends Specification implements FactoryTestHelper { def "A EvInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy index 4f3412e23..10d2be4f1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy @@ -19,8 +19,8 @@ import edu.ie3.util.quantities.PowerSystemUnits import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime +import javax.measure.quantity.Dimensionless /** * Testing EvcsInputFactory * diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index fa7184b4b..ff5ef36a1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits @@ -17,10 +19,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHelper { def "A FixedFeedInInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy index 47316ab03..a24587257 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -17,10 +19,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class HpInputFactoryTest extends Specification implements FactoryTestHelper { def "A HpInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy index cede6ac6b..910d59195 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.OperationTime @@ -22,8 +24,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.Dimensionless -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class LoadInputFactoryTest extends Specification implements FactoryTestHelper { def "A LoadInputFactory should contain exactly the expected class for parsing"() { given: diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy index 4fffbba20..a3a6d42ae 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits @@ -17,10 +19,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class PvInputFactoryTest extends Specification implements FactoryTestHelper { def "A PvInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy index da40b333d..453e294f2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -16,10 +18,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class StorageInputFactoryTest extends Specification implements FactoryTestHelper { def "A StorageInputFactory should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy index cd432e1f5..e97d47a09 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -16,10 +18,8 @@ import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Dimensionless import java.time.ZonedDateTime - -import static edu.ie3.util.quantities.PowerSystemUnits.PU +import javax.measure.quantity.Dimensionless class WecInputFactoryTest extends Specification implements FactoryTestHelper { def "A WecInputFactoryTest should contain exactly the expected class for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy index 0248bf204..e32f91720 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy @@ -6,11 +6,11 @@ package edu.ie3.datamodel.io.factory.typeinput import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.utils.Try -import edu.ie3.test.helper.FactoryTestHelper import edu.ie3.datamodel.io.factory.SimpleEntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.connector.type.LineTypeInput +import edu.ie3.datamodel.utils.Try +import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification class LineTypeInputFactoryTest extends Specification implements FactoryTestHelper { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index b5f40c2ac..6204419c1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.io.factory.typeinput +import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.SimpleEntityData import edu.ie3.datamodel.models.StandardUnits @@ -18,9 +21,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.Dimensionless import javax.measure.quantity.Speed -import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class SystemParticipantTypeInputFactoryTest extends Specification implements FactoryTestHelper { def "A SystemParticipantTypeInputFactory should contain all expected classes for parsing"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy index d01862624..bd844da36 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy @@ -6,11 +6,11 @@ package edu.ie3.datamodel.io.factory.typeinput import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.utils.Try -import edu.ie3.test.helper.FactoryTestHelper import edu.ie3.datamodel.io.factory.SimpleEntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput +import edu.ie3.datamodel.utils.Try +import edu.ie3.test.helper.FactoryTestHelper import spock.lang.Specification class Transformer3WTypeInputFactoryTest extends Specification implements FactoryTestHelper { diff --git a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy index f6319e151..f3e89647b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.naming import edu.ie3.datamodel.io.source.TimeSeriesMappingSource -import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -38,6 +37,7 @@ import edu.ie3.datamodel.models.input.system.type.StorageTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput +import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile import edu.ie3.datamodel.models.result.NodeResult import edu.ie3.datamodel.models.result.connector.LineResult import edu.ie3.datamodel.models.result.connector.SwitchResult diff --git a/src/test/groovy/edu/ie3/datamodel/io/naming/FileNamingStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/naming/FileNamingStrategyTest.groovy index e36fe9c9d..0a6565377 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/naming/FileNamingStrategyTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/naming/FileNamingStrategyTest.groovy @@ -9,7 +9,6 @@ import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation import edu.ie3.datamodel.io.naming.timeseries.LoadProfileTimeSeriesMetaInformation import edu.ie3.datamodel.io.source.TimeSeriesMappingSource -import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput @@ -41,6 +40,7 @@ import edu.ie3.datamodel.models.input.system.type.StorageTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput +import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile import edu.ie3.datamodel.models.result.NodeResult import edu.ie3.datamodel.models.result.connector.LineResult import edu.ie3.datamodel.models.result.connector.SwitchResult diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 65dc1e1a6..ac2c24ab9 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.processor.input +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput @@ -30,8 +32,6 @@ import tech.units.indriya.quantity.Quantities import java.time.ZonedDateTime -import static edu.ie3.util.quantities.PowerSystemUnits.PU - /** * Testing the function of processors * diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/result/ResultEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/result/ResultEntityProcessorTest.groovy index 94f55d0ad..47eddf263 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/result/ResultEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/result/ResultEntityProcessorTest.groovy @@ -21,9 +21,9 @@ import spock.lang.Specification import tech.units.indriya.quantity.Quantities import tech.units.indriya.unit.Units +import java.time.ZonedDateTime import javax.measure.Quantity import javax.measure.quantity.* -import java.time.ZonedDateTime class ResultEntityProcessorTest extends Specification { @@ -301,4 +301,3 @@ class ResultEntityProcessorTest extends Specification { } } } - diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 62491ebc6..db803696e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -5,16 +5,10 @@ */ package edu.ie3.datamodel.io.sink -import edu.ie3.datamodel.models.result.system.EmResult -import edu.ie3.datamodel.models.result.system.FlexOptionsResult - -import java.nio.file.Path - +import static edu.ie3.util.quantities.PowerSystemUnits.DEGREE_GEOM import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE import static tech.units.indriya.unit.Units.PERCENT -import static edu.ie3.util.quantities.PowerSystemUnits.DEGREE_GEOM -import edu.ie3.datamodel.models.input.system.EmInput -import edu.ie3.datamodel.models.input.system.LoadInput + import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.processor.ProcessorProvider import edu.ie3.datamodel.io.processor.input.InputEntityProcessor @@ -31,14 +25,18 @@ import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput +import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvcsInput +import edu.ie3.datamodel.models.input.system.LoadInput import edu.ie3.datamodel.models.input.system.PvInput import edu.ie3.datamodel.models.input.system.characteristic.CosPhiFixed import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput +import edu.ie3.datamodel.models.result.system.EmResult import edu.ie3.datamodel.models.result.system.EvResult import edu.ie3.datamodel.models.result.system.EvcsResult +import edu.ie3.datamodel.models.result.system.FlexOptionsResult import edu.ie3.datamodel.models.result.system.PvResult import edu.ie3.datamodel.models.result.system.WecResult import edu.ie3.datamodel.models.timeseries.TimeSeries @@ -48,8 +46,8 @@ import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.EnergyPriceValue import edu.ie3.datamodel.models.value.Value import edu.ie3.test.common.GridTestData -import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.SampleJointGrid +import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.ThermalUnitInputTestData import edu.ie3.test.common.TimeSeriesTestData import edu.ie3.util.TimeUtil @@ -58,6 +56,7 @@ import spock.lang.Shared import spock.lang.Specification import tech.units.indriya.quantity.Quantities +import java.nio.file.Path import javax.measure.Quantity import javax.measure.quantity.Power diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/InfluxDbSinkIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/InfluxDbSinkIT.groovy index 4b5c57905..eb22b04cd 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/InfluxDbSinkIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/InfluxDbSinkIT.groovy @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.sink -import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.connectors.InfluxDbConnector import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy +import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.result.ResultEntity diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 4b51be15b..f2572db04 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -10,9 +10,8 @@ import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.csv.CsvDataSource import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput -import edu.ie3.test.common.SystemParticipantTestData as sptd import edu.ie3.test.common.GridTestData as gtd - +import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Shared import spock.lang.Specification diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy index e6c58dd97..d79c0e9d5 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy @@ -9,7 +9,6 @@ import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.test.common.SystemParticipantTestData as sptd - import spock.lang.Shared import spock.lang.Specification diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvResultEntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvResultEntitySourceTest.groovy index 65692269d..3ccbd5105 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvResultEntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvResultEntitySourceTest.groovy @@ -6,9 +6,8 @@ package edu.ie3.datamodel.io.source.csv import edu.ie3.datamodel.io.source.ResultEntitySource -import spock.lang.Specification - import edu.ie3.test.common.ResultEntityTestData as retd +import spock.lang.Specification class CsvResultEntitySourceTest extends Specification implements CsvTestDataMeta { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy index bead486fc..eba4c636a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy @@ -5,9 +5,9 @@ */ package edu.ie3.datamodel.io.source.csv -import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.factory.input.AssetInputEntityData import edu.ie3.datamodel.io.factory.input.ThermalUnitInputEntityData +import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.ThermalSource import edu.ie3.datamodel.io.source.TypeSource import edu.ie3.datamodel.models.input.OperatorInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy index de1857954..2f1935193 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy @@ -5,18 +5,18 @@ */ package edu.ie3.datamodel.io.source.csv -import java.nio.file.Path - import static edu.ie3.test.common.TimeSeriesSourceTestData.* import edu.ie3.datamodel.exceptions.SourceException -import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.factory.timeseries.TimeBasedSimpleValueFactory +import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.models.value.HeatAndPValue import edu.ie3.util.interval.ClosedInterval import spock.lang.Shared import spock.lang.Specification +import java.nio.file.Path + class CsvTimeSeriesSourceIT extends Specification implements CsvTestDataMeta { @Shared diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy index 5eaaa914e..b5f680079 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy @@ -5,22 +5,20 @@ */ package edu.ie3.datamodel.io.source.csv -import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation -import edu.ie3.datamodel.io.naming.FileNamingStrategy -import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme - -import java.nio.file.Path - import static edu.ie3.datamodel.models.StandardUnits.ENERGY_PRICE import edu.ie3.datamodel.exceptions.SourceException +import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation import edu.ie3.datamodel.io.factory.timeseries.TimeBasedSimpleValueFactory +import edu.ie3.datamodel.io.naming.FileNamingStrategy +import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.* import edu.ie3.util.TimeUtil import spock.lang.Specification import tech.units.indriya.quantity.Quantities +import java.nio.file.Path import java.time.ZoneId class CsvTimeSeriesSourceTest extends Specification implements CsvTestDataMeta { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy index 2aa6331f5..ecc205a40 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy @@ -8,9 +8,9 @@ package edu.ie3.datamodel.io.source.csv import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.TypeSource import edu.ie3.datamodel.models.input.OperatorInput -import spock.lang.Specification import edu.ie3.test.common.GridTestData as gtd import edu.ie3.test.common.SystemParticipantTestData as sptd +import spock.lang.Specification class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceIconTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceIconTest.groovy index 092cb3eff..d83c8d991 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceIconTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourceIconTest.groovy @@ -5,8 +5,8 @@ */ package edu.ie3.datamodel.io.source.csv -import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.factory.timeseries.IconTimeBasedWeatherValueFactory +import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.IdCoordinateSource import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSourceIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSourceIT.groovy index 4ad4d730f..8a895bc12 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSourceIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSourceIT.groovy @@ -5,8 +5,6 @@ */ package edu.ie3.datamodel.io.source.sql -import edu.ie3.test.helper.TestContainerHelper - import static edu.ie3.test.common.TimeSeriesSourceTestData.* import edu.ie3.datamodel.exceptions.SourceException @@ -15,6 +13,7 @@ import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation import edu.ie3.datamodel.models.value.* +import edu.ie3.test.helper.TestContainerHelper import edu.ie3.util.interval.ClosedInterval import org.testcontainers.containers.Container import org.testcontainers.containers.PostgreSQLContainer diff --git a/src/test/groovy/edu/ie3/datamodel/models/CommonVoltageLevelTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/CommonVoltageLevelTest.groovy index 85c6f5c38..041f12627 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/CommonVoltageLevelTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/CommonVoltageLevelTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.models +import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLT +import static tech.units.indriya.unit.Units.VOLT + import edu.ie3.datamodel.exceptions.VoltageLevelException import edu.ie3.datamodel.models.voltagelevels.CommonVoltageLevel import edu.ie3.util.interval.RightOpenInterval @@ -12,9 +15,6 @@ import spock.lang.Shared import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLT -import static tech.units.indriya.unit.Units.VOLT - class CommonVoltageLevelTest extends Specification { @Shared CommonVoltageLevel dut = new CommonVoltageLevel( diff --git a/src/test/groovy/edu/ie3/datamodel/models/GermanVoltageLevelUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/GermanVoltageLevelUtilsTest.groovy index 496385ffe..f32111e3b 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/GermanVoltageLevelUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/GermanVoltageLevelUtilsTest.groovy @@ -5,13 +5,13 @@ */ package edu.ie3.datamodel.models +import static edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils.* +import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLT + import edu.ie3.datamodel.models.voltagelevels.CommonVoltageLevel import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import static edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils.* -import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLT - class GermanVoltageLevelUtilsTest extends Specification { def "The common german voltage level enum should be able to correctly parse different valid inputs"() { diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index 0baa37cc0..5b8147f20 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -5,12 +5,12 @@ */ package edu.ie3.datamodel.models.input.container +import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants + import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification -import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants - class JointGridContainerTest extends Specification { private static final GRID_NAME = "single_grid" diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy index a5775d34d..877a35be1 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy @@ -5,12 +5,12 @@ */ package edu.ie3.datamodel.models.input.system +import static edu.ie3.util.quantities.PowerSystemUnits.EURO_PER_MEGAWATTHOUR + import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import static edu.ie3.util.quantities.PowerSystemUnits.EURO_PER_MEGAWATTHOUR - class BmInputTest extends Specification { def "A BmInput copy method should work as expected"() { diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 20e6bbe31..f8ca44650 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -6,6 +6,7 @@ package edu.ie3.datamodel.models.input.system import static edu.ie3.datamodel.models.ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY + import edu.ie3.datamodel.models.ControlStrategy import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy index b6dfbfcbb..a1d04cc30 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy @@ -5,16 +5,16 @@ */ package edu.ie3.datamodel.models.input.system -import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile +import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE +import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR + import edu.ie3.datamodel.models.input.system.characteristic.CosPhiFixed +import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE -import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR - class LoadInputTest extends Specification { diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy index 4d00c8d37..ea9a0262d 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy @@ -5,14 +5,14 @@ */ package edu.ie3.datamodel.models.input.system -import edu.ie3.test.common.SystemParticipantTestData -import spock.lang.Specification -import tech.units.indriya.quantity.Quantities - import static edu.ie3.util.quantities.PowerSystemUnits.DEGREE_GEOM import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE import static tech.units.indriya.unit.Units.PERCENT +import edu.ie3.test.common.SystemParticipantTestData +import spock.lang.Specification +import tech.units.indriya.quantity.Quantities + class PvInputTest extends Specification { diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/type/chargingpoint/ChargingPointTypeUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/type/chargingpoint/ChargingPointTypeUtilsTest.groovy index 16339003e..285a969aa 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/type/chargingpoint/ChargingPointTypeUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/type/chargingpoint/ChargingPointTypeUtilsTest.groovy @@ -5,14 +5,14 @@ */ package edu.ie3.datamodel.models.input.system.type.chargingpoint +import static edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils.* +import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE + import edu.ie3.datamodel.exceptions.ChargingPointTypeException import edu.ie3.datamodel.models.ElectricCurrentType import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import static edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils.* -import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE - /** * //ToDo: Class Description * diff --git a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/CharacteristicPointTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/CharacteristicPointTest.groovy index d69f8d95d..40499c5e7 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/CharacteristicPointTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/CharacteristicPointTest.groovy @@ -5,6 +5,10 @@ */ package edu.ie3.datamodel.models.system.characteristic +import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATT +import static edu.ie3.util.quantities.PowerSystemUnits.PU +import static tech.units.indriya.unit.Units.PERCENT + import edu.ie3.datamodel.exceptions.ParsingException import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicPoint import spock.lang.Specification @@ -13,10 +17,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.Dimensionless import javax.measure.quantity.Power -import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATT -import static edu.ie3.util.quantities.PowerSystemUnits.PU -import static tech.units.indriya.unit.Units.PERCENT - class CharacteristicPointTest extends Specification { def "A set of CharacteristicCoordinates are sorted correctly"() { given: "A set of points" diff --git a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/OlmCharacteristicTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/OlmCharacteristicTest.groovy index bd98d97e2..dd355b830 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/OlmCharacteristicTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/OlmCharacteristicTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.models.system.characteristic +import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.ParsingException import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicPoint import edu.ie3.datamodel.models.input.system.characteristic.OlmCharacteristicInput @@ -15,9 +18,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.Dimensionless import javax.measure.quantity.Speed -import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class OlmCharacteristicTest extends Specification { @Shared OlmCharacteristicInput validInput diff --git a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/ReactivePowerCharacteristicTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/ReactivePowerCharacteristicTest.groovy index 8ef88bb93..f39a5aa61 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/ReactivePowerCharacteristicTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/ReactivePowerCharacteristicTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.models.system.characteristic +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.ParsingException import edu.ie3.datamodel.models.input.system.characteristic.* import spock.lang.Shared @@ -13,8 +15,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.Dimensionless -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class ReactivePowerCharacteristicTest extends Specification { @Shared CosPhiFixed validCosPhiFixed diff --git a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/WecCharacteristicTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/WecCharacteristicTest.groovy index 62546f077..149bddc94 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/WecCharacteristicTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/system/characteristic/WecCharacteristicTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.models.system.characteristic +import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.ParsingException import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicPoint import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput @@ -15,9 +18,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.Dimensionless import javax.measure.quantity.Speed -import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class WecCharacteristicTest extends Specification { @Shared WecCharacteristicInput validInput diff --git a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy index 9d1c8f96c..c07ff0d54 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.utils +import static edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils.* +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.InvalidGridException import edu.ie3.datamodel.graph.DistanceWeightedGraph import edu.ie3.datamodel.graph.ImpedanceWeightedGraph @@ -24,9 +27,6 @@ import spock.lang.Shared import spock.lang.Specification import tech.units.indriya.quantity.Quantities -import static edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils.* -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class ContainerUtilsTest extends Specification { @Shared diff --git a/src/test/groovy/edu/ie3/datamodel/utils/GridAndGeoUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/GridAndGeoUtilsTest.groovy index 4e06605a8..8b9f0cf41 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/GridAndGeoUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/GridAndGeoUtilsTest.groovy @@ -5,13 +5,12 @@ */ package edu.ie3.datamodel.utils -import edu.ie3.util.geo.GeoUtils -import edu.ie3.util.quantities.QuantityUtil -import spock.lang.Shared - import static edu.ie3.util.quantities.PowerSystemUnits.* import edu.ie3.test.common.GridTestData +import edu.ie3.util.geo.GeoUtils +import edu.ie3.util.quantities.QuantityUtil +import spock.lang.Shared import spock.lang.Specification import tech.units.indriya.quantity.Quantities diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy index 6f9cc47aa..c82979e66 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.datamodel.utils.validation +import static edu.ie3.datamodel.models.StandardUnits.* +import static tech.units.indriya.unit.Units.PERCENT + import edu.ie3.datamodel.exceptions.InvalidEntityException import edu.ie3.datamodel.exceptions.NotImplementedException import edu.ie3.datamodel.models.input.NodeInput @@ -21,9 +24,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.* -import static edu.ie3.datamodel.models.StandardUnits.* -import static tech.units.indriya.unit.Units.PERCENT - class SystemParticipantValidationUtilsTest extends Specification { def "Instantiating a ConnectorValidationUtil leads to an exception"() { diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy index d6971bcb0..ab7eb8d2e 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy @@ -5,6 +5,12 @@ */ package edu.ie3.datamodel.utils.validation +import static edu.ie3.datamodel.models.StandardUnits.* +import static edu.ie3.datamodel.utils.validation.DummyAssetInput.invalid +import static edu.ie3.datamodel.utils.validation.DummyAssetInput.valid +import static edu.ie3.util.quantities.PowerSystemUnits.OHM_PER_KILOMETRE +import static edu.ie3.util.quantities.PowerSystemUnits.PU + import edu.ie3.datamodel.exceptions.DuplicateEntitiesException import edu.ie3.datamodel.exceptions.FailedValidationException import edu.ie3.datamodel.exceptions.InvalidEntityException @@ -26,12 +32,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.Quantity -import static edu.ie3.datamodel.models.StandardUnits.* -import static edu.ie3.datamodel.utils.validation.DummyAssetInput.invalid -import static edu.ie3.datamodel.utils.validation.DummyAssetInput.valid -import static edu.ie3.util.quantities.PowerSystemUnits.OHM_PER_KILOMETRE -import static edu.ie3.util.quantities.PowerSystemUnits.PU - class ValidationUtilsTest extends Specification { def "Smoke Test: Correct asset throws no exception"() { diff --git a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy index e97f57972..5637f74d2 100644 --- a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy +++ b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy @@ -6,6 +6,7 @@ package edu.ie3.test.common import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants + import edu.ie3.datamodel.graph.SubGridGate import edu.ie3.datamodel.graph.SubGridTopologyGraph import edu.ie3.datamodel.models.input.connector.ConnectorPort diff --git a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy index 6c41c051a..ebe746e9c 100644 --- a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy @@ -5,6 +5,9 @@ */ package edu.ie3.test.common +import static edu.ie3.datamodel.models.StandardUnits.* +import static edu.ie3.util.quantities.PowerSystemUnits.* + import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput @@ -26,9 +29,6 @@ import org.locationtech.jts.geom.Point import org.locationtech.jts.io.geojson.GeoJsonReader import tech.units.indriya.quantity.Quantities -import static edu.ie3.datamodel.models.StandardUnits.* -import static edu.ie3.util.quantities.PowerSystemUnits.* - /** * This class contains a collection of different model instances that can be used for testing purposes. * Please note that these entities do NOT necessarily form a valid grid. For valid topologies please refer diff --git a/src/test/groovy/edu/ie3/test/common/ResultEntityTestData.groovy b/src/test/groovy/edu/ie3/test/common/ResultEntityTestData.groovy index f9fd980bc..cc1f86bfb 100644 --- a/src/test/groovy/edu/ie3/test/common/ResultEntityTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/ResultEntityTestData.groovy @@ -10,8 +10,8 @@ import edu.ie3.util.quantities.PowerSystemUnits import tech.units.indriya.ComparableQuantity import tech.units.indriya.quantity.Quantities -import javax.measure.quantity.Power import java.time.ZonedDateTime +import javax.measure.quantity.Power class ResultEntityTestData { diff --git a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy index a9f1aeb63..8adea5e57 100644 --- a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy +++ b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.test.common +import static edu.ie3.util.quantities.PowerSystemUnits.* + import edu.ie3.datamodel.exceptions.ParsingException import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.input.NodeInput @@ -30,8 +32,6 @@ import tech.units.indriya.quantity.Quantities import java.util.stream.Collectors -import static edu.ie3.util.quantities.PowerSystemUnits.* - /** * //ToDo: Class Description * diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index bfafb5d6b..067ed6a50 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.test.common +import static edu.ie3.datamodel.models.StandardUnits.* + import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput @@ -29,8 +31,6 @@ import tech.units.indriya.quantity.Quantities import javax.measure.quantity.* -import static edu.ie3.datamodel.models.StandardUnits.* - class SystemParticipantTestData { // general participant data diff --git a/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy b/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy index 61986f7ad..1c61ef3f3 100644 --- a/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy @@ -5,8 +5,12 @@ */ package edu.ie3.test.common -import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile +import static edu.ie3.util.quantities.PowerSystemUnits.* +import static tech.units.indriya.unit.Units.CELSIUS +import static tech.units.indriya.unit.Units.METRE_PER_SECOND + import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.profile.BdewStandardLoadProfile import edu.ie3.datamodel.models.timeseries.IntValue import edu.ie3.datamodel.models.timeseries.TimeSeries import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries @@ -24,10 +28,6 @@ import java.time.DayOfWeek import java.time.ZoneId import java.time.ZonedDateTime -import static edu.ie3.util.quantities.PowerSystemUnits.* -import static tech.units.indriya.unit.Units.CELSIUS -import static tech.units.indriya.unit.Units.METRE_PER_SECOND - trait TimeSeriesTestData { GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4326) Point defaultLocation = geometryFactory.createPoint(new Coordinate(7.412152, 51.492758)) diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index 8dd69378d..8555fc0cc 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -5,13 +5,13 @@ */ package edu.ie3.test.common +import static edu.ie3.util.quantities.PowerSystemUnits.* +import static tech.units.indriya.unit.Units.* + import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput import edu.ie3.datamodel.models.input.system.type.* import tech.units.indriya.quantity.Quantities -import static edu.ie3.util.quantities.PowerSystemUnits.* -import static tech.units.indriya.unit.Units.* - class TypeTestData extends GridTestData { public static final BmTypeInput bmType = new BmTypeInput( UUID.fromString("c3bd30f5-1a62-4a37-86e3-074040d965a4"), diff --git a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy index 950705e57..486aaf894 100644 --- a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy @@ -12,9 +12,9 @@ import edu.ie3.util.geo.GeoUtils import org.locationtech.jts.geom.Point import tech.units.indriya.ComparableQuantity -import javax.measure.quantity.Length import java.util.stream.Collectors import java.util.stream.Stream +import javax.measure.quantity.Length abstract class WeatherTestData { From 01d27d08d8e424c20100f044ea578f9e90ba5969 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 17:31:06 +0100 Subject: [PATCH 037/228] Make EnergyManagementUnits implement InputContainer --- .../container/EnergyManagementUnits.java | 47 ++++++++++++++++++- .../models/input/container/GridContainer.java | 2 +- .../EnergyManagementUnitsTest.groovy | 29 ++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java index 9dc4ab86e..4142a745d 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java +++ b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java @@ -11,7 +11,7 @@ import java.util.stream.Collectors; /** Represents the accumulation of energy management units */ -public class EnergyManagementUnits { +public class EnergyManagementUnits implements InputContainer { protected final Map emUnits; @@ -36,6 +36,11 @@ public Set getEmUnits() { return new HashSet<>(emUnits.values()); } + @Override + public List allEntitiesAsList() { + return emUnits.values().stream().toList(); + } + // TODO useful once #957 is implemented public Map getEmUnitsMap() { return emUnits; @@ -52,4 +57,44 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(emUnits); } + + @Override + public EnergyManagementUnitsCopyBuilder copy() { + return new EnergyManagementUnitsCopyBuilder(this); + } + + /** + * A builder pattern based approach to create copies of {@link EnergyManagementUnits} containers + * with altered field values. For detailed field descriptions refer to java docs of {@link + * EnergyManagementUnits} + */ + public static class EnergyManagementUnitsCopyBuilder + implements InputContainerCopyBuilder { + protected Set emUnits; + + /** + * Constructor for {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} + * + * @param energyManagementUnits instance of {@link EnergyManagementUnits} + */ + protected EnergyManagementUnitsCopyBuilder(EnergyManagementUnits energyManagementUnits) { + this.emUnits = energyManagementUnits.getEmUnits(); + } + + /** + * Method to alter the {@link EmInput}s + * + * @param emUnits set of altered {@link EmInput}s + * @return this instance of {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} + */ + public EnergyManagementUnits.EnergyManagementUnitsCopyBuilder emUnits(Set emUnits) { + this.emUnits = emUnits; + return this; + } + + @Override + public EnergyManagementUnits build() { + return new EnergyManagementUnits(emUnits); + } + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java index 9c914499f..12f5b7c9d 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java +++ b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java @@ -39,7 +39,7 @@ public List allEntitiesAsList() { List allEntities = new LinkedList<>(); allEntities.addAll(rawGrid.allEntitiesAsList()); allEntities.addAll(systemParticipants.allEntitiesAsList()); - allEntities.addAll(emUnits.getEmUnits()); + allEntities.addAll(emUnits.allEntitiesAsList()); allEntities.addAll(graphics.allEntitiesAsList()); return Collections.unmodifiableList(allEntities); } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy new file mode 100644 index 000000000..7bb2e6902 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy @@ -0,0 +1,29 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.models.input.container + +import edu.ie3.test.common.EnergyManagementTestData +import spock.lang.Specification + +class EnergyManagementUnitsTest extends Specification { + + def "An EnergyManagementUnits' copy method should work as expected"() { + given: + def energyManagementUnits = new EnergyManagementUnits( + Collections.singleton(EnergyManagementTestData.emInput) + ) + + def modifiedEmInput = EnergyManagementTestData.emInput.copy().id("modified").build() + + when: + def modifiedEnergyManagementUnits = energyManagementUnits.copy() + .emUnits(Set.of(modifiedEmInput)) + .build() + + then: + modifiedEnergyManagementUnits.emUnits.first() == modifiedEmInput + } +} From 66f172497c25f2d95e7adb9ac942c19c37b1c66b Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 17:32:46 +0100 Subject: [PATCH 038/228] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85e2b40f9..512ae8d0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) - Adding JavaDoc to `EntitySource.safeMapGet` [#828](https://github.com/ie3-institute/PowerSystemDataModel/issues/828) - Abstracting some methods in `ValidationUtils` [#852](https://github.com/ie3-institute/PowerSystemDataModel/issues/852) +- `EmInput` should not be connected to the grid [#955](https://github.com/ie3-institute/PowerSystemDataModel/issues/955) ## [4.1.0] - 2023-11-02 From f4b7a407973c87fcce49f8b7adc8b38a79d363f1 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 17:34:28 +0100 Subject: [PATCH 039/228] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85e2b40f9..55898c8d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased/Snapshot] ### Added +- Formatting Spotless Groovy import order [#960](https://github.com/ie3-institute/PowerSystemDataModel/issues/960) ### Fixed - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) From 88c88c22a9019fc6ce884fbe2c24fdc4a058d840 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 12 Dec 2023 17:43:57 +0100 Subject: [PATCH 040/228] Fixing some codacy issues --- .../edu/ie3/test/common/EnergyManagementTestData.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy index b13e2cb9d..4d8714c6b 100644 --- a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy @@ -11,8 +11,8 @@ import edu.ie3.datamodel.models.input.system.EmInput class EnergyManagementTestData { public static final UUID[] connectedAssets = new UUID[]{ - SystemParticipantTestData.loadInput.getUuid(), - SystemParticipantTestData.pvInput.getUuid() + SystemParticipantTestData.loadInput.uuid, + SystemParticipantTestData.pvInput.uuid } public static final String emControlStrategy = "self_optimization" From b02506d7a501aad320c0f3978b2aa25be1cc15cc Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Wed, 13 Dec 2023 10:49:13 +0100 Subject: [PATCH 041/228] fix merge conflicts --- .../groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy | 1 + .../models/input/container/JointGridContainerTest.groovy | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index c4dc68ccc..6c98e7b53 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -45,6 +45,7 @@ import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.EnergyPriceValue import edu.ie3.datamodel.models.value.Value +import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SampleJointGrid import edu.ie3.test.common.SystemParticipantTestData diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index 417c72070..21bc87957 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -5,8 +5,10 @@ */ package edu.ie3.datamodel.models.input.container +import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants +import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification From ef410ae508b49ae781f036809cf351d7a44360fd Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 13 Dec 2023 11:45:11 +0100 Subject: [PATCH 042/228] Removing connectedAssets and turning controlStrategy into a String --- .../input/participant/EmInputFactory.java | 26 +----- .../ie3/datamodel/io/processor/Processor.java | 3 - .../ie3/datamodel/models/ControlStrategy.java | 35 -------- .../datamodel/models/EmControlStrategy.java | 45 ---------- .../models/input/system/EmInput.java | 90 +++---------------- .../participant/EmInputFactoryTest.groovy | 68 ++------------ .../models/EmControlStrategyTest.groovy | 45 ---------- .../models/input/system/EmInputTest.groovy | 20 +---- .../common/EnergyManagementTestData.groovy | 1 - .../io/source/csv/_participants/em_input.csv | 4 +- 10 files changed, 29 insertions(+), 308 deletions(-) delete mode 100644 src/main/java/edu/ie3/datamodel/models/ControlStrategy.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java delete mode 100644 src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index 3e2e39d60..c9aefede5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -5,21 +5,14 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityFactory; -import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EmInput; import java.util.UUID; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class EmInputFactory extends AssetInputEntityFactory { - private static final Logger logger = LoggerFactory.getLogger(EmInputFactory.class); - - private static final String CONNECTED_ASSETS = "connectedassets"; private static final String CONTROL_STRATEGY = "controlstrategy"; @@ -29,7 +22,7 @@ public EmInputFactory() { @Override protected String[] getAdditionalFields() { - return new String[] {CONNECTED_ASSETS, CONTROL_STRATEGY}; + return new String[] {CONTROL_STRATEGY}; } @Override @@ -39,21 +32,8 @@ protected EmInput buildModel( String id, OperatorInput operator, OperationTime operationTime) { - ControlStrategy controlStrategy; - try { - controlStrategy = ControlStrategy.parse(data.getField(CONTROL_STRATEGY)); - } catch (ParsingException e) { - logger.warn( - "Cannot parse control strategy \"{}\" of energy management system \"{}\". Assign no control strategy instead.", - data.getField(CONTROL_STRATEGY), - id); - controlStrategy = ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY; - } - final UUID[] connectedAssets = data.getUUIDs(CONNECTED_ASSETS); - - if (connectedAssets.length == 0) - logger.warn("There are no connected assets for energy management system \"{}\".", id); + String controlStrategy = data.getField(CONTROL_STRATEGY); - return new EmInput(uuid, id, operator, operationTime, connectedAssets, controlStrategy); + return new EmInput(uuid, id, operator, operationTime, controlStrategy); } } diff --git a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java index 830fbef02..06eb1b951 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java @@ -8,7 +8,6 @@ import edu.ie3.datamodel.exceptions.EntityProcessorException; import edu.ie3.datamodel.io.factory.input.NodeInputFactory; import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor; -import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.UniqueEntity; @@ -290,8 +289,6 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "CharacteristicInput" -> resultStringBuilder.append( ((CharacteristicInput) methodReturnObject).serialize()); case "UUID[]" -> resultStringBuilder.append(processUUIDArray((UUID[]) methodReturnObject)); - case "ControlStrategy" -> resultStringBuilder.append( - ((ControlStrategy) methodReturnObject).getKey()); default -> throw new EntityProcessorException( "Unable to process value for attribute/field '" + fieldName diff --git a/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java b/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java deleted file mode 100644 index 61ad82ddf..000000000 --- a/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models; - -import edu.ie3.datamodel.exceptions.ParsingException; -import java.io.Serializable; -import java.util.Arrays; - -public interface ControlStrategy extends Serializable { - String getKey(); - - static ControlStrategy parse(String key) throws ParsingException { - if (key == null || key.isEmpty()) - return ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY; - - String filterKey = key.toLowerCase().replace("-", "_"); - return Arrays.stream(EmControlStrategy.values()) - .filter(profile -> profile.getKey().equals(filterKey)) - .findFirst() - .orElseThrow( - () -> new ParsingException("Cannot parse \"" + key + "\" to a valid control strategy")); - } - - enum DefaultControlStrategies implements ControlStrategy { - NO_CONTROL_STRATEGY; - - @Override - public String getKey() { - return "No control strategy assigned"; - } - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java b/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java deleted file mode 100644 index ffb216a35..000000000 --- a/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models; - -import java.util.Arrays; -import java.util.Locale; -import java.util.stream.Collectors; - -public enum EmControlStrategy implements ControlStrategy { - SELF_OPTIMIZATION("self_optimization"); - - private final String key; - - EmControlStrategy(String key) { - this.key = key.toLowerCase(Locale.ROOT); - } - - public static EmControlStrategy get(String key) { - return Arrays.stream(EmControlStrategy.values()) - .filter(controlStrategy -> controlStrategy.key.equalsIgnoreCase(key)) - .findFirst() - .orElseThrow( - () -> - new IllegalArgumentException( - "No predefined energy management control strategy '" - + key - + "' found. Please provide one of the following keys: " - + Arrays.stream(EmControlStrategy.values()) - .map(EmControlStrategy::getKey) - .collect(Collectors.joining(", ")))); - } - - @Override - public String getKey() { - return key; - } - - @Override - public String toString() { - return "EmControlStrategy{" + "key='" + key + '\'' + '}'; - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java index f9bbbaa9f..b58a054ef 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java @@ -5,43 +5,16 @@ */ package edu.ie3.datamodel.models.input.system; -import edu.ie3.datamodel.models.ControlStrategy; -import edu.ie3.datamodel.models.EmControlStrategy; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.AssetInput; import edu.ie3.datamodel.models.input.OperatorInput; -import java.util.Arrays; import java.util.Objects; import java.util.UUID; public class EmInput extends AssetInput { - /** Reference via UUID to all SystemParticipantInputs connected to this model */ - private final UUID[] connectedAssets; - /** Reference to the control strategy to be used for this model */ - private final ControlStrategy controlStrategy; - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param operator of the asset - * @param operationTime time for which the entity is operated - * @param connectedAssets array of all connected assets - * @param controlStrategy control strategy used for this model - */ - public EmInput( - UUID uuid, - String id, - OperatorInput operator, - OperationTime operationTime, - UUID[] connectedAssets, - ControlStrategy controlStrategy) { - super(uuid, id, operator, operationTime); - this.connectedAssets = connectedAssets; - this.controlStrategy = controlStrategy; - } + private final String controlStrategy; /** * Constructor for an operated energy management system @@ -50,20 +23,16 @@ public EmInput( * @param id of the asset * @param operator of the asset * @param operationTime time for which the entity is operated - * @param connectedAssets array of all connected assets - * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy - * key + * @param emControlStrategy the control strategy */ public EmInput( UUID uuid, String id, OperatorInput operator, OperationTime operationTime, - UUID[] connectedAssets, String emControlStrategy) { super(uuid, id, operator, operationTime); - this.connectedAssets = connectedAssets; - this.controlStrategy = EmControlStrategy.get(emControlStrategy); + this.controlStrategy = emControlStrategy; } /** @@ -71,35 +40,14 @@ public EmInput( * * @param uuid of the input entity * @param id of the asset - * @param connectedAssets array of all connected assets - * @param controlStrategy control strategy used for this model + * @param emControlStrategy the control strategy */ - public EmInput(UUID uuid, String id, UUID[] connectedAssets, ControlStrategy controlStrategy) { + public EmInput(UUID uuid, String id, String emControlStrategy) { super(uuid, id); - this.connectedAssets = connectedAssets; - this.controlStrategy = controlStrategy; + this.controlStrategy = emControlStrategy; } - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param connectedAssets array of all connected assets - * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy - * key - */ - public EmInput(UUID uuid, String id, UUID[] connectedAssets, String emControlStrategy) { - super(uuid, id); - this.connectedAssets = connectedAssets; - this.controlStrategy = EmControlStrategy.get(emControlStrategy); - } - - public UUID[] getConnectedAssets() { - return connectedAssets; - } - - public ControlStrategy getControlStrategy() { + public String getControlStrategy() { return controlStrategy; } @@ -113,13 +61,12 @@ public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof EmInput emInput)) return false; if (!super.equals(o)) return false; - return Arrays.equals(connectedAssets, emInput.connectedAssets) - && controlStrategy == emInput.controlStrategy; + return Objects.equals(controlStrategy, emInput.controlStrategy); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), Arrays.hashCode(connectedAssets), controlStrategy); + return Objects.hash(super.hashCode(), controlStrategy); } @Override @@ -133,39 +80,28 @@ public String toString() { + getOperator().getUuid() + ", operationTime=" + getOperationTime() - + ", connectedAssets=" - + Arrays.toString(connectedAssets) + ", controlStrategy=" - + controlStrategy + + getControlStrategy() + '}'; } public static class EmInputCopyBuilder extends AssetInputCopyBuilder { - private UUID[] connectedAssets; - - private ControlStrategy controlStrategy; + private String controlStrategy; protected EmInputCopyBuilder(EmInput entity) { super(entity); - this.connectedAssets = entity.getConnectedAssets(); this.controlStrategy = entity.getControlStrategy(); } - public EmInputCopyBuilder connectedAssets(UUID[] connectedAssets) { - this.connectedAssets = connectedAssets; - return this; - } - - public EmInputCopyBuilder controlStrategy(ControlStrategy controlStrategy) { + public EmInputCopyBuilder controlStrategy(String controlStrategy) { this.controlStrategy = controlStrategy; return this; } @Override public EmInput build() { - return new EmInput( - getUuid(), getId(), getOperator(), getOperationTime(), connectedAssets, controlStrategy); + return new EmInput(getUuid(), getId(), getOperator(), getOperationTime(), controlStrategy); } @Override diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index 707a71ccd..ccc0379db 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -7,15 +7,12 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.AssetInputEntityData -import edu.ie3.datamodel.models.ControlStrategy -import edu.ie3.datamodel.models.EmControlStrategy import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.utils.Try import spock.lang.Specification import java.time.ZonedDateTime -import javax.measure.quantity.Dimensionless class EmInputFactoryTest extends Specification { @@ -36,8 +33,7 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914 a17aa6f0-e663-4186-ac34-a7b68573938b", - "controlstrategy" : "self_optimization" + "controlstrategy" : "no_control" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) @@ -57,24 +53,17 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert connectedAssets == [ - UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914"), - UUID.fromString("a17aa6f0-e663-4186-ac34-a7b68573938b") - ] as UUID[] - assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION + assert controlStrategy == parameter["controlstrategy"] } } - def "A EmInputFactory should parse a valid EmInput with zero connected assets correctly"() { + def "A EmInputFactory should fail when passing an invalid UUID"() { given: def inputFactory = new EmInputFactory() Map parameter = [ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", - "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", + "uuid" : "- broken -", "id" : "TestID", - "connectedassets" : "", - "controlstrategy" : "self_optimization" + "controlstrategy" : "no_control" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) @@ -84,50 +73,7 @@ class EmInputFactoryTest extends Specification { new AssetInputEntityData(parameter, inputClass, operatorInput)) then: - input.success - input.data.get().getClass() == inputClass - input.data.get().with { - assert uuid == UUID.fromString(parameter["uuid"]) - assert operationTime.startDate.present - assert operationTime.startDate.get() == ZonedDateTime.parse(parameter["operatesfrom"]) - assert operationTime.endDate.present - assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) - assert operator == operatorInput - assert id == parameter["id"] - assert connectedAssets == [] as UUID[] - assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION - } - } - - def "A EmInputFactory should use a default control strategy if value cannot be parsed"() { - given: - def inputFactory = new EmInputFactory() - Map parameter = [ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "TestID", - "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914", - "controlstrategy" : " -- invalid --" - ] - def inputClass = EmInput - def operatorInput = Mock(OperatorInput) - - when: - Try input = inputFactory.get( - new AssetInputEntityData(parameter, inputClass, operatorInput)) - - then: - input.success - input.data.get().getClass() == inputClass - input.data.get().with { - assert uuid == UUID.fromString(parameter["uuid"]) - assert operationTime.startDate.empty - assert operationTime.endDate.empty - assert operator == operatorInput - assert id == parameter["id"] - assert connectedAssets == [ - UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914") - ] as UUID[] - assert controlStrategy == ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY - } + input.failure + input.exception.get().cause.message == "Exception while trying to parse UUID of field \"uuid\" with value \"- broken -\"" } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy deleted file mode 100644 index ea13b2f35..000000000 --- a/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy +++ /dev/null @@ -1,45 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.datamodel.models - -import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData -import edu.ie3.datamodel.io.factory.input.participant.FixedFeedInInputFactory -import edu.ie3.datamodel.models.input.NodeInput -import edu.ie3.datamodel.models.input.system.FixedFeedInInput -import spock.lang.Specification - -import java.util.stream.Collectors - -class EmControlStrategyTest extends Specification { - - def "An em control strategy should be gotten by their key"() { - given: - EmControlStrategy actual = EmControlStrategy.get(key) - - expect: - actual == expected - - where: - key || expected - EmControlStrategy.SELF_OPTIMIZATION.getKey() || EmControlStrategy.SELF_OPTIMIZATION - } - - def "An em control strategy should throw an exception when calling get on unkown key"() { - given: - String unknownKey = "nobody_knows_me" - - when: - EmControlStrategy _ = EmControlStrategy.get(unknownKey) - - then: - IllegalArgumentException ex = thrown() - ex.message == "No predefined energy management control strategy '" + - unknownKey + - "' found. Please provide one of the following keys: " + - Arrays.stream(EmControlStrategy.values()).map(EmControlStrategy::getKey).collect(Collectors.joining(", ")) - } -} diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 755699e22..5427810e5 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -5,9 +5,6 @@ */ package edu.ie3.datamodel.models.input.system -import static edu.ie3.datamodel.models.ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY - -import edu.ie3.datamodel.models.ControlStrategy import edu.ie3.test.common.EnergyManagementTestData import spock.lang.Specification @@ -18,7 +15,6 @@ class EmInputTest extends Specification { def emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", - EnergyManagementTestData.connectedAssets, EnergyManagementTestData.emControlStrategy ) @@ -26,8 +22,7 @@ class EmInputTest extends Specification { emInput.with { assert uuid == UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792") assert id == "test_emInput" - assert connectedAssets == EnergyManagementTestData.connectedAssets - assert controlStrategy.key == EnergyManagementTestData.emControlStrategy + assert controlStrategy == EnergyManagementTestData.emControlStrategy } } @@ -61,8 +56,6 @@ class EmInputTest extends Specification { EnergyManagementTestData.emInput.operator.uuid + ", operationTime=" + EnergyManagementTestData.emInput.operationTime + - ", connectedAssets=" + - Arrays.toString(EnergyManagementTestData.emInput.connectedAssets) + ", controlStrategy=" + EnergyManagementTestData.emInput.controlStrategy + '}' @@ -71,14 +64,10 @@ class EmInputTest extends Specification { def "A EmInput copy method should work as expected"() { given: def emInput = EnergyManagementTestData.emInput - def newConnectedAssets = [ - UUID.randomUUID(), - UUID.randomUUID() - ] as UUID[] - + def newStrat = "new_strat" when: - def alteredUnit = emInput.copy().connectedAssets(newConnectedAssets).controlStrategy(ControlStrategy.parse("")).build() + def alteredUnit = emInput.copy().controlStrategy(newStrat).build() then: alteredUnit.with { @@ -86,8 +75,7 @@ class EmInputTest extends Specification { assert operationTime == emInput.operationTime assert operator == emInput.operator assert id == emInput.id - assert connectedAssets == newConnectedAssets - assert controlStrategy == NO_CONTROL_STRATEGY + assert controlStrategy == newStrat } } } diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy index 4d8714c6b..b747ca5c3 100644 --- a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy @@ -21,7 +21,6 @@ class EnergyManagementTestData { "test_emInput", SystemParticipantTestData.operator, SystemParticipantTestData.operationTime, - connectedAssets, emControlStrategy ) diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv index 5cc111444..97cea0978 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv @@ -1,2 +1,2 @@ -uuid,connected_assets,control_strategy,id,operates_from,operates_until,operator -977157f4-25e5-4c72-bf34-440edc778792,eaf77f7e-9001-479f-94ca-7fb657766f5f d56f15b7-8293-4b98-b5bd-58f6273ce229,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510 +uuid,control_strategy,id,operates_from,operates_until,operator +977157f4-25e5-4c72-bf34-440edc778792,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510 From 5ecbce6a173466975fee38843798272a72b3100a Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 14 Dec 2023 14:09:32 +0100 Subject: [PATCH 043/228] Backup --- docs/uml/main/EntitySourceClassDiagram.puml | 4 +- .../ie3/datamodel/io/factory/EntityData.java | 9 + .../ie3/datamodel/io/factory/FactoryData.java | 6 +- .../factory/input/AssetInputEntityData.java | 12 + .../input/NodeAssetInputEntityData.java | 12 + .../input/participant/BmInputFactory.java | 2 + .../input/participant/ChpInputFactory.java | 2 + .../input/participant/EmInputFactory.java | 22 +- .../input/participant/EvInputFactory.java | 3 +- .../input/participant/EvcsInputFactory.java | 13 +- .../participant/FixedFeedInInputFactory.java | 6 +- .../input/participant/HpInputFactory.java | 2 + .../input/participant/LoadInputFactory.java | 10 +- .../input/participant/PvInputFactory.java | 10 +- .../participant/StorageInputFactory.java | 4 +- .../SystemParticipantEntityData.java | 152 +++++++ .../SystemParticipantInputEntityFactory.java | 12 +- .../SystemParticipantTypedEntityData.java | 38 +- .../input/participant/WecInputFactory.java | 4 +- .../io/source/EnergyManagementSource.java | 27 +- .../ie3/datamodel/io/source/EntitySource.java | 38 +- .../datamodel/io/source/GraphicSource.java | 2 +- .../datamodel/io/source/RawGridSource.java | 2 +- .../io/source/SystemParticipantSource.java | 397 ++++++++---------- .../datamodel/io/source/ThermalSource.java | 2 +- .../ie3/datamodel/io/source/TypeSource.java | 2 +- .../container/EnergyManagementUnits.java | 100 ----- .../models/input/system/BmInput.java | 14 +- .../models/input/system/ChpInput.java | 12 +- .../models/input/system/EmInput.java | 31 +- .../models/input/system/EvInput.java | 12 +- .../models/input/system/EvcsInput.java | 38 +- .../models/input/system/FixedFeedInInput.java | 12 +- .../models/input/system/HpInput.java | 12 +- .../models/input/system/LoadInput.java | 18 +- .../models/input/system/PvInput.java | 12 +- .../models/input/system/StorageInput.java | 12 +- .../input/system/SystemParticipantInput.java | 43 +- .../models/input/system/WecInput.java | 12 +- .../io/extractor/ExtractorTest.groovy | 3 +- .../FixedFeedInInputFactoryTest.groovy | 6 +- .../io/source/EntitySourceTest.groovy | 2 +- .../csv/CsvSystemParticipantSourceTest.groovy | 2 +- .../container/SystemParticipantsTest.groovy | 6 +- .../models/input/system/EvcsInputTest.groovy | 2 +- .../InvalidSystemParticipantInput.groovy | 2 +- .../common/EnergyManagementTestData.groovy | 5 +- .../common/SystemParticipantTestData.groovy | 14 +- 48 files changed, 709 insertions(+), 454 deletions(-) create mode 100644 src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java diff --git a/docs/uml/main/EntitySourceClassDiagram.puml b/docs/uml/main/EntitySourceClassDiagram.puml index a160bc739..49be16965 100644 --- a/docs/uml/main/EntitySourceClassDiagram.puml +++ b/docs/uml/main/EntitySourceClassDiagram.puml @@ -104,8 +104,8 @@ class SystemParticipantSource{ - Set getChpPlants(Set, Set, Set, Set, Set) - Set getEvs() - Set getEvs(Set, Set, Set) - - Set getEvCS() - - Set getEvCS(Set, Set) + - Set getEvcs() + - Set getEvcs(Set, Set) - Set getFixedFeedIns() - Set getFixedFeedIns(Set, Set) - Set getHeatPumps() diff --git a/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java index c958a2d9b..ce750f98f 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java @@ -44,6 +44,15 @@ protected EntityData( super(fieldsToAttributes, entityClass); } + /** + * Creates a new EntityData object based on a given {@link FactoryData} object + * + * @param factoryData The factory data object to use attributes of + */ + protected EntityData(FactoryData factoryData) { + super(factoryData.getFieldsToValues(), factoryData.getTargetClass()); + } + @Override @SuppressWarnings("unchecked cast") public Class getTargetClass() { diff --git a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java index 95886864e..f88d24423 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java @@ -18,10 +18,8 @@ public abstract class FactoryData { protected FactoryData(Map fieldsToAttributes, Class targetClass) { // this does the magic: case-insensitive get/set calls on keys - TreeMap insensitiveFieldsToAttributes = - new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - insensitiveFieldsToAttributes.putAll(fieldsToAttributes); - this.fieldsToAttributes = insensitiveFieldsToAttributes; + this.fieldsToAttributes = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + this.fieldsToAttributes.putAll(fieldsToAttributes); this.targetClass = targetClass; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityData.java index 614ca25cb..10f93153e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/AssetInputEntityData.java @@ -45,6 +45,18 @@ public AssetInputEntityData( this.operator = operator; } + /** + * Creates a new AssetInputEntityData object based on a given {@link EntityData} object and given + * operator + * + * @param entityData The entity data object to use attributes of + * @param operator The operator input to use + */ + public AssetInputEntityData(EntityData entityData, OperatorInput operator) { + super(entityData); + this.operator = operator; + } + public OperatorInput getOperatorInput() { return operator; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeAssetInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeAssetInputEntityData.java index bce3c4117..4916e78ad 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeAssetInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeAssetInputEntityData.java @@ -53,6 +53,18 @@ public NodeAssetInputEntityData( this.node = node; } + /** + * Creates a new NodeAssetInputEntityData object based on a given {@link AssetInputEntityData} + * object and given node + * + * @param assetInputEntityData The asset entity data object to use attributes of + * @param node input node + */ + public NodeAssetInputEntityData(AssetInputEntityData assetInputEntityData, NodeInput node) { + super(assetInputEntityData, assetInputEntityData.getOperatorInput()); + this.node = node; + } + public NodeInput getNode() { return node; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java index 799837d3c..427a2d821 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java @@ -39,6 +39,7 @@ protected BmInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { final BmTypeInput typeInput = data.getTypeInput(); @@ -54,6 +55,7 @@ protected BmInput buildModel( operationTime, node, qCharacteristics, + em, typeInput, marketReaction, costControlled, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java index f04b85e86..73b9674f2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java @@ -32,6 +32,7 @@ protected ChpInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { final boolean marketReaction = data.getBoolean(MARKET_REACTION); @@ -44,6 +45,7 @@ protected ChpInput buildModel( node, data.getThermalBusInput(), qCharacteristics, + em, data.getTypeInput(), data.getThermalStorageInput(), marketReaction); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index c9aefede5..9b9886e65 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -10,16 +10,33 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EmInput; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; import java.util.UUID; public class EmInputFactory extends AssetInputEntityFactory { private static final String CONTROL_STRATEGY = "controlstrategy"; + private static final String PARENT_EM = "parentem"; + public EmInputFactory() { super(EmInput.class); } + @Override + protected List> getFields(AssetInputEntityData data) { + List> fields = new ArrayList<>(super.getFields(data)); + + List> withEm = + fields.stream().map(f -> (Set) expandSet(f, PARENT_EM)).toList(); + + fields.addAll(withEm); + + return fields; + } + @Override protected String[] getAdditionalFields() { return new String[] {CONTROL_STRATEGY}; @@ -34,6 +51,9 @@ protected EmInput buildModel( OperationTime operationTime) { String controlStrategy = data.getField(CONTROL_STRATEGY); - return new EmInput(uuid, id, operator, operationTime, controlStrategy); + UUID parentEm = null; + if (data.containsKey(PARENT_EM)) parentEm = data.getUUID(PARENT_EM); + + return new EmInput(uuid, id, operator, operationTime, controlStrategy, parentEm); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java index 1f0f8e80c..7cea1d006 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java @@ -33,9 +33,10 @@ protected EvInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { return new EvInput( - uuid, id, operator, operationTime, node, qCharacteristics, data.getTypeInput()); + uuid, id, operator, operationTime, node, qCharacteristics, em, data.getTypeInput()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java index fb7419a75..83a24bbb1 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java @@ -8,7 +8,6 @@ import edu.ie3.datamodel.exceptions.ChargingPointTypeException; import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; @@ -18,16 +17,17 @@ import edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils; import edu.ie3.datamodel.models.input.system.type.evcslocation.EvcsLocationType; import edu.ie3.datamodel.models.input.system.type.evcslocation.EvcsLocationTypeUtils; +import java.util.UUID; /** - * Factory to create instances of {@link EvcsInput}s based on {@link NodeAssetInputEntityData} and - * additional fields. + * Factory to create instances of {@link EvcsInput}s based on {@link SystemParticipantEntityData} + * and additional fields. * * @version 0.1 * @since 26.07.20 */ public class EvcsInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String TYPE = "type"; private static final String CHARGING_POINTS = "chargingpoints"; @@ -46,8 +46,8 @@ protected String[] getAdditionalFields() { @Override protected EvcsInput buildModel( - NodeAssetInputEntityData data, - java.util.UUID uuid, + SystemParticipantEntityData data, + UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, @@ -87,6 +87,7 @@ protected EvcsInput buildModel( operationTime, node, qCharacteristics, + em, type, chargingPoints, cosPhi, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java index 03ff6636f..773a7d0e6 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java @@ -12,6 +12,7 @@ import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.FixedFeedInInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; +import java.util.UUID; import javax.measure.quantity.Power; import tech.units.indriya.ComparableQuantity; @@ -33,16 +34,17 @@ protected String[] getAdditionalFields() { @Override protected FixedFeedInInput buildModel( NodeAssetInputEntityData data, - java.util.UUID uuid, + UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { final ComparableQuantity sRated = data.getQuantity(S_RATED, StandardUnits.S_RATED); final double cosPhiRated = data.getDouble(COSPHI_RATED); return new FixedFeedInInput( - uuid, id, operator, operationTime, node, qCharacteristics, sRated, cosPhiRated); + uuid, id, operator, operationTime, node, qCharacteristics, em, sRated, cosPhiRated); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java index cd814e044..616effa98 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java @@ -31,6 +31,7 @@ protected HpInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { return new HpInput( @@ -41,6 +42,7 @@ protected HpInput buildModel( node, data.getThermalBusInput(), qCharacteristics, + em, data.getTypeInput()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java index eb86cefc3..12b763abe 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.NodeInput; @@ -14,6 +13,7 @@ import edu.ie3.datamodel.models.input.system.LoadInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.profile.LoadProfile; +import java.util.UUID; import javax.measure.quantity.Energy; import javax.measure.quantity.Power; import org.slf4j.Logger; @@ -21,7 +21,7 @@ import tech.units.indriya.ComparableQuantity; public class LoadInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final Logger logger = LoggerFactory.getLogger(LoadInputFactory.class); private static final String LOAD_PROFILE = "loadprofile"; @@ -41,11 +41,12 @@ protected String[] getAdditionalFields() { @Override protected LoadInput buildModel( - NodeAssetInputEntityData data, - java.util.UUID uuid, + SystemParticipantEntityData data, + UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { LoadProfile loadProfile; @@ -71,6 +72,7 @@ protected LoadInput buildModel( operationTime, node, qCharacteristics, + em, loadProfile, dsm, eConsAnnual, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java index 9812354e3..41997f445 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java @@ -5,20 +5,20 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.PvInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; +import java.util.UUID; import javax.measure.quantity.Angle; import javax.measure.quantity.Dimensionless; import javax.measure.quantity.Power; import tech.units.indriya.ComparableQuantity; public class PvInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String ALBEDO = "albedo"; private static final String AZIMUTH = "azimuth"; private static final String ETA_CONV = "etaconv"; @@ -42,11 +42,12 @@ protected String[] getAdditionalFields() { @Override protected PvInput buildModel( - NodeAssetInputEntityData data, - java.util.UUID uuid, + SystemParticipantEntityData data, + UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { final double albedo = data.getDouble(ALBEDO); @@ -68,6 +69,7 @@ protected PvInput buildModel( operationTime, node, qCharacteristics, + em, albedo, azimuth, etaConv, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java index 04645c459..24adbec5a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java @@ -33,9 +33,11 @@ protected StorageInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, OperatorInput operator, OperationTime operationTime) { final StorageTypeInput typeInput = data.getTypeInput(); - return new StorageInput(uuid, id, operator, operationTime, node, qCharacteristics, typeInput); + return new StorageInput( + uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java new file mode 100644 index 000000000..f65fea7b7 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java @@ -0,0 +1,152 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.factory.input.participant; + +import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; +import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.NodeInput; +import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; +import edu.ie3.datamodel.utils.Try; + +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +/** + * Data used for those classes of {@link + * edu.ie3.datamodel.models.input.system.SystemParticipantInput}, including an (optional) link to an + * {@link EmInput} entity. + */ +public class SystemParticipantEntityData extends NodeAssetInputEntityData { + + /** Energy management unit that is managing the system participant. Can be null. */ + private final EmInput em; + + /** + * Creates a new SystemParticipantEntityData object for an operated, always on system participant + * input + * + * @param fieldsToAttributes attribute map: field name to value + * @param entityClass class of the entity to be created with this data + * @param node input node + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. + */ + public SystemParticipantEntityData( + Map fieldsToAttributes, + Class entityClass, + NodeInput node, + EmInput em) { + super(fieldsToAttributes, entityClass, node); + this.em = em; + } + + public Optional getEm() { + return Optional.ofNullable(em); + } + + /** + * Creates a new SystemParticipantEntityData object for an operable system participant input + * + * @param fieldsToAttributes attribute map: field name to value + * @param entityClass class of the entity to be created with this data + * @param operator operator input + * @param node input node + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. + */ + public SystemParticipantEntityData( + Map fieldsToAttributes, + Class entityClass, + OperatorInput operator, + NodeInput node, + EmInput em) { + super(fieldsToAttributes, entityClass, operator, node); + this.em = em; + } + + /** + * Creates a new SystemParticipantEntityData object based on a given {@link + * NodeAssetInputEntityData} object and given energy management unit + * + * @param nodeAssetInputEntityData The node asset entity data object to use attributes of + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. + */ + public SystemParticipantEntityData( + NodeAssetInputEntityData nodeAssetInputEntityData, EmInput em) { + super(nodeAssetInputEntityData, nodeAssetInputEntityData.getNode()); + this.em = em; + } + + @Override + public String toString() { + return "SystemParticipantEntityData{" + + "em=" + + getEm().map(EmInput::toString).orElse("") + + ", node=" + + getNode().getUuid() + + ", operatorInput=" + + getOperatorInput().getUuid() + + ", fieldsToValues=" + + getFieldsToValues() + + ", targetClass=" + + getTargetClass() + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + SystemParticipantEntityData that = (SystemParticipantEntityData) o; + return getEm().equals(that.getEm()); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), getEm()); + } + + public static Try build( + NodeAssetInputEntityData nodeAssetInputEntityData, Map ems) { + + Map fieldsToAttributes = nodeAssetInputEntityData.getFieldsToValues(); + + Try, SourceException> tryEm = + Optional.ofNullable( + nodeAssetInputEntityData.getUUID(SystemParticipantInputEntityFactory.EM)) + .map( + // System participant has been given a proper UUID. This means we either... + emUuid -> + Optional.ofNullable(ems.get(emUuid)) + // ... find a matching EmInput for given UUID, thus return a success with + // the EM + .map( + emInput -> + (Try, SourceException>) + new Try.Success, SourceException>( + Optional.of(emInput))) + // ... or find no matching EmInput, returning a failure. + .orElse(new Try.Failure<>(new SourceException("")))) + // If, on the other hand, no UUID was given (column does not exist, or field is empty), + // this is totally fine - we return an "empty success" + .orElse(new Try.Success<>(Optional.empty())); + + return tryEm.map( + // if the operation was successful, transform and return to the data + optionalEm -> { + // remove fields that are passed as objects to constructor + fieldsToAttributes.keySet().remove(SystemParticipantInputEntityFactory.EM); + + return new SystemParticipantEntityData(nodeAssetInputEntityData, optionalEm.orElse(null)); + }); + } +} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java index 212f9db96..e8101b582 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java @@ -26,21 +26,27 @@ * @version 0.1 * @since 28.01.20 */ -abstract class SystemParticipantInputEntityFactory< - T extends SystemParticipantInput, D extends NodeAssetInputEntityData> +public abstract class SystemParticipantInputEntityFactory< + T extends SystemParticipantInput, D extends SystemParticipantEntityData> extends AssetInputEntityFactory { private static final String Q_CHARACTERISTICS = "qcharacteristics"; + public static final String EM = "em"; + protected SystemParticipantInputEntityFactory(Class... allowedClasses) { super(allowedClasses); } @Override protected List> getFields(D data) { - List> fields = super.getFields(data); + List> fields = new ArrayList<>(super.getFields(data)); for (Set set : fields) set.add(Q_CHARACTERISTICS); + List> withEm = fields.stream().map(f -> (Set) expandSet(f, EM)).toList(); + + fields.addAll(withEm); + return fields; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java index 5fcb3e00a..4a28b210c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java @@ -5,10 +5,10 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.type.SystemParticipantTypeInput; import java.util.Map; import java.util.Objects; @@ -22,7 +22,7 @@ * of the SystemParticipantInput */ public class SystemParticipantTypedEntityData - extends NodeAssetInputEntityData { + extends SystemParticipantEntityData { private final T typeInput; @@ -33,14 +33,17 @@ public class SystemParticipantTypedEntityData fieldsToAttributes, Class entityClass, NodeInput node, + EmInput em, T typeInput) { - super(fieldsToAttributes, entityClass, node); + super(fieldsToAttributes, entityClass, node, em); this.typeInput = typeInput; } @@ -52,6 +55,8 @@ public SystemParticipantTypedEntityData( * @param entityClass class of the entity to be created with this data * @param operator operator input * @param node input node + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. * @param typeInput type input */ public SystemParticipantTypedEntityData( @@ -59,16 +64,37 @@ public SystemParticipantTypedEntityData( Class entityClass, OperatorInput operator, NodeInput node, + EmInput em, T typeInput) { - super(fieldsToAttributes, entityClass, operator, node); + super(fieldsToAttributes, entityClass, operator, node, em); this.typeInput = typeInput; } + /** + * Creates a new SystemParticipantTypedEntityData object based on a given {@link + * SystemParticipantEntityData} object and given type input + * + * @param systemParticipantEntityData The system participant entity data object to use attributes + * of + * @param typeInput type input + */ + public SystemParticipantTypedEntityData( + SystemParticipantEntityData systemParticipantEntityData, T typeInput) { + super(systemParticipantEntityData, systemParticipantEntityData.getEm().orElse(null)); + this.typeInput = typeInput; + } + + public T getTypeInput() { + return typeInput; + } + @Override public String toString() { return "SystemParticipantTypedEntityData{" + "typeInput=" + typeInput.getUuid() + + ", em=" + + getEm().map(EmInput::toString).orElse("") + ", node=" + getNode().getUuid() + ", operatorInput=" @@ -93,8 +119,4 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(super.hashCode(), getTypeInput()); } - - public T getTypeInput() { - return typeInput; - } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java index 83bbbdd43..17b780c33 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.WecInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.WecTypeInput; @@ -37,9 +38,10 @@ protected WecInput buildModel( OperatorInput operator, OperationTime operationTime) { WecTypeInput typeInput = data.getTypeInput(); + EmInput em = data.getEm().orElse(null); final boolean marketReaction = data.getBoolean(MARKET_REACTION); return new WecInput( - uuid, id, operator, operationTime, node, qCharacteristics, typeInput, marketReaction); + uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput, marketReaction); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 51e120b1f..882704450 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -8,10 +8,13 @@ import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.container.EnergyManagementUnits; import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.utils.Try; +import java.util.Map; import java.util.Set; +import java.util.UUID; +import java.util.function.Function; +import java.util.stream.Collectors; public class EnergyManagementSource extends EntitySource { @@ -20,8 +23,8 @@ public class EnergyManagementSource extends EntitySource { private final EmInputFactory emInputFactory; public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { + super(dataSource); this.typeSource = typeSource; - this.dataSource = dataSource; this.emInputFactory = new EmInputFactory(); } @@ -33,9 +36,9 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. * - * @return a set of object and uuid unique {@link EmInput} entities + * @return a map of uuid to {@link EmInput} entities */ - public EnergyManagementUnits getEmUnits() throws SourceException { + public Map getEmUnits() throws SourceException { Set operators = typeSource.getOperators(); return getEmUnits(operators); } @@ -55,14 +58,14 @@ public EnergyManagementUnits getEmUnits() throws SourceException { * * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for * the returning instances - * @return a set of object and uuid unique {@link EmInput} entities + * @return a map of uuid to {@link EmInput} entities */ - public EnergyManagementUnits getEmUnits(Set operators) throws SourceException { - Set emUnits = - Try.scanCollection( - buildAssetInputEntities(EmInput.class, emInputFactory, operators), EmInput.class) - .transformF(SourceException::new) - .getOrThrow(); - return new EnergyManagementUnits(emUnits); + public Map getEmUnits(Set operators) throws SourceException { + return Try.scanCollection( + buildAssetInputEntities(EmInput.class, emInputFactory, operators), EmInput.class) + .transformF(SourceException::new) + .getOrThrow() + .stream() + .collect(Collectors.toMap(EmInput::getUuid, Function.identity())); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 550c76111..f505ed4b5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -35,7 +35,11 @@ public abstract class EntitySource { protected static final String TYPE = "type"; protected static final String FIELDS_TO_VALUES_MAP = "fieldsToValuesMap"; - DataSource dataSource; + protected final DataSource dataSource; + + protected EntitySource(DataSource dataSource) { + this.dataSource = dataSource; + } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @@ -109,8 +113,7 @@ protected Try getAssetType( Optional.ofNullable(fieldsToAttributes.get(TYPE)) .flatMap(typeUuid -> findFirstEntityByUuid(UUID.fromString(typeUuid), types)); - // if the type is not present we return an empty element and - // log a warning + // if the type is not present we return a failure if (assetType.isEmpty()) { String skippingMessage = buildSkippingMessage( @@ -239,12 +242,7 @@ protected Stream> nodeAssetInputE // remove fields that are passed as objects to constructor fieldsToAttributes.keySet().remove(NODE); - return new Success<>( - new NodeAssetInputEntityData( - fieldsToAttributes, - assetInputEntityData.getTargetClass(), - assetInputEntityData.getOperatorInput(), - node.get())); + return new Success<>(new NodeAssetInputEntityData(assetInputEntityData, node.get())); }); } @@ -313,6 +311,17 @@ protected Stream> assetInputEnti return assetInputEntityDataStream(entityClass, operators).map(factory::get); } + protected Stream> nodeAssetEntityStream( + Class entityClass, + EntityFactory factory, + Collection nodes, + Collection operators) { + return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) + .map(factory::get); + } + + // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + /** * Returns a stream of {@link Try} entities that can be build by using {@link * NodeAssetInputEntityData} and their corresponding factory. @@ -326,17 +335,6 @@ protected Stream> assetInputEnti * @param Type of the {@link AssetInput} to expect * @return stream of tries of the entities that has been built by the factory */ - protected Stream> nodeAssetEntityStream( - Class entityClass, - EntityFactory factory, - Collection nodes, - Collection operators) { - return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) - .map(factory::get); - } - - // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - public Set> buildNodeAssetEntities( Class entityClass, EntityFactory factory, diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 2ecd52c59..904b33f3a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -42,9 +42,9 @@ public class GraphicSource extends EntitySource { private final NodeGraphicInputFactory nodeGraphicInputFactory; public GraphicSource(TypeSource typeSource, RawGridSource rawGridSource, DataSource dataSource) { + super(dataSource); this.typeSource = typeSource; this.rawGridSource = rawGridSource; - this.dataSource = dataSource; this.lineGraphicInputFactory = new LineGraphicInputFactory(); this.nodeGraphicInputFactory = new NodeGraphicInputFactory(); diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index 70c228c96..ba90ea3ff 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -57,8 +57,8 @@ public class RawGridSource extends EntitySource { private final MeasurementUnitInputFactory measurementUnitInputFactory; public RawGridSource(TypeSource typeSource, DataSource dataSource) { + super(dataSource); this.typeSource = typeSource; - this.dataSource = dataSource; // init factories this.nodeInputFactory = new NodeInputFactory(); diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 53b727bd8..76e1713a8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -38,6 +38,7 @@ public class SystemParticipantSource extends EntitySource { private final TypeSource typeSource; private final RawGridSource rawGridSource; private final ThermalSource thermalSource; + private final EnergyManagementSource energyManagementSource; // factories private final BmInputFactory bmInputFactory; @@ -55,12 +56,14 @@ public SystemParticipantSource( TypeSource typeSource, ThermalSource thermalSource, RawGridSource rawGridSource, + EnergyManagementSource energyManagementSource, DataSource dataSource) { + super(dataSource); this.typeSource = typeSource; this.rawGridSource = rawGridSource; this.thermalSource = thermalSource; - this.dataSource = dataSource; + this.energyManagementSource = energyManagementSource; // init factories this.bmInputFactory = new BmInputFactory(); @@ -104,6 +107,7 @@ public SystemParticipants getSystemParticipants() throws SourceException { Set hpTypes = typeSource.getHpTypes(); Set storageTypes = typeSource.getStorageTypes(); Set wecTypes = typeSource.getWecTypes(); + Map emUnits = energyManagementSource.getEmUnits(); /// go on with the thermal assets Set thermalBuses = thermalSource.getThermalBuses(operators); @@ -127,7 +131,7 @@ public SystemParticipants getSystemParticipants() throws SourceException { Try, SourceException> evs = Try.of(() -> getEvs(nodes, operators, evTypes), SourceException.class); Try, SourceException> evcs = - Try.of(() -> getEvCS(nodes, operators), SourceException.class); + Try.of(() -> getEvcs(nodes, operators), SourceException.class); Try, SourceException> chpInputs = Try.of( () -> getChpPlants(nodes, operators, chpTypes, thermalBuses, thermalStorages), @@ -307,9 +311,9 @@ public Set getLoads(Set nodes, Set operator * * @return a set of object and uuid unique {@link EvcsInput} entities */ - public Set getEvCS() throws SourceException { + public Set getEvcs() throws SourceException { Set operators = typeSource.getOperators(); - return getEvCS(rawGridSource.getNodes(operators), operators); + return getEvcs(rawGridSource.getNodes(operators), operators); } /** @@ -318,7 +322,7 @@ public Set getEvCS() throws SourceException { * EvcsInput} which has to be checked manually, as {@link EvcsInput#equals(Object)} is NOT * restricted on the uuid of {@link EvcsInput}. * - *

In contrast to {@link #getEvCS()} this method provides the ability to pass in an already + *

In contrast to {@link #getEvcs()} this method provides the ability to pass in an already * existing set of {@link NodeInput} and {@link OperatorInput} entities, the {@link EvcsInput} * instances depend on. Doing so, already loaded nodes can be recycled to improve performance and * prevent unnecessary loading operations. @@ -331,7 +335,7 @@ public Set getEvCS() throws SourceException { * @param nodes a set of object and uuid unique {@link NodeInput} entities * @return a set of object and uuid unique {@link EvcsInput} entities */ - public Set getEvCS(Set nodes, Set operators) + public Set getEvcs(Set nodes, Set operators) throws SourceException { return Try.scanCollection( buildNodeAssetEntities(EvcsInput.class, evcsInputFactory, nodes, operators), @@ -550,8 +554,8 @@ public Set getChpPlants( Set thermalStorages) throws SourceException { return Try.scanCollection( - buildChpInputEntities( - chpInputFactory, nodes, operators, types, thermalBuses, thermalStorages), + chpInputStream(chpInputFactory, nodes, operators, types, thermalBuses, thermalStorages) + .collect(Collectors.toSet()), ChpInput.class) .transformF(SourceException::new) .getOrThrow(); @@ -583,7 +587,8 @@ public Set getHeatPumps( Set thermalBuses) throws SourceException { return Try.scanCollection( - buildHpInputEntities(hpInputFactory, nodes, operators, types, thermalBuses), + hpInputStream(hpInputFactory, nodes, operators, types, thermalBuses) + .collect(Collectors.toSet()), HpInput.class) .transformF(SourceException::new) .getOrThrow(); @@ -591,40 +596,6 @@ public Set getHeatPumps( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - private - Set> buildTypedSystemParticipantEntities( - Class entityClass, - EntityFactory> factory, - Collection nodes, - Collection operators, - Collection types) { - return typedSystemParticipantEntityStream(entityClass, factory, nodes, operators, types) - .collect(Collectors.toSet()); - } - - private Set> buildChpInputEntities( - ChpInputFactory factory, - Collection nodes, - Collection operators, - Collection chpTypes, - Collection thermalBuses, - Collection thermalStorages) { - return chpInputStream(factory, nodes, operators, chpTypes, thermalBuses, thermalStorages) - .collect(Collectors.toSet()); - } - - private Set> buildHpInputEntities( - HpInputFactory factory, - Collection nodes, - Collection operators, - Collection types, - Collection thermalBuses) { - return hpInputStream(factory, nodes, operators, types, thermalBuses) - .collect(Collectors.toSet()); - } - - // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - /** * Constructs a stream of {@link SystemParticipantInput} entities wrapped in {@link Try}'s. * @@ -633,25 +604,28 @@ private Set> buildHpInputEntities( * @param nodes the nodes that should be considered for these entities * @param operators the operators that should be considered for these entities * @param types the types that should be considered for these entities - * @param the type of the resulting entity - * @param the type of the type model of the resulting entity + * @param the type of the resulting entity + * @param the type of the type model of the resulting entity * @return a stream of tries being either empty or holding an instance of a {@link * SystemParticipantInput} of the requested entity class */ - private - Stream> typedSystemParticipantEntityStream( - Class entityClass, - EntityFactory> factory, + private + Set> buildTypedSystemParticipantEntities( + Class entityClass, + EntityFactory> factory, Collection nodes, Collection operators, - Collection types) { + Collection types) { return buildTypedSystemParticipantEntityData( nodeAssetInputEntityDataStream( assetInputEntityDataStream(entityClass, operators), nodes), types) - .map(factory::get); + .map(factory::get) + .collect(Collectors.toSet()); } + // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + private Stream> chpInputStream( ChpInputFactory factory, Collection nodes, @@ -660,7 +634,7 @@ private Stream> chpInputStream( Collection thermalBuses, Collection thermalStorages) { return buildChpEntityData( - buildTypedEntityData( + buildTypedSystemParticipantEntityData( nodeAssetInputEntityDataStream( assetInputEntityDataStream(ChpInput.class, operators), nodes), types), @@ -669,122 +643,95 @@ private Stream> chpInputStream( .map(factory::get); } - private Stream> hpInputStream( - HpInputFactory factory, - Collection nodes, - Collection operators, - Collection types, + private Stream> buildChpEntityData( + Stream, SourceException>> + typedEntityDataStream, + Collection thermalStorages, Collection thermalBuses) { - return buildHpEntityData( - buildTypedEntityData( - nodeAssetInputEntityDataStream( - assetInputEntityDataStream(HpInput.class, operators), nodes), - types), - thermalBuses) - .map(factory::get); - } - /** - * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of - * {@link SystemParticipantTypeInput} based on the provided collection of types and the fields to - * values mapping that inside the already provided {@link NodeAssetInputEntityData} instance. - * - * @param nodeAssetEntityDataStream the data stream of {@link NodeAssetInputEntityData} {@link - * Try} objects - * @param types the types that should be used for enrichment and to build {@link - * SystemParticipantTypedEntityData} from - * @param the type of the provided entity types as well as the type parameter of the resulting - * {@link SystemParticipantTypedEntityData} - * @return a stream of tries of {@link SystemParticipantTypedEntityData} instances - */ - private - Stream, SourceException>> - buildTypedSystemParticipantEntityData( - Stream> nodeAssetEntityDataStream, - Collection types) { - return nodeAssetEntityDataStream + return typedEntityDataStream .parallel() .map( - nodeAssetInputEntityDataOpt -> - nodeAssetInputEntityDataOpt.flatMap( - nodeAssetInputEntityData -> - buildTypedSystemParticipantEntityData(nodeAssetInputEntityData, types))); + typedEntityDataOpt -> + typedEntityDataOpt.flatMap( + typedEntityData -> + buildChpEntityData(typedEntityData, thermalStorages, thermalBuses))); } - protected - Try, SourceException> - buildTypedSystemParticipantEntityData( - NodeAssetInputEntityData nodeAssetInputEntityData, Collection types) { - return getAssetType( - types, - nodeAssetInputEntityData.getFieldsToValues(), - nodeAssetInputEntityData.getClass().getSimpleName()) - .map( - // if the optional is present, transform and return to the data, - // otherwise return an empty optional - assetType -> { - Map fieldsToAttributes = nodeAssetInputEntityData.getFieldsToValues(); + private Try buildChpEntityData( + SystemParticipantTypedEntityData typedEntityData, + Collection thermalStorages, + Collection thermalBuses) { - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(TYPE); + // get the raw data + Map fieldsToAttributes = typedEntityData.getFieldsToValues(); - return new SystemParticipantTypedEntityData<>( - fieldsToAttributes, - nodeAssetInputEntityData.getTargetClass(), - nodeAssetInputEntityData.getOperatorInput(), - nodeAssetInputEntityData.getNode(), - assetType); - }); - } + // get the thermal storage input for this chp unit + Optional thermalStorage = + Optional.ofNullable(fieldsToAttributes.get(THERMAL_STORAGE)) + .flatMap( + thermalStorageUuid -> + findFirstEntityByUuid(UUID.fromString(thermalStorageUuid), thermalStorages)); - /** - * Enriches a given stream of {@link NodeAssetInputEntityData} tries with a type of {@link - * SystemParticipantTypeInput} based on the provided collection of types and the fields to values - * mapping that inside the already provided {@link NodeAssetInputEntityData} instance. - * - * @param nodeAssetEntityDataStream the data stream of {@link NodeAssetInputEntityData} tries - * @param types the types that should be used for enrichment and to build {@link - * SystemParticipantTypedEntityData} from - * @param the type of the provided entity types as well as the type parameter of the resulting - * {@link SystemParticipantTypedEntityData} - * @return a stream of tries of {@link SystemParticipantTypedEntityData} instances - */ - private - Stream, SourceException>> buildTypedEntityData( - Stream> nodeAssetEntityDataStream, - Collection types) { - return nodeAssetEntityDataStream - .parallel() - .map( - nodeAssetInputEntityDataOpt -> - nodeAssetInputEntityDataOpt.flatMap( - nodeAssetInputEntityData -> - buildTypedEntityData(nodeAssetInputEntityData, types))); - } + // get the thermal bus input for this chp unit + Optional thermalBus = + Optional.ofNullable(fieldsToAttributes.get("thermalBus")) + .flatMap( + thermalBusUuid -> + findFirstEntityByUuid(UUID.fromString(thermalBusUuid), thermalBuses)); - protected - Try, SourceException> buildTypedEntityData( - NodeAssetInputEntityData nodeAssetInputEntityData, Collection types) { - return getAssetType( - types, - nodeAssetInputEntityData.getFieldsToValues(), - nodeAssetInputEntityData.getClass().getSimpleName()) - .map( - // if the optional is present, transform and return to the data, - // otherwise return an empty optional - assetType -> { - Map fieldsToAttributes = nodeAssetInputEntityData.getFieldsToValues(); + // if the thermal storage or the thermal bus are not present we return an + // empty element and log a warning + if (thermalStorage.isEmpty() || thermalBus.isEmpty()) { + StringBuilder sB = new StringBuilder(); + if (thermalStorage.isEmpty()) { + sB.append("thermalStorage: ") + .append(safeMapGet(fieldsToAttributes, THERMAL_STORAGE, FIELDS_TO_VALUES_MAP)); + } + if (thermalBus.isEmpty()) { + sB.append("\nthermalBus: ") + .append(safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); + } - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(TYPE); + String skippingMessage = + buildSkippingMessage( + typedEntityData.getTargetClass().getSimpleName(), + safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), + safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), + sB.toString()); + return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); + } - return new SystemParticipantTypedEntityData<>( - fieldsToAttributes, - nodeAssetInputEntityData.getTargetClass(), - nodeAssetInputEntityData.getOperatorInput(), - nodeAssetInputEntityData.getNode(), - assetType); - }); + // remove fields that are passed as objects to constructor + fieldsToAttributes + .keySet() + .removeAll(new HashSet<>(Arrays.asList("thermalBus", "thermalStorage"))); + + return new Success<>( + new ChpInputEntityData( + fieldsToAttributes, + typedEntityData.getOperatorInput(), + typedEntityData.getNode(), + typedEntityData.getTypeInput(), + thermalBus.get(), + thermalStorage.get())); + } + + private Stream> hpInputStream( + HpInputFactory factory, + Collection nodes, + Collection operators, + Collection types, + Collection thermalBuses) { + return buildHpEntityData( + buildTypedSystemParticipantEntityData( + buildSystemParticipantEntityData( + nodeAssetInputEntityDataStream( + assetInputEntityDataStream(HpInput.class, operators), nodes), + ems), + types), + thermalBuses) + .map(factory::get); } /** @@ -855,77 +802,85 @@ protected Try buildHpEntityData( return new Success<>(hpInputEntityDataOpt.get()); } - private Stream> buildChpEntityData( - Stream, SourceException>> - typedEntityDataStream, - Collection thermalStorages, - Collection thermalBuses) { - - return typedEntityDataStream + /** + * Enriches a given stream of {@link SystemParticipantEntityData} {@link Try} objects with a type + * of {@link SystemParticipantTypeInput} based on the provided collection of types and the fields + * to values mapping that inside the already provided {@link SystemParticipantEntityData} + * instance. + * + * @param systemParticipantEntityDataStream the data stream of {@link SystemParticipantEntityData} + * {@link Try} objects + * @param types the types that should be used for enrichment and to build {@link + * SystemParticipantTypedEntityData} from + * @param the type of the provided entity types as well as the type parameter of the resulting + * {@link SystemParticipantTypedEntityData} + * @return a stream of tries of {@link SystemParticipantTypedEntityData} instances + */ + private + Stream, SourceException>> + buildTypedSystemParticipantEntityData( + Stream> + systemParticipantEntityDataStream, + Collection types) { + return systemParticipantEntityDataStream .parallel() .map( - typedEntityDataOpt -> - typedEntityDataOpt.flatMap( - typedEntityData -> - buildChpEntityData(typedEntityData, thermalStorages, thermalBuses))); + participantEntityDataTry -> + participantEntityDataTry.flatMap( + participantEntityData -> + buildTypedSystemParticipantEntityData(participantEntityData, types))); } - protected Try buildChpEntityData( - SystemParticipantTypedEntityData typedEntityData, - Collection thermalStorages, - Collection thermalBuses) { - - // get the raw data - Map fieldsToAttributes = typedEntityData.getFieldsToValues(); - - // get the thermal storage input for this chp unit - Optional thermalStorage = - Optional.ofNullable(fieldsToAttributes.get(THERMAL_STORAGE)) - .flatMap( - thermalStorageUuid -> - findFirstEntityByUuid(UUID.fromString(thermalStorageUuid), thermalStorages)); - - // get the thermal bus input for this chp unit - Optional thermalBus = - Optional.ofNullable(fieldsToAttributes.get("thermalBus")) - .flatMap( - thermalBusUuid -> - findFirstEntityByUuid(UUID.fromString(thermalBusUuid), thermalBuses)); - - // if the thermal storage or the thermal bus are not present we return an - // empty element and log a warning - if (thermalStorage.isEmpty() || thermalBus.isEmpty()) { - StringBuilder sB = new StringBuilder(); - if (thermalStorage.isEmpty()) { - sB.append("thermalStorage: ") - .append(safeMapGet(fieldsToAttributes, THERMAL_STORAGE, FIELDS_TO_VALUES_MAP)); - } - if (thermalBus.isEmpty()) { - sB.append("\nthermalBus: ") - .append(safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); - } + private + Try, SourceException> + buildTypedSystemParticipantEntityData( + SystemParticipantEntityData systemParticipantEntityDataStream, Collection types) { + return getAssetType( + types, + systemParticipantEntityDataStream.getFieldsToValues(), + systemParticipantEntityDataStream.getClass().getSimpleName()) + .map( + // if the operation was successful, transform and return to the data + assetType -> { + Map fieldsToAttributes = + systemParticipantEntityDataStream.getFieldsToValues(); - String skippingMessage = - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - sB.toString()); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } + // remove fields that are passed as objects to constructor + fieldsToAttributes.keySet().remove(TYPE); - // remove fields that are passed as objects to constructor - fieldsToAttributes - .keySet() - .removeAll(new HashSet<>(Arrays.asList("thermalBus", "thermalStorage"))); + return new SystemParticipantTypedEntityData<>( + fieldsToAttributes, + systemParticipantEntityDataStream.getTargetClass(), + systemParticipantEntityDataStream.getOperatorInput(), + systemParticipantEntityDataStream.getNode(), + systemParticipantEntityDataStream.getEm().orElse(null), + assetType); + }); + } - return new Success<>( - new ChpInputEntityData( - fieldsToAttributes, - typedEntityData.getOperatorInput(), - typedEntityData.getNode(), - typedEntityData.getTypeInput(), - thermalBus.get(), - thermalStorage.get())); + /** + * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of + * {@link EmInput} based on the provided collection of EMs and the fields to + * values mapping that inside the already provided {@link NodeAssetInputEntityData} instance. + * + * @param nodeAssetEntityDataStream the data stream of {@link NodeAssetInputEntityData} {@link + * Try} objects + * @param ems the energy management units that should be used for enrichment and to build {@link + * SystemParticipantEntityData} from + * @return a stream of tries of {@link SystemParticipantEntityData} instances + */ + private + Stream> + buildSystemParticipantEntityData( + Stream> nodeAssetEntityDataStream, + Map ems) { + return nodeAssetEntityDataStream + .parallel() + .map( + nodeAssetInputEntityDataOpt -> + nodeAssetInputEntityDataOpt.flatMap( + nodeAssetInputEntityData -> + SystemParticipantEntityData.build(nodeAssetInputEntityData, ems))); } + } diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 48384565f..d83ed8c42 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -38,8 +38,8 @@ public class ThermalSource extends EntitySource { private final ThermalHouseInputFactory thermalHouseInputFactory; public ThermalSource(TypeSource typeSource, DataSource dataSource) { + super(dataSource); this.typeSource = typeSource; - this.dataSource = dataSource; this.thermalBusInputFactory = new ThermalBusInputFactory(); this.cylindricalStorageInputFactory = new CylindricalStorageInputFactory(); diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index a7412cedc..501dfac15 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -36,7 +36,7 @@ public class TypeSource extends EntitySource { private final SystemParticipantTypeInputFactory systemParticipantTypeInputFactory; public TypeSource(DataSource dataSource) { - this.dataSource = dataSource; + super(dataSource); this.operatorInputFactory = new OperatorInputFactory(); this.transformer2WTypeInputFactory = new Transformer2WTypeInputFactory(); diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java deleted file mode 100644 index 4142a745d..000000000 --- a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models.input.container; - -import edu.ie3.datamodel.models.input.system.EmInput; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** Represents the accumulation of energy management units */ -public class EnergyManagementUnits implements InputContainer { - - protected final Map emUnits; - - public EnergyManagementUnits(Set emUnits) { - this.emUnits = - emUnits.stream().collect(Collectors.toMap(EmInput::getUuid, Function.identity())); - } - - /** - * Combine different already existing containers - * - * @param emUnits already existing containers - */ - public EnergyManagementUnits(Collection emUnits) { - this.emUnits = - emUnits.stream() - .flatMap(units -> units.emUnits.entrySet().stream()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - public Set getEmUnits() { - return new HashSet<>(emUnits.values()); - } - - @Override - public List allEntitiesAsList() { - return emUnits.values().stream().toList(); - } - - // TODO useful once #957 is implemented - public Map getEmUnitsMap() { - return emUnits; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof EnergyManagementUnits that)) return false; - return Objects.equals(emUnits, that.emUnits); - } - - @Override - public int hashCode() { - return Objects.hash(emUnits); - } - - @Override - public EnergyManagementUnitsCopyBuilder copy() { - return new EnergyManagementUnitsCopyBuilder(this); - } - - /** - * A builder pattern based approach to create copies of {@link EnergyManagementUnits} containers - * with altered field values. For detailed field descriptions refer to java docs of {@link - * EnergyManagementUnits} - */ - public static class EnergyManagementUnitsCopyBuilder - implements InputContainerCopyBuilder { - protected Set emUnits; - - /** - * Constructor for {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} - * - * @param energyManagementUnits instance of {@link EnergyManagementUnits} - */ - protected EnergyManagementUnitsCopyBuilder(EnergyManagementUnits energyManagementUnits) { - this.emUnits = energyManagementUnits.getEmUnits(); - } - - /** - * Method to alter the {@link EmInput}s - * - * @param emUnits set of altered {@link EmInput}s - * @return this instance of {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} - */ - public EnergyManagementUnits.EnergyManagementUnitsCopyBuilder emUnits(Set emUnits) { - this.emUnits = emUnits; - return this; - } - - @Override - public EnergyManagementUnits build() { - return new EnergyManagementUnits(emUnits); - } - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java index ec6003abe..99cb8a9bf 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java @@ -39,6 +39,7 @@ public class BmInput extends SystemParticipantInput implements HasType { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of BM * @param marketReaction Is this asset market oriented? * @param costControlled Does this plant increase the output power if the revenues exceed the @@ -52,11 +53,12 @@ public BmInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, BmTypeInput type, boolean marketReaction, boolean costControlled, ComparableQuantity feedInTariff) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; this.marketReaction = marketReaction; this.costControlled = costControlled; @@ -70,6 +72,7 @@ public BmInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of BM * @param marketReaction Is this asset market oriented? * @param costControlled Does this plant increase the output power if the revenues exceed the @@ -81,11 +84,12 @@ public BmInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + UUID em, BmTypeInput type, boolean marketReaction, boolean costControlled, ComparableQuantity feedInTariff) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.type = type; this.marketReaction = marketReaction; this.costControlled = costControlled; @@ -144,8 +148,9 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' - + "type=" + + "', em=" + + getEm() + + ", type=" + type.getUuid() + ", marketReaction=" + marketReaction @@ -208,6 +213,7 @@ public BmInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), type, marketReaction, costControlled, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java index 422817ecb..16b5c183f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java @@ -41,6 +41,7 @@ public class ChpInput extends SystemParticipantInput * @param thermalBus The thermal bus, this model is connected to (normally equal to the thermal * bus of the provided thermal storage!) * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of CHP * @param thermalStorage Thermal storage model * @param marketReaction Is this asset market oriented? @@ -53,10 +54,11 @@ public ChpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, + UUID em, ChpTypeInput type, ThermalStorageInput thermalStorage, boolean marketReaction) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.thermalBus = thermalBus; this.type = type; this.thermalStorage = thermalStorage; @@ -72,6 +74,7 @@ public ChpInput( * @param thermalBus The thermal bus, this model is connected to (normally equal to the thermal * bus of the provided thermal storage!) * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of CHP * @param thermalStorage Thermal storage model * @param marketReaction Is this asset market oriented? @@ -82,10 +85,11 @@ public ChpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, + UUID em, ChpTypeInput type, ThermalStorageInput thermalStorage, boolean marketReaction) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.thermalBus = thermalBus; this.type = type; this.thermalStorage = thermalStorage; @@ -145,7 +149,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", thermalBus=" + thermalBus.getUuid() + ", type=" @@ -190,6 +195,7 @@ public ChpInput build() { getNode(), thermalBus, getqCharacteristics(), + getEm(), type, thermalStorage, marketReaction); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java index b58a054ef..a169c6c1b 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java @@ -16,6 +16,12 @@ public class EmInput extends AssetInput { /** Reference to the control strategy to be used for this model */ private final String controlStrategy; + /** + * Optional UUID of the parent {@link EmInput} that is controlling this em unit. If null, this em + * unit is not em-controlled. + */ + private final UUID parentEm; + /** * Constructor for an operated energy management system * @@ -24,15 +30,18 @@ public class EmInput extends AssetInput { * @param operator of the asset * @param operationTime time for which the entity is operated * @param emControlStrategy the control strategy + * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. */ public EmInput( UUID uuid, String id, OperatorInput operator, OperationTime operationTime, - String emControlStrategy) { + String emControlStrategy, + UUID parentEm) { super(uuid, id, operator, operationTime); this.controlStrategy = emControlStrategy; + this.parentEm = parentEm; } /** @@ -41,16 +50,22 @@ public EmInput( * @param uuid of the input entity * @param id of the asset * @param emControlStrategy the control strategy + * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. */ - public EmInput(UUID uuid, String id, String emControlStrategy) { + public EmInput(UUID uuid, String id, String emControlStrategy, UUID parentEm) { super(uuid, id); this.controlStrategy = emControlStrategy; + this.parentEm = parentEm; } public String getControlStrategy() { return controlStrategy; } + public UUID getParentEm() { + return parentEm; + } + @Override public EmInputCopyBuilder copy() { return new EmInputCopyBuilder(this); @@ -82,6 +97,8 @@ public String toString() { + getOperationTime() + ", controlStrategy=" + getControlStrategy() + + ", parentEm=" + + getParentEm() + '}'; } @@ -89,6 +106,8 @@ public static class EmInputCopyBuilder extends AssetInputCopyBuilder csvSystemParticipantSource.getEvCS(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(nodes as Set, operators as Set), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy index 612dd50ad..e75cf6526 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/SystemParticipantsTest.groovy @@ -49,7 +49,7 @@ class SystemParticipantsTest extends Specification { def modifiedBmInput = SystemParticipantTestData.bmInput.copy().id("modified").build() def modifiedChpInput = SystemParticipantTestData.chpInput.copy().id("modified").build() - def modifiedEvCSInput = SystemParticipantTestData.evcsInput.copy().id("modified").build() + def modifiedEvcsInput = SystemParticipantTestData.evcsInput.copy().id("modified").build() def modifiedEvInput = SystemParticipantTestData.evInput.copy().id("modified").build() def modifiedFixedFeedInInput = SystemParticipantTestData.fixedFeedInInput.copy().id("modified").build() def modifiedHpInput = SystemParticipantTestData.hpInput.copy().id("modified").build() @@ -62,7 +62,7 @@ class SystemParticipantsTest extends Specification { def modifiedSystemParticipants = systemParticipants.copy() .bmPlants(Set.of(modifiedBmInput)) .chpPlants(Set.of(modifiedChpInput)) - .evcs(Set.of(modifiedEvCSInput)) + .evcs(Set.of(modifiedEvcsInput)) .evs(Set.of(modifiedEvInput)) .fixedFeedIn(Set.of(modifiedFixedFeedInInput)) .heatPumps(Set.of(modifiedHpInput)) @@ -75,7 +75,7 @@ class SystemParticipantsTest extends Specification { then: modifiedSystemParticipants.bmPlants.first() == modifiedBmInput modifiedSystemParticipants.chpPlants.first() == modifiedChpInput - modifiedSystemParticipants.evcs.first() == modifiedEvCSInput + modifiedSystemParticipants.evcs.first() == modifiedEvcsInput modifiedSystemParticipants.evs.first() == modifiedEvInput modifiedSystemParticipants.fixedFeedIns.first() == modifiedFixedFeedInInput modifiedSystemParticipants.heatPumps.first() == modifiedHpInput diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy index d27e95008..65dd93c14 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy @@ -12,7 +12,7 @@ import spock.lang.Specification class EvcsInputTest extends Specification { - def "A EvCsInput copy method should work as expected"() { + def "A EvcsInput copy method should work as expected"() { given: def evcsInput = SystemParticipantTestData.evcsInput diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy index 9aee7acf6..e8f27b4df 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy @@ -13,7 +13,7 @@ import java.time.ZonedDateTime class InvalidSystemParticipantInput extends SystemParticipantInput { InvalidSystemParticipantInput(NodeInput node) { - super(UUID.randomUUID(), "invalid_system_participant", node, CosPhiFixed.CONSTANT_CHARACTERISTIC) + super(UUID.randomUUID(), "invalid_system_participant", node, CosPhiFixed.CONSTANT_CHARACTERISTIC, null) } @Override diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy index b747ca5c3..0fae3df5c 100644 --- a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy @@ -15,13 +15,16 @@ class EnergyManagementTestData { SystemParticipantTestData.pvInput.uuid } public static final String emControlStrategy = "self_optimization" + public static final UUID parentEm = UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd") + public static final emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", SystemParticipantTestData.operator, SystemParticipantTestData.operationTime, - emControlStrategy + emControlStrategy, + parentEm ) public static EnergyManagementUnits emptyEnergyManagementUnits = diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index 8db7f21cf..a36f165f2 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -40,6 +40,7 @@ class SystemParticipantTestData { static final OperatorInput operator = new OperatorInput( UUID.fromString("8f9682df-0744-4b58-a122-f0dc730f6510"), "TestOperator") public static final NodeInput participantNode = GridTestData.nodeA + static final UUID em = UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd") // general type data static final CosPhiFixed cosPhiFixed = new CosPhiFixed("cosPhiFixed:{(0.0,0.95)}") @@ -64,6 +65,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + em, sRated, cosPhiRated ) @@ -81,6 +83,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + em, albedo, azimuth, etaConv, @@ -117,6 +120,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiP, + em, wecType, false ) @@ -170,6 +174,7 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, + em, chpTypeInput, thermalStorage, false @@ -196,6 +201,7 @@ class SystemParticipantTestData { operationTime, participantNode, qV, + em, bmTypeInput, false, false, @@ -221,6 +227,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + em, evTypeInput ) @@ -234,6 +241,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + em, standardLoadProfile, false, eConsAnnual, @@ -267,10 +275,10 @@ class SystemParticipantTestData { UUID.fromString("06b58276-8350-40fb-86c0-2414aa4a0452"), "test_storageInput", operator, - operationTime - , + operationTime, participantNode, cosPhiFixed, + em, storageTypeInput ) @@ -293,6 +301,7 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, + em, hpTypeInput ) @@ -305,6 +314,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + em, ChargingPointTypeUtils.HouseholdSocket, 4, cosPhiRated, From 71994ad73c2fb3da96263e23d293b209b0af0632 Mon Sep 17 00:00:00 2001 From: danielfeismann Date: Fri, 15 Dec 2023 09:49:26 +0100 Subject: [PATCH 044/228] changed vRated and order --- docs/readthedocs/models/input/grid/line.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 7c8facdf7..a7d23fe29 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -66,11 +66,11 @@ Some standard overhead lines. | 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 | 1.80642 | 0.0 | 650.0 | LineType_7 | 0.16 | 220.0 | 0.64 | simBench | | bdc83a85-c796-4bcb-8b79-8988dc2804f8 | 5.41925 | 0.0 | 1950.0 | LineType_8 | 0.053333 | 220.0 | 0.213333 | simBench | | 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 | 2.8274 | 0.0 | 680.0 | Al/St_265/35 | 0.1095 | 110.0 | 0.296 | simBench | -| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 20.0 | 1.8769 | 20.0 | 0.409 | simBench | -| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 20.0 | 1.2012 | 20.0 | 0.394 | simBench | | 5b542a50-b0c2-4497-ba90-b2b31aafaa0b | 2.87456 | 0.0 | 170.0 | 34-AL1/6-ST1A 20.0 | 0.8342 | 20.0 | 0.382 | simBench | | d594cd67-4459-44bc-9594-db710372db71 | 2.98451 | 0.0 | 210.0 | 48-AL1/8-ST1A 20.0 | 0.5939 | 20.0 | 0.372 | simBench | | 305e60ad-cfd2-4127-9d83-8d9b21942d93 | 3.04734 | 0.0 | 290.0 | 70-AL1/11-ST1A 20.0 | 0.4132 | 20.0 | 0.36 | simBench | +| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 0.4 | 1.8769 | 0.4 | 0.409 | simBench | +| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 0.4 | 1.2012 | 0.4 | 0.394 | simBench | ### Cables From ee26d1f61b9aa11a4cb8f177b3db745523eb7316 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 21:14:11 +0000 Subject: [PATCH 045/228] Bump org.influxdb:influxdb-java from 2.23 to 2.24 (#963) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9fd992de8..5c536fe01 100644 --- a/build.gradle +++ b/build.gradle @@ -89,7 +89,7 @@ dependencies { implementation 'org.apache.logging.log4j:log4j-slf4j-impl' // log4j -> slf4j // Databases - implementation 'org.influxdb:influxdb-java:2.23' + implementation 'org.influxdb:influxdb-java:2.24' implementation 'com.couchbase.client:java-client:3.5.1' runtimeOnly 'org.postgresql:postgresql:42.7.1' // postgresql jdbc driver required during runtime From 46c19fb2923034a4c0659e0f2aa1bd4d648dc65a Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 15 Dec 2023 22:32:01 +0100 Subject: [PATCH 046/228] Compiles --- .../input/participant/BmInputFactory.java | 3 +- .../input/participant/ChpInputEntityData.java | 7 +- .../input/participant/ChpInputFactory.java | 3 +- .../input/participant/EvInputFactory.java | 4 +- .../input/participant/EvcsInputFactory.java | 3 +- .../participant/FixedFeedInInputFactory.java | 8 +- .../input/participant/HpInputEntityData.java | 7 +- .../input/participant/HpInputFactory.java | 4 +- .../input/participant/LoadInputFactory.java | 3 +- .../input/participant/PvInputFactory.java | 3 +- .../participant/StorageInputFactory.java | 3 +- .../SystemParticipantEntityData.java | 39 -- .../ie3/datamodel/io/source/EntitySource.java | 126 +++--- .../datamodel/io/source/RawGridSource.java | 2 +- .../io/source/ResultEntitySource.java | 83 ++-- .../io/source/SystemParticipantSource.java | 397 +++++++++--------- .../ie3/datamodel/io/source/TypeSource.java | 94 +++-- .../csv/CsvJointGridContainerSource.java | 7 +- .../models/input/container/GridContainer.java | 30 +- .../input/container/JointGridContainer.java | 9 +- .../input/container/SubGridContainer.java | 10 +- .../models/input/system/BmInput.java | 4 +- .../models/input/system/ChpInput.java | 4 +- .../models/input/system/EvInput.java | 4 +- .../models/input/system/EvcsInput.java | 8 +- .../models/input/system/FixedFeedInInput.java | 4 +- .../models/input/system/HpInput.java | 4 +- .../models/input/system/LoadInput.java | 8 +- .../models/input/system/PvInput.java | 4 +- .../models/input/system/StorageInput.java | 4 +- .../input/system/SystemParticipantInput.java | 26 +- .../utils/ContainerNodeUpdateUtil.java | 2 - .../ie3/datamodel/utils/ContainerUtils.java | 23 +- .../io/source/EntitySourceTest.groovy | 2 +- .../csv/CsvSystemParticipantSourceTest.groovy | 2 +- 35 files changed, 438 insertions(+), 506 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java index 427a2d821..3824982f0 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.BmInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.BmTypeInput; import edu.ie3.util.quantities.interfaces.EnergyPrice; @@ -39,9 +40,9 @@ protected BmInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final BmTypeInput typeInput = data.getTypeInput(); final boolean marketReaction = data.getBoolean(MARKET_REACTION); final boolean costControlled = data.getBoolean(COST_CONTROLLED); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java index 800102fb9..12067138f 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.type.ChpTypeInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput; @@ -21,10 +22,11 @@ public class ChpInputEntityData extends SystemParticipantTypedEntityData fieldsToAttributes, NodeInput node, + EmInput em, ChpTypeInput typeInput, ThermalBusInput thermalBusInput, ThermalStorageInput thermalStorageInput) { - super(fieldsToAttributes, ChpInput.class, node, typeInput); + super(fieldsToAttributes, ChpInput.class, node, em, typeInput); this.thermalBusInput = thermalBusInput; this.thermalStorageInput = thermalStorageInput; } @@ -33,10 +35,11 @@ public ChpInputEntityData( Map fieldsToAttributes, OperatorInput operator, NodeInput node, + EmInput em, ChpTypeInput typeInput, ThermalBusInput thermalBusInput, ThermalStorageInput thermalStorageInput) { - super(fieldsToAttributes, ChpInput.class, operator, node, typeInput); + super(fieldsToAttributes, ChpInput.class, operator, node, em, typeInput); this.thermalBusInput = thermalBusInput; this.thermalStorageInput = thermalStorageInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java index 73b9674f2..ebe33ccf1 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; @@ -32,9 +33,9 @@ protected ChpInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final boolean marketReaction = data.getBoolean(MARKET_REACTION); return new ChpInput( diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java index 7cea1d006..8d4779e0c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.EvInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.EvTypeInput; @@ -33,9 +34,10 @@ protected EvInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); + return new EvInput( uuid, id, operator, operationTime, node, qCharacteristics, em, data.getTypeInput()); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java index 83a24bbb1..aae2f8b6a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java @@ -11,6 +11,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.EvcsInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointType; @@ -53,7 +54,7 @@ protected EvcsInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - + final EmInput em = data.getEm().orElse(null); final ChargingPointType type; try { type = ChargingPointTypeUtils.parse(data.getField(TYPE)); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java index 773a7d0e6..9e379d4b0 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java @@ -5,11 +5,11 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.FixedFeedInInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; @@ -17,7 +17,7 @@ import tech.units.indriya.ComparableQuantity; public class FixedFeedInInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String S_RATED = "srated"; private static final String COSPHI_RATED = "cosphirated"; @@ -33,14 +33,14 @@ protected String[] getAdditionalFields() { @Override protected FixedFeedInInput buildModel( - NodeAssetInputEntityData data, + SystemParticipantEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final ComparableQuantity sRated = data.getQuantity(S_RATED, StandardUnits.S_RATED); final double cosPhiRated = data.getDouble(COSPHI_RATED); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java index 38eacea63..e782b40d5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.HpInput; import edu.ie3.datamodel.models.input.system.type.HpTypeInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; @@ -19,9 +20,10 @@ public class HpInputEntityData extends SystemParticipantTypedEntityData fieldsToAttributes, NodeInput node, + EmInput em, HpTypeInput typeInput, ThermalBusInput thermalBusInput) { - super(fieldsToAttributes, HpInput.class, node, typeInput); + super(fieldsToAttributes, HpInput.class, node, em, typeInput); this.thermalBusInput = thermalBusInput; } @@ -29,9 +31,10 @@ public HpInputEntityData( Map fieldsToAttributes, OperatorInput operator, NodeInput node, + EmInput em, HpTypeInput typeInput, ThermalBusInput thermalBusInput) { - super(fieldsToAttributes, HpInput.class, operator, node, typeInput); + super(fieldsToAttributes, HpInput.class, operator, node, em, typeInput); this.thermalBusInput = thermalBusInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java index 616effa98..774a09ec8 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.HpInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; @@ -31,9 +32,10 @@ protected HpInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); + return new HpInput( uuid, id, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java index 12b763abe..b77853495 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.LoadInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.profile.LoadProfile; @@ -46,7 +47,6 @@ protected LoadInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { LoadProfile loadProfile; @@ -59,6 +59,7 @@ protected LoadInput buildModel( id); loadProfile = LoadProfile.DefaultLoadProfiles.NO_LOAD_PROFILE; } + final EmInput em = data.getEm().orElse(null); final boolean dsm = data.getBoolean(DSM); final ComparableQuantity eConsAnnual = data.getQuantity(E_CONS_ANNUAL, StandardUnits.ENERGY_IN); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java index 41997f445..29a3389fb 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.PvInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; @@ -47,9 +48,9 @@ protected PvInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final double albedo = data.getDouble(ALBEDO); final ComparableQuantity azimuth = data.getQuantity(AZIMUTH, StandardUnits.AZIMUTH); final ComparableQuantity etaConv = diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java index 24adbec5a..d9790117d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.StorageInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.StorageTypeInput; @@ -33,9 +34,9 @@ protected StorageInput buildModel( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final StorageTypeInput typeInput = data.getTypeInput(); return new StorageInput( uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java index f65fea7b7..204b72b3c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java @@ -5,18 +5,14 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EmInput; -import edu.ie3.datamodel.utils.Try; - import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.UUID; /** * Data used for those classes of {@link @@ -114,39 +110,4 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(super.hashCode(), getEm()); } - - public static Try build( - NodeAssetInputEntityData nodeAssetInputEntityData, Map ems) { - - Map fieldsToAttributes = nodeAssetInputEntityData.getFieldsToValues(); - - Try, SourceException> tryEm = - Optional.ofNullable( - nodeAssetInputEntityData.getUUID(SystemParticipantInputEntityFactory.EM)) - .map( - // System participant has been given a proper UUID. This means we either... - emUuid -> - Optional.ofNullable(ems.get(emUuid)) - // ... find a matching EmInput for given UUID, thus return a success with - // the EM - .map( - emInput -> - (Try, SourceException>) - new Try.Success, SourceException>( - Optional.of(emInput))) - // ... or find no matching EmInput, returning a failure. - .orElse(new Try.Failure<>(new SourceException("")))) - // If, on the other hand, no UUID was given (column does not exist, or field is empty), - // this is totally fine - we return an "empty success" - .orElse(new Try.Success<>(Optional.empty())); - - return tryEm.map( - // if the operation was successful, transform and return to the data - optionalEm -> { - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(SystemParticipantInputEntityFactory.EM); - - return new SystemParticipantEntityData(nodeAssetInputEntityData, optionalEm.orElse(null)); - }); - } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index f505ed4b5..b3e9aaf96 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -15,7 +15,6 @@ import edu.ie3.datamodel.io.factory.input.TypedConnectorInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.*; -import edu.ie3.datamodel.models.result.ResultEntity; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; import java.util.*; @@ -43,7 +42,7 @@ protected EntitySource(DataSource dataSource) { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - protected String buildSkippingMessage( + protected static String buildSkippingMessage( String entityDesc, String entityUuid, String entityId, String missingElementsString) { return "Skipping " + entityDesc @@ -66,7 +65,7 @@ protected String buildSkippingMessage( * @param mapName name of the map used for the error message * @return either the value or an error message */ - protected String safeMapGet(Map map, String key, String mapName) { + protected static String safeMapGet(Map map, String key, String mapName) { return Optional.ofNullable(map.get(key)) .orElse( "Key '" @@ -85,7 +84,7 @@ protected String safeMapGet(Map map, String key, String mapName) * @return either an optional containing the first entity that has the provided uuid or an empty * optional if no matching entity with the provided uuid can be found */ - protected Optional findFirstEntityByUuid( + protected static Optional findFirstEntityByUuid( UUID entityUuid, Collection entities) { return entities.stream() .parallel() @@ -106,7 +105,7 @@ protected Optional findFirstEntityByUuid( * @param the type of the resulting type instance * @return a {@link Success} containing the type or a {@link Failure} if the type cannot be found */ - protected Try getAssetType( + protected static Try getAssetType( Collection types, Map fieldsToAttributes, String skippedClassString) { Optional assetType = @@ -246,6 +245,53 @@ protected Stream> nodeAssetInputE }); } + // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + + /** + * Returns a stream of {@link Try} entities that can be build by using {@link + * NodeAssetInputEntityData} and their corresponding factory. + * + * @param entityClass the entity class that should be build + * @param factory the factory that should be used for the building process + * @param nodes a collection of {@link NodeInput} entities that should be used to build the + * entities + * @param operators a collection of {@link OperatorInput} entities should be used to build the + * entities + * @param Type of the {@link AssetInput} to expect + * @return stream of tries of the entities that has been built by the factory + */ + public Set> buildNodeAssetEntities( + Class entityClass, + EntityFactory factory, + Collection operators, + Collection nodes) { + return nodeAssetEntityStream(entityClass, factory, operators, nodes) + .collect(Collectors.toSet()); + } + + protected Stream> nodeAssetEntityStream( + Class entityClass, + EntityFactory factory, + Collection operators, + Collection nodes) { + return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) + .map(factory::get); + } + + public Set> buildAssetInputEntities( + Class entityClass, + EntityFactory factory, + Collection operators) { + return assetInputEntityStream(entityClass, factory, operators).collect(Collectors.toSet()); + } + + protected Stream> assetInputEntityStream( + Class entityClass, + EntityFactory factory, + Collection operators) { + return assetInputEntityDataStream(entityClass, operators).map(factory::get); + } + /** * Returns a stream of optional {@link AssetInputEntityData} that can be used to build instances * of several subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} that @@ -263,10 +309,10 @@ protected Stream assetInputEntityDa .getSourceData(entityClass) .map( fieldsToAttributes -> - assetInputEntityDataStream(entityClass, fieldsToAttributes, operators)); + createAssetInputEntityData(entityClass, fieldsToAttributes, operators)); } - protected AssetInputEntityData assetInputEntityDataStream( + protected AssetInputEntityData createAssetInputEntityData( Class entityClass, Map fieldsToAttributes, Collection operators) { @@ -294,73 +340,21 @@ protected AssetInputEntityData assetInputEntityDataStream * fields-to-attributes map. * * @param entityClass the entity class that should be build - * @param Type of the {@link ResultEntity} to expect + * @param Type of the {@link UniqueEntity} to expect * @return stream of {@link SimpleEntityData} */ - protected Stream simpleEntityDataStream( + protected Stream simpleEntityDataStream( Class entityClass) { return dataSource .getSourceData(entityClass) .map(fieldsToAttributes -> new SimpleEntityData(fieldsToAttributes, entityClass)); } - protected Stream> assetInputEntityStream( - Class entityClass, - EntityFactory factory, - Collection operators) { - return assetInputEntityDataStream(entityClass, operators).map(factory::get); - } - - protected Stream> nodeAssetEntityStream( - Class entityClass, - EntityFactory factory, - Collection nodes, - Collection operators) { - return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) - .map(factory::get); - } - - // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - - /** - * Returns a stream of {@link Try} entities that can be build by using {@link - * NodeAssetInputEntityData} and their corresponding factory. - * - * @param entityClass the entity class that should be build - * @param factory the factory that should be used for the building process - * @param nodes a collection of {@link NodeInput} entities that should be used to build the - * entities - * @param operators a collection of {@link OperatorInput} entities should be used to build the - * entities - * @param Type of the {@link AssetInput} to expect - * @return stream of tries of the entities that has been built by the factory - */ - public Set> buildNodeAssetEntities( - Class entityClass, - EntityFactory factory, - Collection nodes, - Collection operators) { - return nodeAssetEntityStream(entityClass, factory, nodes, operators) - .collect(Collectors.toSet()); - } - - public Set> buildAssetInputEntities( - Class entityClass, - EntityFactory factory, - Collection operators) { - return assetInputEntityStream(entityClass, factory, operators).collect(Collectors.toSet()); - } - - @SuppressWarnings("unchecked") - public Set> buildEntities( - Class entityClass, EntityFactory factory) { - return dataSource - .getSourceData(entityClass) - .map( - fieldsToAttributes -> { - SimpleEntityData data = new SimpleEntityData(fieldsToAttributes, entityClass); - return (Try) factory.get(data); - }) + protected static Set unpack( + Stream> inputStream, Class entityClass) throws SourceException { + return Try.scanStream(inputStream, entityClass.getSimpleName()) + .transformF(SourceException::new) + .getOrThrow() .collect(Collectors.toSet()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index ba90ea3ff..283a635f5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -403,7 +403,7 @@ public Set getMeasurementUnits( Set nodes, Set operators) throws SourceException { return Try.scanCollection( buildNodeAssetEntities( - MeasurementUnitInput.class, measurementUnitInputFactory, nodes, operators), + MeasurementUnitInput.class, measurementUnitInputFactory, operators, nodes), MeasurementUnitInput.class) .transformF(SourceException::new) .getOrThrow(); diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index 87d9fcc21..3f8029158 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.SimpleEntityFactory; import edu.ie3.datamodel.io.factory.result.*; import edu.ie3.datamodel.models.result.NodeResult; @@ -16,9 +17,7 @@ import edu.ie3.datamodel.models.result.system.*; import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult; import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult; -import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; /** * Interface that provides the capability to build entities of type {@link ResultEntity} container @@ -37,7 +36,7 @@ public class ResultEntitySource extends EntitySource { private final FlexOptionsResultFactory flexOptionsResultFactory; public ResultEntitySource(DataSource dataSource) { - this.dataSource = dataSource; + super(dataSource); // init factories this.systemParticipantResultFactory = new SystemParticipantResultFactory(); @@ -49,7 +48,7 @@ public ResultEntitySource(DataSource dataSource) { } public ResultEntitySource(DataSource dataSource, String dtfPattern) { - this.dataSource = dataSource; + super(dataSource); // init factories this.systemParticipantResultFactory = new SystemParticipantResultFactory(dtfPattern); @@ -69,7 +68,7 @@ public ResultEntitySource(DataSource dataSource, String dtfPattern) { * * @return a set of object and uuid unique {@link NodeResult} entities */ - public Set getNodeResults() { + public Set getNodeResults() throws SourceException { return getResultEntities(NodeResult.class, nodeResultFactory); } @@ -83,7 +82,7 @@ public Set getNodeResults() { * * @return a set of object and uuid unique {@link SwitchResult} entities */ - public Set getSwitchResults() { + public Set getSwitchResults() throws SourceException { return getResultEntities(SwitchResult.class, switchResultFactory); } @@ -96,7 +95,7 @@ public Set getSwitchResults() { * * @return a set of object and uuid unique {@link LineResult} entities */ - public Set getLineResults() { + public Set getLineResults() throws SourceException { return getResultEntities(LineResult.class, connectorResultFactory); } @@ -110,7 +109,7 @@ public Set getLineResults() { * * @return a set of object and uuid unique {@link Transformer2WResult} entities */ - public Set getTransformer2WResultResults() { + public Set getTransformer2WResultResults() throws SourceException { return getResultEntities(Transformer2WResult.class, connectorResultFactory); } @@ -124,7 +123,7 @@ public Set getTransformer2WResultResults() { * * @return a set of object and uuid unique {@link Transformer3WResult} entities */ - public Set getTransformer3WResultResults() { + public Set getTransformer3WResultResults() throws SourceException { return getResultEntities(Transformer3WResult.class, connectorResultFactory); } @@ -138,7 +137,7 @@ public Set getTransformer3WResultResults() { * * @return a set of object and uuid unique {@link FlexOptionsResult} entities */ - public Set getFlexOptionsResults() { + public Set getFlexOptionsResults() throws SourceException { return getResultEntities(FlexOptionsResult.class, flexOptionsResultFactory); } @@ -151,7 +150,7 @@ public Set getFlexOptionsResults() { * * @return a set of object and uuid unique {@link LoadResult} entities */ - public Set getLoadResults() { + public Set getLoadResults() throws SourceException { return getResultEntities(LoadResult.class, systemParticipantResultFactory); } @@ -164,7 +163,7 @@ public Set getLoadResults() { * * @return a set of object and uuid unique {@link PvResult} entities */ - public Set getPvResults() { + public Set getPvResults() throws SourceException { return getResultEntities(PvResult.class, systemParticipantResultFactory); } @@ -178,7 +177,7 @@ public Set getPvResults() { * * @return a set of object and uuid unique {@link FixedFeedInResult} entities */ - public Set getFixedFeedInResults() { + public Set getFixedFeedInResults() throws SourceException { return getResultEntities(FixedFeedInResult.class, systemParticipantResultFactory); } @@ -191,7 +190,7 @@ public Set getFixedFeedInResults() { * * @return a set of object and uuid unique {@link BmResult} entities */ - public Set getBmResults() { + public Set getBmResults() throws SourceException { return getResultEntities(BmResult.class, systemParticipantResultFactory); } @@ -204,7 +203,7 @@ public Set getBmResults() { * * @return a set of object and uuid unique {@link ChpResult} entities */ - public Set getChpResults() { + public Set getChpResults() throws SourceException { return getResultEntities(ChpResult.class, systemParticipantResultFactory); } @@ -217,7 +216,7 @@ public Set getChpResults() { * * @return a set of object and uuid unique {@link WecResult} entities */ - public Set getWecResults() { + public Set getWecResults() throws SourceException { return getResultEntities(WecResult.class, systemParticipantResultFactory); } @@ -231,7 +230,7 @@ public Set getWecResults() { * * @return a set of object and uuid unique {@link StorageResult} entities */ - public Set getStorageResults() { + public Set getStorageResults() throws SourceException { return getResultEntities(StorageResult.class, systemParticipantResultFactory); } @@ -244,7 +243,7 @@ public Set getStorageResults() { * * @return a set of object and uuid unique {@link EvcsResult} entities */ - public Set getEvcsResults() { + public Set getEvcsResults() throws SourceException { return getResultEntities(EvcsResult.class, systemParticipantResultFactory); } @@ -257,7 +256,7 @@ public Set getEvcsResults() { * * @return a set of object and uuid unique {@link EvResult} entities */ - public Set getEvResults() { + public Set getEvResults() throws SourceException { return getResultEntities(EvResult.class, systemParticipantResultFactory); } @@ -270,7 +269,7 @@ public Set getEvResults() { * * @return a set of object and uuid unique {@link HpResult} entities */ - public Set getHpResults() { + public Set getHpResults() throws SourceException { return getResultEntities(HpResult.class, systemParticipantResultFactory); } @@ -284,7 +283,7 @@ public Set getHpResults() { * * @return a set of object and uuid unique {@link CylindricalStorageResult} entities */ - public Set getCylindricalStorageResult() { + public Set getCylindricalStorageResult() throws SourceException { return getResultEntities(CylindricalStorageResult.class, thermalResultFactory); } @@ -298,7 +297,7 @@ public Set getCylindricalStorageResult() { * * @return a set of object and uuid unique {@link ThermalHouseResult} entities */ - public Set getThermalHouseResults() { + public Set getThermalHouseResults() throws SourceException { return getResultEntities(ThermalHouseResult.class, thermalResultFactory); } @@ -311,32 +310,28 @@ public Set getThermalHouseResults() { * * @return a set of object and uuid unique {@link EmResult} entities */ - public Set getEmResults() { + public Set getEmResults() throws SourceException { return getResultEntities(EmResult.class, systemParticipantResultFactory); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - private Set getResultEntities( - Class entityClass, SimpleEntityFactory factory) { - return simpleEntityDataStream(entityClass) - .map( - entityData -> - factory - .get(entityData) - .getData() - .flatMap(loadResult -> cast(entityClass, loadResult))) - .flatMap(Optional::stream) - .collect(Collectors.toSet()); - } - private Optional cast( - Class entityClass, ResultEntity resultEntity) { - if (resultEntity.getClass().equals(entityClass)) { - // safe here as a) type is checked and b) csv data stream already filters non-fitting input - // data - return Optional.of(entityClass.cast(resultEntity)); - } else { - return Optional.empty(); - } + /** + * Build and cast entities to the correct type, since result factories outputs result entities of + * some general type. + * + * @param entityClass + * @param factory + * @return + * @param + */ + @SuppressWarnings("unchecked") + private Set getResultEntities( + Class entityClass, SimpleEntityFactory factory) + throws SourceException { + return unpack( + simpleEntityDataStream(entityClass) + .map(entityData -> factory.get(entityData).map(data -> (T) data)), + entityClass); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 76e1713a8..c6d7acb86 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -5,10 +5,8 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.exceptions.SystemParticipantsException; -import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.*; import edu.ie3.datamodel.models.input.NodeInput; @@ -19,10 +17,9 @@ import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput; import edu.ie3.datamodel.utils.Try; -import edu.ie3.datamodel.utils.Try.*; +import edu.ie3.datamodel.utils.Try.Failure; +import edu.ie3.datamodel.utils.Try.Success; import java.util.*; -import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -117,27 +114,29 @@ public SystemParticipants getSystemParticipants() throws SourceException { /// go on with the nodes Set nodes = rawGridSource.getNodes(operators); Try, SourceException> fixedFeedInInputs = - Try.of(() -> getFixedFeedIns(nodes, operators), SourceException.class); + Try.of(() -> getFixedFeedIns(operators, nodes, emUnits), SourceException.class); Try, SourceException> pvInputs = - Try.of(() -> getPvPlants(nodes, operators), SourceException.class); + Try.of(() -> getPvPlants(operators, nodes, emUnits), SourceException.class); Try, SourceException> loads = - Try.of(() -> getLoads(nodes, operators), SourceException.class); + Try.of(() -> getLoads(operators, nodes, emUnits), SourceException.class); Try, SourceException> bmInputs = - Try.of(() -> getBmPlants(nodes, operators, bmTypes), SourceException.class); + Try.of(() -> getBmPlants(operators, nodes, emUnits, bmTypes), SourceException.class); Try, SourceException> storages = - Try.of(() -> getStorages(nodes, operators, storageTypes), SourceException.class); + Try.of(() -> getStorages(operators, nodes, emUnits, storageTypes), SourceException.class); Try, SourceException> wecInputs = - Try.of(() -> getWecPlants(nodes, operators, wecTypes), SourceException.class); + Try.of(() -> getWecPlants(operators, nodes, emUnits, wecTypes), SourceException.class); Try, SourceException> evs = - Try.of(() -> getEvs(nodes, operators, evTypes), SourceException.class); + Try.of(() -> getEvs(operators, nodes, emUnits, evTypes), SourceException.class); Try, SourceException> evcs = - Try.of(() -> getEvcs(nodes, operators), SourceException.class); + Try.of(() -> getEvcs(operators, nodes, emUnits), SourceException.class); Try, SourceException> chpInputs = Try.of( - () -> getChpPlants(nodes, operators, chpTypes, thermalBuses, thermalStorages), + () -> getChpPlants(operators, nodes, emUnits, chpTypes, thermalBuses, thermalStorages), SourceException.class); Try, SourceException> hpInputs = - Try.of(() -> getHeatPumps(nodes, operators, hpTypes, thermalBuses), SourceException.class); + Try.of( + () -> getHeatPumps(operators, nodes, emUnits, hpTypes, thermalBuses), + SourceException.class); List exceptions = Try.getExceptions( @@ -187,7 +186,8 @@ public SystemParticipants getSystemParticipants() throws SourceException { */ public Set getFixedFeedIns() throws SourceException { Set operators = typeSource.getOperators(); - return getFixedFeedIns(rawGridSource.getNodes(operators), operators); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getFixedFeedIns(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -209,14 +209,13 @@ public Set getFixedFeedIns() throws SourceException { * @param nodes a set of object and uuid unique {@link NodeInput} entities * @return a set of object and uuid unique {@link FixedFeedInInput} entities */ - public Set getFixedFeedIns(Set nodes, Set operators) + public Set getFixedFeedIns( + Set operators, Set nodes, Map emUnits) throws SourceException { - return Try.scanCollection( - buildNodeAssetEntities( - FixedFeedInInput.class, fixedFeedInInputFactory, nodes, operators), - FixedFeedInInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildSystemParticipantEntityData(FixedFeedInInput.class, operators, nodes, emUnits) + .map(fixedFeedInInputFactory::get), + FixedFeedInInput.class); } /** @@ -230,7 +229,8 @@ public Set getFixedFeedIns(Set nodes, Set getPvPlants() throws SourceException { Set operators = typeSource.getOperators(); - return getPvPlants(rawGridSource.getNodes(operators), operators); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getPvPlants(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -252,12 +252,13 @@ public Set getPvPlants() throws SourceException { * @param nodes a set of object and uuid unique {@link NodeInput} entities * @return a set of object and uuid unique {@link PvInput} entities */ - public Set getPvPlants(Set nodes, Set operators) + public Set getPvPlants( + Set operators, Set nodes, Map emUnits) throws SourceException { - return Try.scanCollection( - buildNodeAssetEntities(PvInput.class, pvInputFactory, nodes, operators), PvInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildSystemParticipantEntityData(PvInput.class, operators, nodes, emUnits) + .map(pvInputFactory::get), + PvInput.class); } /** @@ -271,7 +272,8 @@ public Set getPvPlants(Set nodes, Set operato */ public Set getLoads() throws SourceException { Set operators = typeSource.getOperators(); - return getLoads(rawGridSource.getNodes(operators), operators); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getLoads(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -293,13 +295,13 @@ public Set getLoads() throws SourceException { * @param nodes a set of object and uuid unique {@link NodeInput} entities * @return a set of object and uuid unique {@link LoadInput} entities */ - public Set getLoads(Set nodes, Set operators) + public Set getLoads( + Set operators, Set nodes, Map emUnits) throws SourceException { - return Try.scanCollection( - buildNodeAssetEntities(LoadInput.class, loadInputFactory, nodes, operators), - LoadInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildSystemParticipantEntityData(LoadInput.class, operators, nodes, emUnits) + .map(loadInputFactory::get), + LoadInput.class); } /** @@ -313,7 +315,8 @@ public Set getLoads(Set nodes, Set operator */ public Set getEvcs() throws SourceException { Set operators = typeSource.getOperators(); - return getEvcs(rawGridSource.getNodes(operators), operators); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getEvcs(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -335,13 +338,13 @@ public Set getEvcs() throws SourceException { * @param nodes a set of object and uuid unique {@link NodeInput} entities * @return a set of object and uuid unique {@link EvcsInput} entities */ - public Set getEvcs(Set nodes, Set operators) + public Set getEvcs( + Set operators, Set nodes, Map emUnits) throws SourceException { - return Try.scanCollection( - buildNodeAssetEntities(EvcsInput.class, evcsInputFactory, nodes, operators), - EvcsInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildSystemParticipantEntityData(EvcsInput.class, operators, nodes, emUnits) + .map(evcsInputFactory::get), + EvcsInput.class); } /** @@ -355,7 +358,9 @@ public Set getEvcs(Set nodes, Set operators */ public Set getBmPlants() throws SourceException { Set operators = typeSource.getOperators(); - return getBmPlants(rawGridSource.getNodes(operators), operators, typeSource.getBmTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getBmPlants( + operators, rawGridSource.getNodes(operators), emUnits, typeSource.getBmTypes()); } /** @@ -379,14 +384,15 @@ public Set getBmPlants() throws SourceException { * @return a set of object and uuid unique {@link BmInput} entities */ public Set getBmPlants( - Set nodes, Set operators, Set types) + Set operators, + Set nodes, + Map emUnits, + Set types) throws SourceException { - return Try.scanCollection( - buildTypedSystemParticipantEntities( - BmInput.class, bmInputFactory, nodes, operators, types), - BmInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildTypedSystemParticipantEntityData(BmInput.class, operators, nodes, emUnits, types) + .map(bmInputFactory::get), + BmInput.class); } /** @@ -401,7 +407,9 @@ public Set getBmPlants( */ public Set getStorages() throws SourceException { Set operators = typeSource.getOperators(); - return getStorages(rawGridSource.getNodes(operators), operators, typeSource.getStorageTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getStorages( + operators, rawGridSource.getNodes(operators), emUnits, typeSource.getStorageTypes()); } /** @@ -425,14 +433,15 @@ public Set getStorages() throws SourceException { * @return a set of object and uuid unique {@link StorageInput} entities */ public Set getStorages( - Set nodes, Set operators, Set types) + Set operators, + Set nodes, + Map emUnits, + Set types) throws SourceException { - return Try.scanCollection( - buildTypedSystemParticipantEntities( - StorageInput.class, storageInputFactory, nodes, operators, types), - StorageInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildTypedSystemParticipantEntityData(StorageInput.class, operators, nodes, emUnits, types) + .map(storageInputFactory::get), + StorageInput.class); } /** @@ -446,7 +455,9 @@ public Set getStorages( */ public Set getWecPlants() throws SourceException { Set operators = typeSource.getOperators(); - return getWecPlants(rawGridSource.getNodes(operators), operators, typeSource.getWecTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getWecPlants( + operators, rawGridSource.getNodes(operators), emUnits, typeSource.getWecTypes()); } /** @@ -470,14 +481,15 @@ public Set getWecPlants() throws SourceException { * @return a set of object and uuid unique {@link WecInput} entities */ public Set getWecPlants( - Set nodes, Set operators, Set types) + Set operators, + Set nodes, + Map emUnits, + Set types) throws SourceException { - return Try.scanCollection( - buildTypedSystemParticipantEntities( - WecInput.class, wecInputFactory, nodes, operators, types), - WecInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildTypedSystemParticipantEntityData(WecInput.class, operators, nodes, emUnits, types) + .map(wecInputFactory::get), + WecInput.class); } /** @@ -491,7 +503,8 @@ public Set getWecPlants( */ public Set getEvs() throws SourceException { Set operators = typeSource.getOperators(); - return getEvs(rawGridSource.getNodes(operators), operators, typeSource.getEvTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getEvs(operators, rawGridSource.getNodes(operators), emUnits, typeSource.getEvTypes()); } /** @@ -515,22 +528,25 @@ public Set getEvs() throws SourceException { * @return a set of object and uuid unique {@link EvInput} entities */ public Set getEvs( - Set nodes, Set operators, Set types) + Set operators, + Set nodes, + Map emUnits, + Set types) throws SourceException { - return Try.scanCollection( - buildTypedSystemParticipantEntities( - EvInput.class, evInputFactory, nodes, operators, types), - EvInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildTypedSystemParticipantEntityData(EvInput.class, operators, nodes, emUnits, types) + .map(evInputFactory::get), + EvInput.class); } public Set getChpPlants() throws SourceException { Set operators = typeSource.getOperators(); + Map emUnits = energyManagementSource.getEmUnits(operators); Set thermalBuses = thermalSource.getThermalBuses(operators); return getChpPlants( - rawGridSource.getNodes(operators), operators, + rawGridSource.getNodes(operators), + emUnits, typeSource.getChpTypes(), thermalBuses, thermalSource.getThermalStorages(operators, thermalBuses)); @@ -547,25 +563,30 @@ public Set getChpPlants() throws SourceException { * to {@link OperatorInput#NO_OPERATOR_ASSIGNED} */ public Set getChpPlants( - Set nodes, Set operators, + Set nodes, + Map emUnits, Set types, Set thermalBuses, Set thermalStorages) throws SourceException { - return Try.scanCollection( - chpInputStream(chpInputFactory, nodes, operators, types, thermalBuses, thermalStorages) - .collect(Collectors.toSet()), - ChpInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildChpEntityData( + buildTypedSystemParticipantEntityData( + ChpInput.class, operators, nodes, emUnits, types), + thermalStorages, + thermalBuses) + .map(chpInputFactory::get), + ChpInput.class); } public Set getHeatPumps() throws SourceException { Set operators = typeSource.getOperators(); + Map emUnits = energyManagementSource.getEmUnits(operators); return getHeatPumps( - rawGridSource.getNodes(operators), operators, + rawGridSource.getNodes(operators), + emUnits, typeSource.getHpTypes(), thermalSource.getThermalBuses()); } @@ -581,69 +602,24 @@ public Set getHeatPumps() throws SourceException { * to {@link OperatorInput#NO_OPERATOR_ASSIGNED} */ public Set getHeatPumps( - Set nodes, Set operators, + Set nodes, + Map emUnits, Set types, Set thermalBuses) throws SourceException { - return Try.scanCollection( - hpInputStream(hpInputFactory, nodes, operators, types, thermalBuses) - .collect(Collectors.toSet()), - HpInput.class) - .transformF(SourceException::new) - .getOrThrow(); - } - - // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - - /** - * Constructs a stream of {@link SystemParticipantInput} entities wrapped in {@link Try}'s. - * - * @param entityClass the class of the entities that should be built - * @param factory the corresponding factory that is capable of building this entities - * @param nodes the nodes that should be considered for these entities - * @param operators the operators that should be considered for these entities - * @param types the types that should be considered for these entities - * @param the type of the resulting entity - * @param the type of the type model of the resulting entity - * @return a stream of tries being either empty or holding an instance of a {@link - * SystemParticipantInput} of the requested entity class - */ - private - Set> buildTypedSystemParticipantEntities( - Class entityClass, - EntityFactory> factory, - Collection nodes, - Collection operators, - Collection types) { - return buildTypedSystemParticipantEntityData( - nodeAssetInputEntityDataStream( - assetInputEntityDataStream(entityClass, operators), nodes), - types) - .map(factory::get) - .collect(Collectors.toSet()); + return unpack( + buildHpEntityData( + buildTypedSystemParticipantEntityData( + HpInput.class, operators, nodes, emUnits, types), + thermalBuses) + .map(hpInputFactory::get), + HpInput.class); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - private Stream> chpInputStream( - ChpInputFactory factory, - Collection nodes, - Collection operators, - Collection types, - Collection thermalBuses, - Collection thermalStorages) { - return buildChpEntityData( - buildTypedSystemParticipantEntityData( - nodeAssetInputEntityDataStream( - assetInputEntityDataStream(ChpInput.class, operators), nodes), - types), - thermalStorages, - thermalBuses) - .map(factory::get); - } - - private Stream> buildChpEntityData( + private static Stream> buildChpEntityData( Stream, SourceException>> typedEntityDataStream, Collection thermalStorages, @@ -655,10 +631,10 @@ private Stream> buildChpEntityData( typedEntityDataOpt -> typedEntityDataOpt.flatMap( typedEntityData -> - buildChpEntityData(typedEntityData, thermalStorages, thermalBuses))); + createChpEntityData(typedEntityData, thermalStorages, thermalBuses))); } - private Try buildChpEntityData( + private static Try createChpEntityData( SystemParticipantTypedEntityData typedEntityData, Collection thermalStorages, Collection thermalBuses) { @@ -712,28 +688,12 @@ private Try buildChpEntityData( fieldsToAttributes, typedEntityData.getOperatorInput(), typedEntityData.getNode(), + typedEntityData.getEm().orElse(null), typedEntityData.getTypeInput(), thermalBus.get(), thermalStorage.get())); } - private Stream> hpInputStream( - HpInputFactory factory, - Collection nodes, - Collection operators, - Collection types, - Collection thermalBuses) { - return buildHpEntityData( - buildTypedSystemParticipantEntityData( - buildSystemParticipantEntityData( - nodeAssetInputEntityDataStream( - assetInputEntityDataStream(HpInput.class, operators), nodes), - ems), - types), - thermalBuses) - .map(factory::get); - } - /** * Enriches a given stream of {@link SystemParticipantTypedEntityData} tries with a type of {@link * ThermalBusInput} based on the provided collection of buses and the fields to values mapping @@ -744,7 +704,7 @@ private Stream> hpInputStream( * HpInputEntityData} * @return stream of tries of {@link HpInputEntityData} instances */ - private Stream> buildHpEntityData( + private static Stream> buildHpEntityData( Stream, SourceException>> typedEntityDataStream, Collection thermalBuses) { @@ -754,16 +714,16 @@ private Stream> buildHpEntityData( .map( typedEntityDataOpt -> typedEntityDataOpt.flatMap( - typedEntityData -> buildHpEntityData(typedEntityData, thermalBuses))); + typedEntityData -> createHpEntityData(typedEntityData, thermalBuses))); } - protected Try buildHpEntityData( + private static Try createHpEntityData( SystemParticipantTypedEntityData typedEntityData, Collection thermalBuses) { // get the raw data Map fieldsToAttributes = typedEntityData.getFieldsToValues(); - // get the thermal bus input for this chp unit and try to built the entity data + // get the thermal bus input for this chp unit and try to build the entity data Optional hpInputEntityDataOpt = Optional.ofNullable(fieldsToAttributes.get(THERMAL_BUS)) .flatMap( @@ -783,6 +743,7 @@ protected Try buildHpEntityData( fieldsToAttributes, typedEntityData.getOperatorInput(), typedEntityData.getNode(), + typedEntityData.getEm().orElse(null), typedEntityData.getTypeInput(), thermalBus); })); @@ -802,6 +763,28 @@ protected Try buildHpEntityData( return new Success<>(hpInputEntityDataOpt.get()); } + /** + * Constructs a stream of {@link SystemParticipantTypedEntityData} wrapped in {@link Try}'s. + * + * @param entityClass the class of the entities that should be built + * @param nodes the nodes that should be considered for these entities + * @param operators the operators that should be considered for these entities + * @param types the types that should be considered for these entities + * @param the type of the type model of the resulting entity + * @return a stream of tries holding an instance of a {@link SystemParticipantTypedEntityData} + */ + private + Stream, SourceException>> + buildTypedSystemParticipantEntityData( + Class entityClass, + Collection operators, + Collection nodes, + Map emUnits, + Collection types) { + return buildTypedSystemParticipantEntityData( + buildSystemParticipantEntityData(entityClass, operators, nodes, emUnits), types); + } + /** * Enriches a given stream of {@link SystemParticipantEntityData} {@link Try} objects with a type * of {@link SystemParticipantTypeInput} based on the provided collection of types and the fields @@ -816,7 +799,7 @@ protected Try buildHpEntityData( * {@link SystemParticipantTypedEntityData} * @return a stream of tries of {@link SystemParticipantTypedEntityData} instances */ - private + private static Stream, SourceException>> buildTypedSystemParticipantEntityData( Stream> @@ -828,59 +811,99 @@ protected Try buildHpEntityData( participantEntityDataTry -> participantEntityDataTry.flatMap( participantEntityData -> - buildTypedSystemParticipantEntityData(participantEntityData, types))); + createTypedSystemParticipantEntityData(participantEntityData, types))); } - private + private static Try, SourceException> - buildTypedSystemParticipantEntityData( - SystemParticipantEntityData systemParticipantEntityDataStream, Collection types) { + createTypedSystemParticipantEntityData( + SystemParticipantEntityData systemParticipantEntityData, Collection types) { return getAssetType( types, - systemParticipantEntityDataStream.getFieldsToValues(), - systemParticipantEntityDataStream.getClass().getSimpleName()) + systemParticipantEntityData.getFieldsToValues(), + systemParticipantEntityData.getClass().getSimpleName()) .map( // if the operation was successful, transform and return to the data assetType -> { Map fieldsToAttributes = - systemParticipantEntityDataStream.getFieldsToValues(); + systemParticipantEntityData.getFieldsToValues(); // remove fields that are passed as objects to constructor fieldsToAttributes.keySet().remove(TYPE); - return new SystemParticipantTypedEntityData<>( - fieldsToAttributes, - systemParticipantEntityDataStream.getTargetClass(), - systemParticipantEntityDataStream.getOperatorInput(), - systemParticipantEntityDataStream.getNode(), - systemParticipantEntityDataStream.getEm().orElse(null), - assetType); + return new SystemParticipantTypedEntityData<>(systemParticipantEntityData, assetType); }); } + private + Stream> buildSystemParticipantEntityData( + Class entityClass, + Collection operators, + Collection nodes, + Map emUnits) { + return buildSystemParticipantEntityData( + nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes), + emUnits); + } + /** * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of - * {@link EmInput} based on the provided collection of EMs and the fields to - * values mapping that inside the already provided {@link NodeAssetInputEntityData} instance. + * {@link EmInput} based on the provided collection of EMs and the fields to values mapping that + * inside the already provided {@link NodeAssetInputEntityData} instance. * * @param nodeAssetEntityDataStream the data stream of {@link NodeAssetInputEntityData} {@link * Try} objects - * @param ems the energy management units that should be used for enrichment and to build {@link - * SystemParticipantEntityData} from + * @param emUnits the energy management units that should be used for enrichment and to build + * {@link SystemParticipantEntityData} from * @return a stream of tries of {@link SystemParticipantEntityData} instances */ - private - Stream> - buildSystemParticipantEntityData( - Stream> nodeAssetEntityDataStream, - Map ems) { + private static Stream> + buildSystemParticipantEntityData( + Stream> nodeAssetEntityDataStream, + Map emUnits) { return nodeAssetEntityDataStream .parallel() .map( nodeAssetInputEntityDataOpt -> nodeAssetInputEntityDataOpt.flatMap( nodeAssetInputEntityData -> - SystemParticipantEntityData.build(nodeAssetInputEntityData, ems))); + createSystemParticipantEntityData(nodeAssetInputEntityData, emUnits))); + } + + private static Try + createSystemParticipantEntityData( + NodeAssetInputEntityData nodeAssetInputEntityData, Map emUnits) { + + Map fieldsToAttributes = nodeAssetInputEntityData.getFieldsToValues(); + + Try, SourceException> tryEm = + Optional.ofNullable( + nodeAssetInputEntityData.getUUID(SystemParticipantInputEntityFactory.EM)) + .map( + // System participant has given a proper UUID for EM. In case of success, we wrap in + // Optional + emUuid -> getEntity(emUuid, emUnits).map(Optional::of)) + // No UUID was given (column does not exist, or field is empty), + // this is totally fine - we return an "empty success" + .orElse(new Try.Success<>(Optional.empty())); + + return tryEm.map( + // if the operation was successful, transform and return to the data + optionalEm -> { + // remove fields that are passed as objects to constructor + fieldsToAttributes.keySet().remove(SystemParticipantInputEntityFactory.EM); + + return new SystemParticipantEntityData(nodeAssetInputEntityData, optionalEm.orElse(null)); + }); } + private static Try getEntity(UUID uuid, Map entityMap) { + return Optional.ofNullable(entityMap.get(uuid)) + // We either find a matching entity for given UUID, thus return a success + .map(entity -> (Try) new Try.Success(entity)) + // ... or find no matching entity, returning a failure. + .orElse( + new Try.Failure<>( + new SourceException("Entity with uuid " + uuid + " was not provided."))); + } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index 501dfac15..9db4d0f22 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -5,12 +5,17 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.EntityFactory; +import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.factory.input.OperatorInputFactory; import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory; import edu.ie3.datamodel.io.factory.typeinput.SystemParticipantTypeInputFactory; import edu.ie3.datamodel.io.factory.typeinput.Transformer2WTypeInputFactory; import edu.ie3.datamodel.io.factory.typeinput.Transformer3WTypeInputFactory; +import edu.ie3.datamodel.models.input.AssetTypeInput; +import edu.ie3.datamodel.models.input.InputEntity; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.connector.type.LineTypeInput; import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput; @@ -18,6 +23,7 @@ import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.utils.Try; import java.util.Set; +import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link @@ -55,11 +61,10 @@ public TypeSource(DataSource dataSource) { * @return a set of object and uuid unique {@link Transformer2WTypeInput} entities */ public Set getTransformer2WTypes() throws SourceException { - return Try.scanCollection( - buildEntities(Transformer2WTypeInput.class, transformer2WTypeInputFactory), - Transformer2WTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + simpleEntityDataStream(Transformer2WTypeInput.class) + .map(transformer2WTypeInputFactory::get), + Transformer2WTypeInput.class); } /** @@ -71,10 +76,9 @@ public Set getTransformer2WTypes() throws SourceExceptio * @return a set of object and uuid unique {@link OperatorInput} entities */ public Set getOperators() throws SourceException { - return Try.scanCollection( - buildEntities(OperatorInput.class, operatorInputFactory), OperatorInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + simpleEntityDataStream(OperatorInput.class).map(operatorInputFactory::get), + OperatorInput.class); } /** @@ -86,10 +90,9 @@ public Set getOperators() throws SourceException { * @return a set of object and uuid unique {@link LineTypeInput} entities */ public Set getLineTypes() throws SourceException { - return Try.scanCollection( - buildEntities(LineTypeInput.class, lineTypeInputFactory), LineTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + simpleEntityDataStream(LineTypeInput.class).map(lineTypeInputFactory::get), + LineTypeInput.class); } /** @@ -102,11 +105,10 @@ public Set getLineTypes() throws SourceException { * @return a set of object and uuid unique {@link Transformer3WTypeInput} entities */ public Set getTransformer3WTypes() throws SourceException { - return Try.scanCollection( - buildEntities(Transformer3WTypeInput.class, transformer3WTypeInputFactory), - Transformer3WTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + simpleEntityDataStream(Transformer3WTypeInput.class) + .map(transformer3WTypeInputFactory::get), + Transformer3WTypeInput.class); } /** @@ -118,10 +120,8 @@ public Set getTransformer3WTypes() throws SourceExceptio * @return a set of object and uuid unique {@link BmTypeInput} entities */ public Set getBmTypes() throws SourceException { - return Try.scanCollection( - buildEntities(BmTypeInput.class, systemParticipantTypeInputFactory), BmTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildEntities(BmTypeInput.class, systemParticipantTypeInputFactory), BmTypeInput.class); } /** @@ -133,11 +133,8 @@ public Set getBmTypes() throws SourceException { * @return a set of object and uuid unique {@link ChpTypeInput} entities */ public Set getChpTypes() throws SourceException { - return Try.scanCollection( - buildEntities(ChpTypeInput.class, systemParticipantTypeInputFactory), - ChpTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildEntities(ChpTypeInput.class, systemParticipantTypeInputFactory), ChpTypeInput.class); } /** @@ -149,10 +146,8 @@ public Set getChpTypes() throws SourceException { * @return a set of object and uuid unique {@link HpTypeInput} entities */ public Set getHpTypes() throws SourceException { - return Try.scanCollection( - buildEntities(HpTypeInput.class, systemParticipantTypeInputFactory), HpTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildEntities(HpTypeInput.class, systemParticipantTypeInputFactory), HpTypeInput.class); } /** @@ -164,11 +159,9 @@ public Set getHpTypes() throws SourceException { * @return a set of object and uuid unique {@link StorageTypeInput} entities */ public Set getStorageTypes() throws SourceException { - return Try.scanCollection( - buildEntities(StorageTypeInput.class, systemParticipantTypeInputFactory), - StorageTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildEntities(StorageTypeInput.class, systemParticipantTypeInputFactory), + StorageTypeInput.class); } /** @@ -180,11 +173,8 @@ public Set getStorageTypes() throws SourceException { * @return a set of object and uuid unique {@link WecTypeInput} entities */ public Set getWecTypes() throws SourceException { - return Try.scanCollection( - buildEntities(WecTypeInput.class, systemParticipantTypeInputFactory), - WecTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildEntities(WecTypeInput.class, systemParticipantTypeInputFactory), WecTypeInput.class); } /** @@ -196,9 +186,23 @@ public Set getWecTypes() throws SourceException { * @return a set of object and uuid unique {@link EvTypeInput} entities */ public Set getEvTypes() throws SourceException { - return Try.scanCollection( - buildEntities(EvTypeInput.class, systemParticipantTypeInputFactory), EvTypeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpack( + buildEntities(EvTypeInput.class, systemParticipantTypeInputFactory), EvTypeInput.class); + } + + /** + * Build and cast entities to the correct type, since {@link SystemParticipantTypeInputFactory} + * outputs {@link SystemParticipantTypeInput} of general type. + * + * @param entityClass + * @param factory + * @return + * @param + */ + @SuppressWarnings("unchecked") + private Stream> buildEntities( + Class entityClass, EntityFactory factory) { + return simpleEntityDataStream(entityClass) + .map(data -> (Try) factory.get(data)); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 708d546e6..f2e113816 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -45,9 +45,9 @@ public static JointGridContainer read( TypeSource typeSource = new TypeSource(dataSource); RawGridSource rawGridSource = new RawGridSource(typeSource, dataSource); ThermalSource thermalSource = new ThermalSource(typeSource, dataSource); - SystemParticipantSource systemParticipantSource = - new SystemParticipantSource(typeSource, thermalSource, rawGridSource, dataSource); EnergyManagementSource emSource = new EnergyManagementSource(typeSource, dataSource); + SystemParticipantSource systemParticipantSource = + new SystemParticipantSource(typeSource, thermalSource, rawGridSource, emSource, dataSource); GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* Loading models */ @@ -55,8 +55,6 @@ public static JointGridContainer read( Try.of(rawGridSource::getGridData, SourceException.class); Try systemParticipants = Try.of(systemParticipantSource::getSystemParticipants, SourceException.class); - Try emUnits = - Try.of(emSource::getEmUnits, SourceException.class); Try graphicElements = Try.of(graphicSource::getGraphicElements, SourceException.class); @@ -73,7 +71,6 @@ public static JointGridContainer read( gridName, rawGridElements.getOrThrow(), systemParticipants.getOrThrow(), - emUnits.getOrThrow(), graphicElements.getOrThrow()); } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java index 12f5b7c9d..3c076cfff 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java +++ b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java @@ -15,8 +15,6 @@ public abstract class GridContainer implements InputContainer { protected final RawGridElements rawGrid; /** Accumulated system participant elements */ protected final SystemParticipants systemParticipants; - /** Accumulated energy management units */ - protected final EnergyManagementUnits emUnits; /** Accumulated graphic data entities (node graphics, line graphics) */ protected final GraphicElements graphics; @@ -24,13 +22,11 @@ protected GridContainer( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, - EnergyManagementUnits emUnits, GraphicElements graphics) { this.gridName = gridName; this.rawGrid = rawGrid; this.systemParticipants = systemParticipants; - this.emUnits = emUnits; this.graphics = graphics; } @@ -39,7 +35,6 @@ public List allEntitiesAsList() { List allEntities = new LinkedList<>(); allEntities.addAll(rawGrid.allEntitiesAsList()); allEntities.addAll(systemParticipants.allEntitiesAsList()); - allEntities.addAll(emUnits.allEntitiesAsList()); allEntities.addAll(graphics.allEntitiesAsList()); return Collections.unmodifiableList(allEntities); } @@ -60,10 +55,6 @@ public SystemParticipants getSystemParticipants() { return systemParticipants; } - public EnergyManagementUnits getEmUnits() { - return emUnits; - } - public GraphicElements getGraphics() { return graphics; } @@ -75,13 +66,12 @@ public boolean equals(Object o) { return gridName.equals(that.gridName) && rawGrid.equals(that.rawGrid) && systemParticipants.equals(that.systemParticipants) - && emUnits.equals(that.emUnits) && graphics.equals(that.graphics); } @Override public int hashCode() { - return Objects.hash(gridName, rawGrid, systemParticipants, emUnits, graphics); + return Objects.hash(gridName, rawGrid, systemParticipants, graphics); } @Override @@ -101,7 +91,6 @@ protected abstract static class GridContainerCopyBuilder sRated, double cosPhiRated) { super(uuid, id, operator, operationTime, node, qCharacteristics, em); @@ -66,7 +66,7 @@ public FixedFeedInInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, ComparableQuantity sRated, double cosPhiRated) { super(uuid, id, node, qCharacteristics, em); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java index 6ef942406..1c0dd2370 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java @@ -44,7 +44,7 @@ public HpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, HpTypeInput type) { super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.thermalBus = thermalBus; @@ -68,7 +68,7 @@ public HpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, HpTypeInput type) { super(uuid, id, node, qCharacteristics, em); this.thermalBus = thermalBus; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java index 31e43ef76..1889e2937 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java @@ -61,7 +61,7 @@ public LoadInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, LoadProfile loadProfile, boolean dsm, ComparableQuantity eConsAnnual, @@ -100,7 +100,7 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, String loadProfileKey, boolean dsm, ComparableQuantity eConsAnnual, @@ -142,7 +142,7 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, LoadProfile loadProfile, boolean dsm, ComparableQuantity eConsAnnual, @@ -177,7 +177,7 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, String loadProfileKey, boolean dsm, ComparableQuantity eConsAnnual, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java index 4df99309a..abe86cd09 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java @@ -66,7 +66,7 @@ public PvInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, double albedo, ComparableQuantity azimuth, ComparableQuantity etaConv, @@ -111,7 +111,7 @@ public PvInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, double albedo, ComparableQuantity azimuth, ComparableQuantity etaConv, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java index c66b5dd13..ff56bf7ad 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java @@ -38,7 +38,7 @@ public StorageInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, StorageTypeInput type) { super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; @@ -59,7 +59,7 @@ public StorageInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - UUID em, + EmInput em, StorageTypeInput type) { super(uuid, id, node, qCharacteristics, em); this.type = type; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java index a9d4196ee..0a0c6a42c 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java @@ -5,18 +5,12 @@ */ package edu.ie3.datamodel.models.input.system; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.extractor.HasNodes; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; -import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantEntityData; -import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantInputEntityFactory; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.AssetInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; -import edu.ie3.datamodel.utils.Try; - import java.util.*; /** Describes a system asset that is connected to a node */ @@ -29,10 +23,10 @@ public abstract class SystemParticipantInput extends AssetInput implements HasNo private final ReactivePowerCharacteristic qCharacteristics; /** - * Optional UUID of the {@link EmInput} that is controlling this system participant. If null, this - * system participant is not em-controlled. + * Optional {@link EmInput} that is controlling this system participant. If null, this system + * participant is not em-controlled. */ - private final UUID em; + private final EmInput em; /** * Constructor for an operated system participant @@ -69,7 +63,11 @@ protected SystemParticipantInput( * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. */ protected SystemParticipantInput( - UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, UUID em) { + UUID uuid, + String id, + NodeInput node, + ReactivePowerCharacteristic qCharacteristics, + EmInput em) { super(uuid, id); this.node = node; this.qCharacteristics = qCharacteristics; @@ -84,7 +82,7 @@ public ReactivePowerCharacteristic getqCharacteristics() { return qCharacteristics; } - public Optional getEm() { + public Optional getEm() { return Optional.ofNullable(em); } @@ -143,7 +141,7 @@ public abstract static class SystemParticipantInputCopyBuilder< private NodeInput node; private ReactivePowerCharacteristic qCharacteristics; - private UUID em; + private EmInput em; protected SystemParticipantInputCopyBuilder(SystemParticipantInput entity) { super(entity); @@ -161,7 +159,7 @@ public B qCharacteristics(ReactivePowerCharacteristic qCharacteristics) { return thisInstance(); } - public B em(UUID em) { + public B em(EmInput em) { this.em = em; return thisInstance(); } @@ -175,7 +173,7 @@ protected ReactivePowerCharacteristic getqCharacteristics() { } /** @return The {@link EmInput} controlling this system participant. CAN BE NULL. */ - public UUID getEm() { + public EmInput getEm() { return em; } diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java index a482ce658..4778fabea 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java @@ -77,7 +77,6 @@ public static JointGridContainer updateGridWithNodes( grid.getGridName(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), - grid.getEmUnits(), updatedEntities.graphicElements()); } @@ -113,7 +112,6 @@ public static SubGridContainer updateGridWithNodes( grid.getSubnet(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), - grid.getEmUnits(), updatedEntities.graphicElements()); } diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java index d0484a499..5033221a2 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java @@ -501,7 +501,6 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, - EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { /* Collect the different sub nets. Through the validation of lines, it is ensured, that no galvanically connected @@ -510,8 +509,7 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( /* Build the single sub grid models */ HashMap subgrids = - buildSubGridContainers( - gridName, subnetNumbers, rawGrid, systemParticipants, energyManagementUnits, graphics); + buildSubGridContainers(gridName, subnetNumbers, rawGrid, systemParticipants, graphics); /* Build the graph structure denoting the topology of the grid */ return buildSubGridTopologyGraph(subgrids, rawGrid); @@ -542,7 +540,6 @@ private static HashMap buildSubGridContainers( SortedSet subnetNumbers, RawGridElements rawGrid, SystemParticipants systemParticipants, - EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { HashMap subGrids = new HashMap<>(subnetNumbers.size()); @@ -555,12 +552,7 @@ private static HashMap buildSubGridContainers( subGrids.put( subnetNumber, new SubGridContainer( - gridName, - subnetNumber, - rawGridElements, - systemParticipantElements, - energyManagementUnits, // TODO filtering (part of #957) - graphicElements)); + gridName, subnetNumber, rawGridElements, systemParticipantElements, graphicElements)); } return subGrids; } @@ -812,9 +804,6 @@ public static JointGridContainer combineToJointGrid( GraphicElements graphicElements = new GraphicElements( subGridContainers.stream().map(GridContainer::getGraphics).collect(Collectors.toSet())); - EnergyManagementUnits energyManagementUnits = - new EnergyManagementUnits( - subGridContainers.stream().map(GridContainer::getEmUnits).collect(Collectors.toSet())); Map subGridMapping = subGridContainers.stream() @@ -823,12 +812,7 @@ public static JointGridContainer combineToJointGrid( SubGridTopologyGraph subGridTopologyGraph = buildSubGridTopologyGraph(subGridMapping, rawGrid); return new JointGridContainer( - gridName, - rawGrid, - systemParticipants, - energyManagementUnits, - graphicElements, - subGridTopologyGraph); + gridName, rawGrid, systemParticipants, graphicElements, subGridTopologyGraph); } /** @@ -1001,7 +985,6 @@ public static SubGridContainer withTrafoNodeAsSlack(final SubGridContainer subGr subGridContainer.getRawGrid().getSwitches(), subGridContainer.getRawGrid().getMeasurementUnits()), subGridContainer.getSystemParticipants(), - subGridContainer.getEmUnits(), new GraphicElements(newNodeGraphics, subGridContainer.getGraphics().getLineGraphics())); } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 5bb63b42b..0bde14b7b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -95,7 +95,7 @@ class EntitySourceTest extends Specification { ] when: - def thermalBusInputEntity = new ThermalBusInputFactory().get(dummyEntitySource.assetInputEntityDataStream(ThermalBusInput, thermalBusInputFieldsToAttributesMap, Collections.emptyList())) + def thermalBusInputEntity = new ThermalBusInputFactory().get(dummyEntitySource.createAssetInputEntityData(ThermalBusInput, thermalBusInputFieldsToAttributesMap, Collections.emptyList())) then: noExceptionThrown() // no NPE should be thrown diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index 85bf98585..2c6cb53c2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -136,7 +136,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat def sysPartTypedEntityData = new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, sptd.hpInput.operator, sptd.hpInput.node, sptd.hpTypeInput) when: - def hpInputEntityDataOpt = csvSystemParticipantSource.buildHpEntityData(sysPartTypedEntityData, thermalBuses) + def hpInputEntityDataOpt = csvSystemParticipantSource.createHpEntityData(sysPartTypedEntityData, thermalBuses) then: hpInputEntityDataOpt.success == resultIsPresent From 3999d9f347e32899b26bed1204f4022411464d97 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Sat, 16 Dec 2023 01:02:18 +0100 Subject: [PATCH 047/228] Maps for types that are searched by uuid --- .../io/source/EnergyManagementSource.java | 5 +- .../ie3/datamodel/io/source/EntitySource.java | 66 ++++---- .../datamodel/io/source/GraphicSource.java | 28 ++-- .../datamodel/io/source/RawGridSource.java | 129 +++++++-------- .../io/source/ResultEntitySource.java | 2 +- .../io/source/SystemParticipantSource.java | 152 +++++++++--------- .../datamodel/io/source/ThermalSource.java | 122 ++++++-------- .../ie3/datamodel/io/source/TypeSource.java | 43 ++--- .../datamodel/io/sink/CsvFileSinkTest.groovy | 2 +- .../io/source/EntitySourceTest.groovy | 18 --- .../csv/CsvEnergyManagementSourceTest.groovy | 8 +- .../io/source/csv/CsvGraphicSourceTest.groovy | 9 +- .../io/source/csv/CsvThermalSourceTest.groovy | 4 +- .../EnergyManagementUnitsTest.groovy | 29 ---- .../container/JointGridContainerTest.groovy | 5 - .../models/input/system/EmInputTest.groovy | 31 ++-- .../datamodel/utils/ContainerUtilsTest.groovy | 8 - .../ie3/test/common/ComplexTopology.groovy | 8 - .../common/EnergyManagementTestData.groovy | 32 ---- .../ie3/test/common/SampleJointGrid.groovy | 6 +- .../common/SystemParticipantTestData.groovy | 33 ++-- 21 files changed, 304 insertions(+), 436 deletions(-) delete mode 100644 src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy delete mode 100644 src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 882704450..3c3bc0326 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -11,7 +11,6 @@ import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.utils.Try; import java.util.Map; -import java.util.Set; import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; @@ -39,7 +38,7 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { * @return a map of uuid to {@link EmInput} entities */ public Map getEmUnits() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); return getEmUnits(operators); } @@ -60,7 +59,7 @@ public Map getEmUnits() throws SourceException { * the returning instances * @return a map of uuid to {@link EmInput} entities */ - public Map getEmUnits(Set operators) throws SourceException { + public Map getEmUnits(Map operators) throws SourceException { return Try.scanCollection( buildAssetInputEntities(EmInput.class, emInputFactory, operators), EmInput.class) .transformF(SourceException::new) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index b3e9aaf96..bc5ba964a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -18,6 +18,7 @@ import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import org.slf4j.Logger; @@ -74,24 +75,6 @@ protected static String safeMapGet(Map map, String key, String m + (mapName.isEmpty() ? "!" : " in map '" + mapName + "'!")); } - /** - * Returns an {@link Optional} of the first {@link UniqueEntity} element of this collection - * matching the provided UUID or an empty {@code Optional} if no matching entity can be found. - * - * @param entityUuid uuid of the entity that should be looked for - * @param entities collection of entities that should be - * @param type of the entity that will be returned, derived from the provided collection - * @return either an optional containing the first entity that has the provided uuid or an empty - * optional if no matching entity with the provided uuid can be found - */ - protected static Optional findFirstEntityByUuid( - UUID entityUuid, Collection entities) { - return entities.stream() - .parallel() - .filter(uniqueEntity -> uniqueEntity.getUuid().equals(entityUuid)) - .findFirst(); - } - /** * Checks if the requested type of asset can be found in the provided collection of types based on * the provided fields to values mapping. The provided fields to values mapping needs to have one @@ -106,11 +89,11 @@ protected static Optional findFirstEntityByUuid( * @return a {@link Success} containing the type or a {@link Failure} if the type cannot be found */ protected static Try getAssetType( - Collection types, Map fieldsToAttributes, String skippedClassString) { + Map types, Map fieldsToAttributes, String skippedClassString) { Optional assetType = Optional.ofNullable(fieldsToAttributes.get(TYPE)) - .flatMap(typeUuid -> findFirstEntityByUuid(UUID.fromString(typeUuid), types)); + .flatMap(typeUuid -> Optional.ofNullable(types.get(UUID.fromString(typeUuid)))); // if the type is not present we return a failure if (assetType.isEmpty()) { @@ -125,6 +108,7 @@ protected static Try getAssetType return new Success<>(assetType.get()); } + // TODO /** * Finds the required asset type and if present, adds it to the untyped entity data * @@ -135,7 +119,7 @@ protected static Try getAssetType */ protected Try, SourceException> findAndAddType( - ConnectorInputEntityData untypedEntityData, Collection availableTypes) { + ConnectorInputEntityData untypedEntityData, Map availableTypes) { Try assetTypeOption = getAssetType( availableTypes, @@ -179,7 +163,7 @@ protected TypedConnectorInputEntityData addTypeToE * OperatorInput#NO_OPERATOR_ASSIGNED} */ protected OperatorInput getFirstOrDefaultOperator( - Collection operators, + Map operators, Optional operatorUuid, String entityClassName, String requestEntityUuid) { @@ -191,7 +175,7 @@ protected OperatorInput getFirstOrDefaultOperator( entityClassName); return OperatorInput.NO_OPERATOR_ASSIGNED; } else { - return findFirstEntityByUuid(operatorUuid.get(), operators) + return Optional.ofNullable(operators.get(operatorUuid.get())) .orElseGet( () -> { log.debug( @@ -215,7 +199,7 @@ protected OperatorInput getFirstOrDefaultOperator( * @return stream of the entity data wrapped in a {@link Try} */ protected Stream> nodeAssetInputEntityDataStream( - Stream assetInputEntityDataStream, Collection nodes) { + Stream assetInputEntityDataStream, Map nodes) { return assetInputEntityDataStream .parallel() .map( @@ -224,7 +208,7 @@ protected Stream> nodeAssetInputE Map fieldsToAttributes = assetInputEntityData.getFieldsToValues(); // get the node of the entity UUID nodeUuid = UUID.fromString(fieldsToAttributes.get(NODE)); - Optional node = findFirstEntityByUuid(nodeUuid, nodes); + Optional node = Optional.ofNullable(nodes.get(nodeUuid)); // if the node is not present we return an empty element and // log a warning @@ -263,8 +247,8 @@ protected Stream> nodeAssetInputE public Set> buildNodeAssetEntities( Class entityClass, EntityFactory factory, - Collection operators, - Collection nodes) { + Map operators, + Map nodes) { return nodeAssetEntityStream(entityClass, factory, operators, nodes) .collect(Collectors.toSet()); } @@ -272,8 +256,8 @@ public Set> buildNodeAssetEntiti protected Stream> nodeAssetEntityStream( Class entityClass, EntityFactory factory, - Collection operators, - Collection nodes) { + Map operators, + Map nodes) { return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) .map(factory::get); } @@ -281,14 +265,14 @@ protected Stream> nodeAssetEntit public Set> buildAssetInputEntities( Class entityClass, EntityFactory factory, - Collection operators) { + Map operators) { return assetInputEntityStream(entityClass, factory, operators).collect(Collectors.toSet()); } protected Stream> assetInputEntityStream( Class entityClass, EntityFactory factory, - Collection operators) { + Map operators) { return assetInputEntityDataStream(entityClass, operators).map(factory::get); } @@ -304,7 +288,7 @@ protected Stream> assetInputEnti * @return stream of the entity data wrapped in a {@link Try} */ protected Stream assetInputEntityDataStream( - Class entityClass, Collection operators) { + Class entityClass, Map operators) { return dataSource .getSourceData(entityClass) .map( @@ -315,7 +299,7 @@ protected Stream assetInputEntityDa protected AssetInputEntityData createAssetInputEntityData( Class entityClass, Map fieldsToAttributes, - Collection operators) { + Map operators) { // get the operator of the entity Optional operatorUuid = @@ -350,11 +334,21 @@ protected Stream simpleEntityDataStre .map(fieldsToAttributes -> new SimpleEntityData(fieldsToAttributes, entityClass)); } - protected static Set unpack( + protected static Map unpackMap( + Stream> inputStream, Class entityClass) throws SourceException { + return unpack(inputStream, entityClass) + .collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())); + } + + protected static Set unpackSet( + Stream> inputStream, Class entityClass) throws SourceException { + return unpack(inputStream, entityClass).collect(Collectors.toSet()); + } + + private static Stream unpack( Stream> inputStream, Class entityClass) throws SourceException { return Try.scanStream(inputStream, entityClass.getSimpleName()) .transformF(SourceException::new) - .getOrThrow() - .collect(Collectors.toSet()); + .getOrThrow(); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 904b33f3a..72982144b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -55,11 +55,11 @@ public GraphicElements getGraphicElements() throws SourceException { // read all needed entities /// start with types and operators - Set operators = typeSource.getOperators(); - Set lineTypes = typeSource.getLineTypes(); + Map operators = typeSource.getOperators(); + Map lineTypes = typeSource.getLineTypes(); - Set nodes = rawGridSource.getNodes(operators); - Set lines = rawGridSource.getLines(nodes, lineTypes, operators); + Map nodes = rawGridSource.getNodes(operators); + Map lines = rawGridSource.getLines(nodes, lineTypes, operators); Try, SourceException> nodeGraphics = Try.of(() -> getNodeGraphicInput(nodes), SourceException.class); @@ -89,7 +89,8 @@ public Set getNodeGraphicInput() throws SourceException { return getNodeGraphicInput(rawGridSource.getNodes(typeSource.getOperators())); } - public Set getNodeGraphicInput(Set nodes) throws SourceException { + public Set getNodeGraphicInput(Map nodes) + throws SourceException { return Try.scanCollection( buildNodeGraphicEntityData(nodes) .map(nodeGraphicInputFactory::get) @@ -105,13 +106,14 @@ public Set getNodeGraphicInput(Set nodes) throws So * SourceException} is thrown, else all entities that has been able to be built are returned. */ public Set getLineGraphicInput() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); return getLineGraphicInput( rawGridSource.getLines( rawGridSource.getNodes(operators), typeSource.getLineTypes(), operators)); } - public Set getLineGraphicInput(Set lines) throws SourceException { + public Set getLineGraphicInput(Map lines) + throws SourceException { return Try.scanCollection( buildLineGraphicEntityData(lines) .map(lineGraphicInputFactory::get) @@ -140,18 +142,18 @@ public Set getLineGraphicInput(Set lines) throws So * @return a stream of tries of {@link NodeGraphicInput} entities */ protected Stream> buildNodeGraphicEntityData( - Set nodes) { + Map nodes) { return dataSource .getSourceData(NodeGraphicInput.class) .map(fieldsToAttributes -> buildNodeGraphicEntityData(fieldsToAttributes, nodes)); } protected Try buildNodeGraphicEntityData( - Map fieldsToAttributes, Set nodes) { + Map fieldsToAttributes, Map nodes) { // get the node of the entity UUID nodeUuid = UUID.fromString(fieldsToAttributes.get(NODE)); - Optional node = findFirstEntityByUuid(nodeUuid, nodes); + Optional node = Optional.ofNullable(nodes.get(nodeUuid)); // if the node is not present we return a failure // log a warning @@ -187,18 +189,18 @@ protected Try buildNodeGraphicEntit * @return a stream of tries of {@link LineGraphicInput} entities */ protected Stream> buildLineGraphicEntityData( - Set lines) { + Map lines) { return dataSource .getSourceData(LineGraphicInput.class) .map(fieldsToAttributes -> buildLineGraphicEntityData(fieldsToAttributes, lines)); } protected Try buildLineGraphicEntityData( - Map fieldsToAttributes, Set lines) { + Map fieldsToAttributes, Map lines) { // get the node of the entity UUID lineUuid = UUID.fromString(fieldsToAttributes.get("line")); - Optional line = findFirstEntityByUuid(lineUuid, lines); + Optional line = Optional.ofNullable(lines.get(lineUuid)); // if the node is not present we return an empty element and // log a warning diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index 283a635f5..c38047193 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -89,14 +89,14 @@ public RawGridSource(TypeSource typeSource, DataSource dataSource) { */ public RawGridElements getGridData() throws SourceException { /* read all needed entities start with the types and operators */ - Set operators = typeSource.getOperators(); - Set lineTypes = typeSource.getLineTypes(); - Set transformer2WTypeInputs = typeSource.getTransformer2WTypes(); - Set transformer3WTypeInputs = typeSource.getTransformer3WTypes(); + Map operators = typeSource.getOperators(); + Map lineTypes = typeSource.getLineTypes(); + Map transformer2WTypeInputs = typeSource.getTransformer2WTypes(); + Map transformer3WTypeInputs = typeSource.getTransformer3WTypes(); /* assets */ - Set nodes = getNodes(operators); - Try, SourceException> lineInputs = + Map nodes = getNodes(operators); + Try, SourceException> lineInputs = Try.of(() -> getLines(nodes, lineTypes, operators), SourceException.class); Try, SourceException> transformer2WInputs = Try.of( @@ -124,8 +124,8 @@ public RawGridElements getGridData() throws SourceException { // getOrThrow should not throw an exception in this context, because all exception are // filtered and thrown before return new RawGridElements( - nodes, - lineInputs.getOrThrow(), + new HashSet<>(nodes.values()), + new HashSet<>(lineInputs.getOrThrow().values()), transformer2WInputs.getOrThrow(), transformer3WInputs.getOrThrow(), switches.getOrThrow(), @@ -142,7 +142,7 @@ public RawGridElements getGridData() throws SourceException { * * @return a set of object and uuid unique {@link NodeInput} entities */ - public Set getNodes() throws SourceException { + public Map getNodes() throws SourceException { return getNodes(typeSource.getOperators()); } @@ -164,14 +164,10 @@ public Set getNodes() throws SourceException { * the returning instances * @return a set of object and uuid unique {@link NodeInput} entities */ - public Set getNodes(Set operators) throws SourceException { - return Try.scanCollection( - assetInputEntityDataStream(NodeInput.class, operators) - .map(nodeInputFactory::get) - .collect(Collectors.toSet()), - NodeInput.class) - .transformF(SourceException::new) - .getOrThrow(); + public Map getNodes(Map operators) throws SourceException { + return unpackMap( + assetInputEntityDataStream(NodeInput.class, operators).map(nodeInputFactory::get), + NodeInput.class); } /** @@ -183,8 +179,8 @@ public Set getNodes(Set operators) throws SourceExcept * * @return a set of object and uuid unique {@link LineInput} entities */ - public Set getLines() throws SourceException { - Set operators = typeSource.getOperators(); + public Map getLines() throws SourceException { + Map operators = typeSource.getOperators(); return getLines(getNodes(operators), typeSource.getLineTypes(), operators); } @@ -208,15 +204,14 @@ public Set getLines() throws SourceException { * @param lineTypeInputs a set of object and uuid unique {@link LineTypeInput} entities * @return a set of object and uuid unique {@link LineInput} entities */ - public Set getLines( - Set nodes, Set lineTypeInputs, Set operators) + public Map getLines( + Map nodes, + Map lineTypeInputs, + Map operators) throws SourceException { - return Try.scanCollection( - typedEntityStream(LineInput.class, lineInputFactory, nodes, operators, lineTypeInputs) - .collect(Collectors.toSet()), - LineInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpackMap( + typedEntityStream(LineInput.class, lineInputFactory, nodes, operators, lineTypeInputs), + LineInput.class); } /** @@ -230,7 +225,7 @@ public Set getLines( * @return a set of object and uuid unique {@link Transformer2WInput} entities */ public Set get2WTransformers() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); return get2WTransformers(getNodes(operators), typeSource.getTransformer2WTypes(), operators); } @@ -257,9 +252,9 @@ public Set get2WTransformers() throws SourceException { * @return a set of object and uuid unique {@link Transformer2WInput} entities */ public Set get2WTransformers( - Set nodes, - Set transformer2WTypes, - Set operators) + Map nodes, + Map transformer2WTypes, + Map operators) throws SourceException { return Try.scanCollection( typedEntityStream( @@ -285,7 +280,7 @@ public Set get2WTransformers( * @return a set of object and uuid unique {@link Transformer3WInput} entities */ public Set get3WTransformers() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); return get3WTransformers(getNodes(operators), typeSource.getTransformer3WTypes(), operators); } @@ -312,9 +307,9 @@ public Set get3WTransformers() throws SourceException { * @return a set of object and uuid unique {@link Transformer3WInput} entities */ public Set get3WTransformers( - Set nodes, - Set transformer3WTypeInputs, - Set operators) + Map nodes, + Map transformer3WTypeInputs, + Map operators) throws SourceException { return Try.scanCollection( buildTransformer3WEntities( @@ -335,7 +330,7 @@ public Set get3WTransformers( * @return a set of object and uuid unique {@link SwitchInput} entities */ public Set getSwitches() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); return getSwitches(getNodes(operators), operators); } @@ -358,8 +353,8 @@ public Set getSwitches() throws SourceException { * @param nodes a set of object and uuid unique {@link NodeInput} entities * @return a set of object and uuid unique {@link SwitchInput} entities */ - public Set getSwitches(Set nodes, Set operators) - throws SourceException { + public Set getSwitches( + Map nodes, Map operators) throws SourceException { return buildUntypedConnectorInputEntities( SwitchInput.class, switchInputFactory, nodes, operators); } @@ -375,7 +370,7 @@ public Set getSwitches(Set nodes, Set ope * @return a set of object and uuid unique {@link MeasurementUnitInput} entities */ public Set getMeasurementUnits() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); return getMeasurementUnits(getNodes(operators), operators); } @@ -400,7 +395,7 @@ public Set getMeasurementUnits() throws SourceException { * @return a set of object and uuid unique {@link MeasurementUnitInput} entities */ public Set getMeasurementUnits( - Set nodes, Set operators) throws SourceException { + Map nodes, Map operators) throws SourceException { return Try.scanCollection( buildNodeAssetEntities( MeasurementUnitInput.class, measurementUnitInputFactory, operators, nodes), @@ -413,7 +408,7 @@ public Set getMeasurementUnits( public Set> buildNodeInputEntities( Class entityClass, EntityFactory factory, - Collection operators) { + Map operators) { return assetInputEntityDataStream(entityClass, operators) .map(factory::get) .collect(Collectors.toSet()); @@ -422,8 +417,8 @@ public Set> buildNodeInputEntiti public Set buildUntypedConnectorInputEntities( Class entityClass, EntityFactory factory, - Collection nodes, - Collection operators) + Map nodes, + Map operators) throws SourceException { return Try.scanCollection( untypedConnectorInputEntityStream(entityClass, factory, nodes, operators) @@ -435,9 +430,9 @@ public Set buildUntypedConnectorInputEntities( public Set> buildTransformer3WEntities( Transformer3WInputFactory transformer3WInputFactory, - Collection nodes, - Collection transformer3WTypeInputs, - Collection operators) { + Map nodes, + Map transformer3WTypeInputs, + Map operators) { return buildTransformer3WEntityData( buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( @@ -452,9 +447,9 @@ public Set> buildTransformer3WEntities Set> buildTypedEntities( Class entityClass, EntityFactory> factory, - Collection nodes, - Collection operators, - Collection types) { + Map nodes, + Map operators, + Map types) { return typedEntityStream(entityClass, factory, nodes, operators, types) .collect(Collectors.toSet()); } @@ -471,7 +466,7 @@ Set> buildTypedEntities( protected Stream, SourceException>> buildTypedConnectorEntityData( Stream> noTypeConnectorEntityDataStream, - Collection availableTypes) { + Map availableTypes) { return noTypeConnectorEntityDataStream .parallel() .map( @@ -490,7 +485,7 @@ Stream, SourceException>> buildTypedConnect */ protected Stream> buildUntypedConnectorInputEntityData( - Stream assetInputEntityDataStream, Collection nodes) { + Stream assetInputEntityDataStream, Map nodes) { return assetInputEntityDataStream .parallel() .map( @@ -508,15 +503,15 @@ Stream, SourceException>> buildTypedConnect * @return A {@link Try} to matching {@link ConnectorInputEntityData} */ protected Try buildUntypedConnectorInputEntityData( - AssetInputEntityData assetInputEntityData, Collection nodes) { + AssetInputEntityData assetInputEntityData, Map nodes) { // get the raw data Map fieldsToAttributes = assetInputEntityData.getFieldsToValues(); // get the two connector nodes UUID nodeAUuid = UUID.fromString(fieldsToAttributes.get(NODE_A)); UUID nodeBUuid = UUID.fromString(fieldsToAttributes.get(NODE_B)); - Optional nodeA = findFirstEntityByUuid(nodeAUuid, nodes); - Optional nodeB = findFirstEntityByUuid(nodeBUuid, nodes); + Optional nodeA = Optional.ofNullable(nodes.get(nodeAUuid)); + Optional nodeB = Optional.ofNullable(nodes.get(nodeBUuid)); // if nodeA or nodeB are not present we return a failure and log a // warning @@ -555,9 +550,9 @@ protected Try buildUntypedConnectorIn Stream> typedEntityStream( Class entityClass, EntityFactory> factory, - Collection nodes, - Collection operators, - Collection types) { + Map nodes, + Map operators, + Map types) { return buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( assetInputEntityDataStream(entityClass, operators), nodes), @@ -569,23 +564,13 @@ Stream> typedEntityStream( Stream> untypedConnectorInputEntityStream( Class entityClass, EntityFactory factory, - Set nodes, - Set operators) { + Map nodes, + Map operators) { return buildUntypedConnectorInputEntityData( assetInputEntityDataStream(entityClass, operators), nodes) .map(factory::get); } - private - Stream> untypedConnectorInputEntityStream( - Class entityClass, - EntityFactory factory, - Collection nodes, - Collection operators) { - return untypedConnectorInputEntityStream( - entityClass, factory, new HashSet<>(nodes), new HashSet<>(operators)); - } - /** * Enriches the Stream of tries on {@link Transformer3WInputEntityData} with the information of * the internal node. @@ -597,7 +582,7 @@ Stream> untypedConnectorInputEntityStream( protected Stream> buildTransformer3WEntityData( Stream, SourceException>> typedConnectorEntityDataStream, - Collection nodes) { + Map nodes) { return typedConnectorEntityDataStream .parallel() .map( @@ -615,14 +600,14 @@ protected Stream> buildTransf */ protected Try addThirdNode( TypedConnectorInputEntityData typeEntityData, - Collection nodes) { + Map nodes) { // get the raw data Map fieldsToAttributes = typeEntityData.getFieldsToValues(); // get nodeC of the transformer UUID nodeCUuid = UUID.fromString(fieldsToAttributes.get("nodeC")); - Optional nodeC = findFirstEntityByUuid(nodeCUuid, nodes); + Optional nodeC = Optional.ofNullable(nodes.get(nodeCUuid)); // if nodeC is not present we return a failure // log a warning diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index 3f8029158..bc6b194d4 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -329,7 +329,7 @@ public Set getEmResults() throws SourceException { private Set getResultEntities( Class entityClass, SimpleEntityFactory factory) throws SourceException { - return unpack( + return unpackSet( simpleEntityDataStream(entityClass) .map(entityData -> factory.get(entityData).map(data -> (T) data)), entityClass); diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index c6d7acb86..801ba7a52 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -97,22 +97,22 @@ public SystemParticipants getSystemParticipants() throws SourceException { // read all needed entities /// start with types and operators - Set operators = typeSource.getOperators(); - Set bmTypes = typeSource.getBmTypes(); - Set chpTypes = typeSource.getChpTypes(); - Set evTypes = typeSource.getEvTypes(); - Set hpTypes = typeSource.getHpTypes(); - Set storageTypes = typeSource.getStorageTypes(); - Set wecTypes = typeSource.getWecTypes(); + Map operators = typeSource.getOperators(); + Map bmTypes = typeSource.getBmTypes(); + Map chpTypes = typeSource.getChpTypes(); + Map evTypes = typeSource.getEvTypes(); + Map hpTypes = typeSource.getHpTypes(); + Map storageTypes = typeSource.getStorageTypes(); + Map wecTypes = typeSource.getWecTypes(); Map emUnits = energyManagementSource.getEmUnits(); /// go on with the thermal assets - Set thermalBuses = thermalSource.getThermalBuses(operators); - Set thermalStorages = + Map thermalBuses = thermalSource.getThermalBuses(operators); + Map thermalStorages = thermalSource.getThermalStorages(operators, thermalBuses); /// go on with the nodes - Set nodes = rawGridSource.getNodes(operators); + Map nodes = rawGridSource.getNodes(operators); Try, SourceException> fixedFeedInInputs = Try.of(() -> getFixedFeedIns(operators, nodes, emUnits), SourceException.class); Try, SourceException> pvInputs = @@ -185,7 +185,7 @@ public SystemParticipants getSystemParticipants() throws SourceException { * @return a set of object and uuid unique {@link FixedFeedInInput} entities */ public Set getFixedFeedIns() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getFixedFeedIns(operators, rawGridSource.getNodes(operators), emUnits); } @@ -210,9 +210,9 @@ public Set getFixedFeedIns() throws SourceException { * @return a set of object and uuid unique {@link FixedFeedInInput} entities */ public Set getFixedFeedIns( - Set operators, Set nodes, Map emUnits) + Map operators, Map nodes, Map emUnits) throws SourceException { - return unpack( + return unpackSet( buildSystemParticipantEntityData(FixedFeedInInput.class, operators, nodes, emUnits) .map(fixedFeedInInputFactory::get), FixedFeedInInput.class); @@ -228,7 +228,7 @@ public Set getFixedFeedIns( * @return a set of object and uuid unique {@link PvInput} entities */ public Set getPvPlants() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getPvPlants(operators, rawGridSource.getNodes(operators), emUnits); } @@ -253,9 +253,9 @@ public Set getPvPlants() throws SourceException { * @return a set of object and uuid unique {@link PvInput} entities */ public Set getPvPlants( - Set operators, Set nodes, Map emUnits) + Map operators, Map nodes, Map emUnits) throws SourceException { - return unpack( + return unpackSet( buildSystemParticipantEntityData(PvInput.class, operators, nodes, emUnits) .map(pvInputFactory::get), PvInput.class); @@ -271,7 +271,7 @@ public Set getPvPlants( * @return a set of object and uuid unique {@link LoadInput} entities */ public Set getLoads() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getLoads(operators, rawGridSource.getNodes(operators), emUnits); } @@ -296,9 +296,9 @@ public Set getLoads() throws SourceException { * @return a set of object and uuid unique {@link LoadInput} entities */ public Set getLoads( - Set operators, Set nodes, Map emUnits) + Map operators, Map nodes, Map emUnits) throws SourceException { - return unpack( + return unpackSet( buildSystemParticipantEntityData(LoadInput.class, operators, nodes, emUnits) .map(loadInputFactory::get), LoadInput.class); @@ -314,7 +314,7 @@ public Set getLoads( * @return a set of object and uuid unique {@link EvcsInput} entities */ public Set getEvcs() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getEvcs(operators, rawGridSource.getNodes(operators), emUnits); } @@ -339,9 +339,9 @@ public Set getEvcs() throws SourceException { * @return a set of object and uuid unique {@link EvcsInput} entities */ public Set getEvcs( - Set operators, Set nodes, Map emUnits) + Map operators, Map nodes, Map emUnits) throws SourceException { - return unpack( + return unpackSet( buildSystemParticipantEntityData(EvcsInput.class, operators, nodes, emUnits) .map(evcsInputFactory::get), EvcsInput.class); @@ -357,7 +357,7 @@ public Set getEvcs( * @return a set of object and uuid unique {@link BmInput} entities */ public Set getBmPlants() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getBmPlants( operators, rawGridSource.getNodes(operators), emUnits, typeSource.getBmTypes()); @@ -384,12 +384,12 @@ public Set getBmPlants() throws SourceException { * @return a set of object and uuid unique {@link BmInput} entities */ public Set getBmPlants( - Set operators, - Set nodes, + Map operators, + Map nodes, Map emUnits, - Set types) + Map types) throws SourceException { - return unpack( + return unpackSet( buildTypedSystemParticipantEntityData(BmInput.class, operators, nodes, emUnits, types) .map(bmInputFactory::get), BmInput.class); @@ -406,7 +406,7 @@ public Set getBmPlants( * @return a set of object and uuid unique {@link StorageInput} entities */ public Set getStorages() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getStorages( operators, rawGridSource.getNodes(operators), emUnits, typeSource.getStorageTypes()); @@ -433,12 +433,12 @@ public Set getStorages() throws SourceException { * @return a set of object and uuid unique {@link StorageInput} entities */ public Set getStorages( - Set operators, - Set nodes, + Map operators, + Map nodes, Map emUnits, - Set types) + Map types) throws SourceException { - return unpack( + return unpackSet( buildTypedSystemParticipantEntityData(StorageInput.class, operators, nodes, emUnits, types) .map(storageInputFactory::get), StorageInput.class); @@ -454,7 +454,7 @@ public Set getStorages( * @return a set of object and uuid unique {@link WecInput} entities */ public Set getWecPlants() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getWecPlants( operators, rawGridSource.getNodes(operators), emUnits, typeSource.getWecTypes()); @@ -481,12 +481,12 @@ public Set getWecPlants() throws SourceException { * @return a set of object and uuid unique {@link WecInput} entities */ public Set getWecPlants( - Set operators, - Set nodes, + Map operators, + Map nodes, Map emUnits, - Set types) + Map types) throws SourceException { - return unpack( + return unpackSet( buildTypedSystemParticipantEntityData(WecInput.class, operators, nodes, emUnits, types) .map(wecInputFactory::get), WecInput.class); @@ -502,7 +502,7 @@ public Set getWecPlants( * @return a set of object and uuid unique {@link EvInput} entities */ public Set getEvs() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getEvs(operators, rawGridSource.getNodes(operators), emUnits, typeSource.getEvTypes()); } @@ -528,21 +528,21 @@ public Set getEvs() throws SourceException { * @return a set of object and uuid unique {@link EvInput} entities */ public Set getEvs( - Set operators, - Set nodes, + Map operators, + Map nodes, Map emUnits, - Set types) + Map types) throws SourceException { - return unpack( + return unpackSet( buildTypedSystemParticipantEntityData(EvInput.class, operators, nodes, emUnits, types) .map(evInputFactory::get), EvInput.class); } public Set getChpPlants() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); - Set thermalBuses = thermalSource.getThermalBuses(operators); + Map thermalBuses = thermalSource.getThermalBuses(operators); return getChpPlants( operators, rawGridSource.getNodes(operators), @@ -563,14 +563,14 @@ public Set getChpPlants() throws SourceException { * to {@link OperatorInput#NO_OPERATOR_ASSIGNED} */ public Set getChpPlants( - Set operators, - Set nodes, + Map operators, + Map nodes, Map emUnits, - Set types, - Set thermalBuses, - Set thermalStorages) + Map types, + Map thermalBuses, + Map thermalStorages) throws SourceException { - return unpack( + return unpackSet( buildChpEntityData( buildTypedSystemParticipantEntityData( ChpInput.class, operators, nodes, emUnits, types), @@ -581,7 +581,7 @@ public Set getChpPlants( } public Set getHeatPumps() throws SourceException { - Set operators = typeSource.getOperators(); + Map operators = typeSource.getOperators(); Map emUnits = energyManagementSource.getEmUnits(operators); return getHeatPumps( operators, @@ -602,13 +602,13 @@ public Set getHeatPumps() throws SourceException { * to {@link OperatorInput#NO_OPERATOR_ASSIGNED} */ public Set getHeatPumps( - Set operators, - Set nodes, + Map operators, + Map nodes, Map emUnits, - Set types, - Set thermalBuses) + Map types, + Map thermalBuses) throws SourceException { - return unpack( + return unpackSet( buildHpEntityData( buildTypedSystemParticipantEntityData( HpInput.class, operators, nodes, emUnits, types), @@ -622,8 +622,8 @@ public Set getHeatPumps( private static Stream> buildChpEntityData( Stream, SourceException>> typedEntityDataStream, - Collection thermalStorages, - Collection thermalBuses) { + Map thermalStorages, + Map thermalBuses) { return typedEntityDataStream .parallel() @@ -636,8 +636,8 @@ private static Stream> buildChpEntityDa private static Try createChpEntityData( SystemParticipantTypedEntityData typedEntityData, - Collection thermalStorages, - Collection thermalBuses) { + Map thermalStorages, + Map thermalBuses) { // get the raw data Map fieldsToAttributes = typedEntityData.getFieldsToValues(); @@ -647,14 +647,14 @@ private static Try createChpEntityData( Optional.ofNullable(fieldsToAttributes.get(THERMAL_STORAGE)) .flatMap( thermalStorageUuid -> - findFirstEntityByUuid(UUID.fromString(thermalStorageUuid), thermalStorages)); + Optional.ofNullable(thermalStorages.get(UUID.fromString(thermalStorageUuid)))); // get the thermal bus input for this chp unit Optional thermalBus = Optional.ofNullable(fieldsToAttributes.get("thermalBus")) .flatMap( thermalBusUuid -> - findFirstEntityByUuid(UUID.fromString(thermalBusUuid), thermalBuses)); + Optional.ofNullable(thermalBuses.get(UUID.fromString(thermalBusUuid)))); // if the thermal storage or the thermal bus are not present we return an // empty element and log a warning @@ -707,7 +707,7 @@ private static Try createChpEntityData( private static Stream> buildHpEntityData( Stream, SourceException>> typedEntityDataStream, - Collection thermalBuses) { + Map thermalBuses) { return typedEntityDataStream .parallel() @@ -719,7 +719,7 @@ private static Stream> buildHpEntityData private static Try createHpEntityData( SystemParticipantTypedEntityData typedEntityData, - Collection thermalBuses) { + Map thermalBuses) { // get the raw data Map fieldsToAttributes = typedEntityData.getFieldsToValues(); @@ -728,11 +728,7 @@ private static Try createHpEntityData( Optional.ofNullable(fieldsToAttributes.get(THERMAL_BUS)) .flatMap( thermalBusUuid -> - thermalBuses.stream() - .filter( - storage -> - storage.getUuid().toString().equalsIgnoreCase(thermalBusUuid)) - .findFirst() + Optional.ofNullable(thermalBuses.get(UUID.fromString(thermalBusUuid))) .map( thermalBus -> { @@ -751,13 +747,13 @@ private static Try createHpEntityData( // if the requested entity is not present we return an empty element and // log a warning if (hpInputEntityDataOpt.isEmpty()) { - String skippingMessage = + String failureMessage = buildSkippingMessage( typedEntityData.getTargetClass().getSimpleName(), safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), "thermalBus: " + safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); + return new Failure<>(new SourceException("Failure due to: " + failureMessage)); } return new Success<>(hpInputEntityDataOpt.get()); @@ -777,10 +773,10 @@ private static Try createHpEntityData( Stream, SourceException>> buildTypedSystemParticipantEntityData( Class entityClass, - Collection operators, - Collection nodes, + Map operators, + Map nodes, Map emUnits, - Collection types) { + Map types) { return buildTypedSystemParticipantEntityData( buildSystemParticipantEntityData(entityClass, operators, nodes, emUnits), types); } @@ -804,7 +800,7 @@ private static Try createHpEntityData( buildTypedSystemParticipantEntityData( Stream> systemParticipantEntityDataStream, - Collection types) { + Map types) { return systemParticipantEntityDataStream .parallel() .map( @@ -817,7 +813,7 @@ private static Try createHpEntityData( private static Try, SourceException> createTypedSystemParticipantEntityData( - SystemParticipantEntityData systemParticipantEntityData, Collection types) { + SystemParticipantEntityData systemParticipantEntityData, Map types) { return getAssetType( types, systemParticipantEntityData.getFieldsToValues(), @@ -838,8 +834,8 @@ private static Try createHpEntityData( private Stream> buildSystemParticipantEntityData( Class entityClass, - Collection operators, - Collection nodes, + Map operators, + Map nodes, Map emUnits) { return buildSystemParticipantEntityData( nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes), diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index d83ed8c42..a8e5d3e11 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.*; +import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; @@ -17,6 +18,7 @@ import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -56,7 +58,7 @@ public ThermalSource(TypeSource typeSource, DataSource dataSource) { * * @return a set of object and uuid unique {@link ThermalBusInput} entities */ - public Set getThermalBuses() throws SourceException { + public Map getThermalBuses() throws SourceException { return getThermalBuses(typeSource.getOperators()); } @@ -78,12 +80,11 @@ public Set getThermalBuses() throws SourceException { * the returning instances * @return a set of object and uuid unique {@link ThermalBusInput} entities */ - public Set getThermalBuses(Set operators) throws SourceException { - return Try.scanCollection( - buildAssetInputEntities(ThermalBusInput.class, thermalBusInputFactory, operators), - ThermalBusInput.class) - .transformF(SourceException::new) - .getOrThrow(); + public Map getThermalBuses(Map operators) + throws SourceException { + return unpackMap( + assetInputEntityStream(ThermalBusInput.class, thermalBusInputFactory, operators), + ThermalBusInput.class); } /** @@ -97,8 +98,9 @@ public Set getThermalBuses(Set operators) throws * * @return a set of object and uuid unique {@link ThermalStorageInput} entities */ - public Set getThermalStorages() throws SourceException { - return new HashSet<>(getCylindricStorages()); + public Map getThermalStorages() throws SourceException { + return getCylindricalStorages().stream() + .collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())); } /** @@ -122,9 +124,11 @@ public Set getThermalStorages() throws SourceException { * for the returning instances * @return a set of object and uuid unique {@link ThermalStorageInput} entities */ - public Set getThermalStorages( - Set operators, Set thermalBuses) throws SourceException { - return new HashSet<>(getCylindricStorages(operators, thermalBuses)); + public Map getThermalStorages( + Map operators, Map thermalBuses) + throws SourceException { + return getCylindricalStorages(operators, thermalBuses).stream() + .collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())); } /** @@ -137,10 +141,11 @@ public Set getThermalStorages( * * @return a set of object and uuid unique {@link ThermalHouseInput} entities */ - public Set getThermalHouses() throws SourceException { - return buildThermalHouseInputEntities(thermalHouseInputFactory) - .transformF(SourceException::new) - .getOrThrow(); + public Map getThermalHouses() throws SourceException { + Map operators = typeSource.getOperators(); + Map thermalBuses = getThermalBuses(); + + return getThermalHouses(operators, thermalBuses); } /** @@ -163,11 +168,16 @@ public Set getThermalHouses() throws SourceException { * for the returning instances * @return a set of object and uuid unique {@link ThermalHouseInput} entities */ - public Set getThermalHouses( - Set operators, Set thermalBuses) throws SourceException { - return buildThermalHouseInputEntities(thermalHouseInputFactory, operators, thermalBuses) - .transformF(SourceException::new) - .getOrThrow(); + public Map getThermalHouses( + Map operators, Map thermalBuses) + throws SourceException { + return unpackMap( + assetInputEntityDataStream(ThermalHouseInput.class, operators) + .flatMap( + assetInputEntityData -> + buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) + .map(thermalHouseInputFactory::get)), + ThermalHouseInput.class); } /** @@ -180,7 +190,7 @@ public Set getThermalHouses( * * @return a set of object and uuid unique {@link CylindricalStorageInput} entities */ - public Set getCylindricStorages() throws SourceException { + public Set getCylindricalStorages() throws SourceException { return buildCylindricalStorageInputEntities(cylindricalStorageInputFactory) .transformF(SourceException::new) .getOrThrow(); @@ -193,7 +203,7 @@ public Set getCylindricStorages() throws SourceExceptio * CylindricalStorageInput#equals(Object)} is NOT restricted on the uuid of {@link * CylindricalStorageInput}. * - *

In contrast to {@link #getCylindricStorages()} this interface provides the ability to pass + *

In contrast to {@link #getCylindricalStorages()} this interface provides the ability to pass * in an already existing set of {@link OperatorInput} entities, the {@link * CylindricalStorageInput} instances depend on. Doing so, already loaded nodes can be recycled to * improve performance and prevent unnecessary loading operations. @@ -207,31 +217,27 @@ public Set getCylindricStorages() throws SourceExceptio * for the returning instances * @return a set of object and uuid unique {@link CylindricalStorageInput} entities */ - public Set getCylindricStorages( - Set operators, Set thermalBuses) throws SourceException { - return Try.scanCollection( - buildCylindricalStorageInputEntities( - cylindricalStorageInputFactory, operators, thermalBuses), - CylindricalStorageInput.class) - .transformF(SourceException::new) - .getOrThrow(); + public Set getCylindricalStorages( + Map operators, Map thermalBuses) + throws SourceException { + return unpackSet( + buildCylindricalStorageInputEntities( + cylindricalStorageInputFactory, operators, thermalBuses), + CylindricalStorageInput.class); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- protected Stream> buildThermalUnitInputEntityData( - AssetInputEntityData assetInputEntityData, Collection thermalBuses) { + AssetInputEntityData assetInputEntityData, Map thermalBuses) { // get the raw data Map fieldsToAttributes = assetInputEntityData.getFieldsToValues(); // get the thermal bus input for this chp unit - String thermalBusUuid = fieldsToAttributes.get("thermalbus"); - Optional thermalBus = - thermalBuses.stream() - .filter(storage -> storage.getUuid().toString().equalsIgnoreCase(thermalBusUuid)) - .findFirst(); + UUID thermalBusUuid = UUID.fromString(fieldsToAttributes.get("thermalbus")); + Optional thermalBus = Optional.ofNullable(thermalBuses.get(thermalBusUuid)); // remove fields that are passed as objects to constructor fieldsToAttributes.keySet().removeAll(new HashSet<>(Collections.singletonList("thermalbus"))); @@ -257,37 +263,9 @@ public Set getCylindricStorages( thermalBus.get()))); } - public Try, FailureException> buildThermalHouseInputEntities( - ThermalHouseInputFactory factory) throws SourceException { - Set thermalBuses = getThermalBuses(); - - return Try.scanCollection( - assetInputEntityDataStream(ThermalHouseInput.class, typeSource.getOperators()) - .flatMap( - assetInputEntityData -> - buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) - .map(factory::get)) - .collect(Collectors.toSet()), - ThermalHouseInput.class); - } - - public Try, FailureException> buildThermalHouseInputEntities( - ThermalHouseInputFactory factory, - Collection operators, - Collection thermalBuses) { - return Try.scanCollection( - assetInputEntityDataStream(ThermalHouseInput.class, operators) - .flatMap( - assetInputEntityData -> - buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) - .map(factory::get)) - .collect(Collectors.toSet()), - ThermalHouseInput.class); - } - public Try, FailureException> buildCylindricalStorageInputEntities( CylindricalStorageInputFactory factory) throws SourceException { - Set thermalBuses = getThermalBuses(); + Map thermalBuses = getThermalBuses(); return Try.scanCollection( assetInputEntityDataStream(CylindricalStorageInput.class, typeSource.getOperators()) @@ -299,15 +277,15 @@ public Try, FailureException> buildCylindricalStora CylindricalStorageInput.class); } - public Set> buildCylindricalStorageInputEntities( - CylindricalStorageInputFactory factory, - Collection operators, - Collection thermalBuses) { + public Stream> + buildCylindricalStorageInputEntities( + CylindricalStorageInputFactory factory, + Map operators, + Map thermalBuses) { return assetInputEntityDataStream(CylindricalStorageInput.class, operators) .flatMap( assetInputEntityData -> buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) - .map(factory::get)) - .collect(Collectors.toSet()); + .map(factory::get)); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index 9db4d0f22..75d86f0c6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -22,7 +22,8 @@ import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.utils.Try; -import java.util.Set; +import java.util.Map; +import java.util.UUID; import java.util.stream.Stream; /** @@ -60,8 +61,8 @@ public TypeSource(DataSource dataSource) { * * @return a set of object and uuid unique {@link Transformer2WTypeInput} entities */ - public Set getTransformer2WTypes() throws SourceException { - return unpack( + public Map getTransformer2WTypes() throws SourceException { + return unpackMap( simpleEntityDataStream(Transformer2WTypeInput.class) .map(transformer2WTypeInputFactory::get), Transformer2WTypeInput.class); @@ -75,8 +76,8 @@ public Set getTransformer2WTypes() throws SourceExceptio * * @return a set of object and uuid unique {@link OperatorInput} entities */ - public Set getOperators() throws SourceException { - return unpack( + public Map getOperators() throws SourceException { + return unpackMap( simpleEntityDataStream(OperatorInput.class).map(operatorInputFactory::get), OperatorInput.class); } @@ -89,8 +90,8 @@ public Set getOperators() throws SourceException { * * @return a set of object and uuid unique {@link LineTypeInput} entities */ - public Set getLineTypes() throws SourceException { - return unpack( + public Map getLineTypes() throws SourceException { + return unpackMap( simpleEntityDataStream(LineTypeInput.class).map(lineTypeInputFactory::get), LineTypeInput.class); } @@ -104,8 +105,8 @@ public Set getLineTypes() throws SourceException { * * @return a set of object and uuid unique {@link Transformer3WTypeInput} entities */ - public Set getTransformer3WTypes() throws SourceException { - return unpack( + public Map getTransformer3WTypes() throws SourceException { + return unpackMap( simpleEntityDataStream(Transformer3WTypeInput.class) .map(transformer3WTypeInputFactory::get), Transformer3WTypeInput.class); @@ -119,8 +120,8 @@ public Set getTransformer3WTypes() throws SourceExceptio * * @return a set of object and uuid unique {@link BmTypeInput} entities */ - public Set getBmTypes() throws SourceException { - return unpack( + public Map getBmTypes() throws SourceException { + return unpackMap( buildEntities(BmTypeInput.class, systemParticipantTypeInputFactory), BmTypeInput.class); } @@ -132,8 +133,8 @@ public Set getBmTypes() throws SourceException { * * @return a set of object and uuid unique {@link ChpTypeInput} entities */ - public Set getChpTypes() throws SourceException { - return unpack( + public Map getChpTypes() throws SourceException { + return unpackMap( buildEntities(ChpTypeInput.class, systemParticipantTypeInputFactory), ChpTypeInput.class); } @@ -145,8 +146,8 @@ public Set getChpTypes() throws SourceException { * * @return a set of object and uuid unique {@link HpTypeInput} entities */ - public Set getHpTypes() throws SourceException { - return unpack( + public Map getHpTypes() throws SourceException { + return unpackMap( buildEntities(HpTypeInput.class, systemParticipantTypeInputFactory), HpTypeInput.class); } @@ -158,8 +159,8 @@ public Set getHpTypes() throws SourceException { * * @return a set of object and uuid unique {@link StorageTypeInput} entities */ - public Set getStorageTypes() throws SourceException { - return unpack( + public Map getStorageTypes() throws SourceException { + return unpackMap( buildEntities(StorageTypeInput.class, systemParticipantTypeInputFactory), StorageTypeInput.class); } @@ -172,8 +173,8 @@ public Set getStorageTypes() throws SourceException { * * @return a set of object and uuid unique {@link WecTypeInput} entities */ - public Set getWecTypes() throws SourceException { - return unpack( + public Map getWecTypes() throws SourceException { + return unpackMap( buildEntities(WecTypeInput.class, systemParticipantTypeInputFactory), WecTypeInput.class); } @@ -185,8 +186,8 @@ public Set getWecTypes() throws SourceException { * * @return a set of object and uuid unique {@link EvTypeInput} entities */ - public Set getEvTypes() throws SourceException { - return unpack( + public Map getEvTypes() throws SourceException { + return unpackMap( buildEntities(EvTypeInput.class, systemParticipantTypeInputFactory), EvTypeInput.class); } diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 6c98e7b53..3ae4943b1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -45,7 +45,6 @@ import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.EnergyPriceValue import edu.ie3.datamodel.models.value.Value -import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SampleJointGrid import edu.ie3.test.common.SystemParticipantTestData @@ -252,6 +251,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { OperationTime.notLimited(), Mock(NodeInput), new CosPhiFixed("cosPhiFixed:{(0.0,0.95)}"), + Mock(EmInput), 0.2, Quantities.getQuantity(-8.926613807678223, DEGREE_GEOM), Quantities.getQuantity(95d, PERCENT), diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 0bde14b7b..acf8ee7c1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -36,24 +36,6 @@ class EntitySourceTest extends Specification { DummyEntitySource dummyEntitySource = new DummyEntitySource(csvDataSource) - def "A csv data source is able to find the correct first entity by uuid"() { - given: - def uuid = UUID.randomUUID() - def queriedOperator = new OperatorInput(uuid, "b") - def entities = Arrays.asList( - new OperatorInput(UUID.randomUUID(), "a"), - queriedOperator, - new OperatorInput(UUID.randomUUID(), "c") - ) - - when: - def actual = dummyEntitySource.findFirstEntityByUuid(uuid, entities) - - then: - actual.present - actual.get() == queriedOperator - } - def "A CsvDataSource should always return an operator. Either the found one (if any) or OperatorInput.NO_OPERATOR_ASSIGNED"() { expect: diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index 8e595a467..f87d80c81 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -10,7 +10,7 @@ import edu.ie3.datamodel.io.source.EnergyManagementSource import edu.ie3.datamodel.io.source.TypeSource import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.utils.Try -import edu.ie3.test.common.EnergyManagementTestData +import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { @@ -29,8 +29,8 @@ class CsvEnergyManagementSourceTest extends Specification implements CsvTestData emUnits.data.get().emUnits == resultingSet as Set where: - operators || resultingSet - [EnergyManagementTestData.emInput.operator] || [EnergyManagementTestData.emInput] - [] || [EnergyManagementTestData.emInput.copy().operator(OperatorInput.NO_OPERATOR_ASSIGNED).build()] + operators || resultingSet + [SystemParticipantTestData.emInput.operator] || [SystemParticipantTestData.emInput] + [] || [SystemParticipantTestData.emInput.copy().operator(OperatorInput.NO_OPERATOR_ASSIGNED).build()] } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy index 38f15b346..8946bf585 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy @@ -22,7 +22,6 @@ import spock.lang.Specification class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { - def "A CsvGraphicSource should provide an instance of GraphicElements based on valid input data correctly"() { given: def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) @@ -44,13 +43,13 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { def rawGridSource = new RawGridSource(typeSource, new CsvDataSource(csvSep, gridDefaultFolderPath, fileNamingStrategy)) { @Override - Set getNodes() { - return Collections.emptySet() + Map getNodes() { + return Collections.emptyMap() } @Override - Set getNodes(Set operators) { - return Collections.emptySet() + Map getNodes(Map operators) { + return Collections.emptyMap() } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy index eba4c636a..e94c288e1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy @@ -59,7 +59,7 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { //test method when operators and thermal buses are not provided as constructor parameters when: - def resultingCylindricalStorageWoOperator = csvThermalSource.getCylindricStorages() + def resultingCylindricalStorageWoOperator = csvThermalSource.getCylindricalStorages() then: resultingCylindricalStorageWoOperator.size() == 1 @@ -76,7 +76,7 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { //test method when operators and thermal buses are provided as constructor parameters when: - def resultingCylindricalStorage = csvThermalSource.getCylindricStorages(operators, thermalBuses) + def resultingCylindricalStorage = csvThermalSource.getCylindricalStorages(operators, thermalBuses) then: resultingCylindricalStorage.size() == 1 diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy deleted file mode 100644 index 7bb2e6902..000000000 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy +++ /dev/null @@ -1,29 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.datamodel.models.input.container - -import edu.ie3.test.common.EnergyManagementTestData -import spock.lang.Specification - -class EnergyManagementUnitsTest extends Specification { - - def "An EnergyManagementUnits' copy method should work as expected"() { - given: - def energyManagementUnits = new EnergyManagementUnits( - Collections.singleton(EnergyManagementTestData.emInput) - ) - - def modifiedEmInput = EnergyManagementTestData.emInput.copy().id("modified").build() - - when: - def modifiedEnergyManagementUnits = energyManagementUnits.copy() - .emUnits(Set.of(modifiedEmInput)) - .build() - - then: - modifiedEnergyManagementUnits.emUnits.first() == modifiedEmInput - } -} diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index 21bc87957..bb614d5c8 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -5,10 +5,8 @@ */ package edu.ie3.datamodel.models.input.container -import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants -import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification @@ -43,7 +41,6 @@ class JointGridContainerTest extends Specification { def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) def rawGrid = new RawGridElements(List.of(GridTestData.lineAtoB, GridTestData.transformerAtoBtoC)) def systemParticipants = new SystemParticipants(List.of(SystemParticipantTestData.bmInput)) - def emUnits = new EnergyManagementUnits(Set.of(EnergyManagementTestData.emInput)) def graphics = new GraphicElements(Set.of(GridTestData.nodeGraphicD), Set.of(GridTestData.lineGraphicCtoD)) when: @@ -51,7 +48,6 @@ class JointGridContainerTest extends Specification { .gridName("new grid name") .rawGrid(rawGrid) .systemParticipants(systemParticipants) - .emUnits(emUnits) .graphics(graphics) .build() @@ -59,7 +55,6 @@ class JointGridContainerTest extends Specification { modifiedJointGridContainer.gridName == "new grid name" modifiedJointGridContainer.rawGrid == rawGrid modifiedJointGridContainer.systemParticipants == systemParticipants - modifiedJointGridContainer.emUnits == emUnits modifiedJointGridContainer.graphics == graphics } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 5427810e5..4bafff366 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.models.input.system -import edu.ie3.test.common.EnergyManagementTestData +import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification class EmInputTest extends Specification { @@ -15,55 +15,56 @@ class EmInputTest extends Specification { def emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", - EnergyManagementTestData.emControlStrategy + SystemParticipantTestData.emControlStrategy, + SystemParticipantTestData.parentEm ) then: emInput.with { assert uuid == UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792") assert id == "test_emInput" - assert controlStrategy == EnergyManagementTestData.emControlStrategy + assert controlStrategy == SystemParticipantTestData.emControlStrategy } } def "EmInputs are comparable"() { given: - def emInputA = EnergyManagementTestData.emInput + def emInputA = SystemParticipantTestData.emInput expect: (emInputA == emInputB) == isEqual where: - emInputB || isEqual - EnergyManagementTestData.emInput || true - EnergyManagementTestData.emInput.copy().build() || true - EnergyManagementTestData.emInput.copy().id("otherId").build() || false + emInputB || isEqual + SystemParticipantTestData.emInput || true + SystemParticipantTestData.emInput.copy().build() || true + SystemParticipantTestData.emInput.copy().id("otherId").build() || false } def "The EmInput to String method work as expected"() { given: - def emInputToString = EnergyManagementTestData.emInput.toString() + def emInputToString = SystemParticipantTestData.emInput.toString() expect: emInputToString == "EmInput{" + "uuid=" + - EnergyManagementTestData.emInput.uuid + + SystemParticipantTestData.emInput.uuid + ", id='" + - EnergyManagementTestData.emInput.id + + SystemParticipantTestData.emInput.id + ", operator=" + - EnergyManagementTestData.emInput.operator.uuid + + SystemParticipantTestData.emInput.operator.uuid + ", operationTime=" + - EnergyManagementTestData.emInput.operationTime + + SystemParticipantTestData.emInput.operationTime + ", controlStrategy=" + - EnergyManagementTestData.emInput.controlStrategy + + SystemParticipantTestData.emInput.controlStrategy + '}' } def "A EmInput copy method should work as expected"() { given: - def emInput = EnergyManagementTestData.emInput + def emInput = SystemParticipantTestData.emInput def newStrat = "new_strat" when: diff --git a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy index 72461b659..c07ff0d54 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy @@ -294,7 +294,6 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics HashMap expectedSubGrids = ComplexTopology.expectedSubGrids @@ -305,7 +304,6 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGrid, systemParticipants, - emUnits, graphics) then: @@ -325,7 +323,6 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGridInput= ComplexTopology.grid.rawGrid SystemParticipants systemParticipantsInput = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphicsInput = ComplexTopology.grid.graphics HashMap unmodifiedSubGrids = ComplexTopology.expectedSubGrids @@ -335,7 +332,6 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGridInput, systemParticipantsInput, - emUnits, graphicsInput) when: @@ -390,14 +386,12 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics Map subgrids = ContainerUtils.buildSubGridContainers( gridName, subNetNumbers, rawGrid, systemParticipants, - emUnits, graphics) SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -415,7 +409,6 @@ class ContainerUtilsTest extends Specification { String gridName = ComplexTopology.gridName RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticpants = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -424,7 +417,6 @@ class ContainerUtilsTest extends Specification { gridName, rawGrid, systemParticpants, - emUnits, graphics) then: diff --git a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy index 172675589..1c56b3838 100644 --- a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy +++ b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy @@ -5,7 +5,6 @@ */ package edu.ie3.test.common -import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants import edu.ie3.datamodel.graph.SubGridGate @@ -46,7 +45,6 @@ class ComplexTopology extends GridTestData { gridName, rawGrid, emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set)) @@ -67,7 +65,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -84,7 +81,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -101,7 +97,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -118,7 +113,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -138,7 +132,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -158,7 +151,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy deleted file mode 100644 index 0fae3df5c..000000000 --- a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy +++ /dev/null @@ -1,32 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.test.common - -import edu.ie3.datamodel.models.input.container.EnergyManagementUnits -import edu.ie3.datamodel.models.input.system.EmInput - -class EnergyManagementTestData { - - public static final UUID[] connectedAssets = new UUID[]{ - SystemParticipantTestData.loadInput.uuid, - SystemParticipantTestData.pvInput.uuid - } - public static final String emControlStrategy = "self_optimization" - public static final UUID parentEm = UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd") - - - public static final emInput = new EmInput( - UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), - "test_emInput", - SystemParticipantTestData.operator, - SystemParticipantTestData.operationTime, - emControlStrategy, - parentEm - ) - - public static EnergyManagementUnits emptyEnergyManagementUnits = - new EnergyManagementUnits([] as List) -} diff --git a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy index 44243df05..ea7ea00ec 100644 --- a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy +++ b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy @@ -15,7 +15,6 @@ import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput -import edu.ie3.datamodel.models.input.container.EnergyManagementUnits import edu.ie3.datamodel.models.input.container.GraphicElements import edu.ie3.datamodel.models.input.container.JointGridContainer import edu.ie3.datamodel.models.input.container.RawGridElements @@ -48,7 +47,6 @@ class SampleJointGrid extends SystemParticipantTestData { "sampleGrid", rawGridElements, systemParticipants(rawGridElements), - new EnergyManagementUnits(Collections.emptySet()), new GraphicElements(Collections.emptySet())) } @@ -72,6 +70,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, albedo, azimuth, etaConv, @@ -91,6 +90,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, standardLoadProfile, false, eConsAnnual, @@ -105,6 +105,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, standardLoadProfile, false, eConsAnnual, @@ -120,6 +121,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, storageTypeInput) return new SystemParticipants( diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index a36f165f2..0345a4acc 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -40,7 +40,6 @@ class SystemParticipantTestData { static final OperatorInput operator = new OperatorInput( UUID.fromString("8f9682df-0744-4b58-a122-f0dc730f6510"), "TestOperator") public static final NodeInput participantNode = GridTestData.nodeA - static final UUID em = UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd") // general type data static final CosPhiFixed cosPhiFixed = new CosPhiFixed("cosPhiFixed:{(0.0,0.95)}") @@ -56,6 +55,18 @@ class SystemParticipantTestData { private static final ComparableQuantity opex = Quantities.getQuantity(50d, ENERGY_PRICE) static final ComparableQuantity etaConv = Quantities.getQuantity(98d, EFFICIENCY) + // EmInput + public static final String emControlStrategy = "self_optimization" + public static final UUID parentEm = UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd") + + public static final emInput = new EmInput( + UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), + "test_emInput", + SystemParticipantTestData.operator, + SystemParticipantTestData.operationTime, + emControlStrategy, + parentEm + ) // FixedFeedInput public static final FixedFeedInInput fixedFeedInInput = new FixedFeedInInput( @@ -65,7 +76,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - em, + emInput, sRated, cosPhiRated ) @@ -83,7 +94,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - em, + emInput, albedo, azimuth, etaConv, @@ -120,7 +131,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiP, - em, + emInput, wecType, false ) @@ -174,7 +185,7 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, - em, + emInput, chpTypeInput, thermalStorage, false @@ -201,7 +212,7 @@ class SystemParticipantTestData { operationTime, participantNode, qV, - em, + emInput, bmTypeInput, false, false, @@ -227,7 +238,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - em, + emInput, evTypeInput ) @@ -241,7 +252,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - em, + emInput, standardLoadProfile, false, eConsAnnual, @@ -278,7 +289,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - em, + emInput, storageTypeInput ) @@ -301,7 +312,7 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, - em, + emInput, hpTypeInput ) @@ -314,7 +325,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - em, + emInput, ChargingPointTypeUtils.HouseholdSocket, 4, cosPhiRated, From 7f197ad73171ff10d64ea4fd0d8628af958a2721 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Mon, 18 Dec 2023 19:51:06 +0100 Subject: [PATCH 048/228] Further progress. Simplified EntitySource and subclasses a lot. --- .../ie3/datamodel/io/factory/EntityData.java | 4 +- .../input/ConnectorInputEntityData.java | 15 + .../input/ThermalUnitInputEntityData.java | 12 + .../input/Transformer3WInputEntityData.java | 13 + .../input/TypedConnectorInputEntityData.java | 16 +- .../graphics/LineGraphicInputEntityData.java | 12 + .../graphics/NodeGraphicInputEntityData.java | 12 + .../input/participant/BmInputFactory.java | 2 +- .../input/participant/ChpInputEntityData.java | 19 +- .../input/participant/ChpInputFactory.java | 2 +- .../input/participant/EmInputFactory.java | 2 +- .../input/participant/EvInputFactory.java | 2 +- .../input/participant/EvcsInputFactory.java | 2 +- .../participant/FixedFeedInInputFactory.java | 2 +- .../input/participant/HpInputEntityData.java | 16 +- .../input/participant/HpInputFactory.java | 2 +- .../input/participant/LoadInputFactory.java | 2 +- .../input/participant/PvInputFactory.java | 2 +- .../participant/StorageInputFactory.java | 2 +- .../SystemParticipantEntityData.java | 2 +- .../SystemParticipantTypedEntityData.java | 2 +- .../input/participant/WecInputFactory.java | 2 +- .../io/source/EnergyManagementSource.java | 14 +- .../ie3/datamodel/io/source/EntitySource.java | 466 ++++++++++-------- .../datamodel/io/source/GraphicSource.java | 92 +--- .../datamodel/io/source/RawGridSource.java | 218 ++------ .../io/source/ResultEntitySource.java | 2 +- .../io/source/SystemParticipantSource.java | 217 ++------ .../datamodel/io/source/ThermalSource.java | 117 ++--- .../ie3/datamodel/io/source/TypeSource.java | 12 +- .../models/input/{system => }/EmInput.java | 4 +- .../models/input/system/BmInput.java | 1 + .../models/input/system/ChpInput.java | 1 + .../models/input/system/EvInput.java | 1 + .../models/input/system/EvcsInput.java | 1 + .../models/input/system/FixedFeedInInput.java | 1 + .../models/input/system/HpInput.java | 1 + .../models/input/system/LoadInput.java | 1 + .../models/input/system/PvInput.java | 1 + .../models/input/system/StorageInput.java | 1 + .../input/system/SystemParticipantInput.java | 1 + .../models/input/system/WecInput.java | 1 + .../models/result/system/EmResult.java | 3 +- .../participant/BmInputFactoryTest.groovy | 5 +- .../participant/ChpInputFactoryTest.groovy | 5 +- .../participant/EmInputFactoryTest.groovy | 2 +- .../participant/EvInputFactoryTest.groovy | 5 +- .../participant/EvcsInputFactoryTest.groovy | 12 +- .../FixedFeedInInputFactoryTest.groovy | 9 +- .../participant/HpInputFactoryTest.groovy | 5 +- .../participant/LoadInputFactoryTest.groovy | 6 +- .../participant/PvInputFactoryTest.groovy | 5 +- .../StorageInputFactoryTest.groovy | 5 +- .../participant/WecInputFactoryTest.groovy | 5 +- ...EntityPersistenceNamingStrategyTest.groovy | 2 +- .../io/processor/ProcessorProviderTest.groovy | 1 + .../datamodel/io/sink/CsvFileSinkTest.groovy | 4 +- .../io/source/EntitySourceTest.groovy | 2 +- .../models/input/system/EmInputTest.groovy | 1 + .../common/SystemParticipantTestData.groovy | 1 + 60 files changed, 605 insertions(+), 771 deletions(-) rename src/main/java/edu/ie3/datamodel/models/input/{system => }/EmInput.java (95%) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java index ce750f98f..189279f5d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java @@ -29,7 +29,7 @@ * @version 0.1 * @since 28.01.20 */ -public abstract class EntityData extends FactoryData { +public class EntityData extends FactoryData { private static final Logger logger = LoggerFactory.getLogger(EntityData.class); private static final GeoJsonReader geoJsonReader = new GeoJsonReader(); @@ -39,7 +39,7 @@ public abstract class EntityData extends FactoryData { * @param fieldsToAttributes attribute map: field name to value * @param entityClass class of the entity to be created with this data */ - protected EntityData( + public EntityData( Map fieldsToAttributes, Class entityClass) { super(fieldsToAttributes, entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityData.java index 758883595..4c795e89d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/ConnectorInputEntityData.java @@ -42,6 +42,21 @@ public ConnectorInputEntityData( this.nodeB = nodeB; } + /** + * Creates a new ConnectorInputEntityData object based on a given {@link AssetInputEntityData} + * object and given nodes + * + * @param entityData The AssetInputEntityData object to enhance + * @param nodeA The first node to add + * @param nodeB The second node to add + */ + public ConnectorInputEntityData( + AssetInputEntityData entityData, NodeInput nodeA, NodeInput nodeB) { + super(entityData, entityData.getOperatorInput()); + this.nodeA = nodeA; + this.nodeB = nodeB; + } + public NodeInput getNodeA() { return nodeA; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalUnitInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalUnitInputEntityData.java index b9b67f836..c936b58f9 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalUnitInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/ThermalUnitInputEntityData.java @@ -31,6 +31,18 @@ public ThermalUnitInputEntityData( this.busInput = busInput; } + /** + * Creates a new ThermalUnitInputEntityData object based on a given {@link AssetInputEntityData} + * object and a bus input + * + * @param entityData The AssetInputEntityData object to enhance + * @param busInput The thermal bus input + */ + public ThermalUnitInputEntityData(AssetInputEntityData entityData, ThermalBusInput busInput) { + super(entityData, entityData.getOperatorInput()); + this.busInput = busInput; + } + public ThermalBusInput getBusInput() { return busInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputEntityData.java index 47da51e48..e53678f1a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/Transformer3WInputEntityData.java @@ -39,6 +39,19 @@ public Transformer3WInputEntityData( this.nodeC = nodeC; } + /** + * Creates a new Transformer3WInputEntityData object based on a given {@link + * TypedConnectorInputEntityData} object and given third node + * + * @param entityData The TypedConnectorInputEntityData object to enhance + * @param nodeC The third node + */ + public Transformer3WInputEntityData( + TypedConnectorInputEntityData entityData, NodeInput nodeC) { + super(entityData, entityData.getType()); + this.nodeC = nodeC; + } + public NodeInput getNodeC() { return nodeC; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/TypedConnectorInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/TypedConnectorInputEntityData.java index 7f3a56f83..c70bb2231 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/TypedConnectorInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/TypedConnectorInputEntityData.java @@ -46,8 +46,8 @@ public TypedConnectorInputEntityData( } /** - * Creates a new TypedConnectorInputEntityData object for an operable connector input input that - * input that needs a type input as well + * Creates a new TypedConnectorInputEntityData object for an operable connector input that needs a + * type input as well * * @param fieldsToAttributes attribute map: field name to value * @param entityClass class of the entity to be created with this data @@ -67,6 +67,18 @@ public TypedConnectorInputEntityData( this.type = type; } + /** + * Creates a new TypedConnectorInputEntityData object based on a given {@link + * ConnectorInputEntityData} object and given type + * + * @param entityData The ConnectorInputEntityData object to enhance + * @param type type input + */ + public TypedConnectorInputEntityData(ConnectorInputEntityData entityData, T type) { + super(entityData, entityData.getNodeA(), entityData.getNodeB()); + this.type = type; + } + public T getType() { return type; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/LineGraphicInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/LineGraphicInputEntityData.java index 41bcc8b6e..48b87b088 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/LineGraphicInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/LineGraphicInputEntityData.java @@ -31,6 +31,18 @@ public LineGraphicInputEntityData(Map fieldsToAttributes, LineIn this.line = line; } + /** + * Creates a new LineGraphicInputEntityData object based on a given {@link EntityData} object and + * a line + * + * @param entityData The EntityData object to enhance + * @param line Referenced electrical line + */ + public LineGraphicInputEntityData(EntityData entityData, LineInput line) { + super(entityData); + this.line = line; + } + public LineInput getLine() { return line; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/NodeGraphicInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/NodeGraphicInputEntityData.java index a1a213cd9..edba66b27 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/NodeGraphicInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/graphics/NodeGraphicInputEntityData.java @@ -31,6 +31,18 @@ public NodeGraphicInputEntityData(Map fieldsToAttributes, NodeIn this.node = node; } + /** + * Creates a new NodeGraphicInputEntityData object based on a given {@link EntityData} object and + * a node + * + * @param entityData The EntityData object to enhance + * @param node node input element of this graphic + */ + public NodeGraphicInputEntityData(EntityData entityData, NodeInput node) { + super(entityData); + this.node = node; + } + public NodeInput getNode() { return node; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java index 3824982f0..bf8079394 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java @@ -7,10 +7,10 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.BmInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.BmTypeInput; import edu.ie3.util.quantities.interfaces.EnergyPrice; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java index 12067138f..81c11572a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java @@ -5,10 +5,10 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.type.ChpTypeInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput; @@ -44,6 +44,23 @@ public ChpInputEntityData( this.thermalStorageInput = thermalStorageInput; } + /** + * Creates a new ChpInputEntityData object based on a given {@link + * SystemParticipantTypedEntityData} object and a thermal bus and storage input + * + * @param entityData The SystemParticipantTypedEntityData object to enhance + * @param thermalBusInput The thermal bus input + * @param thermalStorageInput The thermal storage input + */ + public ChpInputEntityData( + SystemParticipantTypedEntityData entityData, + ThermalBusInput thermalBusInput, + ThermalStorageInput thermalStorageInput) { + super(entityData, entityData.getTypeInput()); + this.thermalBusInput = thermalBusInput; + this.thermalStorageInput = thermalStorageInput; + } + public ThermalBusInput getThermalBusInput() { return thermalBusInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java index ebe33ccf1..4ad47b060 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java @@ -6,10 +6,10 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index 9b9886e65..ebfb6a7b8 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -8,8 +8,8 @@ import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityFactory; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import java.util.ArrayList; import java.util.List; import java.util.Set; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java index 8d4779e0c..b2d492ce5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.EvInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.EvTypeInput; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java index aae2f8b6a..183cbf08b 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java @@ -9,9 +9,9 @@ import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.EvcsInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointType; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java index 9e379d4b0..bdede37bc 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java @@ -7,9 +7,9 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.FixedFeedInInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java index e782b40d5..a240b5f04 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java @@ -5,9 +5,10 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.io.factory.input.ConnectorInputEntityData; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.HpInput; import edu.ie3.datamodel.models.input.system.type.HpTypeInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; @@ -38,6 +39,19 @@ public HpInputEntityData( this.thermalBusInput = thermalBusInput; } + /** + * Creates a new HpInputEntityData object based on a given {@link ConnectorInputEntityData} object + * and given thermal bus input + * + * @param entityData The SystemParticipantTypedEntityData object to enhance + * @param thermalBusInput The thermal bus input + */ + public HpInputEntityData( + SystemParticipantTypedEntityData entityData, ThermalBusInput thermalBusInput) { + super(entityData, entityData.getTypeInput()); + this.thermalBusInput = thermalBusInput; + } + public ThermalBusInput getThermalBusInput() { return thermalBusInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java index 774a09ec8..b01ede298 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.HpInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java index b77853495..188504bb6 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java @@ -8,9 +8,9 @@ import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.LoadInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.profile.LoadProfile; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java index 29a3389fb..3d359fde2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java @@ -7,9 +7,9 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.PvInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import java.util.UUID; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java index d9790117d..aea43ba85 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.StorageInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.StorageTypeInput; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java index 204b72b3c..971832be4 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java @@ -7,9 +7,9 @@ import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import java.util.Map; import java.util.Objects; import java.util.Optional; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java index 4a28b210c..ab0bbe4b3 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.type.SystemParticipantTypeInput; import java.util.Map; import java.util.Objects; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java index 17b780c33..c6159adeb 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; import edu.ie3.datamodel.models.input.system.WecInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; import edu.ie3.datamodel.models.input.system.type.WecTypeInput; diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 3c3bc0326..552df1163 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -7,13 +7,10 @@ import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; -import edu.ie3.datamodel.utils.Try; import java.util.Map; import java.util.UUID; -import java.util.function.Function; -import java.util.stream.Collectors; public class EnergyManagementSource extends EntitySource { @@ -60,11 +57,8 @@ public Map getEmUnits() throws SourceException { * @return a map of uuid to {@link EmInput} entities */ public Map getEmUnits(Map operators) throws SourceException { - return Try.scanCollection( - buildAssetInputEntities(EmInput.class, emInputFactory, operators), EmInput.class) - .transformF(SourceException::new) - .getOrThrow() - .stream() - .collect(Collectors.toMap(EmInput::getUuid, Function.identity())); + return unpackMap( + buildAssetInputEntityData(EmInput.class, operators).map(emInputFactory::get), + EmInput.class); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index bc5ba964a..bb273f293 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -7,20 +7,21 @@ import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; -import edu.ie3.datamodel.io.factory.input.ConnectorInputEntityData; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; -import edu.ie3.datamodel.io.factory.input.TypedConnectorInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.*; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; import java.util.*; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.commons.lang3.function.TriFunction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +34,6 @@ public abstract class EntitySource { protected static final String OPERATOR = "operator"; protected static final String NODE = "node"; protected static final String TYPE = "type"; - protected static final String FIELDS_TO_VALUES_MAP = "fieldsToValuesMap"; protected final DataSource dataSource; @@ -43,192 +43,217 @@ protected EntitySource(DataSource dataSource) { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - protected static String buildSkippingMessage( - String entityDesc, String entityUuid, String entityId, String missingElementsString) { - return "Skipping " - + entityDesc - + " with uuid " - + entityUuid - + " and id " - + entityId - + ". Not all required entities found or map is missing entity key!\nMissing elements:\n" - + missingElementsString; - } - - /** - * Method for retrieving an element from a map. If the map doesn't contain the key an error - * message is build and returned instead. - * - *

Should not be used for other purposes than creating error messages. - * - * @param map with value - * @param key for the value - * @param mapName name of the map used for the error message - * @return either the value or an error message - */ - protected static String safeMapGet(Map map, String key, String mapName) { - return Optional.ofNullable(map.get(key)) - .orElse( - "Key '" - + key - + "' not found" - + (mapName.isEmpty() ? "!" : " in map '" + mapName + "'!")); - } - /** - * Checks if the requested type of asset can be found in the provided collection of types based on - * the provided fields to values mapping. The provided fields to values mapping needs to have one - * and only one field with key {@link #TYPE} and a corresponding UUID value. If the type can be - * found in the provided collection based on the UUID it is returned wrapped in a {@link Success}. - * Otherwise, a {@link Failure} is returned and a warning is logged. + * Enhances given entity data with an entity from the given entity map. The linked entity is + * chosen by taking into account the UUID found by retrieving the field with given fieldName from + * entityData. * - * @param types a collection of types that should be used for searching - * @param fieldsToAttributes the field name to value mapping incl. the key {@link #TYPE} - * @param skippedClassString debug string of the class that will be skipping - * @param the type of the resulting type instance - * @return a {@link Success} containing the type or a {@link Failure} if the type cannot be found + * @param entityData The entity data of the entity that provides a link to another entity via UUID + * @param fieldName The field name of the field that provides the UUID of the linked entity + * @param linkedEntities A map of UUID to entities, of which one should be linked to given entity + * data + * @param createEntityData The function that creates the resulting entity data given entityData + * and the linked entity + * @param Type of input entity data + * @param Type of the linked entity + * @param Type of resulting entity data that combines the given entityData and linked entity + * @return {@link Try} to enhanced data */ - protected static Try getAssetType( - Map types, Map fieldsToAttributes, String skippedClassString) { + protected static + Try enrichEntityData( + E entityData, + String fieldName, + Map linkedEntities, + BiFunction createEntityData) { + return getLinkedEntity(entityData, fieldName, linkedEntities) + .map( + linkedEntity -> { + Map fieldsToAttributes = entityData.getFieldsToValues(); - Optional assetType = - Optional.ofNullable(fieldsToAttributes.get(TYPE)) - .flatMap(typeUuid -> Optional.ofNullable(types.get(UUID.fromString(typeUuid)))); + // remove fields that are passed as objects to constructor + fieldsToAttributes.keySet().remove(fieldName); - // if the type is not present we return a failure - if (assetType.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - skippedClassString, - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - TYPE + ": " + safeMapGet(fieldsToAttributes, TYPE, FIELDS_TO_VALUES_MAP)); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } - return new Success<>(assetType.get()); + // build resulting entity data + return createEntityData.apply(entityData, linkedEntity); + }); } - // TODO /** - * Finds the required asset type and if present, adds it to the untyped entity data + * Enhances given entity data with two entities from the given entity maps. The linked entities + * are chosen by taking into account the UUIDs found by retrieving the fields with given + * fieldNameA and fieldNameB from entityData. * - * @param untypedEntityData Untyped entity data to enrich - * @param availableTypes Yet available asset types - * @param Type of the asset type + * @param entityData The entity data of the entity that provides links to two other entities via + * UUID + * @param fieldNameA The field name of the field that provides the UUID of the first linked entity + * @param linkedEntitiesA The first map of UUID to entities, of which one should be linked to + * given entity data + * @param fieldNameB The field name of the field that provides the UUID of the second linked + * entity + * @param linkedEntitiesB The second map of UUID to entities, of which one should be linked to + * given entity data + * @param createEntityData The function that creates the resulting entity data given entityData + * and the linked entities + * @param Type of input entity data + * @param Type of the first linked entity + * @param Type of the second linked entity + * @param Type of resulting entity data that combines the given entityData and two linked + * entities * @return {@link Try} to enhanced data */ - protected - Try, SourceException> findAndAddType( - ConnectorInputEntityData untypedEntityData, Map availableTypes) { - Try assetTypeOption = - getAssetType( - availableTypes, - untypedEntityData.getFieldsToValues(), - untypedEntityData.getClass().getSimpleName()); - return assetTypeOption.map(assetType -> addTypeToEntityData(untypedEntityData, assetType)); + protected static < + E extends EntityData, TA extends UniqueEntity, TB extends UniqueEntity, R extends E> + Try enrichEntityData( + E entityData, + String fieldNameA, + Map linkedEntitiesA, + String fieldNameB, + Map linkedEntitiesB, + TriFunction createEntityData) { + return getLinkedEntity(entityData, fieldNameA, linkedEntitiesA) + .flatMap( + linkedEntityA -> + getLinkedEntity(entityData, fieldNameB, linkedEntitiesB) + .map( + linkedEntityB -> { + Map fieldsToAttributes = entityData.getFieldsToValues(); + + // remove fields that are passed as objects to constructor + fieldsToAttributes.keySet().remove(fieldNameA); + fieldsToAttributes.keySet().remove(fieldNameB); + + // build resulting entity data + return createEntityData.apply(entityData, linkedEntityA, linkedEntityB); + })); } /** - * Enriches the given, untyped entity data with the provided asset type + * todo javadoc * - * @param untypedEntityData Untyped entity data to enrich - * @param assetType Asset type to add - * @param Type of the asset type - * @return The enriched entity data - */ - protected TypedConnectorInputEntityData addTypeToEntityData( - ConnectorInputEntityData untypedEntityData, T assetType) { - Map fieldsToAttributes = untypedEntityData.getFieldsToValues(); - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(TYPE); - - // build result object - return new TypedConnectorInputEntityData<>( - fieldsToAttributes, - untypedEntityData.getTargetClass(), - untypedEntityData.getOperatorInput(), - untypedEntityData.getNodeA(), - untypedEntityData.getNodeB(), - assetType); - } - - /** - * Returns either the first instance of a {@link OperatorInput} in the provided collection of or - * {@link OperatorInput#NO_OPERATOR_ASSIGNED} + *

Checks if the requested type of asset can be found in the provided collection of types based + * on the provided fields to values mapping. The provided fields to values mapping needs to have + * one and only one field with key {@link #TYPE} and a corresponding UUID value. If the type can + * be found in the provided collection based on the UUID it is returned wrapped in a {@link + * Success}. Otherwise, a {@link Failure} is returned and a warning is logged. * - * @param operators the collections of {@link OperatorInput}s that should be searched in - * @param operatorUuid the operator uuid that is requested - * @return either the first found instancen of {@link OperatorInput} or {@link - * OperatorInput#NO_OPERATOR_ASSIGNED} + * @param entityData The entity data of the entity that provides a link to another entity + * @param fieldName The field name of the field that provides the UUID of the linked entity + * @param linkedEntities A map of UUID to entities, of which one should be linked to given entity + * data + * @param the type of the resulting linked entity instance + * @return a {@link Success} containing the entity or a {@link Failure} if the entity cannot be + * found */ - protected OperatorInput getFirstOrDefaultOperator( - Map operators, - Optional operatorUuid, - String entityClassName, - String requestEntityUuid) { - if (operatorUuid.isEmpty()) { - log.warn( - "Input source for class '{}' is missing the 'operator' field. " - + "This is okay, but you should consider fixing the file by adding the field. " - + "Defaulting to 'NO OPERATOR ASSIGNED'", - entityClassName); - return OperatorInput.NO_OPERATOR_ASSIGNED; - } else { - return Optional.ofNullable(operators.get(operatorUuid.get())) - .orElseGet( - () -> { - log.debug( - "Cannot find operator with uuid '{}' for element '{}' and uuid '{}'. Defaulting to 'NO OPERATOR ASSIGNED'.", - operatorUuid, - entityClassName, - requestEntityUuid); - return OperatorInput.NO_OPERATOR_ASSIGNED; - }); - } + protected static Try getLinkedEntity( + EntityData entityData, String fieldName, Map linkedEntities) { + + return Try.of(() -> entityData.getUUID(fieldName), FactoryException.class) + .transformF( + exception -> + new SourceException( + "Extracting UUID field " + + fieldName + + " from entity data " + + entityData.toString() + + " failed.", + exception)) + .flatMap( + entityUuid -> + getEntity(entityUuid, linkedEntities) + .transformF( + exception -> + new SourceException( + "Linked entity " + + fieldName + + " was not found for entity " + + entityData.toString(), + exception))); } /** - * Returns a stream of tries of {@link NodeAssetInputEntityData} that can be used to build - * instances of several subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} - * that consumes this data. param assetInputEntityDataStream + * Enhances given entity data with an entity from the given entity map or the default value. The + * linked entity is chosen by taking into account the UUID found by retrieving the field with + * given fieldName from entityData. If no entity is linked, the default value is used. * - * @param assetInputEntityDataStream a stream consisting of {@link AssetInputEntityData} that is - * enriched with {@link NodeInput} data - * @param nodes a collection of {@link NodeInput} entities that should be used to build the data - * @return stream of the entity data wrapped in a {@link Try} + * @param entityData The entity data of the entity that provides a link to another entity via UUID + * @param fieldName The field name of the field that provides the UUID of the linked entity + * @param linkedEntities A map of UUID to entities, of which one should be linked to given entity + * data + * @param defaultEntity The default linked entity to use, if no actual linked entity could be + * found + * @param createEntityData The function that creates the resulting entity data given entityData + * and the linked entity + * @param Type of input entity data + * @param Type of the linked entity + * @param Type of resulting entity data that combines the given entityData and linked entity + * @return {@link Try} to enhanced data */ - protected Stream> nodeAssetInputEntityDataStream( - Stream assetInputEntityDataStream, Map nodes) { - return assetInputEntityDataStream - .parallel() + protected static + Try optionallyEnrichEntityData( + E entityData, + String fieldName, + Map linkedEntities, + T defaultEntity, + BiFunction createEntityData) { + return entityData + .getFieldOptional(fieldName) + .filter(s -> !s.isBlank()) .map( - assetInputEntityData -> { - // get the raw data - Map fieldsToAttributes = assetInputEntityData.getFieldsToValues(); - // get the node of the entity - UUID nodeUuid = UUID.fromString(fieldsToAttributes.get(NODE)); - Optional node = Optional.ofNullable(nodes.get(nodeUuid)); - - // if the node is not present we return an empty element and - // log a warning - if (node.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - assetInputEntityData.getTargetClass().getSimpleName(), - fieldsToAttributes.get("uuid"), - fieldsToAttributes.get("id"), - NODE + ": " + nodeUuid); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } + // Entity data includes a proper UUID for the desired entity + uuidString -> + Try.of(() -> UUID.fromString(uuidString), IllegalArgumentException.class) + .transformF( + iae -> + new SourceException( + String.format( + "Exception while trying to parse UUID of field \"%s\" with value \"%s\"", + fieldName, uuidString), + iae)) + .flatMap( + entityUuid -> + getEntity(entityUuid, linkedEntities) + .transformF( + exception -> + new SourceException( + "Linked entity " + + fieldName + + " was not found for entity of class" + + entityData.getTargetClass().getSimpleName(), + exception)))) + .orElseGet( + () -> { + // No UUID was given (column does not exist, or field is empty), + // this is totally fine - we return the default value + log.debug( + "Input source for class {} is missing the '{}' field. " + + "Default value '{}' is used.", + entityData.getTargetClass().getSimpleName(), + fieldName, + defaultEntity); + return new Try.Success<>(defaultEntity); + }) + .map( + linkedEntity -> { + Map fieldsToAttributes = entityData.getFieldsToValues(); // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(NODE); + fieldsToAttributes.keySet().remove(fieldName); - return new Success<>(new NodeAssetInputEntityData(assetInputEntityData, node.get())); + // build resulting entity data + return createEntityData.apply(entityData, linkedEntity); }); } + private static Try getEntity(UUID uuid, Map entityMap) { + return Optional.ofNullable(entityMap.get(uuid)) + // We either find a matching entity for given UUID, thus return a success + .map(entity -> (Try) new Try.Success(entity)) + // ... or find no matching entity, returning a failure. + .orElse( + new Try.Failure<>( + new SourceException("Entity with uuid " + uuid + " was not provided."))); + } + // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /** @@ -236,44 +261,84 @@ protected Stream> nodeAssetInputE * NodeAssetInputEntityData} and their corresponding factory. * * @param entityClass the entity class that should be build - * @param factory the factory that should be used for the building process * @param nodes a collection of {@link NodeInput} entities that should be used to build the * entities * @param operators a collection of {@link OperatorInput} entities should be used to build the * entities - * @param Type of the {@link AssetInput} to expect * @return stream of tries of the entities that has been built by the factory */ - public Set> buildNodeAssetEntities( - Class entityClass, - EntityFactory factory, + protected Stream> buildNodeAssetEntityData( + Class entityClass, Map operators, Map nodes) { - return nodeAssetEntityStream(entityClass, factory, operators, nodes) - .collect(Collectors.toSet()); + return nodeAssetInputEntityDataStream(buildAssetInputEntityData(entityClass, operators), nodes); } - protected Stream> nodeAssetEntityStream( - Class entityClass, - EntityFactory factory, - Map operators, - Map nodes) { - return nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes) - .map(factory::get); + /** + * Returns a stream of tries of {@link NodeAssetInputEntityData} that can be used to build + * instances of several subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} + * that consumes this data. + * + * @param assetInputEntityDataStream a stream consisting of {@link AssetInputEntityData} that is + * enriched with {@link NodeInput} data + * @param nodes a collection of {@link NodeInput} entities that should be used to build the data + * @return stream of the entity data wrapped in a {@link Try} + */ + protected static Stream> + nodeAssetInputEntityDataStream( + Stream> assetInputEntityDataStream, + Map nodes) { + return assetInputEntityDataStream + .parallel() + .map( + assetInputEntityDataTry -> + assetInputEntityDataTry.flatMap( + assetInputEntityData -> + enrichEntityData( + assetInputEntityData, NODE, nodes, NodeAssetInputEntityData::new))); } - public Set> buildAssetInputEntities( - Class entityClass, - EntityFactory factory, - Map operators) { - return assetInputEntityStream(entityClass, factory, operators).collect(Collectors.toSet()); + /** + * Returns a stream of optional {@link AssetInputEntityData} that can be used to build instances + * of several subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} that + * consumes this data. + * + * @param entityClass the entity class that should be build + * @param operators a collection of {@link OperatorInput} entities that should be used to build + * the data + * @return stream of the entity data wrapped in a {@link Try} + */ + protected Stream> buildAssetInputEntityData( + Class entityClass, Map operators) { + return assetInputEntityDataStream(buildEntityData(entityClass), operators); } - protected Stream> assetInputEntityStream( - Class entityClass, - EntityFactory factory, + /** + * Returns a stream of tries of {@link AssetInputEntityData} that can be used to build instances + * of several subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} that + * consumes this data. + * + * @param entityDataStream a stream consisting of {@link EntityData} that is enriched with {@link + * OperatorInput} data + * @param operators a collection of {@link OperatorInput} entities that should be used to build + * the data + * @return stream of the entity data wrapped in a {@link Try} + */ + private static Stream> assetInputEntityDataStream( + Stream> entityDataStream, Map operators) { - return assetInputEntityDataStream(entityClass, operators).map(factory::get); + return entityDataStream + .parallel() + .map( + entityDataTry -> + entityDataTry.flatMap( + entityData -> + optionallyEnrichEntityData( + entityData, + OPERATOR, + operators, + OperatorInput.NO_OPERATOR_ASSIGNED, + AssetInputEntityData::new))); } /** @@ -282,41 +347,14 @@ protected Stream> assetInputEnti * consumes this data. * * @param entityClass the entity class that should be build - * @param operators a collection of {@link OperatorInput} entities that should be used to build - * the data * @param type of the entity that should be build * @return stream of the entity data wrapped in a {@link Try} */ - protected Stream assetInputEntityDataStream( - Class entityClass, Map operators) { + private Stream> buildEntityData( + Class entityClass) { return dataSource .getSourceData(entityClass) - .map( - fieldsToAttributes -> - createAssetInputEntityData(entityClass, fieldsToAttributes, operators)); - } - - protected AssetInputEntityData createAssetInputEntityData( - Class entityClass, - Map fieldsToAttributes, - Map operators) { - - // get the operator of the entity - Optional operatorUuid = - Optional.ofNullable(fieldsToAttributes.get(OPERATOR)) - .filter(s -> !s.isBlank()) - .map(UUID::fromString); - OperatorInput operator = - getFirstOrDefaultOperator( - operators, - operatorUuid, - entityClass.getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP)); - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().removeAll(new HashSet<>(Collections.singletonList(OPERATOR))); - - return new AssetInputEntityData(fieldsToAttributes, entityClass, operator); + .map(fieldsToAttributes -> new Success<>(new EntityData(fieldsToAttributes, entityClass))); } /** @@ -327,7 +365,7 @@ protected AssetInputEntityData createAssetInputEntityData * @param Type of the {@link UniqueEntity} to expect * @return stream of {@link SimpleEntityData} */ - protected Stream simpleEntityDataStream( + protected Stream buildSimpleEntityData( Class entityClass) { return dataSource .getSourceData(entityClass) diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 72982144b..a487f01bc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.exceptions.GraphicSourceException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputFactory; import edu.ie3.datamodel.io.factory.input.graphics.NodeGraphicInputEntityData; @@ -22,7 +23,6 @@ import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; import java.util.*; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -83,7 +83,7 @@ public GraphicElements getGraphicElements() throws SourceException { /** * If the set of {@link NodeInput} entities is not exhaustive for all available {@link * NodeGraphicInput} entities or if an error during the building process occurs a {@link - * SourceException} is thrown, else all entities that has been able to be built are returned. + * SourceException} is thrown, else all entities that have been able to be built, are returned. */ public Set getNodeGraphicInput() throws SourceException { return getNodeGraphicInput(rawGridSource.getNodes(typeSource.getOperators())); @@ -91,19 +91,15 @@ public Set getNodeGraphicInput() throws SourceException { public Set getNodeGraphicInput(Map nodes) throws SourceException { - return Try.scanCollection( - buildNodeGraphicEntityData(nodes) - .map(nodeGraphicInputFactory::get) - .collect(Collectors.toSet()), - NodeGraphicInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpackSet( + buildNodeGraphicEntityData(nodes).map(nodeGraphicInputFactory::get), + NodeGraphicInput.class); } /** * If the set of {@link LineInput} entities is not exhaustive for all available {@link * LineGraphicInput} entities or if an error during the building process occurs a {@link - * SourceException} is thrown, else all entities that has been able to be built are returned. + * SourceException} is thrown, else all entities that have been able to be built are returned. */ public Set getLineGraphicInput() throws SourceException { Map operators = typeSource.getOperators(); @@ -114,13 +110,9 @@ public Set getLineGraphicInput() throws SourceException { public Set getLineGraphicInput(Map lines) throws SourceException { - return Try.scanCollection( - buildLineGraphicEntityData(lines) - .map(lineGraphicInputFactory::get) - .collect(Collectors.toSet()), - LineGraphicInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpackSet( + buildLineGraphicEntityData(lines).map(lineGraphicInputFactory::get), + LineGraphicInput.class); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -145,32 +137,13 @@ protected Stream> buildNodeGrap Map nodes) { return dataSource .getSourceData(NodeGraphicInput.class) - .map(fieldsToAttributes -> buildNodeGraphicEntityData(fieldsToAttributes, nodes)); - } - - protected Try buildNodeGraphicEntityData( - Map fieldsToAttributes, Map nodes) { - - // get the node of the entity - UUID nodeUuid = UUID.fromString(fieldsToAttributes.get(NODE)); - Optional node = Optional.ofNullable(nodes.get(nodeUuid)); - - // if the node is not present we return a failure - // log a warning - if (node.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - NodeGraphicInput.class.getSimpleName(), - fieldsToAttributes.get("uuid"), - "no id (graphic entities don't have one)", - NODE + ": " + nodeUuid); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(NODE); - - return new Success<>(new NodeGraphicInputEntityData(fieldsToAttributes, node.get())); + .map( + fieldsToAttributes -> + enrichEntityData( + new EntityData(fieldsToAttributes, NodeGraphicInput.class), + NODE, + nodes, + NodeGraphicInputEntityData::new)); } /** @@ -192,31 +165,12 @@ protected Stream> buildLineGrap Map lines) { return dataSource .getSourceData(LineGraphicInput.class) - .map(fieldsToAttributes -> buildLineGraphicEntityData(fieldsToAttributes, lines)); - } - - protected Try buildLineGraphicEntityData( - Map fieldsToAttributes, Map lines) { - - // get the node of the entity - UUID lineUuid = UUID.fromString(fieldsToAttributes.get("line")); - Optional line = Optional.ofNullable(lines.get(lineUuid)); - - // if the node is not present we return an empty element and - // log a warning - if (line.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - LineGraphicInput.class.getSimpleName(), - fieldsToAttributes.get("uuid"), - "no id (graphic entities don't have one)", - "line: " + lineUuid); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove("line"); - - return new Success<>(new LineGraphicInputEntityData(fieldsToAttributes, line.get())); + .map( + fieldsToAttributes -> + enrichEntityData( + new EntityData(fieldsToAttributes, LineGraphicInput.class), + "line", + lines, + LineGraphicInputEntityData::new)); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index c38047193..2783c0adc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -27,7 +27,6 @@ import edu.ie3.datamodel.utils.Try.*; import java.util.*; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -166,7 +165,7 @@ public Map getNodes() throws SourceException { */ public Map getNodes(Map operators) throws SourceException { return unpackMap( - assetInputEntityDataStream(NodeInput.class, operators).map(nodeInputFactory::get), + buildAssetInputEntityData(NodeInput.class, operators).map(nodeInputFactory::get), NodeInput.class); } @@ -256,17 +255,14 @@ public Set get2WTransformers( Map transformer2WTypes, Map operators) throws SourceException { - return Try.scanCollection( - typedEntityStream( - Transformer2WInput.class, - transformer2WInputFactory, - nodes, - operators, - transformer2WTypes) - .collect(Collectors.toSet()), - Transformer2WInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpackSet( + typedEntityStream( + Transformer2WInput.class, + transformer2WInputFactory, + nodes, + operators, + transformer2WTypes), + Transformer2WInput.class); } /** @@ -311,12 +307,10 @@ public Set get3WTransformers( Map transformer3WTypeInputs, Map operators) throws SourceException { - return Try.scanCollection( - buildTransformer3WEntities( - transformer3WInputFactory, nodes, transformer3WTypeInputs, operators), - Transformer3WInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpackSet( + buildTransformer3WEntities( + transformer3WInputFactory, nodes, transformer3WTypeInputs, operators), + Transformer3WInput.class); } /** @@ -396,23 +390,13 @@ public Set getMeasurementUnits() throws SourceException { */ public Set getMeasurementUnits( Map nodes, Map operators) throws SourceException { - return Try.scanCollection( - buildNodeAssetEntities( - MeasurementUnitInput.class, measurementUnitInputFactory, operators, nodes), - MeasurementUnitInput.class) - .transformF(SourceException::new) - .getOrThrow(); + return unpackSet( + buildNodeAssetEntityData(MeasurementUnitInput.class, operators, nodes) + .map(measurementUnitInputFactory::get), + MeasurementUnitInput.class); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - public Set> buildNodeInputEntities( - Class entityClass, - EntityFactory factory, - Map operators) { - return assetInputEntityDataStream(entityClass, operators) - .map(factory::get) - .collect(Collectors.toSet()); - } public Set buildUntypedConnectorInputEntities( Class entityClass, @@ -420,15 +404,14 @@ public Set buildUntypedConnectorInputEntities( Map nodes, Map operators) throws SourceException { - return Try.scanCollection( - untypedConnectorInputEntityStream(entityClass, factory, nodes, operators) - .collect(Collectors.toSet()), - entityClass) - .transformF(SourceException::new) - .getOrThrow(); + return unpackSet( + buildUntypedConnectorInputEntityData( + buildAssetInputEntityData(entityClass, operators), nodes) + .map(factory::get), + entityClass); } - public Set> buildTransformer3WEntities( + public Stream> buildTransformer3WEntities( Transformer3WInputFactory transformer3WInputFactory, Map nodes, Map transformer3WTypeInputs, @@ -436,22 +419,10 @@ public Set> buildTransformer3WEntities return buildTransformer3WEntityData( buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(Transformer3WInput.class, operators), nodes), + buildAssetInputEntityData(Transformer3WInput.class, operators), nodes), transformer3WTypeInputs), nodes) - .map(transformer3WInputFactory::get) - .collect(Collectors.toSet()); - } - - public - Set> buildTypedEntities( - Class entityClass, - EntityFactory> factory, - Map nodes, - Map operators, - Map types) { - return typedEntityStream(entityClass, factory, nodes, operators, types) - .collect(Collectors.toSet()); + .map(transformer3WInputFactory::get); } /** @@ -472,7 +443,12 @@ Stream, SourceException>> buildTypedConnect .map( noTypeEntityDataOpt -> noTypeEntityDataOpt.flatMap( - noTypeEntityData -> findAndAddType(noTypeEntityData, availableTypes))); + noTypeEntityData -> + enrichEntityData( + noTypeEntityData, + TYPE, + availableTypes, + TypedConnectorInputEntityData::new))); } /** @@ -485,67 +461,24 @@ Stream, SourceException>> buildTypedConnect */ protected Stream> buildUntypedConnectorInputEntityData( - Stream assetInputEntityDataStream, Map nodes) { + Stream> assetInputEntityDataStream, + Map nodes) { return assetInputEntityDataStream .parallel() .map( - assetInputEntityData -> - buildUntypedConnectorInputEntityData(assetInputEntityData, nodes)); - } - - /** - * Converts a single given {@link AssetInputEntityData} in connection with a collection of known - * {@link NodeInput}s to {@link ConnectorInputEntityData}. If this is not possible, a {@link - * Failure}. - * - * @param assetInputEntityData Input entity data to convert - * @param nodes A collection of known nodes - * @return A {@link Try} to matching {@link ConnectorInputEntityData} - */ - protected Try buildUntypedConnectorInputEntityData( - AssetInputEntityData assetInputEntityData, Map nodes) { - // get the raw data - Map fieldsToAttributes = assetInputEntityData.getFieldsToValues(); - - // get the two connector nodes - UUID nodeAUuid = UUID.fromString(fieldsToAttributes.get(NODE_A)); - UUID nodeBUuid = UUID.fromString(fieldsToAttributes.get(NODE_B)); - Optional nodeA = Optional.ofNullable(nodes.get(nodeAUuid)); - Optional nodeB = Optional.ofNullable(nodes.get(nodeBUuid)); - - // if nodeA or nodeB are not present we return a failure and log a - // warning - if (nodeA.isEmpty() || nodeB.isEmpty()) { - String debugString = - Stream.of( - new AbstractMap.SimpleEntry<>(nodeA, NODE_A + ": " + nodeAUuid), - new AbstractMap.SimpleEntry<>(nodeB, NODE_B + ": " + nodeBUuid)) - .filter(entry -> entry.getKey().isEmpty()) - .map(AbstractMap.SimpleEntry::getValue) - .collect(Collectors.joining("\n")); - - String skippingMessage = - buildSkippingMessage( - assetInputEntityData.getTargetClass().getSimpleName(), - fieldsToAttributes.get("uuid"), - fieldsToAttributes.get("id"), - debugString); - - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().removeAll(new HashSet<>(Arrays.asList(NODE_A, NODE_B))); - - return new Success<>( - new ConnectorInputEntityData( - fieldsToAttributes, - assetInputEntityData.getTargetClass(), - assetInputEntityData.getOperatorInput(), - nodeA.get(), - nodeB.get())); + assetInputEntityDataTry -> + assetInputEntityDataTry.flatMap( + assetInputEntityData -> + enrichEntityData( + assetInputEntityData, + NODE_A, + nodes, + NODE_B, + nodes, + ConnectorInputEntityData::new))); } + // todo needed? private Stream> typedEntityStream( Class entityClass, @@ -555,22 +488,11 @@ Stream> typedEntityStream( Map types) { return buildTypedConnectorEntityData( buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(entityClass, operators), nodes), + buildAssetInputEntityData(entityClass, operators), nodes), types) .map(factory::get); } - public - Stream> untypedConnectorInputEntityStream( - Class entityClass, - EntityFactory factory, - Map nodes, - Map operators) { - return buildUntypedConnectorInputEntityData( - assetInputEntityDataStream(entityClass, operators), nodes) - .map(factory::get); - } - /** * Enriches the Stream of tries on {@link Transformer3WInputEntityData} with the information of * the internal node. @@ -587,51 +509,9 @@ protected Stream> buildTransf .parallel() .map( typedEntityDataOpt -> - typedEntityDataOpt.flatMap(typeEntityData -> addThirdNode(typeEntityData, nodes))); - } - - /** - * Enriches the third node to the already typed entity data of a three winding transformer. If no - * matching node can be found, return a {@link Failure}. - * - * @param typeEntityData Already typed entity data - * @param nodes Yet available nodes - * @return a {@link Try} to the enriched data - */ - protected Try addThirdNode( - TypedConnectorInputEntityData typeEntityData, - Map nodes) { - - // get the raw data - Map fieldsToAttributes = typeEntityData.getFieldsToValues(); - - // get nodeC of the transformer - UUID nodeCUuid = UUID.fromString(fieldsToAttributes.get("nodeC")); - Optional nodeC = Optional.ofNullable(nodes.get(nodeCUuid)); - - // if nodeC is not present we return a failure - // log a warning - if (nodeC.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - typeEntityData.getTargetClass().getSimpleName(), - fieldsToAttributes.get("uuid"), - fieldsToAttributes.get("id"), - "nodeC: " + nodeCUuid); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove("nodeC"); - - return new Success<>( - new Transformer3WInputEntityData( - fieldsToAttributes, - typeEntityData.getTargetClass(), - typeEntityData.getOperatorInput(), - typeEntityData.getNodeA(), - typeEntityData.getNodeB(), - nodeC.get(), - typeEntityData.getType())); + typedEntityDataOpt.flatMap( + typeEntityData -> + enrichEntityData( + typeEntityData, "nodeC", nodes, Transformer3WInputEntityData::new))); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index bc6b194d4..c0bc3fae5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -330,7 +330,7 @@ private Set getResultEntities( Class entityClass, SimpleEntityFactory factory) throws SourceException { return unpackSet( - simpleEntityDataStream(entityClass) + buildSimpleEntityData(entityClass) .map(entityData -> factory.get(entityData).map(data -> (T) data)), entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 801ba7a52..4a71536f0 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.exceptions.SystemParticipantsException; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.*; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.container.SystemParticipants; @@ -17,8 +18,6 @@ import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput; import edu.ie3.datamodel.utils.Try; -import edu.ie3.datamodel.utils.Try.Failure; -import edu.ie3.datamodel.utils.Try.Success; import java.util.*; import java.util.stream.Stream; @@ -571,7 +570,7 @@ public Set getChpPlants( Map thermalStorages) throws SourceException { return unpackSet( - buildChpEntityData( + chpEntityStream( buildTypedSystemParticipantEntityData( ChpInput.class, operators, nodes, emUnits, types), thermalStorages, @@ -609,7 +608,7 @@ public Set getHeatPumps( Map thermalBuses) throws SourceException { return unpackSet( - buildHpEntityData( + hpEntityStream( buildTypedSystemParticipantEntityData( HpInput.class, operators, nodes, emUnits, types), thermalBuses) @@ -619,7 +618,7 @@ public Set getHeatPumps( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - private static Stream> buildChpEntityData( + private static Stream> chpEntityStream( Stream, SourceException>> typedEntityDataStream, Map thermalStorages, @@ -631,67 +630,13 @@ private static Stream> buildChpEntityDa typedEntityDataOpt -> typedEntityDataOpt.flatMap( typedEntityData -> - createChpEntityData(typedEntityData, thermalStorages, thermalBuses))); - } - - private static Try createChpEntityData( - SystemParticipantTypedEntityData typedEntityData, - Map thermalStorages, - Map thermalBuses) { - - // get the raw data - Map fieldsToAttributes = typedEntityData.getFieldsToValues(); - - // get the thermal storage input for this chp unit - Optional thermalStorage = - Optional.ofNullable(fieldsToAttributes.get(THERMAL_STORAGE)) - .flatMap( - thermalStorageUuid -> - Optional.ofNullable(thermalStorages.get(UUID.fromString(thermalStorageUuid)))); - - // get the thermal bus input for this chp unit - Optional thermalBus = - Optional.ofNullable(fieldsToAttributes.get("thermalBus")) - .flatMap( - thermalBusUuid -> - Optional.ofNullable(thermalBuses.get(UUID.fromString(thermalBusUuid)))); - - // if the thermal storage or the thermal bus are not present we return an - // empty element and log a warning - if (thermalStorage.isEmpty() || thermalBus.isEmpty()) { - StringBuilder sB = new StringBuilder(); - if (thermalStorage.isEmpty()) { - sB.append("thermalStorage: ") - .append(safeMapGet(fieldsToAttributes, THERMAL_STORAGE, FIELDS_TO_VALUES_MAP)); - } - if (thermalBus.isEmpty()) { - sB.append("\nthermalBus: ") - .append(safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); - } - - String skippingMessage = - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - sB.toString()); - return new Failure<>(new SourceException("Failure due to: " + skippingMessage)); - } - - // remove fields that are passed as objects to constructor - fieldsToAttributes - .keySet() - .removeAll(new HashSet<>(Arrays.asList("thermalBus", "thermalStorage"))); - - return new Success<>( - new ChpInputEntityData( - fieldsToAttributes, - typedEntityData.getOperatorInput(), - typedEntityData.getNode(), - typedEntityData.getEm().orElse(null), - typedEntityData.getTypeInput(), - thermalBus.get(), - thermalStorage.get())); + enrichEntityData( + typedEntityData, + THERMAL_BUS, + thermalBuses, + THERMAL_STORAGE, + thermalStorages, + ChpInputEntityData::new))); } /** @@ -704,7 +649,7 @@ private static Try createChpEntityData( * HpInputEntityData} * @return stream of tries of {@link HpInputEntityData} instances */ - private static Stream> buildHpEntityData( + private static Stream> hpEntityStream( Stream, SourceException>> typedEntityDataStream, Map thermalBuses) { @@ -714,49 +659,9 @@ private static Stream> buildHpEntityData .map( typedEntityDataOpt -> typedEntityDataOpt.flatMap( - typedEntityData -> createHpEntityData(typedEntityData, thermalBuses))); - } - - private static Try createHpEntityData( - SystemParticipantTypedEntityData typedEntityData, - Map thermalBuses) { - // get the raw data - Map fieldsToAttributes = typedEntityData.getFieldsToValues(); - - // get the thermal bus input for this chp unit and try to build the entity data - Optional hpInputEntityDataOpt = - Optional.ofNullable(fieldsToAttributes.get(THERMAL_BUS)) - .flatMap( - thermalBusUuid -> - Optional.ofNullable(thermalBuses.get(UUID.fromString(thermalBusUuid))) - .map( - thermalBus -> { - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(THERMAL_BUS); - - return new HpInputEntityData( - fieldsToAttributes, - typedEntityData.getOperatorInput(), - typedEntityData.getNode(), - typedEntityData.getEm().orElse(null), - typedEntityData.getTypeInput(), - thermalBus); - })); - - // if the requested entity is not present we return an empty element and - // log a warning - if (hpInputEntityDataOpt.isEmpty()) { - String failureMessage = - buildSkippingMessage( - typedEntityData.getTargetClass().getSimpleName(), - safeMapGet(fieldsToAttributes, "uuid", FIELDS_TO_VALUES_MAP), - safeMapGet(fieldsToAttributes, "id", FIELDS_TO_VALUES_MAP), - "thermalBus: " + safeMapGet(fieldsToAttributes, THERMAL_BUS, FIELDS_TO_VALUES_MAP)); - return new Failure<>(new SourceException("Failure due to: " + failureMessage)); - } - - return new Success<>(hpInputEntityDataOpt.get()); + typedEntityData -> + enrichEntityData( + typedEntityData, THERMAL_BUS, thermalBuses, HpInputEntityData::new))); } /** @@ -777,7 +682,7 @@ private static Try createHpEntityData( Map nodes, Map emUnits, Map types) { - return buildTypedSystemParticipantEntityData( + return typedSystemParticipantEntityStream( buildSystemParticipantEntityData(entityClass, operators, nodes, emUnits), types); } @@ -797,7 +702,7 @@ private static Try createHpEntityData( */ private static Stream, SourceException>> - buildTypedSystemParticipantEntityData( + typedSystemParticipantEntityStream( Stream> systemParticipantEntityDataStream, Map types) { @@ -807,39 +712,21 @@ private static Try createHpEntityData( participantEntityDataTry -> participantEntityDataTry.flatMap( participantEntityData -> - createTypedSystemParticipantEntityData(participantEntityData, types))); - } - - private static - Try, SourceException> - createTypedSystemParticipantEntityData( - SystemParticipantEntityData systemParticipantEntityData, Map types) { - return getAssetType( - types, - systemParticipantEntityData.getFieldsToValues(), - systemParticipantEntityData.getClass().getSimpleName()) - .map( - // if the operation was successful, transform and return to the data - assetType -> { - Map fieldsToAttributes = - systemParticipantEntityData.getFieldsToValues(); - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(TYPE); - - return new SystemParticipantTypedEntityData<>(systemParticipantEntityData, assetType); - }); + enrichEntityData( + participantEntityData, + TYPE, + types, + SystemParticipantTypedEntityData::new))); } - private - Stream> buildSystemParticipantEntityData( - Class entityClass, + private Stream> + buildSystemParticipantEntityData( + Class entityClass, Map operators, Map nodes, Map emUnits) { - return buildSystemParticipantEntityData( - nodeAssetInputEntityDataStream(assetInputEntityDataStream(entityClass, operators), nodes), - emUnits); + return systemParticipantEntityStream( + buildNodeAssetEntityData(entityClass, operators, nodes), emUnits); } /** @@ -854,52 +741,20 @@ Stream> buildSystemParticipant * @return a stream of tries of {@link SystemParticipantEntityData} instances */ private static Stream> - buildSystemParticipantEntityData( + systemParticipantEntityStream( Stream> nodeAssetEntityDataStream, Map emUnits) { return nodeAssetEntityDataStream .parallel() .map( - nodeAssetInputEntityDataOpt -> - nodeAssetInputEntityDataOpt.flatMap( + nodeAssetInputEntityDataTry -> + nodeAssetInputEntityDataTry.flatMap( nodeAssetInputEntityData -> - createSystemParticipantEntityData(nodeAssetInputEntityData, emUnits))); - } - - private static Try - createSystemParticipantEntityData( - NodeAssetInputEntityData nodeAssetInputEntityData, Map emUnits) { - - Map fieldsToAttributes = nodeAssetInputEntityData.getFieldsToValues(); - - Try, SourceException> tryEm = - Optional.ofNullable( - nodeAssetInputEntityData.getUUID(SystemParticipantInputEntityFactory.EM)) - .map( - // System participant has given a proper UUID for EM. In case of success, we wrap in - // Optional - emUuid -> getEntity(emUuid, emUnits).map(Optional::of)) - // No UUID was given (column does not exist, or field is empty), - // this is totally fine - we return an "empty success" - .orElse(new Try.Success<>(Optional.empty())); - - return tryEm.map( - // if the operation was successful, transform and return to the data - optionalEm -> { - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(SystemParticipantInputEntityFactory.EM); - - return new SystemParticipantEntityData(nodeAssetInputEntityData, optionalEm.orElse(null)); - }); - } - - private static Try getEntity(UUID uuid, Map entityMap) { - return Optional.ofNullable(entityMap.get(uuid)) - // We either find a matching entity for given UUID, thus return a success - .map(entity -> (Try) new Try.Success(entity)) - // ... or find no matching entity, returning a failure. - .orElse( - new Try.Failure<>( - new SourceException("Entity with uuid " + uuid + " was not provided."))); + optionallyEnrichEntityData( + nodeAssetInputEntityData, + SystemParticipantInputEntityFactory.EM, + emUnits, + null, + SystemParticipantEntityData::new))); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index a8e5d3e11..84afd2e44 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -5,8 +5,6 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.input.*; import edu.ie3.datamodel.models.UniqueEntity; @@ -16,14 +14,15 @@ import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput; import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput; import edu.ie3.datamodel.utils.Try; -import edu.ie3.datamodel.utils.Try.*; -import java.util.*; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; /** - * Interface that provides the capability to build thermal {@link + * todo javadoc Interface that provides the capability to build thermal {@link * edu.ie3.datamodel.models.input.AssetInput} entities from persistent data e.g. .csv files or * databases * @@ -83,7 +82,8 @@ public Map getThermalBuses() throws SourceException { public Map getThermalBuses(Map operators) throws SourceException { return unpackMap( - assetInputEntityStream(ThermalBusInput.class, thermalBusInputFactory, operators), + buildAssetInputEntityData(ThermalBusInput.class, operators) + .map(thermalBusInputFactory::get), ThermalBusInput.class); } @@ -172,11 +172,9 @@ public Map getThermalHouses( Map operators, Map thermalBuses) throws SourceException { return unpackMap( - assetInputEntityDataStream(ThermalHouseInput.class, operators) - .flatMap( - assetInputEntityData -> - buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) - .map(thermalHouseInputFactory::get)), + thermalUnitInputEntityDataStream( + buildAssetInputEntityData(ThermalHouseInput.class, operators), thermalBuses) + .map(thermalHouseInputFactory::get), ThermalHouseInput.class); } @@ -191,9 +189,10 @@ public Map getThermalHouses( * @return a set of object and uuid unique {@link CylindricalStorageInput} entities */ public Set getCylindricalStorages() throws SourceException { - return buildCylindricalStorageInputEntities(cylindricalStorageInputFactory) - .transformF(SourceException::new) - .getOrThrow(); + Map operators = typeSource.getOperators(); + Map thermalBuses = getThermalBuses(); + + return getCylindricalStorages(operators, thermalBuses); } /** @@ -221,71 +220,37 @@ public Set getCylindricalStorages( Map operators, Map thermalBuses) throws SourceException { return unpackSet( - buildCylindricalStorageInputEntities( - cylindricalStorageInputFactory, operators, thermalBuses), + thermalUnitInputEntityDataStream( + buildAssetInputEntityData(CylindricalStorageInput.class, operators), thermalBuses) + .map(cylindricalStorageInputFactory::get), CylindricalStorageInput.class); } - // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - - protected Stream> - buildThermalUnitInputEntityData( - AssetInputEntityData assetInputEntityData, Map thermalBuses) { - - // get the raw data - Map fieldsToAttributes = assetInputEntityData.getFieldsToValues(); - - // get the thermal bus input for this chp unit - UUID thermalBusUuid = UUID.fromString(fieldsToAttributes.get("thermalbus")); - Optional thermalBus = Optional.ofNullable(thermalBuses.get(thermalBusUuid)); - - // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().removeAll(new HashSet<>(Collections.singletonList("thermalbus"))); - - // if the type is not present we return an empty element and - // log a warning - if (thermalBus.isEmpty()) { - String skippingMessage = - buildSkippingMessage( - assetInputEntityData.getTargetClass().getSimpleName(), - fieldsToAttributes.get("uuid"), - fieldsToAttributes.get("id"), - "thermalBus: " + thermalBusUuid); - return Stream.of(new Failure<>(new SourceException("Failure due to: " + skippingMessage))); - } - - return Stream.of( - new Success<>( - new ThermalUnitInputEntityData( - assetInputEntityData.getFieldsToValues(), - assetInputEntityData.getTargetClass(), - assetInputEntityData.getOperatorInput(), - thermalBus.get()))); - } - - public Try, FailureException> buildCylindricalStorageInputEntities( - CylindricalStorageInputFactory factory) throws SourceException { - Map thermalBuses = getThermalBuses(); - - return Try.scanCollection( - assetInputEntityDataStream(CylindricalStorageInput.class, typeSource.getOperators()) - .flatMap( - assetInputEntityData -> - buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) - .map(factory::get)) - .collect(Collectors.toSet()), - CylindricalStorageInput.class); - } - - public Stream> - buildCylindricalStorageInputEntities( - CylindricalStorageInputFactory factory, - Map operators, + /** + * Enriches a given stream of {@link AssetInputEntityData} {@link Try} objects with a type of + * {@link ThermalBusInput} based on the provided collection of types and the fields to values + * mapping that inside the already provided {@link AssetInputEntityData} instance. + * + * @param assetInputEntityDataStream the data stream of {@link AssetInputEntityData} {@link Try} + * objects + * @param thermalBuses the thermal buses that should be used for enrichment and to build {@link + * ThermalUnitInputEntityData} from + * @return a stream of tries of {@link ThermalUnitInputEntityData} instances + */ + private static Stream> + thermalUnitInputEntityDataStream( + Stream> assetInputEntityDataStream, Map thermalBuses) { - return assetInputEntityDataStream(CylindricalStorageInput.class, operators) - .flatMap( - assetInputEntityData -> - buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses) - .map(factory::get)); + return assetInputEntityDataStream + .parallel() + .map( + assetInputEntityDataTry -> + assetInputEntityDataTry.flatMap( + assetInputEntityData -> + enrichEntityData( + assetInputEntityData, + "thermalbus", + thermalBuses, + ThermalUnitInputEntityData::new))); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index 75d86f0c6..8671ebad7 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -63,8 +63,7 @@ public TypeSource(DataSource dataSource) { */ public Map getTransformer2WTypes() throws SourceException { return unpackMap( - simpleEntityDataStream(Transformer2WTypeInput.class) - .map(transformer2WTypeInputFactory::get), + buildSimpleEntityData(Transformer2WTypeInput.class).map(transformer2WTypeInputFactory::get), Transformer2WTypeInput.class); } @@ -78,7 +77,7 @@ public Map getTransformer2WTypes() throws SourceEx */ public Map getOperators() throws SourceException { return unpackMap( - simpleEntityDataStream(OperatorInput.class).map(operatorInputFactory::get), + buildSimpleEntityData(OperatorInput.class).map(operatorInputFactory::get), OperatorInput.class); } @@ -92,7 +91,7 @@ public Map getOperators() throws SourceException { */ public Map getLineTypes() throws SourceException { return unpackMap( - simpleEntityDataStream(LineTypeInput.class).map(lineTypeInputFactory::get), + buildSimpleEntityData(LineTypeInput.class).map(lineTypeInputFactory::get), LineTypeInput.class); } @@ -107,8 +106,7 @@ public Map getLineTypes() throws SourceException { */ public Map getTransformer3WTypes() throws SourceException { return unpackMap( - simpleEntityDataStream(Transformer3WTypeInput.class) - .map(transformer3WTypeInputFactory::get), + buildSimpleEntityData(Transformer3WTypeInput.class).map(transformer3WTypeInputFactory::get), Transformer3WTypeInput.class); } @@ -203,7 +201,7 @@ public Map getEvTypes() throws SourceException { @SuppressWarnings("unchecked") private Stream> buildEntities( Class entityClass, EntityFactory factory) { - return simpleEntityDataStream(entityClass) + return buildSimpleEntityData(entityClass) .map(data -> (Try) factory.get(data)); } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java similarity index 95% rename from src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java rename to src/main/java/edu/ie3/datamodel/models/input/EmInput.java index a169c6c1b..6df13c3fd 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java @@ -3,11 +3,9 @@ * Institute of Energy Systems, Energy Efficiency and Energy Economics, * Research group Distribution grid planning and operation */ -package edu.ie3.datamodel.models.input.system; +package edu.ie3.datamodel.models.input; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.AssetInput; -import edu.ie3.datamodel.models.input.OperatorInput; import java.util.Objects; import java.util.UUID; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java index e0bd7aca5..5ebb38e9d 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java index cbb50f11b..1478c949b 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.io.extractor.HasThermalStorage; import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java index 8b3e96088..b4796b844 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java index b0496b5f7..8513edd5c 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.models.input.system; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java index baf2e61c5..b765ca695 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java index 1c0dd2370..89771ae58 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.io.extractor.HasThermalBus; import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java index 1889e2937..196952d65 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.models.*; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java index abe86cd09..2117ef313 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java index ff56bf7ad..ed37c1448 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java index 0a0c6a42c..378742074 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.io.extractor.HasNodes; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.AssetInput; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java index 47e66feea..05d170e59 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; diff --git a/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java b/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java index d27667b8f..0935b4b5b 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java @@ -5,12 +5,13 @@ */ package edu.ie3.datamodel.models.result.system; +import edu.ie3.datamodel.models.input.EmInput; import java.time.ZonedDateTime; import java.util.UUID; import javax.measure.quantity.Power; import tech.units.indriya.ComparableQuantity; -/** Represents calculation results of an {@link edu.ie3.datamodel.models.input.system.EmInput} */ +/** Represents calculation results of an {@link EmInput} */ public class EmResult extends SystemParticipantResult { /** diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy index 48b7a5410..bd9e10266 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy @@ -9,6 +9,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.BmInput @@ -48,11 +49,12 @@ class BmInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = BmInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(BmTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -72,6 +74,7 @@ class BmInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert !marketReaction assert costControlled diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy index eba32b0f9..aedb04fce 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.ChpInput @@ -47,13 +48,14 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = ChpInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(ChpTypeInput) def thermalBusInput = Mock(ThermalBusInput) def thermalStorageInput = Mock(ThermalStorageInput) when: Try input = inputFactory.get( - new ChpInputEntityData(parameter, operatorInput, nodeInput, typeInput, thermalBusInput, thermalStorageInput)) + new ChpInputEntityData(parameter, operatorInput, nodeInput, emUnit, typeInput, thermalBusInput, thermalStorageInput)) then: input.success @@ -73,6 +75,7 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert marketReaction } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index ccc0379db..2c49ac48c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -7,8 +7,8 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.OperatorInput -import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.utils.Try import spock.lang.Specification diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy index 34a68ea5c..b9c492de7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EvInput @@ -44,11 +45,12 @@ class EvInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(EvTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -68,6 +70,7 @@ class EvInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy index 10d2be4f1..7f59dedd2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EvcsInput @@ -55,10 +55,11 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success @@ -78,6 +79,7 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PowerSystemUnits.PU), Quantities.getQuantity(1d, PowerSystemUnits.PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == ChargingPointTypeUtils.HouseholdSocket assert chargingPoints == Integer.parseInt(parameter["chargingpoints"]) assert cosPhiRated == Double.parseDouble(parameter["cosphirated"]) @@ -104,10 +106,11 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.failure @@ -132,10 +135,11 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index 2b3e7c345..e209d1f08 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -8,8 +8,8 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.FixedFeedInInput @@ -47,9 +47,10 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe def inputClass = FixedFeedInInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: - Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + Try input = inputFactory.get(new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success @@ -68,6 +69,7 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert sRated == getQuant(parameter["srated"], StandardUnits.S_RATED) assert cosPhiRated == Double.parseDouble(parameter["cosphirated"]) } @@ -84,9 +86,10 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe ] def inputClass = FixedFeedInInput def nodeInput = Mock(NodeInput) + def emUnit = Mock(EmInput) when: - Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) + Try input = inputFactory.get(new SystemParticipantEntityData(parameter, inputClass, nodeInput, emUnit)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy index a24587257..550a088fc 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.HpInput @@ -45,12 +46,13 @@ class HpInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = HpInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(HpTypeInput) def thermalBusInput = Mock(ThermalBusInput) when: Try input = inputFactory.get( - new HpInputEntityData(parameter, operatorInput, nodeInput, typeInput, thermalBusInput)) + new HpInputEntityData(parameter, operatorInput, nodeInput, emUnit, typeInput, thermalBusInput)) then: input.success @@ -70,6 +72,7 @@ class HpInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert thermalBus == thermalBusInput } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy index 910d59195..c0bc33bfa 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy @@ -8,9 +8,9 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.LoadInput @@ -38,6 +38,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { given: "a system participant input type factory and model data" def inputClass = LoadInput def nodeInput = Mock(NodeInput) + def emUnit = Mock(EmInput) when: def inputFactory = new LoadInputFactory() @@ -52,7 +53,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { "cosphirated" : "5" ] Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, nodeInput, emUnit)) then: input.success @@ -69,6 +70,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert loadProfile == profile assert dsm assert eConsAnnual == getQuant(parameter["econsannual"], StandardUnits.ENERGY_IN) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy index a3a6d42ae..6c56ecd4f 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy @@ -10,6 +10,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.PvInput @@ -54,10 +55,11 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = PvInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success @@ -77,6 +79,7 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert albedo == Double.parseDouble(parameter["albedo"]) assert azimuth == getQuant(parameter["azimuth"], StandardUnits.AZIMUTH) assert etaConv == getQuant(parameter["etaconv"], StandardUnits.EFFICIENCY) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy index 453e294f2..d20685662 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.StorageInput @@ -44,11 +45,12 @@ class StorageInputFactoryTest extends Specification implements FactoryTestHelper def inputClass = StorageInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(StorageTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -68,6 +70,7 @@ class StorageInputFactoryTest extends Specification implements FactoryTestHelper new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy index e97d47a09..d258837ec 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.WecInput @@ -45,11 +46,12 @@ class WecInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = WecInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(WecTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -68,6 +70,7 @@ class WecInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert marketReaction } diff --git a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy index f3e89647b..f34873c24 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.naming import edu.ie3.datamodel.io.source.TimeSeriesMappingSource +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -20,7 +21,6 @@ import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.models.input.system.BmInput import edu.ie3.datamodel.models.input.system.ChpInput -import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvInput import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.FixedFeedInInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy index 5fffb0fa1..296be7a8c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -11,6 +11,7 @@ import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey import edu.ie3.datamodel.io.source.TimeSeriesMappingSource import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 3ae4943b1..21c527359 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -17,6 +17,7 @@ import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.LineInput @@ -25,7 +26,6 @@ import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput -import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.LoadInput import edu.ie3.datamodel.models.input.system.PvInput @@ -170,7 +170,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { ThermalUnitInputTestData.thermalHouseInput, SystemParticipantTestData.evcsInput, SystemParticipantTestData.loadInput, - EnergyManagementTestData.emInput + SystemParticipantTestData.emInput ]) csvFileSink.shutdown() diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index acf8ee7c1..17b93bbfd 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -50,7 +50,7 @@ class EntitySourceTest extends Specification { def "A CsvDataSource should be able to handle the extraction process of an asset type correctly"() { when: - def assetTypeOpt = dummyEntitySource.getAssetType(types, fieldsToAttributes, "TestClassName") + def assetTypeOpt = dummyEntitySource.getLinkedEntity(types, fieldsToAttributes, "TestClassName") then: assetTypeOpt.data.present == resultIsPresent diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 4bafff366..4ac22b127 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.models.input.system +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index 0345a4acc..c915b0f35 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -8,6 +8,7 @@ package edu.ie3.test.common import static edu.ie3.datamodel.models.StandardUnits.* import edu.ie3.datamodel.models.OperationTime +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.container.SystemParticipants From ba59ffd7182cdab0074ee1845be918b94a003159 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 15:13:34 +0100 Subject: [PATCH 049/228] Enhancing Try with commonly used methods --- .../java/edu/ie3/datamodel/utils/Try.java | 55 ++++++++ .../edu/ie3/datamodel/utils/TryTest.groovy | 121 +++++++++++++++--- 2 files changed, 157 insertions(+), 19 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index 06a9a5526..df86150f1 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -11,6 +11,7 @@ import edu.ie3.datamodel.exceptions.TryException; import java.util.*; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -234,6 +235,30 @@ public abstract Try transformF( public abstract Try transform( Function successFunc, Function failureFunc); + /** + * If this is a Success, the value is returned, otherwise given default is returned. + * + * @param defaultData the value to be returned, if this is a failure. + * @return the value of a success, otherwise {@code defaultData} + */ + public abstract T getOrElse(Supplier defaultData); + + /** + * If this is a Success, it is returned, otherwise given default Try is returned. + * + * @param defaultTry the Try to be returned, if this is a failure. + * @return this try object if it is a Success, otherwise {@code defaultTry} + */ + public abstract Try orElse(Supplier> defaultTry); + + /** + * Turns this Try into an {@link Optional} by returning the wrapped value if this is a success, + * and an empty optional if this is a failure. + * + * @return an optional of the value + */ + public abstract Optional toOptional(); + /** Implementation of {@link Try} class. This class is used to present a successful try. */ public static final class Success extends Try { private final T data; @@ -298,6 +323,21 @@ public Try transform( return new Success<>(successFunc.apply(data)); } + @Override + public T getOrElse(Supplier defaultData) { + return data; + } + + @Override + public Try orElse(Supplier> defaultTry) { + return this; + } + + @Override + public Optional toOptional() { + return Optional.of(data); + } + /** Returns the stored data. */ public T get() { return data; @@ -382,6 +422,21 @@ public Try transform( return Failure.of(failureFunc.apply(exception)); } + @Override + public T getOrElse(Supplier defaultData) { + return defaultData.get(); + } + + @Override + public Try orElse(Supplier> defaultTry) { + return defaultTry.get(); + } + + @Override + public Optional toOptional() { + return Optional.empty(); + } + /** Returns the thrown exception. */ public E get() { return exception; diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index 4a0ff0762..61fdc9e0c 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -55,12 +55,10 @@ class TryTest extends Specification { }, FailureException) then: - Exception ex = thrown() - ex.class == TryException + TryException ex = thrown(TryException) ex.message == "Wrongly caught exception: " - Throwable cause = ex.cause - cause.class == SourceException - cause.message == "source exception" + ex.cause.class == SourceException + ex.cause.message == "source exception" } def "A failure is returned when using Failure#ofVoid() with an exception"() { @@ -102,12 +100,10 @@ class TryTest extends Specification { }, FailureException) then: - Exception ex = thrown() - ex.class == TryException + TryException ex = thrown(TryException) ex.message == "Wrongly caught exception: " - Throwable cause = ex.cause - cause.class == SourceException - cause.message == "source exception" + ex.cause.class == SourceException + ex.cause.message == "source exception" } def "A Try object can be creates by a boolean and an exception"() { @@ -160,11 +156,9 @@ class TryTest extends Specification { Try.ofVoid(FailureException, one, two) then: - Exception ex = thrown() - ex.class == TryException - Throwable cause = ex.cause - cause.class == SourceException - cause.message == "source exception" + TryException ex = thrown(TryException) + ex.cause.class == SourceException + ex.cause.message == "source exception" } def "A void method can be applied to a try object"() { @@ -241,16 +235,28 @@ class TryTest extends Specification { scan.data.get().size() == 3 } - def "The getOrThrow method should work as expected"() { + def "The getOrThrow method should work as expected on a success"() { + given: + def value = "some value" + Try success = new Try.Success<>(value) + + when: + def result = success.getOrThrow() + + then: + noExceptionThrown() + result == value + } + + def "The getOrThrow method should work as expected on a failure"() { given: Try failure = new Try.Failure<>(new SourceException("source exception")) when: - failure.orThrow + failure.getOrThrow() then: - Exception ex = thrown() - ex.class == SourceException + SourceException ex = thrown(SourceException) ex.message == "source exception" } @@ -311,6 +317,83 @@ class TryTest extends Specification { flatMapF.exception.get() == failure.get() } + def "The getOrElse method should work as expected on a success"() { + given: + def value = "some value" + Try success = new Try.Success<>(value) + + when: + def result = success.getOrElse(() -> "other") + + then: + result == value + } + + def "The getOrElse method should work as expected on a failure"() { + given: + Try failure = new Try.Failure<>(new SourceException("source exception")) + def defaultString = "other" + + when: + def result = failure.getOrElse(() -> defaultString) + + then: + result == defaultString + } + + def "The orElse method should work as expected on a success"() { + given: + def otherSuccess = new Try.Success<>("other success") + def otherFailure = new Try.Failure<>(new SourceException("other failure")) + Try success = new Try.Success<>("some value") + + when: + def result1 = success.orElse(() -> otherSuccess) + def result2 = success.orElse(() -> otherFailure) + + then: + result1 == success + result2 == success + } + + def "The orElse method should work as expected on a failure"() { + given: + def otherSuccess = new Try.Success<>("other success") + def otherFailure = new Try.Failure<>(new SourceException("other failure")) + Try failure = new Try.Failure<>(new SourceException("source exception")) + + when: + def result1 = failure.orElse(() -> otherSuccess) + def result2 = failure.orElse(() -> otherFailure) + + then: + result1 == otherSuccess + result2 == otherFailure + } + + def "The toOptional method should work as expected on a success"() { + given: + def value = "some value" + Try success = new Try.Success<>(value) + + when: + def result = success.toOptional() + + then: + result == Optional.of(value) + } + + def "The toOptional method should work as expected on a failure"() { + given: + Try failure = new Try.Failure<>(new SourceException("some failure")) + + when: + def result = failure.toOptional() + + then: + result == Optional.empty() + } + def "All exceptions of a collection of try objects should be returned"() { given: List> tries = List.of( From 3c1f0495c7c759bee7b88b8d3b91b238feb63445 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 15:26:54 +0100 Subject: [PATCH 050/228] More simplifications in entity data, implementing hierarchical EM creation --- docs/uml/main/EntitySourceClassDiagram.puml | 3 +- .../ie3/datamodel/io/factory/EntityData.java | 4 +- .../io/factory/SimpleEntityData.java | 26 ---- .../io/factory/SimpleEntityFactory.java | 23 ---- .../factory/input/EmAssetInputEntityData.java | 55 ++++++++ .../factory/input/OperatorInputFactory.java | 8 +- .../input/participant/EmInputFactory.java | 13 +- .../result/ConnectorResultFactory.java | 8 +- .../result/FlexOptionsResultFactory.java | 6 +- .../io/factory/result/NodeResultFactory.java | 6 +- .../factory/result/ResultEntityFactory.java | 5 +- .../factory/result/SwitchResultFactory.java | 6 +- .../SystemParticipantResultFactory.java | 8 +- .../factory/result/ThermalResultFactory.java | 10 +- .../timeseries/TimeSeriesMappingFactory.java | 8 +- .../TimeSeriesMetaInformationFactory.java | 8 +- .../AssetTypeInputEntityFactory.java | 5 +- .../typeinput/LineTypeInputFactory.java | 6 +- .../SystemParticipantTypeInputFactory.java | 18 +-- .../Transformer2WTypeInputFactory.java | 6 +- .../Transformer3WTypeInputFactory.java | 6 +- .../io/source/EnergyManagementSource.java | 128 +++++++++++++++++- .../ie3/datamodel/io/source/EntitySource.java | 47 +++---- .../datamodel/io/source/GraphicSource.java | 32 ++--- .../datamodel/io/source/RawGridSource.java | 35 ++--- .../io/source/ResultEntitySource.java | 7 +- .../datamodel/io/source/ThermalSource.java | 4 +- .../io/source/TimeSeriesMappingSource.java | 4 +- .../ie3/datamodel/io/source/TypeSource.java | 17 +-- .../SqlTimeSeriesMetaInformationSource.java | 6 +- .../ie3/datamodel/models/input/EmInput.java | 14 +- .../input/OperatorInputFactoryTest.groovy | 4 +- .../participant/PvInputFactoryTest.groovy | 3 +- .../result/ConnectorResultFactoryTest.groovy | 4 +- .../FlexOptionsResultFactoryTest.groovy | 6 +- .../result/NodeResultFactoryTest.groovy | 6 +- .../result/SwitchResultFactoryTest.groovy | 4 +- .../SystemParticipantResultFactoryTest.groovy | 10 +- .../result/ThermalResultFactoryTest.groovy | 6 +- .../typeinput/LineTypeInputFactoryTest.groovy | 4 +- ...stemParticipantTypeInputFactoryTest.groovy | 16 +-- .../Transformer2WTypeInputFactoryTest.groovy | 4 +- .../Transformer3WTypeInputFactoryTest.groovy | 4 +- .../io/source/EntitySourceTest.groovy | 2 +- .../io/source/csv/CsvGraphicSourceTest.groovy | 115 +++++++--------- .../models/input/system/EmInputTest.groovy | 11 +- 46 files changed, 421 insertions(+), 310 deletions(-) delete mode 100644 src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityData.java delete mode 100644 src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityFactory.java create mode 100644 src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java diff --git a/docs/uml/main/EntitySourceClassDiagram.puml b/docs/uml/main/EntitySourceClassDiagram.puml index 49be16965..03723a79d 100644 --- a/docs/uml/main/EntitySourceClassDiagram.puml +++ b/docs/uml/main/EntitySourceClassDiagram.puml @@ -1,5 +1,6 @@ @startuml +' todo apapt note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes abstract class EntitySource { @@ -7,7 +8,7 @@ abstract class EntitySource { - Set buildNodeAssetEntities(Class, EntityFactory, Collection, Collection, ConcurrentMap, LongAdder>) - Set buildNodeAssetEntities(Class, EntityFactory, Collection, Collection) - Set buildAssetInputEntities(Class, EntityFactory, Collection) - - Set buildAssetInputEntities(Class, EntityFactory) + - Set buildAssetInputEntities(Class, EntityFactory) } EntitySource <|-- GraphicSource EntitySource <|-- RawGridSource diff --git a/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java index 189279f5d..8f874087d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/EntityData.java @@ -24,7 +24,9 @@ import tech.units.indriya.ComparableQuantity; /** - * Internal API Contains data that is needed by an {@link EntityFactory} to generate an entity + * Data used by {@link EntityFactory} to create an instance of an entity than can be created based + * only on a mapping of fieldName to value. This class can be used whenever no additional data is + * needed, but also functions as a parent class for extensions. * * @version 0.1 * @since 28.01.20 diff --git a/src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityData.java deleted file mode 100644 index 267255c70..000000000 --- a/src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityData.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * © 2021. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.io.factory; - -import edu.ie3.datamodel.models.UniqueEntity; -import java.util.Map; - -/** - * Data used by {@link SimpleEntityFactory} to create an instance of an entity than can be created - * based only on a mapping of fieldName to value. This class can be used whenever no additional data - * is needed, but should not be used as parent class for extensions. Use {@link EntityData} for - * extensions instead. - * - * @version 0.1 - * @since 28.01.20 - */ -public final class SimpleEntityData extends EntityData { - - public SimpleEntityData( - Map fieldsToAttributes, Class clazz) { - super(fieldsToAttributes, clazz); - } -} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityFactory.java deleted file mode 100644 index a420212c2..000000000 --- a/src/main/java/edu/ie3/datamodel/io/factory/SimpleEntityFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * © 2021. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.io.factory; - -import edu.ie3.datamodel.models.UniqueEntity; - -/** - * Internal API Interface for Entities that can be build without any dependencies on other complex - * pojos - * - * @version 0.1 - * @since 28.01.20 - */ -public abstract class SimpleEntityFactory - extends EntityFactory { - - protected SimpleEntityFactory(Class... allowedClasses) { - super(allowedClasses); - } -} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java new file mode 100644 index 000000000..43d6babb2 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java @@ -0,0 +1,55 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.factory.input; + +import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.EmInput; +import edu.ie3.datamodel.models.input.OperatorInput; +import java.util.Map; + +/** + * Data used for the construction of {@link edu.ie3.datamodel.models.input.AssetInput} entities + * which also require an EM attribute. This data object can include additional information about the + * {@link EmInput}, which cannot be provided through the attribute map as it is a complex shared + * entity. + */ +public class EmAssetInputEntityData extends AssetInputEntityData { + + private final EmInput emUnit; + + public EmAssetInputEntityData( + Map fieldsToAttributes, + Class entityClass, + EmInput emUnit) { + super(fieldsToAttributes, entityClass); + this.emUnit = emUnit; + } + + public EmAssetInputEntityData( + Map fieldsToAttributes, + Class entityClass, + OperatorInput operator, + EmInput emUnit) { + super(fieldsToAttributes, entityClass, operator); + this.emUnit = emUnit; + } + + public EmInput getEmUnit() { + return emUnit; + } + + /** + * Creates a new EmAssetInputEntityData object based on a given {@link AssetInputEntityData} + * object and given em unit + * + * @param entityData The entity data object to use attributes of + * @param emUnit The em input to use + */ + public EmAssetInputEntityData(AssetInputEntityData entityData, EmInput emUnit) { + super(entityData, entityData.getOperatorInput()); + this.emUnit = emUnit; + } +} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java index 09dcdc881..3bde8039b 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/OperatorInputFactory.java @@ -5,14 +5,14 @@ */ package edu.ie3.datamodel.io.factory.input; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; -import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.models.input.OperatorInput; import java.util.Collections; import java.util.List; import java.util.Set; -public class OperatorInputFactory extends EntityFactory { +public class OperatorInputFactory extends EntityFactory { private static final String ENTITY_UUID = "uuid"; private static final String ENTITY_ID = "id"; @@ -22,13 +22,13 @@ public OperatorInputFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { Set constructorParams = newSet(ENTITY_UUID, ENTITY_ID); return Collections.singletonList(constructorParams); } @Override - protected OperatorInput buildModel(SimpleEntityData data) { + protected OperatorInput buildModel(EntityData data) { return new OperatorInput(data.getUUID(ENTITY_UUID), data.getField(ENTITY_ID)); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index ebfb6a7b8..30c280383 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -5,8 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityFactory; +import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; @@ -15,18 +15,18 @@ import java.util.Set; import java.util.UUID; -public class EmInputFactory extends AssetInputEntityFactory { +public class EmInputFactory extends AssetInputEntityFactory { private static final String CONTROL_STRATEGY = "controlstrategy"; - private static final String PARENT_EM = "parentem"; + public static final String PARENT_EM = "parentem"; public EmInputFactory() { super(EmInput.class); } @Override - protected List> getFields(AssetInputEntityData data) { + protected List> getFields(EmAssetInputEntityData data) { List> fields = new ArrayList<>(super.getFields(data)); List> withEm = @@ -44,15 +44,14 @@ protected String[] getAdditionalFields() { @Override protected EmInput buildModel( - AssetInputEntityData data, + EmAssetInputEntityData data, UUID uuid, String id, OperatorInput operator, OperationTime operationTime) { String controlStrategy = data.getField(CONTROL_STRATEGY); - UUID parentEm = null; - if (data.containsKey(PARENT_EM)) parentEm = data.getUUID(PARENT_EM); + EmInput parentEm = data.getEmUnit(); return new EmInput(uuid, id, operator, operationTime, controlStrategy, parentEm); } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java index 9444350ab..070f05b95 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/ConnectorResultFactory.java @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result; import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.result.connector.ConnectorResult; @@ -44,12 +44,12 @@ public ConnectorResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData simpleEntityData) { + protected List> getFields(EntityData entityData) { /// all result models have the same constructor except StorageResult Set minConstructorParams = newSet(TIME, INPUT_MODEL, IAMAG, IAANG, IBMAG, IBANG); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); - final Class entityClass = simpleEntityData.getTargetClass(); + final Class entityClass = entityData.getTargetClass(); if (entityClass.equals(Transformer2WResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, IAMAG, IAANG, IBMAG, IBANG, TAPPOS); optionalFields = expandSet(minConstructorParams, ENTITY_UUID); @@ -63,7 +63,7 @@ protected List> getFields(SimpleEntityData simpleEntityData) { } @Override - protected ConnectorResult buildModel(SimpleEntityData data) { + protected ConnectorResult buildModel(EntityData data) { final Class entityClass = data.getTargetClass(); ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME)); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java index 10ccfd1ba..a891035ad 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactory.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.factory.result; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.result.system.FlexOptionsResult; import java.time.ZonedDateTime; @@ -34,7 +34,7 @@ public FlexOptionsResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, P_REF, P_MIN, P_MAX); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); @@ -42,7 +42,7 @@ protected List> getFields(SimpleEntityData data) { } @Override - protected FlexOptionsResult buildModel(SimpleEntityData data) { + protected FlexOptionsResult buildModel(EntityData data) { ZonedDateTime zdtTime = timeUtil.toZonedDateTime(data.getField(TIME)); UUID inputModelUuid = data.getUUID(INPUT_MODEL); ComparableQuantity pRef = data.getQuantity(P_REF, StandardUnits.ACTIVE_POWER_RESULT); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java index 9f4a9b016..7fd8b5416 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/NodeResultFactory.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.factory.result; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.result.NodeResult; import java.time.ZonedDateTime; @@ -33,7 +33,7 @@ public NodeResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData entityData) { + protected List> getFields(EntityData entityData) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, VMAG, VANG); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); @@ -41,7 +41,7 @@ protected List> getFields(SimpleEntityData entityData) { } @Override - protected NodeResult buildModel(SimpleEntityData data) { + protected NodeResult buildModel(EntityData data) { ZonedDateTime zdtTime = timeUtil.toZonedDateTime(data.getField(TIME)); UUID inputModelUuid = data.getUUID(INPUT_MODEL); ComparableQuantity vMagValue = diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/ResultEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/ResultEntityFactory.java index 15a815511..1b2bd2dc3 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/ResultEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/ResultEntityFactory.java @@ -5,7 +5,8 @@ */ package edu.ie3.datamodel.io.factory.result; -import edu.ie3.datamodel.io.factory.SimpleEntityFactory; +import edu.ie3.datamodel.io.factory.EntityData; +import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.models.result.ResultEntity; import edu.ie3.util.TimeUtil; import java.time.ZoneId; @@ -18,7 +19,7 @@ * @version 0.1 * @since 11.02.20 */ -abstract class ResultEntityFactory extends SimpleEntityFactory { +abstract class ResultEntityFactory extends EntityFactory { protected static final String ENTITY_UUID = "uuid"; protected static final String TIME = "time"; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java index df24fe8ab..ebb4db615 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/SwitchResultFactory.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.factory.result; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.result.connector.SwitchResult; import java.time.ZonedDateTime; import java.util.*; @@ -29,7 +29,7 @@ public SwitchResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, CLOSED); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); @@ -38,7 +38,7 @@ protected List> getFields(SimpleEntityData data) { } @Override - protected SwitchResult buildModel(SimpleEntityData data) { + protected SwitchResult buildModel(EntityData data) { Optional uuidOpt = data.containsKey(ENTITY_UUID) ? Optional.of(data.getUUID(ENTITY_UUID)) : Optional.empty(); ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME)); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java index 62aa0dc03..b37cbae3c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactory.java @@ -8,7 +8,7 @@ import static tech.units.indriya.unit.Units.PERCENT; import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.result.system.*; @@ -20,7 +20,7 @@ /** * Factory class for creating {@link SystemParticipantResult} entities from provided {@link - * SimpleEntityData} data objects. + * EntityData} data objects. */ public class SystemParticipantResultFactory extends ResultEntityFactory { @@ -67,7 +67,7 @@ public SystemParticipantResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { /// all result models have the same constructor except StorageResult Set minConstructorParams = newSet(TIME, INPUT_MODEL, POWER, REACTIVE_POWER); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); @@ -87,7 +87,7 @@ protected List> getFields(SimpleEntityData data) { } @Override - protected SystemParticipantResult buildModel(SimpleEntityData data) { + protected SystemParticipantResult buildModel(EntityData data) { Class entityClass = data.getTargetClass(); ZonedDateTime zdtTime = timeUtil.toZonedDateTime(data.getField(TIME)); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java index 2d3e2c77c..576c2947f 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/ThermalResultFactory.java @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result; import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult; @@ -41,13 +41,13 @@ public ThermalResultFactory(String dtfPattern) { } @Override - protected List> getFields(SimpleEntityData simpleEntityData) { + protected List> getFields(EntityData entityData) { Set minConstructorParams = newSet(TIME, INPUT_MODEL, Q_DOT); Set optionalFields = expandSet(minConstructorParams, ENTITY_UUID); - if (simpleEntityData.getTargetClass().equals(ThermalHouseResult.class)) { + if (entityData.getTargetClass().equals(ThermalHouseResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, Q_DOT, INDOOR_TEMPERATURE); - } else if (simpleEntityData.getTargetClass().equals(CylindricalStorageResult.class)) { + } else if (entityData.getTargetClass().equals(CylindricalStorageResult.class)) { minConstructorParams = newSet(TIME, INPUT_MODEL, Q_DOT, ENERGY, FILL_LEVEL); } @@ -55,7 +55,7 @@ protected List> getFields(SimpleEntityData simpleEntityData) { } @Override - protected ThermalUnitResult buildModel(SimpleEntityData data) { + protected ThermalUnitResult buildModel(EntityData data) { Class clazz = data.getTargetClass(); ZonedDateTime zdtTime = timeUtil.toZonedDateTime(data.getField(TIME)); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java index 64aa90af4..201bdd0d4 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMappingFactory.java @@ -5,8 +5,8 @@ */ package edu.ie3.datamodel.io.factory.timeseries; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; -import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; import java.util.Collections; import java.util.List; @@ -16,7 +16,7 @@ import java.util.stream.Stream; public class TimeSeriesMappingFactory - extends EntityFactory { + extends EntityFactory { private static final String UUID = "uuid"; private static final String PARTICIPANT = "participant"; private static final String TIME_SERIES = "timeSeries"; @@ -26,13 +26,13 @@ public TimeSeriesMappingFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { return Collections.singletonList( Stream.of(UUID, PARTICIPANT, TIME_SERIES).collect(Collectors.toSet())); } @Override - protected TimeSeriesMappingSource.MappingEntry buildModel(SimpleEntityData data) { + protected TimeSeriesMappingSource.MappingEntry buildModel(EntityData data) { UUID uuid = data.getUUID(UUID); UUID participant = data.getUUID(PARTICIPANT); UUID timeSeries = data.getUUID(TIME_SERIES); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java index fba7317a7..46cda47f4 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeSeriesMetaInformationFactory.java @@ -5,8 +5,8 @@ */ package edu.ie3.datamodel.io.factory.timeseries; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; -import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme; import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation; import java.util.Collections; @@ -21,7 +21,7 @@ * mappings */ public class TimeSeriesMetaInformationFactory - extends EntityFactory { + extends EntityFactory { private static final String TIME_SERIES = "timeSeries"; private static final String COLUMN_SCHEME = "columnScheme"; @@ -30,13 +30,13 @@ public TimeSeriesMetaInformationFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { return Collections.singletonList( Stream.of(TIME_SERIES, COLUMN_SCHEME).collect(Collectors.toSet())); } @Override - protected IndividualTimeSeriesMetaInformation buildModel(SimpleEntityData data) { + protected IndividualTimeSeriesMetaInformation buildModel(EntityData data) { UUID timeSeries = data.getUUID(TIME_SERIES); ColumnScheme columnScheme = ColumnScheme.parse(data.getField(COLUMN_SCHEME)).orElseThrow(); return new IndividualTimeSeriesMetaInformation(timeSeries, columnScheme); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/AssetTypeInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/AssetTypeInputEntityFactory.java index 13de960ee..a318f7621 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/AssetTypeInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/AssetTypeInputEntityFactory.java @@ -5,7 +5,8 @@ */ package edu.ie3.datamodel.io.factory.typeinput; -import edu.ie3.datamodel.io.factory.SimpleEntityFactory; +import edu.ie3.datamodel.io.factory.EntityData; +import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.models.input.AssetTypeInput; /** @@ -17,7 +18,7 @@ * @since 11.02.20 */ abstract class AssetTypeInputEntityFactory - extends SimpleEntityFactory { + extends EntityFactory { protected static final String ENTITY_UUID = "uuid"; protected static final String ENTITY_ID = "id"; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java index 609a11849..8184f569a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactory.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.factory.typeinput; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.connector.type.LineTypeInput; import edu.ie3.util.quantities.interfaces.SpecificConductance; @@ -31,14 +31,14 @@ public LineTypeInputFactory() { } @Override - protected List> getFields(SimpleEntityData entityData) { + protected List> getFields(EntityData entityData) { Set constructorParams = newSet(ENTITY_UUID, ENTITY_ID, B, G, R, X, I_MAX, V_RATED); return Collections.singletonList(constructorParams); } @Override - protected LineTypeInput buildModel(SimpleEntityData data) { + protected LineTypeInput buildModel(EntityData data) { UUID uuid = data.getUUID(ENTITY_UUID); String id = data.getField(ENTITY_ID); ComparableQuantity b = diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java index e0aa91bdf..312cb3603 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java @@ -7,7 +7,7 @@ import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; import edu.ie3.datamodel.models.input.system.type.*; @@ -71,7 +71,7 @@ public SystemParticipantTypeInputFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { Set standardConstructorParams = newSet(ENTITY_UUID, ENTITY_ID, CAP_EX, OP_EX, S_RATED, COS_PHI_RATED); @@ -105,7 +105,7 @@ protected List> getFields(SimpleEntityData data) { } @Override - protected SystemParticipantTypeInput buildModel(SimpleEntityData data) { + protected SystemParticipantTypeInput buildModel(EntityData data) { UUID uuid = data.getUUID(ENTITY_UUID); String id = data.getField(ENTITY_ID); ComparableQuantity capEx = data.getQuantity(CAP_EX, StandardUnits.CAPEX); @@ -132,7 +132,7 @@ else if (data.getTargetClass().equals(StorageTypeInput.class)) } private SystemParticipantTypeInput buildEvTypeInput( - SimpleEntityData data, + EntityData data, UUID uuid, String id, ComparableQuantity capEx, @@ -148,7 +148,7 @@ private SystemParticipantTypeInput buildEvTypeInput( } private SystemParticipantTypeInput buildHpTypeInput( - SimpleEntityData data, + EntityData data, UUID uuid, String id, ComparableQuantity capEx, @@ -161,7 +161,7 @@ private SystemParticipantTypeInput buildHpTypeInput( } private SystemParticipantTypeInput buildBmTypeInput( - SimpleEntityData data, + EntityData data, UUID uuid, String id, ComparableQuantity capEx, @@ -177,7 +177,7 @@ private SystemParticipantTypeInput buildBmTypeInput( } private SystemParticipantTypeInput buildWecTypeInput( - SimpleEntityData data, + EntityData data, UUID uuid, String id, ComparableQuantity capEx, @@ -207,7 +207,7 @@ private SystemParticipantTypeInput buildWecTypeInput( } private SystemParticipantTypeInput buildChpTypeInput( - SimpleEntityData data, + EntityData data, UUID uuid, String id, ComparableQuantity capEx, @@ -228,7 +228,7 @@ private SystemParticipantTypeInput buildChpTypeInput( } private SystemParticipantTypeInput buildStorageTypeInput( - SimpleEntityData data, + EntityData data, UUID uuid, String id, ComparableQuantity capEx, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java index a79236d49..f70dc5593 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactory.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.factory.typeinput; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput; import java.util.Collections; @@ -36,7 +36,7 @@ public Transformer2WTypeInputFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { Set constructorParams = newSet( ENTITY_UUID, @@ -59,7 +59,7 @@ protected List> getFields(SimpleEntityData data) { } @Override - protected Transformer2WTypeInput buildModel(SimpleEntityData data) { + protected Transformer2WTypeInput buildModel(EntityData data) { UUID uuid = data.getUUID(ENTITY_UUID); String id = data.getField(ENTITY_ID); ComparableQuantity rSc = data.getQuantity(R_SC, StandardUnits.RESISTANCE); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java index a51f2ec7b..d64b52a1e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactory.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.factory.typeinput; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import java.util.Collections; @@ -42,7 +42,7 @@ public Transformer3WTypeInputFactory() { } @Override - protected List> getFields(SimpleEntityData data) { + protected List> getFields(EntityData data) { Set constructorParams = newSet( ENTITY_UUID, @@ -71,7 +71,7 @@ protected List> getFields(SimpleEntityData data) { } @Override - protected Transformer3WTypeInput buildModel(SimpleEntityData data) { + protected Transformer3WTypeInput buildModel(EntityData data) { UUID uuid = data.getUUID(ENTITY_UUID); String id = data.getField(ENTITY_ID); ComparableQuantity sRatedA = data.getQuantity(S_RATED_A, StandardUnits.S_RATED); diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 552df1163..59cae4a0b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -5,12 +5,20 @@ */ package edu.ie3.datamodel.io.source; +import static edu.ie3.datamodel.io.factory.input.participant.EmInputFactory.PARENT_EM; + import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; +import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.utils.Try; +import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class EnergyManagementSource extends EntitySource { @@ -57,8 +65,122 @@ public Map getEmUnits() throws SourceException { * @return a map of uuid to {@link EmInput} entities */ public Map getEmUnits(Map operators) throws SourceException { - return unpackMap( - buildAssetInputEntityData(EmInput.class, operators).map(emInputFactory::get), - EmInput.class); + return buildHierarchicalEmInputs(operators); + } + + private Map buildHierarchicalEmInputs(Map operators) + throws SourceException { + Stream> assetEntityDataStream = + buildAssetInputEntityData(EmInput.class, operators); + + // Split stream by failures and EMs that are themselves EM-controlled on one side, and EMs at + // root position (that have not failed so far) on the other side, which do not have parents per + // definition. + Map>> split = + assetEntityDataStream.collect( + Collectors.partitioningBy( + dataTry -> + dataTry + .map( + data -> + data.containsKey(PARENT_EM) && !data.getField(PARENT_EM).isBlank()) + .getOrElse(() -> true))); + + List> rootEmsEntityData = split.get(false); + List> others = split.get(true); + + // at the start, this is only root ems + Map allEms = + unpackMap( + rootEmsEntityData.stream() + .parallel() + .map( + entityDataTry -> + entityDataTry.map( + entityData -> new EmAssetInputEntityData(entityData, null))) + .map(emInputFactory::get), + EmInput.class); + + if (!others.isEmpty()) { + // there's more levels beyond EMs at root level. Build them recursively + Stream othersWithParentUuid = + unpack( + others.stream() + .map( + dataTry -> + dataTry.flatMap( + data -> { + // we already filtered out those entities that do not have a parent, + // so the field should exist + String uuidString = data.getField(PARENT_EM); + return Try.of( + () -> UUID.fromString(uuidString), + IllegalArgumentException.class) + .transformF( + iae -> + new SourceException( + String.format( + "Exception while trying to parse UUID of field \"%s\" with value \"%s\"", + PARENT_EM, uuidString), + iae)) + // failed UUID parses are filtered out at this point. We save + // the parsed UUID with the asset data + .map( + parentUuid -> + new AssetDataAndValidParentUuid(data, parentUuid)); + })), + AssetDataAndValidParentUuid.class); + + allEms.putAll(buildHierarchicalEmInputs(othersWithParentUuid, allEms)); + } + + return allEms; } + + private Map buildHierarchicalEmInputs( + Stream assetEntityDataStream, Map builtEms) + throws SourceException { + + // Split stream by assets whose parent is already built (which can be built at this level), and + // those whose parents are not built yet (which have to be built at some lower recursion level + // or not at all) + Map> split = + assetEntityDataStream.collect( + Collectors.partitioningBy(data -> builtEms.containsKey(data.parentEm))); + + List toBeBuiltAtThisLevel = split.get(true); + List others = split.get(false); + + if (toBeBuiltAtThisLevel.isEmpty()) { + // Since we only start a new recursion step if the asset data stream is not empty, + // we can conclude at this point that from all asset data at this recursion level, + // no new EMs can be built - thus, parents must be missing + throw new SourceException( + "EMs " + others + " were assigned a parent EM that does not exist."); + } else { + // New EMs can be built at this level + Map newEms = + unpackMap( + toBeBuiltAtThisLevel.stream() + .map( + data -> + emInputFactory.get( + new EmAssetInputEntityData( + data.entityData, builtEms.get(data.parentEm)))), + EmInput.class); + + // This also means that if there's more EMs left to build, the new EMs might function as + // parents there + if (!others.isEmpty()) { + newEms.putAll(buildHierarchicalEmInputs(others.stream(), newEms)); + } + return newEms; + } + } + + /** + * Helper data record that holds an {@link AssetInputEntityData} and the UUID successfully parsed + * from {@link EmInputFactory#PARENT_EM} field + */ + private record AssetDataAndValidParentUuid(AssetInputEntityData entityData, UUID parentEm) {} } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index bb273f293..20f61e40d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -9,7 +9,6 @@ import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; -import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; @@ -27,6 +26,7 @@ /** Class that provides all functionalities to build entities */ public abstract class EntitySource { + // TODO make all subclasses static? protected static final Logger log = LoggerFactory.getLogger(EntitySource.class); @@ -163,10 +163,12 @@ protected static Try getLinkedEntit .transformF( exception -> new SourceException( - "Linked entity " + "Linked " + fieldName + + " with UUID " + + entityUuid + " was not found for entity " - + entityData.toString(), + + entityData, exception))); } @@ -215,10 +217,12 @@ Try optionallyEnrichEntityData( .transformF( exception -> new SourceException( - "Linked entity " + "Linked " + fieldName - + " was not found for entity of class" - + entityData.getTargetClass().getSimpleName(), + + " with UUID " + + entityUuid + + " was not found for entity " + + entityData, exception)))) .orElseGet( () -> { @@ -324,7 +328,7 @@ protected Stream> buildAssetInputEnti * the data * @return stream of the entity data wrapped in a {@link Try} */ - private static Stream> assetInputEntityDataStream( + protected static Stream> assetInputEntityDataStream( Stream> entityDataStream, Map operators) { return entityDataStream @@ -342,36 +346,21 @@ private static Stream> assetInputEnti } /** - * Returns a stream of optional {@link AssetInputEntityData} that can be used to build instances - * of several subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} that - * consumes this data. + * Returns a stream of optional {@link EntityData} that can be used to build instances of several + * subtypes of {@link UniqueEntity} by a corresponding {@link EntityFactory} that consumes this + * data. * * @param entityClass the entity class that should be build * @param type of the entity that should be build * @return stream of the entity data wrapped in a {@link Try} */ - private Stream> buildEntityData( + protected Stream> buildEntityData( Class entityClass) { return dataSource .getSourceData(entityClass) .map(fieldsToAttributes -> new Success<>(new EntityData(fieldsToAttributes, entityClass))); } - /** - * Returns a stream of {@link SimpleEntityData} for result entity classes, using a - * fields-to-attributes map. - * - * @param entityClass the entity class that should be build - * @param Type of the {@link UniqueEntity} to expect - * @return stream of {@link SimpleEntityData} - */ - protected Stream buildSimpleEntityData( - Class entityClass) { - return dataSource - .getSourceData(entityClass) - .map(fieldsToAttributes -> new SimpleEntityData(fieldsToAttributes, entityClass)); - } - protected static Map unpackMap( Stream> inputStream, Class entityClass) throws SourceException { return unpack(inputStream, entityClass) @@ -383,9 +372,9 @@ protected static Set unpackSet( return unpack(inputStream, entityClass).collect(Collectors.toSet()); } - private static Stream unpack( - Stream> inputStream, Class entityClass) throws SourceException { - return Try.scanStream(inputStream, entityClass.getSimpleName()) + protected static Stream unpack( + Stream> inputStream, Class clazz) throws SourceException { + return Try.scanStream(inputStream, clazz.getSimpleName()) .transformF(SourceException::new) .getOrThrow(); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index a487f01bc..8bd81a3be 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.exceptions.GraphicSourceException; import edu.ie3.datamodel.exceptions.SourceException; -import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputFactory; import edu.ie3.datamodel.io.factory.input.graphics.NodeGraphicInputEntityData; @@ -55,7 +54,8 @@ public GraphicElements getGraphicElements() throws SourceException { // read all needed entities /// start with types and operators - Map operators = typeSource.getOperators(); + Map operators = + typeSource.getOperators(); // fixme those only need to be fetched once, if done smartly Map lineTypes = typeSource.getLineTypes(); Map nodes = rawGridSource.getNodes(operators); @@ -135,15 +135,13 @@ public Set getLineGraphicInput(Map lines) */ protected Stream> buildNodeGraphicEntityData( Map nodes) { - return dataSource - .getSourceData(NodeGraphicInput.class) + return buildEntityData(NodeGraphicInput.class) .map( - fieldsToAttributes -> - enrichEntityData( - new EntityData(fieldsToAttributes, NodeGraphicInput.class), - NODE, - nodes, - NodeGraphicInputEntityData::new)); + entityDataTry -> + entityDataTry.flatMap( + entityData -> + enrichEntityData( + entityData, NODE, nodes, NodeGraphicInputEntityData::new))); } /** @@ -163,14 +161,12 @@ protected Stream> buildNodeGrap */ protected Stream> buildLineGraphicEntityData( Map lines) { - return dataSource - .getSourceData(LineGraphicInput.class) + return buildEntityData(LineGraphicInput.class) .map( - fieldsToAttributes -> - enrichEntityData( - new EntityData(fieldsToAttributes, LineGraphicInput.class), - "line", - lines, - LineGraphicInputEntityData::new)); + entityDataTry -> + entityDataTry.flatMap( + entityData -> + enrichEntityData( + entityData, "line", lines, LineGraphicInputEntityData::new))); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index 2783c0adc..f427bd9f6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -209,7 +209,7 @@ public Map getLines( Map operators) throws SourceException { return unpackMap( - typedEntityStream(LineInput.class, lineInputFactory, nodes, operators, lineTypeInputs), + buildTypedEntityData(LineInput.class, lineInputFactory, nodes, operators, lineTypeInputs), LineInput.class); } @@ -256,7 +256,7 @@ public Set get2WTransformers( Map operators) throws SourceException { return unpackSet( - typedEntityStream( + buildTypedEntityData( Transformer2WInput.class, transformer2WInputFactory, nodes, @@ -398,6 +398,22 @@ public Set getMeasurementUnits( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + // todo refactoring + + private + Stream> buildTypedEntityData( + Class entityClass, + EntityFactory> factory, + Map nodes, + Map operators, + Map types) { + return buildTypedConnectorEntityData( + buildUntypedConnectorInputEntityData( + buildAssetInputEntityData(entityClass, operators), nodes), + types) + .map(factory::get); + } + public Set buildUntypedConnectorInputEntities( Class entityClass, EntityFactory factory, @@ -478,21 +494,6 @@ Stream, SourceException>> buildTypedConnect ConnectorInputEntityData::new))); } - // todo needed? - private - Stream> typedEntityStream( - Class entityClass, - EntityFactory> factory, - Map nodes, - Map operators, - Map types) { - return buildTypedConnectorEntityData( - buildUntypedConnectorInputEntityData( - buildAssetInputEntityData(entityClass, operators), nodes), - types) - .map(factory::get); - } - /** * Enriches the Stream of tries on {@link Transformer3WInputEntityData} with the information of * the internal node. diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index c0bc3fae5..b8f21a545 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -6,7 +6,8 @@ package edu.ie3.datamodel.io.source; import edu.ie3.datamodel.exceptions.SourceException; -import edu.ie3.datamodel.io.factory.SimpleEntityFactory; +import edu.ie3.datamodel.io.factory.EntityData; +import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.result.*; import edu.ie3.datamodel.models.result.NodeResult; import edu.ie3.datamodel.models.result.ResultEntity; @@ -327,10 +328,10 @@ public Set getEmResults() throws SourceException { */ @SuppressWarnings("unchecked") private Set getResultEntities( - Class entityClass, SimpleEntityFactory factory) + Class entityClass, EntityFactory factory) throws SourceException { return unpackSet( - buildSimpleEntityData(entityClass) + buildEntityData(entityClass) .map(entityData -> factory.get(entityData).map(data -> (T) data)), entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 84afd2e44..7fada86a1 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -22,7 +22,9 @@ import java.util.stream.Stream; /** - * todo javadoc Interface that provides the capability to build thermal {@link + * todo javadoc + * + *

Interface that provides the capability to build thermal {@link * edu.ie3.datamodel.models.input.AssetInput} entities from persistent data e.g. .csv files or * databases * diff --git a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java index 09d4530f9..66a22d8f9 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.source; import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.timeseries.TimeSeriesMappingFactory; import edu.ie3.datamodel.models.input.InputEntity; import edu.ie3.datamodel.utils.Try; @@ -65,7 +65,7 @@ public Optional getTimeSeriesUuid(UUID modelIdentifier) { private Try createMappingEntry( Map fieldToValues) { - SimpleEntityData entityData = new SimpleEntityData(fieldToValues, MappingEntry.class); + EntityData entityData = new EntityData(fieldToValues, MappingEntry.class); return mappingFactory.get(entityData); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index 8671ebad7..1271c29f5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -7,8 +7,8 @@ import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; -import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.factory.input.OperatorInputFactory; import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory; import edu.ie3.datamodel.io.factory.typeinput.SystemParticipantTypeInputFactory; @@ -63,7 +63,7 @@ public TypeSource(DataSource dataSource) { */ public Map getTransformer2WTypes() throws SourceException { return unpackMap( - buildSimpleEntityData(Transformer2WTypeInput.class).map(transformer2WTypeInputFactory::get), + buildEntityData(Transformer2WTypeInput.class).map(transformer2WTypeInputFactory::get), Transformer2WTypeInput.class); } @@ -77,8 +77,7 @@ public Map getTransformer2WTypes() throws SourceEx */ public Map getOperators() throws SourceException { return unpackMap( - buildSimpleEntityData(OperatorInput.class).map(operatorInputFactory::get), - OperatorInput.class); + buildEntityData(OperatorInput.class).map(operatorInputFactory::get), OperatorInput.class); } /** @@ -91,8 +90,7 @@ public Map getOperators() throws SourceException { */ public Map getLineTypes() throws SourceException { return unpackMap( - buildSimpleEntityData(LineTypeInput.class).map(lineTypeInputFactory::get), - LineTypeInput.class); + buildEntityData(LineTypeInput.class).map(lineTypeInputFactory::get), LineTypeInput.class); } /** @@ -106,7 +104,7 @@ public Map getLineTypes() throws SourceException { */ public Map getTransformer3WTypes() throws SourceException { return unpackMap( - buildSimpleEntityData(Transformer3WTypeInput.class).map(transformer3WTypeInputFactory::get), + buildEntityData(Transformer3WTypeInput.class).map(transformer3WTypeInputFactory::get), Transformer3WTypeInput.class); } @@ -200,8 +198,7 @@ public Map getEvTypes() throws SourceException { */ @SuppressWarnings("unchecked") private Stream> buildEntities( - Class entityClass, EntityFactory factory) { - return buildSimpleEntityData(entityClass) - .map(data -> (Try) factory.get(data)); + Class entityClass, EntityFactory factory) { + return buildEntityData(entityClass).map(data -> (Try) factory.get(data)); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMetaInformationSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMetaInformationSource.java index ad01ebe62..f0144b986 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMetaInformationSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMetaInformationSource.java @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.source.sql; import edu.ie3.datamodel.io.connectors.SqlConnector; -import edu.ie3.datamodel.io.factory.SimpleEntityData; +import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.timeseries.TimeSeriesMetaInformationFactory; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme; @@ -92,8 +92,8 @@ public Optional getTimeSeriesMetaInformatio private Optional createEntity( Map fieldToValues) { - SimpleEntityData entityData = - new SimpleEntityData(fieldToValues, IndividualTimeSeriesMetaInformation.class); + EntityData entityData = + new EntityData(fieldToValues, IndividualTimeSeriesMetaInformation.class); return mappingFactory.get(entityData).getData(); } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java index 6df13c3fd..a7b429ed5 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java @@ -18,7 +18,7 @@ public class EmInput extends AssetInput { * Optional UUID of the parent {@link EmInput} that is controlling this em unit. If null, this em * unit is not em-controlled. */ - private final UUID parentEm; + private final EmInput parentEm; /** * Constructor for an operated energy management system @@ -36,7 +36,7 @@ public EmInput( OperatorInput operator, OperationTime operationTime, String emControlStrategy, - UUID parentEm) { + EmInput parentEm) { super(uuid, id, operator, operationTime); this.controlStrategy = emControlStrategy; this.parentEm = parentEm; @@ -50,7 +50,7 @@ public EmInput( * @param emControlStrategy the control strategy * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. */ - public EmInput(UUID uuid, String id, String emControlStrategy, UUID parentEm) { + public EmInput(UUID uuid, String id, String emControlStrategy, EmInput parentEm) { super(uuid, id); this.controlStrategy = emControlStrategy; this.parentEm = parentEm; @@ -60,7 +60,7 @@ public String getControlStrategy() { return controlStrategy; } - public UUID getParentEm() { + public EmInput getParentEm() { return parentEm; } @@ -96,7 +96,7 @@ public String toString() { + ", controlStrategy=" + getControlStrategy() + ", parentEm=" - + getParentEm() + + getParentEm().getUuid() + '}'; } @@ -104,7 +104,7 @@ public static class EmInputCopyBuilder extends AssetInputCopyBuilder input = inputFactory.get(new SimpleEntityData(parameter, inputClass)) + Try input = inputFactory.get(new EntityData(parameter, inputClass)) then: input.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy index 6c56ecd4f..8ea8a4cf8 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput @@ -59,7 +58,7 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/ConnectorResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/ConnectorResultFactoryTest.groovy index d22c8abac..9711dd7f7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/ConnectorResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/ConnectorResultFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.result.connector.ConnectorResult import edu.ie3.datamodel.models.result.connector.LineResult @@ -53,7 +53,7 @@ class ConnectorResultFactoryTest extends Specification implements FactoryTestHel } when: - Try result = resultFactory.get(new SimpleEntityData(parameter, modelClass)) + Try result = resultFactory.get(new EntityData(parameter, modelClass)) then: result.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy index c46eabaea..539da36b6 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.result.system.FlexOptionsResult import edu.ie3.datamodel.utils.Try @@ -36,7 +36,7 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, FlexOptionsResult)) + Try result = resultFactory.get(new EntityData(parameter, FlexOptionsResult)) then: result.success @@ -61,7 +61,7 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH ] when: - Try input = resultFactory.get(new SimpleEntityData(parameter, FlexOptionsResult)) + Try input = resultFactory.get(new EntityData(parameter, FlexOptionsResult)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy index 9dbc4e294..5779a6f10 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.result.NodeResult import edu.ie3.datamodel.utils.Try @@ -35,7 +35,7 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, NodeResult)) + Try result = resultFactory.get(new EntityData(parameter, NodeResult)) then: result.success @@ -58,7 +58,7 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { ] when: - Try input = resultFactory.get(new SimpleEntityData(parameter, NodeResult)) + Try input = resultFactory.get(new EntityData(parameter, NodeResult)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SwitchResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SwitchResultFactoryTest.groovy index ff05a4ff8..618d3291a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SwitchResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SwitchResultFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.result.connector.SwitchResult import edu.ie3.datamodel.utils.Try import edu.ie3.test.helper.FactoryTestHelper @@ -35,7 +35,7 @@ class SwitchResultFactoryTest extends Specification implements FactoryTestHelper ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, SwitchResult)) + Try result = resultFactory.get(new EntityData(parameter, SwitchResult)) then: result.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy index 664749ca6..58ef25854 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.result.system.* import edu.ie3.datamodel.utils.Try @@ -56,7 +56,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor } when: - Try result = resultFactory.get(new SimpleEntityData(parameter, modelClass)) + Try result = resultFactory.get(new EntityData(parameter, modelClass)) then: result.success @@ -110,7 +110,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor "q" : "2" ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, StorageResult)) + Try result = resultFactory.get(new EntityData(parameter, StorageResult)) then: result.success @@ -133,7 +133,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor "q" : "2" ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, WecResult)) + Try result = resultFactory.get(new EntityData(parameter, WecResult)) then: result.failure @@ -159,7 +159,7 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor expect: "that the factory should not need more than 3 seconds for processing 10.000 entities" Long startTime = System.currentTimeMillis() 10000.times { - resultFactory.get(new SimpleEntityData(parameter, StorageResult)) + resultFactory.get(new EntityData(parameter, StorageResult)) } BigDecimal elapsedTime = (System .currentTimeMillis() - startTime) / 1000.0 diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/ThermalResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/ThermalResultFactoryTest.groovy index 3e9456fe2..12b3c1364 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/ThermalResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/ThermalResultFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.result import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult @@ -41,7 +41,7 @@ class ThermalResultFactoryTest extends Specification implements FactoryTestHelpe "fillLevel" : "20" ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, CylindricalStorageResult)) + Try result = resultFactory.get(new EntityData(parameter, CylindricalStorageResult)) then: result.success @@ -65,7 +65,7 @@ class ThermalResultFactoryTest extends Specification implements FactoryTestHelpe "indoorTemperature": "21" ] when: - Try result = resultFactory.get(new SimpleEntityData(parameter, ThermalHouseResult)) + Try result = resultFactory.get(new EntityData(parameter, ThermalHouseResult)) then: result.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy index e32f91720..321576903 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/LineTypeInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.typeinput import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.utils.Try @@ -40,7 +40,7 @@ class LineTypeInputFactoryTest extends Specification implements FactoryTestHelpe def typeInputClass = LineTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index 6204419c1..0fd0575ab 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -9,7 +9,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.METRE_PER_SECOND import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicPoint import edu.ie3.datamodel.models.input.system.type.* @@ -56,7 +56,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def typeInputClass = EvTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success @@ -91,7 +91,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def typeInputClass = HpTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success @@ -125,7 +125,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def typeInputClass = BmTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success @@ -163,7 +163,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def typeInputClass = WecTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success @@ -210,7 +210,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def typeInputClass = ChpTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success @@ -253,7 +253,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def typeInputClass = StorageTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success @@ -296,7 +296,7 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac ] when: - Try input = typeInputFactory.get(new SimpleEntityData(parameter, StorageTypeInput)) + Try input = typeInputFactory.get(new EntityData(parameter, StorageTypeInput)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactoryTest.groovy index 848de5662..b6f094353 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer2WTypeInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.typeinput import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.utils.Try @@ -47,7 +47,7 @@ class Transformer2WTypeInputFactoryTest extends Specification implements Factory def typeInputClass = Transformer2WTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy index bd844da36..e040a2132 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/Transformer3WTypeInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.typeinput import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.SimpleEntityData +import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput import edu.ie3.datamodel.utils.Try @@ -53,7 +53,7 @@ class Transformer3WTypeInputFactoryTest extends Specification implements Factory def typeInputClass = Transformer3WTypeInput when: - Try typeInput = typeInputFactory.get(new SimpleEntityData(parameter, typeInputClass)) + Try typeInput = typeInputFactory.get(new EntityData(parameter, typeInputClass)) then: typeInput.success diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 17b93bbfd..9c4f86d48 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -36,7 +36,7 @@ class EntitySourceTest extends Specification { DummyEntitySource dummyEntitySource = new DummyEntitySource(csvDataSource) - def "A CsvDataSource should always return an operator. Either the found one (if any) or OperatorInput.NO_OPERATOR_ASSIGNED"() { + def "An EntitySource should always return an operator. Either the found one (if any) or OperatorInput.NO_OPERATOR_ASSIGNED"() { expect: dummyEntitySource.getFirstOrDefaultOperator(operators, Optional.of(UUID.fromString(operatorUuid)), entityClassName, requestEntityUuid) == expectedOperator diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy index 8946bf585..ae366cd53 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy @@ -5,14 +5,14 @@ */ package edu.ie3.datamodel.io.source.csv +import edu.ie3.datamodel.exceptions.FailureException import edu.ie3.datamodel.exceptions.SourceException -import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData -import edu.ie3.datamodel.io.factory.input.graphics.NodeGraphicInputEntityData import edu.ie3.datamodel.io.source.GraphicSource import edu.ie3.datamodel.io.source.RawGridSource import edu.ie3.datamodel.io.source.TypeSource import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput +import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.GridTestData as gtd @@ -20,16 +20,19 @@ import org.locationtech.jts.geom.LineString import org.locationtech.jts.geom.Point import spock.lang.Specification +import java.util.function.Function +import java.util.stream.Collectors + class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { def "A CsvGraphicSource should provide an instance of GraphicElements based on valid input data correctly"() { given: def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) def rawGridSource = new RawGridSource(typeSource, new CsvDataSource(csvSep, gridDefaultFolderPath, fileNamingStrategy)) - def csvGraphicSource = new GraphicSource(typeSource, rawGridSource, new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) + def graphicSource = new GraphicSource(typeSource, rawGridSource, new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) when: - def graphicElements = csvGraphicSource.graphicElements + def graphicElements = graphicSource.graphicElements then: graphicElements.allEntitiesAsList().size() == 3 @@ -53,10 +56,10 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { } } - def csvGraphicSource = new GraphicSource(typeSource, rawGridSource, new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) + def graphicSource = new GraphicSource(typeSource, rawGridSource, new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) when: - def graphicElements = Try.of(() -> csvGraphicSource.graphicElements, SourceException) + def graphicElements = Try.of(() -> graphicSource.graphicElements, SourceException) then: graphicElements.failure @@ -64,13 +67,13 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { Exception ex = graphicElements.exception.get() ex.class == SourceException - ex.message.startsWith("edu.ie3.datamodel.exceptions.FailureException: 2 exception(s) occurred within \"LineInput\" data, one is: edu.ie3.datamodel.exceptions.FactoryException: edu.ie3.datamodel.exceptions.SourceException: Failure due to: Skipping LineInput with uuid") + ex.message.startsWith("edu.ie3.datamodel.exceptions.FailureException: 2 exception(s) occurred within \"LineInput\" data, one is: edu.ie3.datamodel.exceptions.FactoryException: edu.ie3.datamodel.exceptions.SourceException: Linked nodeA with UUID 4ca90220-74c2-4369-9afa-a18bf068840d was not found for entity") } def "A CsvGraphicSource should read and handle a valid node graphics file as expected"() { given: - def csvGraphicSource = new GraphicSource( + def graphicSource = new GraphicSource( Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) @@ -89,8 +92,13 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { gtd.nodeGraphicC.point ) + Map nodeMap = [ + (gtd.nodeC.getUuid()) : gtd.nodeC, + (gtd.nodeD.getUuid()) : gtd.nodeD + ] + when: - def nodeGraphics = csvGraphicSource.getNodeGraphicInput([gtd.nodeC, gtd.nodeD] as Set) + def nodeGraphics = graphicSource.getNodeGraphicInput(nodeMap) then: nodeGraphics.size() == 2 @@ -100,91 +108,68 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { ] as Set } - def "A CsvGraphicSource should read and handle a valid line graphics file as expected"() { + def "A GraphicSource should read and handle a valid line graphics file as expected"() { given: - def csvGraphicSource = new GraphicSource( + def graphicSource = new GraphicSource( Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) + Map lineMap = [ + (gtd.lineCtoD.getUuid()) : gtd.lineCtoD + ] + when: - def lineGraphics = csvGraphicSource.getLineGraphicInput([gtd.lineCtoD] as Set) + def lineGraphics = graphicSource.getLineGraphicInput(lineMap) then: lineGraphics.size() == 1 lineGraphics.first() == gtd.lineGraphicCtoD } - def "A CsvGraphicSource should build node graphic entity data from valid and invalid input data correctly"() { + def "A GraphicSource when building node graphic data should fail when required node data is not provided"() { given: - def csvGraphicSource = new GraphicSource( + def graphicSource = new GraphicSource( Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) - def fieldsToAttributesMap = [ - "uuid" : "09aec636-791b-45aa-b981-b14edf171c4c", - "graphic_layer": "main", - "node" : "bd837a25-58f3-44ac-aa90-c6b6e3cd91b2", - "path" : "", - "point" : "{\"type\":\"Point\",\"coordinates\":[0.0,10],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}" - ] + Map nodeMap = nodeCollection.stream().collect(Collectors.toMap(NodeInput::getUuid, Function.identity())) - expect: - def res = csvGraphicSource.buildNodeGraphicEntityData(fieldsToAttributesMap, nodeCollection as Set) - res.success == isPresent - - if (isPresent) { - def value = res.data.get() + when: + graphicSource.getNodeGraphicInput(nodeMap) - assert value == new NodeGraphicInputEntityData([ - "uuid" : "09aec636-791b-45aa-b981-b14edf171c4c", - "graphic_layer": "main", - "path" : "", - "point" : "{\"type\":\"Point\",\"coordinates\":[0.0,10],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}" - ], gtd.nodeC) - assert value.node == gtd.nodeC - } + then: + def e = thrown(SourceException) + e.cause.class == FailureException + e.cause.message.startsWith(expectedFailures + " exception(s) occurred") where: - nodeCollection || isPresent - []|| false // no nodes provide - [gtd.nodeA, gtd.nodeB]|| false // node cannot be found - [gtd.nodeC]|| true // node found + nodeCollection || expectedFailures + [] || 2 // no nodes provided + [gtd.nodeA, gtd.nodeB] || 2 // wrongs nodes provided + [gtd.nodeC] || 1 // one node provided + [gtd.nodeD] || 1 // one node provided } - def "A CsvGraphicSource should build line graphic entity data from valid and invalid input data correctly"() { + def "A GraphicSource when building line graphic data should fail when required line data is not provided"() { given: - def csvGraphicSource = new GraphicSource( + def graphicSource = new GraphicSource( Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) - def fieldsToAttributesMap = [ - "uuid" : "ece86139-3238-4a35-9361-457ecb4258b0", - "graphic_layer": "main", - "line" : "92ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "path" : "{\"type\":\"LineString\",\"coordinates\":[[0.0,0.0],[0.0,10]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}" - ] - - expect: - def res = csvGraphicSource.buildLineGraphicEntityData(fieldsToAttributesMap, nodeCollection as Set) - res.success == isPresent + Map lineMap = lineCollection.stream().collect(Collectors.toMap(LineInput::getUuid, Function.identity())) - if (isPresent) { - def value = res.data.get() - - assert value == new LineGraphicInputEntityData(["uuid" : "ece86139-3238-4a35-9361-457ecb4258b0", - "graphic_layer": "main", - "path" : "{\"type\":\"LineString\",\"coordinates\":[[0.0,0.0],[0.0,10]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}" - ] - , gtd.lineAtoB) - assert value.line == gtd.lineAtoB - } + when: + graphicSource.getLineGraphicInput(lineMap) + then: + def e = thrown(SourceException) + e.cause.class == FailureException + e.cause.message.startsWith(expectedFailures + " exception(s) occurred") where: - nodeCollection || isPresent - []|| false // no nodes provide - [gtd.lineCtoD]|| false // line cannot be found - [gtd.lineAtoB]|| true // line found + lineCollection || expectedFailures + [] || 1 // no lines provided + [gtd.lineAtoB] || 1 // line cannot be found } } \ No newline at end of file diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 4ac22b127..dc6cd683a 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -60,6 +60,8 @@ class EmInputTest extends Specification { SystemParticipantTestData.emInput.operationTime + ", controlStrategy=" + SystemParticipantTestData.emInput.controlStrategy + + ", parentEm=" + + SystemParticipantTestData.emInput.parentEm.uuid + '}' } @@ -67,9 +69,15 @@ class EmInputTest extends Specification { given: def emInput = SystemParticipantTestData.emInput def newStrat = "new_strat" + def parentEm = new EmInput( + UUID.fromString("cfc0639b-65bc-47e5-a8e5-82703de3c650"), + "testParent", + "controlStrat", + null + ) when: - def alteredUnit = emInput.copy().controlStrategy(newStrat).build() + def alteredUnit = emInput.copy().controlStrategy(newStrat).parentEm(parentEm).build() then: alteredUnit.with { @@ -78,6 +86,7 @@ class EmInputTest extends Specification { assert operator == emInput.operator assert id == emInput.id assert controlStrategy == newStrat + assert parentEm == parentEm } } } From 7512bf306f24591fe09cdc5627e222e989f29d3f Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 15:13:34 +0100 Subject: [PATCH 051/228] Enhancing Try with commonly used methods --- .../java/edu/ie3/datamodel/utils/Try.java | 55 ++++++++ .../edu/ie3/datamodel/utils/TryTest.groovy | 121 +++++++++++++++--- 2 files changed, 157 insertions(+), 19 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index 06a9a5526..df86150f1 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -11,6 +11,7 @@ import edu.ie3.datamodel.exceptions.TryException; import java.util.*; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -234,6 +235,30 @@ public abstract Try transformF( public abstract Try transform( Function successFunc, Function failureFunc); + /** + * If this is a Success, the value is returned, otherwise given default is returned. + * + * @param defaultData the value to be returned, if this is a failure. + * @return the value of a success, otherwise {@code defaultData} + */ + public abstract T getOrElse(Supplier defaultData); + + /** + * If this is a Success, it is returned, otherwise given default Try is returned. + * + * @param defaultTry the Try to be returned, if this is a failure. + * @return this try object if it is a Success, otherwise {@code defaultTry} + */ + public abstract Try orElse(Supplier> defaultTry); + + /** + * Turns this Try into an {@link Optional} by returning the wrapped value if this is a success, + * and an empty optional if this is a failure. + * + * @return an optional of the value + */ + public abstract Optional toOptional(); + /** Implementation of {@link Try} class. This class is used to present a successful try. */ public static final class Success extends Try { private final T data; @@ -298,6 +323,21 @@ public Try transform( return new Success<>(successFunc.apply(data)); } + @Override + public T getOrElse(Supplier defaultData) { + return data; + } + + @Override + public Try orElse(Supplier> defaultTry) { + return this; + } + + @Override + public Optional toOptional() { + return Optional.of(data); + } + /** Returns the stored data. */ public T get() { return data; @@ -382,6 +422,21 @@ public Try transform( return Failure.of(failureFunc.apply(exception)); } + @Override + public T getOrElse(Supplier defaultData) { + return defaultData.get(); + } + + @Override + public Try orElse(Supplier> defaultTry) { + return defaultTry.get(); + } + + @Override + public Optional toOptional() { + return Optional.empty(); + } + /** Returns the thrown exception. */ public E get() { return exception; diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index 4a0ff0762..61fdc9e0c 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -55,12 +55,10 @@ class TryTest extends Specification { }, FailureException) then: - Exception ex = thrown() - ex.class == TryException + TryException ex = thrown(TryException) ex.message == "Wrongly caught exception: " - Throwable cause = ex.cause - cause.class == SourceException - cause.message == "source exception" + ex.cause.class == SourceException + ex.cause.message == "source exception" } def "A failure is returned when using Failure#ofVoid() with an exception"() { @@ -102,12 +100,10 @@ class TryTest extends Specification { }, FailureException) then: - Exception ex = thrown() - ex.class == TryException + TryException ex = thrown(TryException) ex.message == "Wrongly caught exception: " - Throwable cause = ex.cause - cause.class == SourceException - cause.message == "source exception" + ex.cause.class == SourceException + ex.cause.message == "source exception" } def "A Try object can be creates by a boolean and an exception"() { @@ -160,11 +156,9 @@ class TryTest extends Specification { Try.ofVoid(FailureException, one, two) then: - Exception ex = thrown() - ex.class == TryException - Throwable cause = ex.cause - cause.class == SourceException - cause.message == "source exception" + TryException ex = thrown(TryException) + ex.cause.class == SourceException + ex.cause.message == "source exception" } def "A void method can be applied to a try object"() { @@ -241,16 +235,28 @@ class TryTest extends Specification { scan.data.get().size() == 3 } - def "The getOrThrow method should work as expected"() { + def "The getOrThrow method should work as expected on a success"() { + given: + def value = "some value" + Try success = new Try.Success<>(value) + + when: + def result = success.getOrThrow() + + then: + noExceptionThrown() + result == value + } + + def "The getOrThrow method should work as expected on a failure"() { given: Try failure = new Try.Failure<>(new SourceException("source exception")) when: - failure.orThrow + failure.getOrThrow() then: - Exception ex = thrown() - ex.class == SourceException + SourceException ex = thrown(SourceException) ex.message == "source exception" } @@ -311,6 +317,83 @@ class TryTest extends Specification { flatMapF.exception.get() == failure.get() } + def "The getOrElse method should work as expected on a success"() { + given: + def value = "some value" + Try success = new Try.Success<>(value) + + when: + def result = success.getOrElse(() -> "other") + + then: + result == value + } + + def "The getOrElse method should work as expected on a failure"() { + given: + Try failure = new Try.Failure<>(new SourceException("source exception")) + def defaultString = "other" + + when: + def result = failure.getOrElse(() -> defaultString) + + then: + result == defaultString + } + + def "The orElse method should work as expected on a success"() { + given: + def otherSuccess = new Try.Success<>("other success") + def otherFailure = new Try.Failure<>(new SourceException("other failure")) + Try success = new Try.Success<>("some value") + + when: + def result1 = success.orElse(() -> otherSuccess) + def result2 = success.orElse(() -> otherFailure) + + then: + result1 == success + result2 == success + } + + def "The orElse method should work as expected on a failure"() { + given: + def otherSuccess = new Try.Success<>("other success") + def otherFailure = new Try.Failure<>(new SourceException("other failure")) + Try failure = new Try.Failure<>(new SourceException("source exception")) + + when: + def result1 = failure.orElse(() -> otherSuccess) + def result2 = failure.orElse(() -> otherFailure) + + then: + result1 == otherSuccess + result2 == otherFailure + } + + def "The toOptional method should work as expected on a success"() { + given: + def value = "some value" + Try success = new Try.Success<>(value) + + when: + def result = success.toOptional() + + then: + result == Optional.of(value) + } + + def "The toOptional method should work as expected on a failure"() { + given: + Try failure = new Try.Failure<>(new SourceException("some failure")) + + when: + def result = failure.toOptional() + + then: + result == Optional.empty() + } + def "All exceptions of a collection of try objects should be returned"() { given: List> tries = List.of( From f45df6bb2856c5b63ab11cb1be8abb837e7eace7 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 15:32:14 +0100 Subject: [PATCH 052/228] Added to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3bea51e7..c9a1a69a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Formatting Spotless Groovy import order [#960](https://github.com/ie3-institute/PowerSystemDataModel/issues/960) +- Implementing missing typical methods in `Try` [#970](https://github.com/ie3-institute/PowerSystemDataModel/issues/970) ### Fixed - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) From 399dccd3d2b54b02878cb52dea5ba07eaf25397e Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 17:26:44 +0100 Subject: [PATCH 053/228] Fixing some tests --- .../participant/EmInputFactoryTest.groovy | 43 +++++++++++++++++-- .../csv/CsvEnergyManagementSourceTest.groovy | 1 + .../common/SystemParticipantTestData.groovy | 9 +++- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index 2c49ac48c..9fddd081c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.utils.Try @@ -25,7 +25,7 @@ class EmInputFactoryTest extends Specification { inputFactory.supportedClasses == expectedClasses } - def "A EmInputFactory should parse a valid EmInput correctly"() { + def "A EmInputFactory should parse a valid EmInput with parent EM correctly"() { given: def inputFactory = new EmInputFactory() Map parameter = [ @@ -37,10 +37,11 @@ class EmInputFactoryTest extends Specification { ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) + def parentEmUnit = Mock(EmInput) when: Try input = inputFactory.get( - new AssetInputEntityData(parameter, inputClass, operatorInput)) + new EmAssetInputEntityData(parameter, inputClass, operatorInput, parentEmUnit)) then: input.success @@ -54,6 +55,40 @@ class EmInputFactoryTest extends Specification { assert operator == operatorInput assert id == parameter["id"] assert controlStrategy == parameter["controlstrategy"] + assert parentEm == parentEmUnit + } + } + + def "A EmInputFactory should parse a valid EmInput without parent EM correctly"() { + given: + def inputFactory = new EmInputFactory() + Map parameter = [ + "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", + "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", + "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", + "id" : "TestID", + "controlstrategy" : "no_control" + ] + def inputClass = EmInput + def operatorInput = Mock(OperatorInput) + + when: + Try input = inputFactory.get( + new EmAssetInputEntityData(parameter, inputClass, operatorInput, null)) + + then: + input.success + input.data.get().getClass() == inputClass + input.data.get().with { + assert uuid == UUID.fromString(parameter["uuid"]) + assert operationTime.startDate.present + assert operationTime.startDate.get() == ZonedDateTime.parse(parameter["operatesfrom"]) + assert operationTime.endDate.present + assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) + assert operator == operatorInput + assert id == parameter["id"] + assert controlStrategy == parameter["controlstrategy"] + assert parentEm == null } } @@ -70,7 +105,7 @@ class EmInputFactoryTest extends Specification { when: Try input = inputFactory.get( - new AssetInputEntityData(parameter, inputClass, operatorInput)) + new EmAssetInputEntityData(parameter, inputClass, operatorInput, null)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index f87d80c81..f79dd9ee1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -13,6 +13,7 @@ import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification +// TODO test recursion class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { def "An EnergyManagementSource with csv input should return data from valid em input file as expected"() { diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index c915b0f35..ed1a190a1 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -58,7 +58,14 @@ class SystemParticipantTestData { // EmInput public static final String emControlStrategy = "self_optimization" - public static final UUID parentEm = UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd") + private static final EmInput parentEm = new EmInput( + UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd"), + "test_parentEmInput", + SystemParticipantTestData.operator, + SystemParticipantTestData.operationTime, + emControlStrategy, + null + ) public static final emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), From 2ce6630cb4342d9fe226533778517d7ada1db321 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 17:27:24 +0100 Subject: [PATCH 054/228] EM javadoc --- .../io/source/EnergyManagementSource.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 59cae4a0b..14550060f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -60,14 +60,24 @@ public Map getEmUnits() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances + * @param operators a map of uuid to {@link OperatorInput} that should be used for the returning + * instances * @return a map of uuid to {@link EmInput} entities */ public Map getEmUnits(Map operators) throws SourceException { return buildHierarchicalEmInputs(operators); } + /** + * Since each EM can itself be controlled by another EM, it does not suffice to link {@link + * EmInput}s via {@link EntitySource#optionallyEnrichEntityData} as we do for system participants + * in {@link SystemParticipantSource}. Instead, we use a recursive approach, starting with EMs at + * root level (which are not EM-controlled themselves). + * + * @param operators a map of uuid to {@link OperatorInput} that should be used for the returning + * instances + * @return a map of uuid to {@link EmInput} entities + */ private Map buildHierarchicalEmInputs(Map operators) throws SourceException { Stream> assetEntityDataStream = From 8af8d14574624d768cec114a5ea092cb0bd28dd8 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 18:16:42 +0100 Subject: [PATCH 055/228] equals and hashcode in Try --- .../java/edu/ie3/datamodel/utils/Try.java | 62 +++++++++++++++++++ .../edu/ie3/datamodel/utils/TryTest.groovy | 25 ++++++++ 2 files changed, 87 insertions(+) diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index df86150f1..ba3672741 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -364,6 +364,37 @@ public static Success of(D data) { public static Success empty() { return (Success) emptySuccess; } + + /** + * Indicates whether some other object is "equal to" this {@code Success}. The other object is + * considered equal if: + * + *

+ * + * @param obj an object to be tested for equality + * @return {@code true} if the other object is "equal to" this object otherwise {@code false} + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + return obj instanceof Success other && Objects.equals(data, other.data); + } + + /** + * Returns the hash code of the value. + * + * @return hash code value of the value + */ + @Override + public int hashCode() { + return Objects.hashCode(data); + } } /** Implementation of {@link Try} class. This class is used to present a failed try. */ @@ -464,6 +495,37 @@ public static Failure of(E exception) { public static Failure ofVoid(E exception) { return new Failure<>(exception); } + + /** + * Indicates whether some other object is "equal to" this {@code Failure}. The other object is + * considered equal if: + * + *
    + *
  • it is also a {@code Failure} and; + *
  • the exceptions are "equal to" each other via {@code equals()}. + *
+ * + * @param obj an object to be tested for equality + * @return {@code true} if the other object is "equal to" this object otherwise {@code false} + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + return obj instanceof Failure other && Objects.equals(exception, other.exception); + } + + /** + * Returns the hash code of the exception. + * + * @return hash code value of the exception + */ + @Override + public int hashCode() { + return Objects.hashCode(exception); + } } /** diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index 61fdc9e0c..ffb332697 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -394,6 +394,31 @@ class TryTest extends Specification { result == Optional.empty() } + def "The equals and hashCode method should work as expected on a success"() { + given: + def value = "some value" + Try success1 = new Try.Success<>(value) + Try success2 = new Try.Success<>(value) + Try success3 = new Try.Success<>("other value") + + expect: + success1 == success2 + success1.hashCode() == success2.hashCode() + success1 != success3 + success1.hashCode() != success3.hashCode() + } + + def "The equals and hashCode method should work as expected on a failure"() { + given: + // exceptions usually do not implement #equals, this is difficult to test + Try failure1 = new Try.Failure<>(new SourceException("some failure")) + Try failure2 = new Try.Failure<>(new SourceException("other failure")) + + expect: + failure1 != failure2 + failure1.hashCode() != failure2.hashCode() + } + def "All exceptions of a collection of try objects should be returned"() { given: List> tries = List.of( From 1e6fc2d184445bbccb0be7cc68f2e4786d7a2c34 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 18:16:42 +0100 Subject: [PATCH 056/228] equals and hashcode in Try --- .../java/edu/ie3/datamodel/utils/Try.java | 62 +++++++++++++++++++ .../edu/ie3/datamodel/utils/TryTest.groovy | 25 ++++++++ 2 files changed, 87 insertions(+) diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index df86150f1..ba3672741 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -364,6 +364,37 @@ public static Success of(D data) { public static Success empty() { return (Success) emptySuccess; } + + /** + * Indicates whether some other object is "equal to" this {@code Success}. The other object is + * considered equal if: + * + *
    + *
  • it is also a {@code Success} and; + *
  • the values are "equal to" each other via {@code equals()}. + *
+ * + * @param obj an object to be tested for equality + * @return {@code true} if the other object is "equal to" this object otherwise {@code false} + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + return obj instanceof Success other && Objects.equals(data, other.data); + } + + /** + * Returns the hash code of the value. + * + * @return hash code value of the value + */ + @Override + public int hashCode() { + return Objects.hashCode(data); + } } /** Implementation of {@link Try} class. This class is used to present a failed try. */ @@ -464,6 +495,37 @@ public static Failure of(E exception) { public static Failure ofVoid(E exception) { return new Failure<>(exception); } + + /** + * Indicates whether some other object is "equal to" this {@code Failure}. The other object is + * considered equal if: + * + *
    + *
  • it is also a {@code Failure} and; + *
  • the exceptions are "equal to" each other via {@code equals()}. + *
+ * + * @param obj an object to be tested for equality + * @return {@code true} if the other object is "equal to" this object otherwise {@code false} + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + return obj instanceof Failure other && Objects.equals(exception, other.exception); + } + + /** + * Returns the hash code of the exception. + * + * @return hash code value of the exception + */ + @Override + public int hashCode() { + return Objects.hashCode(exception); + } } /** diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index 61fdc9e0c..ffb332697 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -394,6 +394,31 @@ class TryTest extends Specification { result == Optional.empty() } + def "The equals and hashCode method should work as expected on a success"() { + given: + def value = "some value" + Try success1 = new Try.Success<>(value) + Try success2 = new Try.Success<>(value) + Try success3 = new Try.Success<>("other value") + + expect: + success1 == success2 + success1.hashCode() == success2.hashCode() + success1 != success3 + success1.hashCode() != success3.hashCode() + } + + def "The equals and hashCode method should work as expected on a failure"() { + given: + // exceptions usually do not implement #equals, this is difficult to test + Try failure1 = new Try.Failure<>(new SourceException("some failure")) + Try failure2 = new Try.Failure<>(new SourceException("other failure")) + + expect: + failure1 != failure2 + failure1.hashCode() != failure2.hashCode() + } + def "All exceptions of a collection of try objects should be returned"() { given: List> tries = List.of( From b01226ba05300d9232def2272cccfc69bd479c28 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 20 Dec 2023 18:17:13 +0100 Subject: [PATCH 057/228] Fixing EntitySourceTest --- .../io/source/EntitySourceTest.groovy | 97 ++++++++++++------- .../common/SystemParticipantTestData.groovy | 2 +- 2 files changed, 63 insertions(+), 36 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 9c4f86d48..1356f5426 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -5,17 +5,25 @@ */ package edu.ie3.datamodel.io.source -import edu.ie3.datamodel.io.factory.input.ThermalBusInputFactory +import edu.ie3.datamodel.exceptions.SourceException +import edu.ie3.datamodel.io.factory.EntityData +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.csv.CsvDataSource -import edu.ie3.datamodel.models.input.OperatorInput -import edu.ie3.datamodel.models.input.thermal.ThermalBusInput -import edu.ie3.test.common.GridTestData as gtd +import edu.ie3.datamodel.models.UniqueEntity +import edu.ie3.datamodel.models.input.AssetInput +import edu.ie3.datamodel.models.input.EmInput +import edu.ie3.datamodel.models.input.NodeInput +import edu.ie3.datamodel.utils.Try +import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Shared import spock.lang.Specification import java.nio.file.Path +import java.util.function.Function +import java.util.stream.Collectors class EntitySourceTest extends Specification { @@ -36,52 +44,71 @@ class EntitySourceTest extends Specification { DummyEntitySource dummyEntitySource = new DummyEntitySource(csvDataSource) - def "An EntitySource should always return an operator. Either the found one (if any) or OperatorInput.NO_OPERATOR_ASSIGNED"() { + def "An EntitySource should find a linked entity, if it was provided"() { + given: + Map parameter = [ + "linked_entity" : sptd.emInput.uuid.toString(), + ] + def entityData = new EntityData(parameter, AssetInput.class) - expect: - dummyEntitySource.getFirstOrDefaultOperator(operators, Optional.of(UUID.fromString(operatorUuid)), entityClassName, requestEntityUuid) == expectedOperator + Map entityMap = [sptd.emInput].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) - where: - operatorUuid | operators | entityClassName | requestEntityUuid || expectedOperator - "8f9682df-0744-4b58-a122-f0dc730f6510" | [sptd.hpInput.operator] | "TestEntityClass" | "8f9682df-0744-4b58-a122-f0dc730f6511" || sptd.hpInput.operator - "8f9682df-0744-4b58-a122-f0dc730f6520" | [sptd.hpInput.operator] | "TestEntityClass" | "8f9682df-0744-4b58-a122-f0dc730f6511" || OperatorInput.NO_OPERATOR_ASSIGNED - "8f9682df-0744-4b58-a122-f0dc730f6510" | [] | "TestEntityClass" | "8f9682df-0744-4b58-a122-f0dc730f6511" || OperatorInput.NO_OPERATOR_ASSIGNED + when: + def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) + + then: + result == new Try.Success(sptd.emInput) } - def "A CsvDataSource should be able to handle the extraction process of an asset type correctly"() { + def "An EntitySource trying to find a linked entity should fail, if no matching linked entity was provided"() { + given: + Map parameter = [ + "linked_entity" : sptd.emInput.parentEm.uuid.toString(), + ] + def entityData = new EntityData(parameter, AssetInput.class) + + Map entityMap = [sptd.emInput].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + when: - def assetTypeOpt = dummyEntitySource.getLinkedEntity(types, fieldsToAttributes, "TestClassName") + def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) then: - assetTypeOpt.data.present == resultIsPresent - assetTypeOpt.data.ifPresent({ assetType -> - assert (assetType == resultData) - }) - - where: - types | fieldsToAttributes || resultIsPresent || resultData - [] | ["type": "202069a7-bcf8-422c-837c-273575220c8a"] || false || null - [] | ["bla": "foo"] || false || null - [gtd.transformerTypeBtoD] | ["type": "202069a7-bcf8-422c-837c-273575220c8a"] || true || gtd.transformerTypeBtoD - [sptd.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || true || sptd.chpTypeInput + result.isFailure() + result.getException().get().message == "Linked linked_entity with UUID 897bfc17-8e54-43d0-8d98-740786fd94dd was not found for entity EntityData{fieldsToAttributes={linked_entity=897bfc17-8e54-43d0-8d98-740786fd94dd}, targetClass=class edu.ie3.datamodel.models.input.AssetInput}" } - def "A CsvDataSource should not throw an exception but assume NO_OPERATOR_ASSIGNED if the operator field is missing in the headline"() { + def "An EntitySource should enrich entity data with a linked entity, if it was provided"() { + given: + Map parameter = [ + "linked_entity" : GridTestData.nodeA.uuid.toString(), + ] + def entityData = new AssetInputEntityData(parameter, AssetInput.class) + + Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + when: + def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) + + then: + result == new Try.Success(new NodeAssetInputEntityData(entityData, GridTestData.nodeA)) + } + + def "An EntitySource trying to enrich entity data should fail, if no matching linked entity was provided"() { given: - def thermalBusInputFieldsToAttributesMap = [ - "uuid" : "0d95d7f2-49fb-4d49-8636-383a5220384e", - "id" : "test_thermalBusInput", - "operatesuntil": "2020-03-25T15:11:31Z[UTC]", - "operatesfrom" : "2020-03-24T15:11:31Z[UTC]" + Map parameter = [ + "linked_entity" : GridTestData.nodeB.uuid.toString(), ] + def entityData = new AssetInputEntityData(parameter, AssetInput.class) + + Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: - def thermalBusInputEntity = new ThermalBusInputFactory().get(dummyEntitySource.createAssetInputEntityData(ThermalBusInput, thermalBusInputFieldsToAttributesMap, Collections.emptyList())) + def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) then: - noExceptionThrown() // no NPE should be thrown - thermalBusInputEntity.success - thermalBusInputEntity.data.get().operator.id == OperatorInput.NO_OPERATOR_ASSIGNED.id // operator id should be set accordingly + result.isFailure() + result.getException().get().message.startsWith("Linked linked_entity with UUID 47d29df0-ba2d-4d23-8e75-c82229c5c758 was not found for entity AssetInputEntityData") } + + // todo test enrich with two linked entities, optionallyEnrich, and various failures } diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index ed1a190a1..b4cc960b0 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -67,7 +67,7 @@ class SystemParticipantTestData { null ) - public static final emInput = new EmInput( + public static final EmInput emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", SystemParticipantTestData.operator, From 1d0ac36019c91759ca5b22625fffcd3eae82a890 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 19:36:34 +0000 Subject: [PATCH 058/228] Bump net.bytebuddy:byte-buddy from 1.14.10 to 1.14.11 (#972) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5c536fe01..2fff33ce8 100644 --- a/build.gradle +++ b/build.gradle @@ -73,7 +73,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' testImplementation "org.spockframework:spock-core:2.3-groovy-$groovyVersion" testImplementation 'org.objenesis:objenesis:3.3' // Mock creation with constructor parameters - testImplementation 'net.bytebuddy:byte-buddy:1.14.10' // Mocks of classes + testImplementation 'net.bytebuddy:byte-buddy:1.14.11' // Mocks of classes // testcontainers (docker framework for testing) testImplementation "org.testcontainers:testcontainers:$testcontainersVersion" From e88fee173b7161476265478786a7ebd20277ddea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 17:49:02 +0000 Subject: [PATCH 059/228] Bump org.apache.groovy:groovy from 4.0.16 to 4.0.17 (#973) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2fff33ce8..77efa335e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ ext { //version (changing these should be considered thoroughly!) javaVersion = JavaVersion.VERSION_17 groovyVersion = "4.0" - groovyBinaryVersion = "4.0.16" + groovyBinaryVersion = "4.0.17" testcontainersVersion = '1.19.3' scriptsLocation = 'gradle' + File.separator + 'scripts' + File.separator //location of script plugins From 2f9e3e1c0389839faecebaf6c30e812539929453 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 26 Dec 2023 21:46:58 +0100 Subject: [PATCH 060/228] Re-writing EntitySourceTest --- .../ie3/datamodel/io/source/EntitySource.java | 9 +- .../io/source/EntitySourceTest.groovy | 149 ++++++++++++++++-- 2 files changed, 138 insertions(+), 20 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 20f61e40d..672a14a6c 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -201,11 +201,12 @@ Try optionallyEnrichEntityData( .getFieldOptional(fieldName) .filter(s -> !s.isBlank()) .map( - // Entity data includes a proper UUID for the desired entity + // Entity data includes a non-empty UUID String for the desired entity uuidString -> Try.of(() -> UUID.fromString(uuidString), IllegalArgumentException.class) .transformF( iae -> + // Parsing error still results in a failure, ... new SourceException( String.format( "Exception while trying to parse UUID of field \"%s\" with value \"%s\"", @@ -214,6 +215,8 @@ Try optionallyEnrichEntityData( .flatMap( entityUuid -> getEntity(entityUuid, linkedEntities) + // ... as well as a provided entity UUID that does not match any + // given data .transformF( exception -> new SourceException( @@ -226,8 +229,8 @@ Try optionallyEnrichEntityData( exception)))) .orElseGet( () -> { - // No UUID was given (column does not exist, or field is empty), - // this is totally fine - we return the default value + // No UUID was given (column does not exist, or field is empty). + // This is totally fine - we successfully return the default value log.debug( "Input source for class {} is missing the '{}' field. " + "Default value '{}' is used.", diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 1356f5426..06a7af9c1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -9,19 +9,23 @@ import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.io.factory.input.AssetInputEntityData import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData -import edu.ie3.datamodel.io.naming.FileNamingStrategy +import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData +import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData import edu.ie3.datamodel.io.source.csv.CsvDataSource import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.AssetInput import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput +import edu.ie3.datamodel.models.input.system.ChpInput +import edu.ie3.datamodel.models.input.system.type.ChpTypeInput +import edu.ie3.datamodel.models.input.thermal.ThermalBusInput +import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Shared import spock.lang.Specification -import java.nio.file.Path import java.util.function.Function import java.util.stream.Collectors @@ -29,20 +33,82 @@ class EntitySourceTest extends Specification { private final class DummyEntitySource extends EntitySource { DummyEntitySource(CsvDataSource dataSource) { - super(dataSource); + super(dataSource) } } @Shared - String csvSep = "," - @Shared - Path testBaseFolderPath = Path.of("testBaseFolderPath") // does not have to exist for this test - @Shared - FileNamingStrategy fileNamingStrategy = new FileNamingStrategy() + DummyEntitySource dummyEntitySource = new DummyEntitySource(Mock(CsvDataSource)) + + def "An EntitySource should enrich entity data with a linked entity, if it was provided"() { + given: + Map parameter = [ + "linked_entity" : GridTestData.nodeA.uuid.toString(), + ] + def entityData = new AssetInputEntityData(parameter, AssetInput.class) + + Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) + + then: + result == new Try.Success(new NodeAssetInputEntityData(entityData, GridTestData.nodeA)) + } + + def "An EntitySource trying to enrich entity data should fail, if no matching linked entity was provided"() { + given: + Map parameter = [ + "linked_entity" : GridTestData.nodeB.uuid.toString(), + ] + def entityData = new AssetInputEntityData(parameter, AssetInput.class) - CsvDataSource csvDataSource = new CsvDataSource(csvSep, testBaseFolderPath, fileNamingStrategy) + Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) + + then: + result.isFailure() + result.getException().get().message.startsWith("Linked linked_entity with UUID 47d29df0-ba2d-4d23-8e75-c82229c5c758 was not found for entity AssetInputEntityData") + } + + def "An EntitySource should enrich entity data with two linked entities, if they are provided"() { + given: + Map parameter = [ + "t_bus" : sptd.thermalBus.uuid.toString(), + "t_storage" : sptd.thermalStorage.uuid.toString() + ] + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput.class, sptd.participantNode, null, sptd.chpTypeInput) - DummyEntitySource dummyEntitySource = new DummyEntitySource(csvDataSource) + Map busMap = [sptd.thermalBus].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map storageMap = [sptd.thermalStorage].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.enrichEntityData(entityData, "t_bus", busMap, "t_storage", storageMap, ChpInputEntityData::new) + + then: + result == new Try.Success(new ChpInputEntityData(entityData, sptd.thermalBus, sptd.thermalStorage)) + } + + def "An EntitySource trying to enrich entity data should fail, if one of two linked entities is not provided"() { + given: + Map parameter = [ + "t_bus" : sptd.thermalBus.uuid.toString(), + "t_storage" : "8851813b-3a7d-4fee-874b-4df9d724e4b4" + ] + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput.class, sptd.participantNode, null, sptd.chpTypeInput) + + Map busMap = [sptd.thermalBus].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map storageMap = [sptd.thermalStorage].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.enrichEntityData(entityData, "t_bus", busMap, "t_storage", storageMap, ChpInputEntityData::new) + + then: + result.isFailure() + result.getException().get().message.startsWith("Linked t_storage with UUID 8851813b-3a7d-4fee-874b-4df9d724e4b4 was not found for entity SystemParticipantTypedEntityData") + } def "An EntitySource should find a linked entity, if it was provided"() { given: @@ -77,7 +143,24 @@ class EntitySourceTest extends Specification { result.getException().get().message == "Linked linked_entity with UUID 897bfc17-8e54-43d0-8d98-740786fd94dd was not found for entity EntityData{fieldsToAttributes={linked_entity=897bfc17-8e54-43d0-8d98-740786fd94dd}, targetClass=class edu.ie3.datamodel.models.input.AssetInput}" } - def "An EntitySource should enrich entity data with a linked entity, if it was provided"() { + def "An EntitySource trying to find a linked entity should fail, if corresponding UUID is malformed"() { + given: + Map parameter = [ + "linked_entity" : "not-a-uuid", + ] + def entityData = new EntityData(parameter, AssetInput.class) + + Map entityMap = [sptd.emInput].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) + + then: + result.isFailure() + result.getException().get().message == "Extracting UUID field linked_entity from entity data EntityData{fieldsToAttributes={linked_entity=not-a-uuid}, targetClass=class edu.ie3.datamodel.models.input.AssetInput} failed." + } + + def "An EntitySource should optionally enrich entity data with a linked entity, if it was provided"() { given: Map parameter = [ "linked_entity" : GridTestData.nodeA.uuid.toString(), @@ -87,28 +170,60 @@ class EntitySourceTest extends Specification { Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: - def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) + def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) then: result == new Try.Success(new NodeAssetInputEntityData(entityData, GridTestData.nodeA)) } - def "An EntitySource trying to enrich entity data should fail, if no matching linked entity was provided"() { + def "An EntitySource should (optionally) enrich entity data with the default entity, if no linked entity is specified"() { given: Map parameter = [ - "linked_entity" : GridTestData.nodeB.uuid.toString(), + "linked_entity" : "", ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: - def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) + def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) + + then: + result == new Try.Success(new NodeAssetInputEntityData(entityData, GridTestData.nodeB)) + } + + def "An EntitySource trying to optionally find a linked entity should fail, if no matching linked entity was provided"() { + given: + Map parameter = [ + "linked_entity" : "4ca90220-74c2-4369-9afa-a18bf068840e", + ] + def entityData = new AssetInputEntityData(parameter, AssetInput.class) + + Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) then: result.isFailure() - result.getException().get().message.startsWith("Linked linked_entity with UUID 47d29df0-ba2d-4d23-8e75-c82229c5c758 was not found for entity AssetInputEntityData") + result.getException().get().message.startsWith("Linked linked_entity with UUID 4ca90220-74c2-4369-9afa-a18bf068840e was not found for entity AssetInputEntityData{fieldsToValues={linked_entity=4ca90220-74c2-4369-9afa-a18bf068840e}, targetClass=class edu.ie3.datamodel.models.input.AssetInput") } - // todo test enrich with two linked entities, optionallyEnrich, and various failures + + def "An EntitySource trying to optionally find a linked entity should fail, if corresponding UUID is malformed"() { + given: + Map parameter = [ + "linked_entity" : "not-a-uuid", + ] + def entityData = new AssetInputEntityData(parameter, AssetInput.class) + + Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + + when: + def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) + + then: + result.isFailure() + result.getException().get().message == "Exception while trying to parse UUID of field \"linked_entity\" with value \"not-a-uuid\"" + } } From 73df774090d623ae32d6c7f00a24e4d59e195c27 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 26 Dec 2023 22:11:05 +0100 Subject: [PATCH 061/228] Fixing Processor --- .../ie3/datamodel/io/factory/FactoryData.java | 23 ------------------- .../ie3/datamodel/io/processor/Processor.java | 17 +++++--------- 2 files changed, 6 insertions(+), 34 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java index f88d24423..6ed7dcb7e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java @@ -135,29 +135,6 @@ field, getField(field)), } } - /** - * Parses and returns an array of UUIDs from field value of given field name. Throws {@link - * FactoryException} if field does not exist or parsing fails. - * - * @param field field name - * @return UUID - */ - public UUID[] getUUIDs(String field) { - try { - String fieldValue = getField(field); - if (fieldValue.trim().isEmpty()) return new UUID[0]; - - String[] uuidFields = fieldValue.split(" "); - return Arrays.stream(uuidFields).map(UUID::fromString).toArray(UUID[]::new); - } catch (IllegalArgumentException iae) { - throw new FactoryException( - String.format( - "Exception while trying to parse UUIDs of field \"%s\" with value \"%s\"", - field, getField(field)), - iae); - } - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java index 06eb1b951..163d51b74 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java @@ -235,10 +235,12 @@ protected String processMethodResult(Object methodReturnObject, Method method, S ((Optional) methodReturnObject) .map( o -> { - if (o instanceof Quantity) { + if (o instanceof Quantity quantity) { return Try.of( - () -> handleQuantity((Quantity) o, fieldName), + () -> handleQuantity(quantity, fieldName), EntityProcessorException.class); + } else if (o instanceof UniqueEntity entity) { + return Try.of(entity::getUuid, EntityProcessorException.class); } else { return Failure.of( new EntityProcessorException( @@ -273,8 +275,8 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "TimeSeries", "Transformer2WTypeInput", "Transformer3WTypeInput", - "WecTypeInput" -> resultStringBuilder.append( - ((UniqueEntity) methodReturnObject).getUuid()); + "WecTypeInput", + "EmInput" -> resultStringBuilder.append(((UniqueEntity) methodReturnObject).getUuid()); case "OperatorInput" -> resultStringBuilder.append( ((OperatorInput) methodReturnObject).getId().equalsIgnoreCase("NO_OPERATOR_ASSIGNED") ? "" @@ -288,7 +290,6 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "ReactivePowerCharacteristic", "CharacteristicInput" -> resultStringBuilder.append( ((CharacteristicInput) methodReturnObject).serialize()); - case "UUID[]" -> resultStringBuilder.append(processUUIDArray((UUID[]) methodReturnObject)); default -> throw new EntityProcessorException( "Unable to process value for attribute/field '" + fieldName @@ -369,12 +370,6 @@ protected String handleQuantity(Quantity quantity, String fieldName) protected abstract Try handleProcessorSpecificQuantity( Quantity quantity, String fieldName); - protected String processUUIDArray(UUID[] uuids) { - StringBuilder strb = new StringBuilder(); - for (UUID uuid : uuids) strb.append(uuid.toString()).append(" "); - return strb.toString().strip(); - } - /** * Handling of elements of type {@link OperationTime} * From e603ef5b06f583f255a6095dd26980102ce6d255 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 26 Dec 2023 22:11:19 +0100 Subject: [PATCH 062/228] Fixing InputEntityProcessorTest --- .../input/InputEntityProcessorTest.groovy | 74 +++++++++++-------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index ac2c24ab9..0f25a83ba 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -9,6 +9,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -143,9 +144,10 @@ class InputEntityProcessorTest extends Specification { def processingResult = processor.handleEntity(validInput) then: "make sure that the result is as expected " - processingResult.forEach { k, v -> + processingResult.forEach { + k, v -> if (k != "nodeInternal") // the internal 3w node is always randomly generated, hence we can skip to test on this - assert (v == expectedResult.get(k)) + assert (v == expectedResult.get(k)) } where: @@ -159,7 +161,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.fixedFeedInInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.fixedFeedInInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "sRated" : SystemParticipantTestData.fixedFeedInInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString() + "sRated" : SystemParticipantTestData.fixedFeedInInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString(), + "em" : SystemParticipantTestData.fixedFeedInInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] PvInput | SystemParticipantTestData.pvInput || [ "uuid" : SystemParticipantTestData.pvInput.uuid.toString(), @@ -177,7 +180,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.pvInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.pvInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "sRated" : SystemParticipantTestData.pvInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString() + "sRated" : SystemParticipantTestData.pvInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString(), + "em" : SystemParticipantTestData.pvInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] WecInput | SystemParticipantTestData.wecInput || [ "uuid" : SystemParticipantTestData.wecInput.uuid.toString(), @@ -188,7 +192,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.wecInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.wecInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiPSerialized, - "type" : SystemParticipantTestData.wecInput.type.uuid.toString() + "type" : SystemParticipantTestData.wecInput.type.uuid.toString(), + "em" : SystemParticipantTestData.wecInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] ChpInput | SystemParticipantTestData.chpInput || [ "uuid" : SystemParticipantTestData.chpInput.uuid.toString(), @@ -202,6 +207,7 @@ class InputEntityProcessorTest extends Specification { "thermalBus" : SystemParticipantTestData.chpInput.thermalBus.uuid.toString(), "thermalStorage" : SystemParticipantTestData.chpInput.thermalStorage.uuid.toString(), "type" : SystemParticipantTestData.chpInput.type.uuid.toString(), + "em" : SystemParticipantTestData.chpInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] BmInput | SystemParticipantTestData.bmInput || [ "uuid" : SystemParticipantTestData.bmInput.uuid.toString(), @@ -214,7 +220,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.bmInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.bmInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.qVSerialized, - "type" : SystemParticipantTestData.bmInput.type.uuid.toString() + "type" : SystemParticipantTestData.bmInput.type.uuid.toString(), + "em" : SystemParticipantTestData.bmInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] EvInput | SystemParticipantTestData.evInput || [ "uuid" : SystemParticipantTestData.evInput.uuid.toString(), @@ -224,7 +231,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.evInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.evInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "type" : SystemParticipantTestData.evInput.type.getUuid().toString() + "type" : SystemParticipantTestData.evInput.type.getUuid().toString(), + "em" : SystemParticipantTestData.evInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] LoadInput | SystemParticipantTestData.loadInput || [ @@ -239,7 +247,8 @@ class InputEntityProcessorTest extends Specification { "operator" : SystemParticipantTestData.loadInput.operator.uuid.toString(), "qCharacteristics" : SystemParticipantTestData.cosPhiFixedSerialized, "sRated" : SystemParticipantTestData.loadInput.sRated.getValue().doubleValue().toString(), - "loadProfile" : SystemParticipantTestData.loadInput.loadProfile.key + "loadProfile" : SystemParticipantTestData.loadInput.loadProfile.key, + "em" : SystemParticipantTestData.loadInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] StorageInput | SystemParticipantTestData.storageInput || [ "uuid" : SystemParticipantTestData.storageInput.uuid.toString(), @@ -249,7 +258,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.storageInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.storageInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "type" : SystemParticipantTestData.storageInput.type.uuid.toString() + "type" : SystemParticipantTestData.storageInput.type.uuid.toString(), + "em" : SystemParticipantTestData.storageInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] HpInput | SystemParticipantTestData.hpInput || [ "uuid" : SystemParticipantTestData.hpInput.uuid.toString(), @@ -260,7 +270,8 @@ class InputEntityProcessorTest extends Specification { "operator" : SystemParticipantTestData.hpInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, "thermalBus" : SystemParticipantTestData.hpInput.thermalBus.uuid.toString(), - "type" : SystemParticipantTestData.hpInput.type.uuid.toString() + "type" : SystemParticipantTestData.hpInput.type.uuid.toString(), + "em" : SystemParticipantTestData.hpInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] EvcsInput | SystemParticipantTestData.evcsInput || [ "uuid" : SystemParticipantTestData.evcsInput.uuid.toString(), @@ -274,7 +285,8 @@ class InputEntityProcessorTest extends Specification { "cosPhiRated" : SystemParticipantTestData.evcsInput.cosPhiRated.toString(), "chargingPoints" : SystemParticipantTestData.evcsInput.chargingPoints.toString(), "locationType" : SystemParticipantTestData.evcsInput.locationType.name(), - "v2gSupport" : SystemParticipantTestData.evcsInput.v2gSupport.toString() + "v2gSupport" : SystemParticipantTestData.evcsInput.v2gSupport.toString(), + "em" : SystemParticipantTestData.evcsInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] } @@ -354,18 +366,18 @@ class InputEntityProcessorTest extends Specification { given: InputEntityProcessor processor = new InputEntityProcessor(RandomLoadParameters) RandomLoadParameters parameters = new RandomLoadParameters( - UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), - 4, - 1.2, - 2.3, - 3.4, - 4.5, - 5.6, - 6.7, - 7.8, - 8.9, - 9.10 - ) + UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), + 4, + 1.2, + 2.3, + 3.4, + 4.5, + 5.6, + 6.7, + 7.8, + 8.9, + 9.10 + ) Map expected = [ "uuid" : "a5b0f432-27b5-4b3e-b87a-61867b9edd79", "quarterHour": "4", @@ -617,14 +629,14 @@ class InputEntityProcessorTest extends Specification { given: InputEntityProcessor processor = new InputEntityProcessor(NodeInput) def nodeWithOutOperator = new NodeInput( - UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), "node_d", OperatorInput.NO_OPERATOR_ASSIGNED, - OperationTime.notLimited() - , - Quantities.getQuantity(1d, PU), - false, - null, - GermanVoltageLevelUtils.MV_20KV, - 4) + UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), "node_d", OperatorInput.NO_OPERATOR_ASSIGNED, + OperationTime.notLimited() + , + Quantities.getQuantity(1d, PU), + false, + null, + GermanVoltageLevelUtils.MV_20KV, + 4) Map expected = [ "geoPosition" : "", From af38616bf6f7a07b66570a9cde78293ed38e1b30 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 26 Dec 2023 23:18:28 +0100 Subject: [PATCH 063/228] More fixes --- .../ie3/datamodel/models/input/EmInput.java | 14 +- .../input/system/SystemParticipantInput.java | 9 +- .../participant/EmInputFactoryTest.groovy | 4 +- .../io/source/EntitySourceTest.groovy | 2 +- .../csv/CsvEnergyManagementSourceTest.groovy | 17 +- .../io/source/csv/CsvGraphicSourceTest.groovy | 3 +- .../io/source/csv/CsvRawGridSourceTest.groovy | 255 +++--------------- .../models/input/system/BmInputTest.groovy | 1 + .../models/input/system/ChpInputTest.groovy | 1 + .../models/input/system/EmInputTest.groovy | 8 +- .../models/input/system/EvInputTest.groovy | 1 + .../models/input/system/EvcsInputTest.groovy | 1 + .../input/system/FixedFeedInInputTest.groovy | 1 + .../models/input/system/HpInputTest.groovy | 1 + .../models/input/system/LoadInputTest.groovy | 1 + .../models/input/system/PvInputTest.groovy | 1 + .../input/system/StorageInputTest.groovy | 1 + .../models/input/system/WecInputTest.groovy | 1 + .../common/SystemParticipantTestData.groovy | 14 +- .../io/source/csv/_participants/em_input.csv | 5 +- 20 files changed, 82 insertions(+), 259 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java index a7b429ed5..1376caa1c 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java @@ -6,7 +6,9 @@ package edu.ie3.datamodel.models.input; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.UniqueEntity; import java.util.Objects; +import java.util.Optional; import java.util.UUID; public class EmInput extends AssetInput { @@ -60,8 +62,8 @@ public String getControlStrategy() { return controlStrategy; } - public EmInput getParentEm() { - return parentEm; + public Optional getParentEm() { + return Optional.ofNullable(parentEm); } @Override @@ -74,12 +76,13 @@ public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof EmInput emInput)) return false; if (!super.equals(o)) return false; - return Objects.equals(controlStrategy, emInput.controlStrategy); + return Objects.equals(controlStrategy, emInput.controlStrategy) + && Objects.equals(parentEm, emInput.parentEm); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), controlStrategy); + return Objects.hash(super.hashCode(), controlStrategy, parentEm); } @Override @@ -96,7 +99,7 @@ public String toString() { + ", controlStrategy=" + getControlStrategy() + ", parentEm=" - + getParentEm().getUuid() + + getParentEm().map(UniqueEntity::getUuid).map(UUID::toString).orElse("") + '}'; } @@ -109,6 +112,7 @@ public static class EmInputCopyBuilder extends AssetInputCopyBuilder parameter = [ - "linked_entity" : sptd.emInput.parentEm.uuid.toString(), + "linked_entity" : sptd.parentEm.uuid.toString(), ] def entityData = new EntityData(parameter, AssetInput.class) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index f79dd9ee1..e9a9a3512 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -8,11 +8,15 @@ package edu.ie3.datamodel.io.source.csv import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.source.EnergyManagementSource import edu.ie3.datamodel.io.source.TypeSource +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification +import java.util.function.Function +import java.util.stream.Collectors + // TODO test recursion class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { @@ -22,16 +26,13 @@ class CsvEnergyManagementSourceTest extends Specification implements CsvTestData Mock(TypeSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + Map operatorMap = [SystemParticipantTestData.emInput.operator].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + expect: - def emUnits = Try.of(() -> csvEnergyManagementSource.getEmUnits(operators.toSet()), SourceException) + def emUnits = Try.of(() -> csvEnergyManagementSource.getEmUnits(operatorMap), SourceException) emUnits.success - emUnits.data.get().emUnits.size() == 1 - emUnits.data.get().emUnits == resultingSet as Set - - where: - operators || resultingSet - [SystemParticipantTestData.emInput.operator] || [SystemParticipantTestData.emInput] - [] || [SystemParticipantTestData.emInput.copy().operator(OperatorInput.NO_OPERATOR_ASSIGNED).build()] + emUnits.data.get().size() == 2 + emUnits.data.get() == [SystemParticipantTestData.emInput, SystemParticipantTestData.parentEm].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy index ae366cd53..18cfb8bcf 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy @@ -10,6 +10,7 @@ import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.source.GraphicSource import edu.ie3.datamodel.io.source.RawGridSource import edu.ie3.datamodel.io.source.TypeSource +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.LineInput @@ -133,7 +134,7 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) - Map nodeMap = nodeCollection.stream().collect(Collectors.toMap(NodeInput::getUuid, Function.identity())) + Map nodeMap = nodeCollection.stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: graphicSource.getNodeGraphicInput(nodeMap) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy index 5049b4bb7..bd50817db 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy @@ -12,6 +12,7 @@ import edu.ie3.datamodel.io.factory.input.Transformer3WInputEntityData import edu.ie3.datamodel.io.factory.input.TypedConnectorInputEntityData import edu.ie3.datamodel.io.source.RawGridSource import edu.ie3.datamodel.io.source.TypeSource +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.SwitchInput import edu.ie3.datamodel.models.input.connector.Transformer3WInput @@ -22,6 +23,7 @@ import edu.ie3.test.common.GridTestData as rgtd import spock.lang.Shared import spock.lang.Specification +import java.util.function.Function import java.util.stream.Collectors import java.util.stream.Stream @@ -56,20 +58,23 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { "closed" : "true" ] - def validAssetEntityInputData = new AssetInputEntityData(fieldsToAttributes, SwitchInput) + def validAssetEntityInputData = Stream.of(Try.Success.of(new AssetInputEntityData(fieldsToAttributes, SwitchInput))) - def nodes = [rgtd.nodeA, rgtd.nodeB] + def nodes = [rgtd.nodeA, rgtd.nodeB].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: "the source tries to convert it" def connectorDataOption = source.buildUntypedConnectorInputEntityData(validAssetEntityInputData, nodes) then: "everything is fine" - connectorDataOption.success - connectorDataOption.data.get().with { - assert fieldsToValues == expectedFieldsToAttributes - assert targetClass == SwitchInput - assert nodeA == rgtd.nodeA - assert nodeB == rgtd.nodeB + connectorDataOption.forEach { + actualTry -> + assert actualTry.isSuccess() + actualTry.data.get().with { + assert fieldsToValues == expectedFieldsToAttributes + assert targetClass == SwitchInput + assert nodeA == rgtd.nodeA + assert nodeB == rgtd.nodeB + } } } @@ -86,22 +91,22 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { "closed" : "true" ] - def validAssetEntityInputData = new AssetInputEntityData(fieldsToAttributes, SwitchInput) + def validAssetEntityInputData = Stream.of(Try.Success.of(new AssetInputEntityData(fieldsToAttributes, SwitchInput))) - def nodes = [rgtd.nodeA, rgtd.nodeB] + def nodes = [rgtd.nodeA, rgtd.nodeB].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: "the source tries to convert it" def connectorDataOption = source.buildUntypedConnectorInputEntityData(validAssetEntityInputData, nodes) then: "it returns en empty Optional" - connectorDataOption.failure + connectorDataOption.allMatch(Try::isFailure) } def "The CsvRawGridSource is able to convert a stream of valid AssetInputEntityData to ConnectorInputEntityData"() { given: "valid input data" def validStream = Stream.of( - new AssetInputEntityData([ + Try.Success.of(new AssetInputEntityData([ "uuid" : "5dc88077-aeb6-4711-9142-db57287640b1", "id" : "test_switch_AtoB", "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", @@ -110,8 +115,8 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { "nodeA" : "4ca90220-74c2-4369-9afa-a18bf068840d", "nodeB" : "47d29df0-ba2d-4d23-8e75-c82229c5c758", "closed" : "true" - ], SwitchInput), - new AssetInputEntityData([ + ], SwitchInput)), + Try.Success.of(new AssetInputEntityData([ "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", "id" : "test_lineCtoD", "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", @@ -126,7 +131,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { "olmCharacteristic" : "olm:{(0.0,1.0)}" ], LineInput) - ) + )) def expectedSet = [ new ConnectorInputEntityData([ @@ -164,7 +169,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { rgtd.nodeB, rgtd.nodeC, rgtd.nodeD - ] + ].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: "the source tries to convert it" def actualSet = source.buildUntypedConnectorInputEntityData(validStream, nodes).collect(Collectors.toSet()) @@ -175,129 +180,14 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { it.success } - actualSet.stream().map { it.data.get() }.toList().containsAll(expectedSet) - } - - def "The CsvRawGridSource is able to add a type to untyped ConnectorInputEntityData correctly"() { - given: "valid input data" - def validConnectorEntityData = new ConnectorInputEntityData([ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "test_lineCtoD", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "parallelDevices" : "2", - "type" : "3bed3eb3-9790-4874-89b5-a5434d408088", - "length" : "0.003", - "geoPosition" : "{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}", - "olmCharacteristic" : "olm:{(0.0,1.0)}" - ], - LineInput, - rgtd.nodeC, - rgtd.nodeD - ) - - def expectedTypedEntityData = new TypedConnectorInputEntityData([ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "test_lineCtoD", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "parallelDevices" : "2", - "length" : "0.003", - "geoPosition" : "{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}", - "olmCharacteristic" : "olm:{(0.0,1.0)}" - ], - LineInput, - rgtd.nodeC, - rgtd.nodeD, - rgtd.lineTypeInputCtoD - ) - - when: "the source tries to convert it" - def actual = source.addTypeToEntityData(validConnectorEntityData, rgtd.lineTypeInputCtoD) - - then: "everything is fine" - actual == expectedTypedEntityData - } - - def "The CsvRawGridSource is able to find and add a type to untyped ConnectorInputEntityData correctly"() { - given: "valid input data" - def validConnectorEntityData = new ConnectorInputEntityData([ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "test_lineCtoD", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "parallelDevices" : "2", - "type" : "3bed3eb3-9790-4874-89b5-a5434d408088", - "length" : "0.003", - "geoPosition" : "{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}", - "olmCharacteristic" : "olm:{(0.0,1.0)}" - ], - LineInput, - rgtd.nodeC, - rgtd.nodeD - ) - - def expectedTypedEntityData = new TypedConnectorInputEntityData([ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "test_lineCtoD", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "parallelDevices" : "2", - "length" : "0.003", - "geoPosition" : "{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}", - "olmCharacteristic" : "olm:{(0.0,1.0)}" - ], - LineInput, - rgtd.nodeC, - rgtd.nodeD, - rgtd.lineTypeInputCtoD - ) - - def availableTypes = [rgtd.lineTypeInputCtoD] - - when: "the source tries to convert it" - def actual = source.findAndAddType(validConnectorEntityData, availableTypes) - - then: "everything is fine" - actual.success - actual.data.get() == expectedTypedEntityData - } - - def "The CsvRawGridSource is able to identify ConnectorInputEntityData data with non matching type requirements correctly"() { - given: "valid input data" - def validConnectorEntityData = new ConnectorInputEntityData([ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", - "id" : "test_lineCtoD", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "parallelDevices" : "2", - "type" : "fd5b128d-ed35-4355-94b6-7518c55425fe", - "length" : "0.003", - "geoPosition" : "{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}", - "olmCharacteristic" : "olm:{(0.0,1.0)}" - ], - LineInput, - rgtd.nodeC, - rgtd.nodeD - ) - - def availableTypes = [rgtd.lineTypeInputCtoD] - - when: "the source tries to convert it" - def actual = source.findAndAddType(validConnectorEntityData, availableTypes) - - then: "everything is fine" - actual.failure + actualSet.stream().map { + it.data.get() + }.toList().containsAll(expectedSet) } def "The CsvRawGridSource is able to convert a stream of valid ConnectorInputEntityData to TypedConnectorInputEntityData"() { given: "valid input data" - def validStream = Stream.of(new Try.Success<>( + def validStream = Stream.of(Try.Success.of( new ConnectorInputEntityData([ "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", "id" : "test_lineCtoD", @@ -314,7 +204,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { rgtd.nodeC, rgtd.nodeD )), - new Try.Success<>(new ConnectorInputEntityData([ + Try.Success.of(new ConnectorInputEntityData([ "uuid" : "92ec3bcf-1777-4d38-af67-0bf7c9fa73c7", "id" : "test_line_AtoB", "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", @@ -364,7 +254,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { ) ] - def availableTypes = [rgtd.lineTypeInputCtoD] + def availableTypes = [rgtd.lineTypeInputCtoD].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) when: "the source tries to convert it" def actualSet = source.buildTypedConnectorEntityData(validStream, availableTypes).collect(Collectors.toSet()) @@ -379,85 +269,6 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { }.toList().containsAll(expectedSet) } - def "The CsvRawGridSource is able to add the third node for a three winding transformer correctly"() { - given: "valid input data" - def typedEntityData = new TypedConnectorInputEntityData([ - "uuid" : "cc327469-7d56-472b-a0df-edbb64f90e8f", - "id" : "3w_test", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "nodeC" : "bd837a25-58f3-44ac-aa90-c6b6e3cd91b2", - "parallelDevices" : "1", - "tapPos" : "0", - "autoTap" : "true" - ], - Transformer3WInput, - rgtd.nodeA, - rgtd.nodeB, - rgtd.transformerTypeAtoBtoC) - - def expected = new Transformer3WInputEntityData([ - "uuid" : "cc327469-7d56-472b-a0df-edbb64f90e8f", - "id" : "3w_test", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "parallelDevices" : "1", - "tapPos" : "0", - "autoTap" : "true" - ], - Transformer3WInput, - rgtd.nodeA, - rgtd.nodeB, - rgtd.nodeC, - rgtd.transformerTypeAtoBtoC) - - def availableNodes = [ - rgtd.nodeA, - rgtd.nodeB, - rgtd.nodeC - ] - - when: "the sources tries to add the node" - def actual = source.addThirdNode(typedEntityData, availableNodes) - - then: "everything is fine" - actual.success - actual.data.get() == expected - } - - def "The CsvRawGridSource is NOT able to add the third node for a three winding transformer, if it is not available"() { - given: "valid input data" - def typedEntityData = new TypedConnectorInputEntityData([ - "uuid" : "cc327469-7d56-472b-a0df-edbb64f90e8f", - "id" : "3w_test", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-24 15:11:31", - "nodeC" : "bd8927b4-0ca9-4dd3-b645-468e6e433160", - "parallelDevices" : "1", - "tapPos" : "0", - "autoTap" : "true" - ], - Transformer3WInput, - rgtd.nodeA, - rgtd.nodeB, - rgtd.transformerTypeAtoBtoC) - - def availableNodes = [ - rgtd.nodeA, - rgtd.nodeB, - rgtd.nodeC - ] - - when: "the sources tries to add the node" - def actual = source.addThirdNode(typedEntityData, availableNodes) - - then: "everything is fine" - actual.failure - } - def "The CsvRawGridSource is able to add the third node for a three winding transformer to a stream of candidates"() { given: "suitable input data" def inputStream = Stream.of(Try.of(() -> new TypedConnectorInputEntityData([ @@ -495,7 +306,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { rgtd.nodeA, rgtd.nodeB, rgtd.nodeC - ] + ].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) def expected = new Transformer3WInputEntityData([ "uuid" : "cc327469-7d56-472b-a0df-edbb64f90e8f", @@ -544,8 +355,11 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "all nodes are there" actualSet.size() == expectedSet.size() - actualSet.each {actual -> - def expected = expectedSet.find {it.uuid == actual.uuid} + actualSet.each { entry -> + def actual = entry.value + def expected = expectedSet.find { + it.uuid == actual.uuid + } assert expected != null actual.with { @@ -622,7 +436,8 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "all lines are there" actualSet.size() == expectedSet.size() - actualSet.each {actual -> + actualSet.each {entry -> + def actual = entry.value def expected = expectedSet.find {it.uuid == actual.uuid} assert expected != null diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy index 877a35be1..6088e7218 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy @@ -33,6 +33,7 @@ class BmInputTest extends Specification { assert qCharacteristics == bmInput.qCharacteristics assert feedInTariff == Quantities.getQuantity(15, EURO_PER_MEGAWATTHOUR) assert type == SystemParticipantTestData.bmTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy index bc6f7f93e..8eee5450b 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy @@ -31,6 +31,7 @@ class ChpInputTest extends Specification { assert thermalStorage == SystemParticipantTestData.thermalStorage assert marketReaction assert type == SystemParticipantTestData.chpTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index dc6cd683a..3c1c6f706 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -61,7 +61,7 @@ class EmInputTest extends Specification { ", controlStrategy=" + SystemParticipantTestData.emInput.controlStrategy + ", parentEm=" + - SystemParticipantTestData.emInput.parentEm.uuid + + SystemParticipantTestData.parentEm.uuid + '}' } @@ -69,7 +69,7 @@ class EmInputTest extends Specification { given: def emInput = SystemParticipantTestData.emInput def newStrat = "new_strat" - def parentEm = new EmInput( + def givenParentEm = new EmInput( UUID.fromString("cfc0639b-65bc-47e5-a8e5-82703de3c650"), "testParent", "controlStrat", @@ -77,7 +77,7 @@ class EmInputTest extends Specification { ) when: - def alteredUnit = emInput.copy().controlStrategy(newStrat).parentEm(parentEm).build() + def alteredUnit = emInput.copy().controlStrategy(newStrat).parentEm(givenParentEm).build() then: alteredUnit.with { @@ -86,7 +86,7 @@ class EmInputTest extends Specification { assert operator == emInput.operator assert id == emInput.id assert controlStrategy == newStrat - assert parentEm == parentEm + assert parentEm == Optional.of(givenParentEm) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy index f31375f45..507384dcb 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy @@ -26,6 +26,7 @@ class EvInputTest extends Specification { assert id == ev.id assert qCharacteristics == ev.qCharacteristics assert type == SystemParticipantTestData.evTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy index 65dd93c14..eadd65ea7 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy @@ -36,6 +36,7 @@ class EvcsInputTest extends Specification { assert chargingPoints == 1 assert locationType == EvcsLocationType.CHARGING_HUB_HIGHWAY assert v2gSupport + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy index 500da895b..5c29f2544 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy @@ -29,6 +29,7 @@ class FixedFeedInInputTest extends Specification { assert qCharacteristics == ffIn.qCharacteristics assert sRated == Quantities.getQuantity(10d, PowerSystemUnits.VOLTAMPERE) assert cosPhiRated == 0.8d + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy index 9e40de6d6..98a15d0df 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy @@ -28,6 +28,7 @@ class HpInputTest extends Specification { assert qCharacteristics == hpInput.qCharacteristics assert thermalBus == SystemParticipantTestData.thermalBus assert type == SystemParticipantTestData.hpTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy index a1d04cc30..166406e36 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy @@ -41,6 +41,7 @@ class LoadInputTest extends Specification { assert eConsAnnual == Quantities.getQuantity(6000, KILOWATTHOUR) assert sRated == Quantities.getQuantity(0d, KILOVOLTAMPERE) assert cosPhiRated == 0.8d + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy index ea9a0262d..5506582e8 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy @@ -40,6 +40,7 @@ class PvInputTest extends Specification { assert elevationAngle == Quantities.getQuantity(50, DEGREE_GEOM) assert kG == 10 assert kT == 5 + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy index 0bea4865f..da2e9d233 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy @@ -26,6 +26,7 @@ class StorageInputTest extends Specification { assert id == storageInput.id assert qCharacteristics == storageInput.qCharacteristics assert type == SystemParticipantTestData.storageTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy index 9d8b823af..135adc2fb 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy @@ -27,6 +27,7 @@ class WecInputTest extends Specification { assert qCharacteristics == wec.qCharacteristics assert type == SystemParticipantTestData.wecType assert marketReaction + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index b4cc960b0..97c38532e 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -58,7 +58,7 @@ class SystemParticipantTestData { // EmInput public static final String emControlStrategy = "self_optimization" - private static final EmInput parentEm = new EmInput( + public static final EmInput parentEm = new EmInput( UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd"), "test_parentEmInput", SystemParticipantTestData.operator, @@ -341,18 +341,6 @@ class SystemParticipantTestData { v2gSupport ) - public static allParticipants = [ - fixedFeedInInput, - pvInput, - loadInput, - bmInput, - storageInput, - wecInput, - evInput, - chpInput, - hpInput - ] - public static SystemParticipants emptySystemParticipants = new SystemParticipants( [] as Set, diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv index 97cea0978..e1bd3d5fa 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv @@ -1,2 +1,3 @@ -uuid,control_strategy,id,operates_from,operates_until,operator -977157f4-25e5-4c72-bf34-440edc778792,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510 +uuid,control_strategy,id,operates_from,operates_until,operator,parent_em +977157f4-25e5-4c72-bf34-440edc778792,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,897bfc17-8e54-43d0-8d98-740786fd94dd +897bfc17-8e54-43d0-8d98-740786fd94dd,self_optimization,test_parentEmInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510, \ No newline at end of file From 910cc01b81336286e72d83e2be38399a3fff66f4 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Sat, 30 Dec 2023 01:38:25 +0100 Subject: [PATCH 064/228] Fixing SystemParticipantSource tests --- .../io/source/EntitySourceTest.groovy | 32 +- .../source/SystemParticipantSourceTest.groovy | 121 ++++++++ .../csv/CsvEnergyManagementSourceTest.groovy | 10 +- .../io/source/csv/CsvGraphicSourceTest.groovy | 10 +- .../io/source/csv/CsvRawGridSourceTest.groovy | 21 +- .../csv/CsvSystemParticipantSourceTest.groovy | 279 ++++++------------ .../edu/ie3/test/helper/EntityMap.groovy | 17 ++ .../cylindrical_storage_input.csv | 2 +- 8 files changed, 268 insertions(+), 224 deletions(-) create mode 100644 src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy create mode 100644 src/test/groovy/edu/ie3/test/helper/EntityMap.groovy diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index aee2eb181..bebec151a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source +import static edu.ie3.test.helper.EntityMap.map + import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.factory.EntityData import edu.ie3.datamodel.io.factory.input.AssetInputEntityData @@ -12,7 +14,6 @@ import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData import edu.ie3.datamodel.io.source.csv.CsvDataSource -import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.AssetInput import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput @@ -26,9 +27,6 @@ import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Shared import spock.lang.Specification -import java.util.function.Function -import java.util.stream.Collectors - class EntitySourceTest extends Specification { private final class DummyEntitySource extends EntitySource { @@ -47,7 +45,7 @@ class EntitySourceTest extends Specification { ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) - Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([GridTestData.nodeA]) when: def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) @@ -63,7 +61,7 @@ class EntitySourceTest extends Specification { ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) - Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([GridTestData.nodeA]) when: def result = dummyEntitySource.enrichEntityData(entityData, "linked_entity", entityMap, NodeAssetInputEntityData::new) @@ -81,8 +79,8 @@ class EntitySourceTest extends Specification { ] def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput.class, sptd.participantNode, null, sptd.chpTypeInput) - Map busMap = [sptd.thermalBus].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) - Map storageMap = [sptd.thermalStorage].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map busMap = map([sptd.thermalBus]) + Map storageMap = map([sptd.thermalStorage]) when: def result = dummyEntitySource.enrichEntityData(entityData, "t_bus", busMap, "t_storage", storageMap, ChpInputEntityData::new) @@ -99,8 +97,8 @@ class EntitySourceTest extends Specification { ] def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput.class, sptd.participantNode, null, sptd.chpTypeInput) - Map busMap = [sptd.thermalBus].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) - Map storageMap = [sptd.thermalStorage].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map busMap = map([sptd.thermalBus]) + Map storageMap = map([sptd.thermalStorage]) when: def result = dummyEntitySource.enrichEntityData(entityData, "t_bus", busMap, "t_storage", storageMap, ChpInputEntityData::new) @@ -117,7 +115,7 @@ class EntitySourceTest extends Specification { ] def entityData = new EntityData(parameter, AssetInput.class) - Map entityMap = [sptd.emInput].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([sptd.emInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) @@ -133,7 +131,7 @@ class EntitySourceTest extends Specification { ] def entityData = new EntityData(parameter, AssetInput.class) - Map entityMap = [sptd.emInput].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([sptd.emInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) @@ -150,7 +148,7 @@ class EntitySourceTest extends Specification { ] def entityData = new EntityData(parameter, AssetInput.class) - Map entityMap = [sptd.emInput].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([sptd.emInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) @@ -167,7 +165,7 @@ class EntitySourceTest extends Specification { ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) - Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([GridTestData.nodeA]) when: def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) @@ -183,7 +181,7 @@ class EntitySourceTest extends Specification { ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) - Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([GridTestData.nodeA]) when: def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) @@ -199,7 +197,7 @@ class EntitySourceTest extends Specification { ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) - Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([GridTestData.nodeA]) when: def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) @@ -217,7 +215,7 @@ class EntitySourceTest extends Specification { ] def entityData = new AssetInputEntityData(parameter, AssetInput.class) - Map entityMap = [GridTestData.nodeA].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map entityMap = map([GridTestData.nodeA]) when: def result = dummyEntitySource.optionallyEnrichEntityData(entityData, "linked_entity", entityMap, GridTestData.nodeB, NodeAssetInputEntityData::new) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy new file mode 100644 index 000000000..57e7a5566 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy @@ -0,0 +1,121 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.io.source + +import static edu.ie3.test.helper.EntityMap.map + +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData +import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData +import edu.ie3.datamodel.io.factory.input.participant.HpInputEntityData +import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantEntityData +import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData +import edu.ie3.datamodel.models.input.system.ChpInput +import edu.ie3.datamodel.models.input.system.HpInput +import edu.ie3.datamodel.models.input.thermal.ThermalBusInput +import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput +import edu.ie3.datamodel.utils.Try +import edu.ie3.test.common.SystemParticipantTestData +import spock.lang.Specification + +import java.util.stream.Stream + +class SystemParticipantSourceTest extends Specification { + + def "A SystemParticipantSource should build system participant entity from valid and invalid input data as expected"() { + given: + def nodeAssetInputEntityData = Stream.of(new Try.Success<>(new NodeAssetInputEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node))) + + when: + def sysPartEntityDataStream = SystemParticipantSource.systemParticipantEntityStream(nodeAssetInputEntityData, map(emUnits)) + + then: + def element = sysPartEntityDataStream.findFirst().get() + element.success == resultIsPresent + element.data.ifPresent({ + typedEntityData -> + assert (typedEntityData == resultData) + }) + + where: + emUnits | fieldsToAttributes || resultIsPresent || resultData + [] | ["em": "977157f4-25e5-4c72-bf34-440edc778792"] || false || null + [SystemParticipantTestData.emInput] | ["bla": "foo"] || true || new SystemParticipantEntityData(["bla": "foo"], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null) + [SystemParticipantTestData.emInput] | [:] || true || new SystemParticipantEntityData([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null) + [SystemParticipantTestData.emInput] | ["em": "977157f4-25e5-4c72-bf34-440edc778793"] || false || null + [SystemParticipantTestData.emInput] | ["em": "977157f4-25e5-4c72-bf34-440edc778792"] || true || new SystemParticipantEntityData([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput) + } + + def "A SystemParticipantSource should build typed entity from valid and invalid input data as expected"() { + given: + def systemParticipantEntityData = Stream.of(new Try.Success<>(new SystemParticipantEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null))) + + when: + def typedEntityDataStream = SystemParticipantSource.typedSystemParticipantEntityStream(systemParticipantEntityData, map(types)) + + then: + def element = typedEntityDataStream.findFirst().get() + element.success == resultIsPresent + element.data.ifPresent({ + typedEntityData -> + assert (typedEntityData == resultData) + }) + + where: + types | fieldsToAttributes || resultIsPresent || resultData + [] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || false || null + [SystemParticipantTestData.chpTypeInput] | ["bla": "foo"] || false || null + [SystemParticipantTestData.chpTypeInput] | [:] || false || null + [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb9"] || false || null + [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || true || new SystemParticipantTypedEntityData<>([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null, SystemParticipantTestData.chpTypeInput) + } + + def "A SystemParticipantSource should build hp input entity from valid and invalid input data as expected"() { + given: + def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.hpTypeInput))) + + when: + def hpInputEntityDataOpt = SystemParticipantSource.hpEntityStream(sysPartTypedEntityData, map(thermalBuses)) + + then: + def element = hpInputEntityDataOpt.findFirst().get() + element.success == resultIsPresent + element.data.ifPresent({ + hpInputEntityData -> + assert (hpInputEntityData == resultData) + }) + + where: + thermalBuses | fieldsToAttributes || resultIsPresent || resultData + [] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || false || null + [SystemParticipantTestData.hpInput.thermalBus] | ["bla": "foo"] || false || null + [SystemParticipantTestData.hpInput.thermalBus] | [:] || false || null + [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384f"] || false || null + [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.hpTypeInput, SystemParticipantTestData.hpInput.thermalBus) + } + + def "A SystemParticipantSource should build chp input entity from valid and invalid input data as expected"(List thermalStorages, List thermalBuses, Map fieldsToAttributes, boolean resultIsPresent, ChpInputEntityData resultData) { + given: + def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.chpTypeInput))) + + when: + def hpInputEntityDataOpt = SystemParticipantSource.chpEntityStream(sysPartTypedEntityData, map(thermalStorages), map(thermalBuses)) + + then: + def element = hpInputEntityDataOpt.findFirst().get() + element.success == resultIsPresent + element.data.ifPresent({ + hpInputEntityData -> + assert (hpInputEntityData == resultData) + }) + + where: + thermalStorages | thermalBuses | fieldsToAttributes || resultIsPresent | resultData + [] | [] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || false | null + [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["bla": "foo"] || false | null + [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | [:] || false | null + [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.chpTypeInput, SystemParticipantTestData.chpInput.thermalBus, SystemParticipantTestData.chpInput.thermalStorage) + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index e9a9a3512..f16a275bb 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -5,18 +5,16 @@ */ package edu.ie3.datamodel.io.source.csv +import static edu.ie3.test.helper.EntityMap.map + import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.source.EnergyManagementSource import edu.ie3.datamodel.io.source.TypeSource -import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification -import java.util.function.Function -import java.util.stream.Collectors - // TODO test recursion class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { @@ -26,13 +24,13 @@ class CsvEnergyManagementSourceTest extends Specification implements CsvTestData Mock(TypeSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - Map operatorMap = [SystemParticipantTestData.emInput.operator].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map operatorMap = map([SystemParticipantTestData.emInput.operator]) expect: def emUnits = Try.of(() -> csvEnergyManagementSource.getEmUnits(operatorMap), SourceException) emUnits.success emUnits.data.get().size() == 2 - emUnits.data.get() == [SystemParticipantTestData.emInput, SystemParticipantTestData.parentEm].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + emUnits.data.get() == map([SystemParticipantTestData.emInput, SystemParticipantTestData.parentEm]) } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy index 18cfb8bcf..05677834b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvGraphicSourceTest.groovy @@ -5,12 +5,13 @@ */ package edu.ie3.datamodel.io.source.csv +import static edu.ie3.test.helper.EntityMap.map + import edu.ie3.datamodel.exceptions.FailureException import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.source.GraphicSource import edu.ie3.datamodel.io.source.RawGridSource import edu.ie3.datamodel.io.source.TypeSource -import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.LineInput @@ -21,9 +22,6 @@ import org.locationtech.jts.geom.LineString import org.locationtech.jts.geom.Point import spock.lang.Specification -import java.util.function.Function -import java.util.stream.Collectors - class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { def "A CsvGraphicSource should provide an instance of GraphicElements based on valid input data correctly"() { @@ -134,7 +132,7 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) - Map nodeMap = nodeCollection.stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + Map nodeMap = map(nodeCollection) when: graphicSource.getNodeGraphicInput(nodeMap) @@ -158,7 +156,7 @@ class CsvGraphicSourceTest extends Specification implements CsvTestDataMeta { Mock(TypeSource), Mock(RawGridSource), new CsvDataSource(csvSep, graphicsFolderPath, fileNamingStrategy)) - Map lineMap = lineCollection.stream().collect(Collectors.toMap(LineInput::getUuid, Function.identity())) + Map lineMap = map(lineCollection) when: graphicSource.getLineGraphicInput(lineMap) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy index bd50817db..cf03c2db7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source.csv +import static edu.ie3.test.helper.EntityMap.map + import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.factory.input.AssetInputEntityData import edu.ie3.datamodel.io.factory.input.ConnectorInputEntityData @@ -12,7 +14,6 @@ import edu.ie3.datamodel.io.factory.input.Transformer3WInputEntityData import edu.ie3.datamodel.io.factory.input.TypedConnectorInputEntityData import edu.ie3.datamodel.io.source.RawGridSource import edu.ie3.datamodel.io.source.TypeSource -import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.SwitchInput import edu.ie3.datamodel.models.input.connector.Transformer3WInput @@ -23,7 +24,6 @@ import edu.ie3.test.common.GridTestData as rgtd import spock.lang.Shared import spock.lang.Specification -import java.util.function.Function import java.util.stream.Collectors import java.util.stream.Stream @@ -60,14 +60,13 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { def validAssetEntityInputData = Stream.of(Try.Success.of(new AssetInputEntityData(fieldsToAttributes, SwitchInput))) - def nodes = [rgtd.nodeA, rgtd.nodeB].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + def nodes = map([rgtd.nodeA, rgtd.nodeB]) when: "the source tries to convert it" def connectorDataOption = source.buildUntypedConnectorInputEntityData(validAssetEntityInputData, nodes) then: "everything is fine" - connectorDataOption.forEach { - actualTry -> + connectorDataOption.forEach { actualTry -> assert actualTry.isSuccess() actualTry.data.get().with { assert fieldsToValues == expectedFieldsToAttributes @@ -93,7 +92,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { def validAssetEntityInputData = Stream.of(Try.Success.of(new AssetInputEntityData(fieldsToAttributes, SwitchInput))) - def nodes = [rgtd.nodeA, rgtd.nodeB].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + def nodes = map([rgtd.nodeA, rgtd.nodeB]) when: "the source tries to convert it" def connectorDataOption = source.buildUntypedConnectorInputEntityData(validAssetEntityInputData, nodes) @@ -164,12 +163,12 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { ) ] as Set - def nodes = [ + def nodes = map([ rgtd.nodeA, rgtd.nodeB, rgtd.nodeC, rgtd.nodeD - ].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + ]) when: "the source tries to convert it" def actualSet = source.buildUntypedConnectorInputEntityData(validStream, nodes).collect(Collectors.toSet()) @@ -254,7 +253,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { ) ] - def availableTypes = [rgtd.lineTypeInputCtoD].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + def availableTypes = map([rgtd.lineTypeInputCtoD]) when: "the source tries to convert it" def actualSet = source.buildTypedConnectorEntityData(validStream, availableTypes).collect(Collectors.toSet()) @@ -302,11 +301,11 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { rgtd.nodeB, rgtd.transformerTypeAtoBtoC), SourceException)) - def availableNodes = [ + def availableNodes = map([ rgtd.nodeA, rgtd.nodeB, rgtd.nodeC - ].stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + ]) def expected = new Transformer3WInputEntityData([ "uuid" : "cc327469-7d56-472b-a0df-edbb64f90e8f", diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index 2c6cb53c2..e18f9aa46 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -5,30 +5,14 @@ */ package edu.ie3.datamodel.io.source.csv +import static edu.ie3.test.helper.EntityMap.map + import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.exceptions.SystemParticipantsException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData -import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData -import edu.ie3.datamodel.io.factory.input.participant.HpInputEntityData -import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData -import edu.ie3.datamodel.io.source.RawGridSource -import edu.ie3.datamodel.io.source.SystemParticipantSource -import edu.ie3.datamodel.io.source.ThermalSource -import edu.ie3.datamodel.io.source.TypeSource +import edu.ie3.datamodel.io.source.* import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput -import edu.ie3.datamodel.models.input.system.BmInput -import edu.ie3.datamodel.models.input.system.ChpInput -import edu.ie3.datamodel.models.input.system.EvInput -import edu.ie3.datamodel.models.input.system.EvcsInput -import edu.ie3.datamodel.models.input.system.FixedFeedInInput -import edu.ie3.datamodel.models.input.system.HpInput -import edu.ie3.datamodel.models.input.system.LoadInput -import edu.ie3.datamodel.models.input.system.PvInput -import edu.ie3.datamodel.models.input.system.StorageInput -import edu.ie3.datamodel.models.input.system.WecInput -import edu.ie3.datamodel.models.input.thermal.ThermalBusInput -import edu.ie3.datamodel.models.input.thermal.ThermalStorageInput +import edu.ie3.datamodel.models.input.system.* import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Specification @@ -40,10 +24,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) def thermalSource = new ThermalSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def rawGridSource = new RawGridSource(typeSource, new CsvDataSource(csvSep, gridDefaultFolderPath, fileNamingStrategy)) + def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( typeSource, thermalSource, rawGridSource, + energyManagementSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) when: @@ -73,13 +59,15 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat ]) { // partly fake the return method of the csv raw grid source to always return empty node sets // -> elements to build NodeGraphicInputs are missing - getNodes() >> new HashSet() - getNodes(_) >> new HashSet() + getNodes() >> new HashMap() + getNodes(_) >> new HashMap() } as RawGridSource + def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( typeSource, thermalSource, rawGridSource, + energyManagementSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) when: @@ -94,96 +82,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat ex.message.startsWith("10 error(s) occurred while initializing system participants. " + "edu.ie3.datamodel.exceptions.FailureException: 1 exception(s) occurred within \"FixedFeedInInput\" data, one is: " + "edu.ie3.datamodel.exceptions.FactoryException: edu.ie3.datamodel.exceptions.SourceException: " + - "Failure due to: Skipping FixedFeedInInput with uuid ") - } - - def "A SystemParticipantSource with csv input should build typed entity from valid and invalid input data as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - def nodeAssetInputEntityData = new NodeAssetInputEntityData(fieldsToAttributes, clazz, operator, node) - - when: - def typedEntityDataOpt = csvSystemParticipantSource.buildTypedEntityData(nodeAssetInputEntityData, types) - - then: - typedEntityDataOpt.success == resultIsPresent - typedEntityDataOpt.data.ifPresent({ typedEntityData -> - assert (typedEntityData == resultData) - }) - - where: - types | node | operator | fieldsToAttributes | clazz || resultIsPresent || resultData - []| sptd.chpInput.node | sptd.chpInput.operator | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] | ChpInput || false || null - [sptd.chpTypeInput] | sptd.chpInput.node | sptd.chpInput.operator | ["bla": "foo"] | ChpInput || false || null - [sptd.chpTypeInput] | sptd.chpInput.node | sptd.chpInput.operator | [:] | ChpInput || false || null - [sptd.chpTypeInput] | sptd.chpInput.node | sptd.chpInput.operator | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb9"] | ChpInput || false || null - [sptd.chpTypeInput] | sptd.chpInput.node | sptd.chpInput.operator | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] | ChpInput || true || new SystemParticipantTypedEntityData<>([:], clazz, operator, node, sptd.chpTypeInput) - } - - def "A SystemParticipantSource with csv input should build hp input entity from valid and invalid input data as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - def sysPartTypedEntityData = new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, sptd.hpInput.operator, sptd.hpInput.node, sptd.hpTypeInput) - - when: - def hpInputEntityDataOpt = csvSystemParticipantSource.createHpEntityData(sysPartTypedEntityData, thermalBuses) - - then: - hpInputEntityDataOpt.success == resultIsPresent - hpInputEntityDataOpt.data.ifPresent({ hpInputEntityData -> - assert (hpInputEntityData == resultData) - }) - - where: - thermalBuses | fieldsToAttributes || resultIsPresent || resultData - [] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || false || null - [sptd.hpInput.thermalBus] | ["bla": "foo"] || false || null - [sptd.hpInput.thermalBus] | [:] || false || null - [sptd.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384f"] || false || null - [sptd.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], sptd.hpInput.operator, sptd.hpInput.node, sptd.hpTypeInput, sptd.hpInput.thermalBus) - } - - def "A SystemParticipantSource with csv input should build chp input entity from valid and invalid input data as expected"(List thermalStorages, List thermalBuses, Map fieldsToAttributes, boolean resultIsPresent, ChpInputEntityData resultData) { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - def sysPartTypedEntityData = new SystemParticipantTypedEntityData<>(fieldsToAttributes, ChpInput, sptd.chpInput.operator, sptd.chpInput.node, sptd.chpTypeInput) - - when: - def hpInputEntityDataOpt = csvSystemParticipantSource.buildChpEntityData(sysPartTypedEntityData, thermalStorages, thermalBuses) - - then: - hpInputEntityDataOpt.success == resultIsPresent - hpInputEntityDataOpt.data.ifPresent({ hpInputEntityData -> - assert (hpInputEntityData == resultData) - }) - - where: - thermalStorages | thermalBuses | fieldsToAttributes || resultIsPresent | resultData - [] as List | [] as List | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || false | null - [ - sptd.chpInput.thermalStorage - ] as List | [sptd.chpInput.thermalBus] as List | ["bla": "foo"] || false | null - [ - sptd.chpInput.thermalStorage - ] as List | [sptd.chpInput.thermalBus] as List | [:] || false | null - [ - sptd.chpInput.thermalStorage - ] as List | [sptd.chpInput.thermalBus] as List | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], sptd.chpInput.operator, sptd.chpInput.node, sptd.chpTypeInput, sptd.chpInput.thermalBus, sptd.chpInput.thermalStorage) + "Linked node with UUID 4ca90220-74c2-4369-9afa-a18bf068840d was not found for entity AssetInputEntityData") } def "A SystemParticipantSource with csv input should return data from a valid heat pump input file as expected"() { @@ -192,10 +91,13 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.hpInput.node]) + def emUnitsMap = map([sptd.emInput]) expect: - def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(nodes as Set, operators as Set, types as Set, thermalBuses as Set), SourceException) + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, emUnitsMap, map(types), map(thermalBuses)), SourceException) if (heatPumps.success) { heatPumps.data.get().size() == resultingSize @@ -205,15 +107,15 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat } where: - nodes | operators | types | thermalBuses || resultingSize || resultingSet - [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 || [sptd.hpInput] - [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 || [ - new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) + nodes | operators | types | thermalBuses || resultingSize | resultingSet + [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [sptd.hpInput] + [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ + new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.emInput, sptd.hpInput.type) ] - [] | [] | [] | [] || 0 || [] - [sptd.hpInput.node] | [] | [] | [] || 0 || [] - [sptd.hpInput.node] | [sptd.hpInput.operator] | [] | [] || 0 || [] - [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 || [] + [] | [] | [] | [] || 0 | [] + [sptd.hpInput.node] | [] | [] | [] || 0 | [] + [sptd.hpInput.node] | [sptd.hpInput.operator] | [] | [] || 0 | [] + [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 | [] } def "A SystemParticipantSource with csv input should return data from a valid chp input file as expected"() { @@ -222,10 +124,13 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.hpInput.node]) + def emUnitsMap = map([sptd.emInput]) expect: - def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(nodes as Set, operators as Set, types as Set, thermalBuses as Set, thermalStorages as Set), SourceException) + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, emUnitsMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) if (chpUnits.success) { chpUnits.data.get().size() == resultingSize @@ -235,19 +140,15 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat } where: - nodes | operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet - [sptd.chpInput.node]| [sptd.chpInput.operator]| [sptd.chpInput.type]| [sptd.chpInput.thermalBus]| [ - sptd.chpInput.thermalStorage - ] as List || 1 || [sptd.chpInput] - [sptd.chpInput.node]| []| [sptd.chpInput.type]| [sptd.chpInput.thermalBus]| [ - sptd.chpInput.thermalStorage - ] as List || 1 || [ - new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) + operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet + [sptd.chpInput.operator] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [sptd.chpInput] + [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ + new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.emInput, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) ] - [] | [] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.node] | [] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.node] | [sptd.chpInput.operator] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.node] | [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] as List || 0 || [] + [] | [] | [] | [] || 0 || [] + [] | [] | [] | [] || 0 || [] + [sptd.chpInput.operator] | [] | [] | [] || 0 || [] + [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid ev input file as expected"() { @@ -256,10 +157,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -271,12 +174,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.evInput.node] | [sptd.evInput.operator] | [sptd.evInput.type] || 1 || [sptd.evInput] - [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ - new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) + [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ + new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.emInput, sptd.evInput.type) ] - [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] - [sptd.evInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] + [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] + [sptd.evInput.node] | [] | [] || 0 || [] + [] | [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid wec input file as expected"() { @@ -285,10 +188,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -300,12 +205,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.wecInput.node] | [sptd.wecInput.operator] | [sptd.wecInput.type] || 1 || [sptd.wecInput] - [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ - new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) + [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ + new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.emInput, sptd.wecInput.type, sptd.wecInput.marketReaction) ] - [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] - [sptd.wecInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] + [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] + [sptd.wecInput.node] | [] | [] || 0 || [] + [] | [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid storage input file as expected"() { @@ -314,10 +219,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -329,12 +236,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.storageInput.node] | [sptd.storageInput.operator] | [sptd.storageInput.type] || 1 || [sptd.storageInput] - [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ - new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) + [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ + new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.emInput, sptd.storageInput.type) ] - [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] - [sptd.storageInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] + [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] + [sptd.storageInput.node] | [] | [] || 0 || [] + [] | [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid bm input file as expected"() { @@ -343,10 +250,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -358,12 +267,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [sptd.bmInput.operator] | [sptd.bmInput.type] || 1 || [sptd.bmInput] - [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ - new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) + [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ + new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.emInput, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) ] - [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] - [sptd.bmInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] + [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] + [sptd.bmInput.node] | [] | [] || 0 || [] + [] | [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid ev charging station input file as expected"() { @@ -372,10 +281,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -388,10 +299,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.evcsInput.node] | [sptd.evcsInput.operator] || 1 || [sptd.evcsInput] [sptd.evcsInput.node] | [] || 1 || [ - new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) + new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.emInput, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) ] - []| [sptd.evcsInput.operator]|| 0 || [] - []| []|| 0 || [] + [] | [sptd.evcsInput.operator] || 0 || [] + [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid load input file as expected"() { @@ -400,10 +311,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -415,11 +328,11 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.loadInput.node] | [sptd.loadInput.operator] || 1 || [sptd.loadInput] - [sptd.loadInput.node] | [] || 1 || [ - new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) + [sptd.loadInput.node] | [] || 1 || [ + new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.emInput, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) ] - [] | [sptd.loadInput.operator] || 0 || [] - [] | [] || 0 || [] + [] | [sptd.loadInput.operator] || 0 || [] + [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid pv input file as expected"() { @@ -428,10 +341,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -443,11 +358,11 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.pvInput.node] | [sptd.pvInput.operator] || 1 || [sptd.pvInput] - [sptd.pvInput.node] | [] || 1 || [ - new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) + [sptd.pvInput.node] | [] || 1 || [ + new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.emInput, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) ] - [] | [sptd.pvInput.operator] || 0 || [] - [] | [] || 0 || [] + [] | [sptd.pvInput.operator] || 0 || [] + [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid fixedFeedIn input file as expected"() { @@ -456,10 +371,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -469,16 +386,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat } where: - nodes | operators || resultingSize || resultingSet - [sptd.fixedFeedInInput.node] | [ - sptd.fixedFeedInInput.operator - ] as List || 1 || [sptd.fixedFeedInInput] - [sptd.fixedFeedInInput.node] | [] as List || 1 || [ - new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) + nodes | operators || resultingSize || resultingSet + [sptd.fixedFeedInInput.node] | [sptd.fixedFeedInInput.operator] || 1 || [sptd.fixedFeedInInput] + [sptd.fixedFeedInInput.node] | [] || 1 || [ + new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.emInput, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) ] - [] | [ - sptd.fixedFeedInInput.operator - ] as List || 0 || [] - [] | [] as List || 0 || [] + [] | [sptd.fixedFeedInInput.operator] || 0 || [] + [] | [] || 0 || [] } } diff --git a/src/test/groovy/edu/ie3/test/helper/EntityMap.groovy b/src/test/groovy/edu/ie3/test/helper/EntityMap.groovy new file mode 100644 index 000000000..3e24b2508 --- /dev/null +++ b/src/test/groovy/edu/ie3/test/helper/EntityMap.groovy @@ -0,0 +1,17 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.test.helper + +import edu.ie3.datamodel.models.UniqueEntity + +import java.util.function.Function +import java.util.stream.Collectors + +class EntityMap { + static Map map(Collection entities) { + entities.stream().collect(Collectors.toMap(UniqueEntity::getUuid, Function.identity())) + } +} diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/cylindrical_storage_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/cylindrical_storage_input.csv index 7d9de239a..4a11cda89 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/cylindrical_storage_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/cylindrical_storage_input.csv @@ -1,2 +1,2 @@ uuid,c,id,inlet_temp,operates_from,operates_until,operator,return_temp,storage_volume_lvl,storage_volume_lvl_min,thermal_bus -8851813b-3a7d-4fee-874b-4df9d724e4b3,1.0,test_cylindricThermalStorage,110.0,,,7d6f1763-0c1d-4266-a76f-59163ad3808b,80.0,1.039154027,0.3,0d95d7f2-49fb-4d49-8636-383a5220384e +8851813b-3a7d-4fee-874b-4df9d724e4b3,1.0,test_cylindricThermalStorage,110.0,,,f15105c4-a2de-4ab8-a621-4bc98e372d92,80.0,1.039154027,0.3,0d95d7f2-49fb-4d49-8636-383a5220384e From 4f9b4380adcb7f3fdb23d27f7f4b27ac47a01e95 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Sat, 30 Dec 2023 20:55:36 +0100 Subject: [PATCH 065/228] Fixing ThermalSource tests --- .../io/source/ThermalSourceTest.groovy | 62 ++++++++++ .../io/source/csv/CsvThermalSourceTest.groovy | 112 ++++++------------ .../models/input/system/ChpInputTest.groovy | 2 - .../common/SystemParticipantTestData.groovy | 2 + .../_thermal/cylindrical_storage_input.csv | 2 +- 5 files changed, 99 insertions(+), 81 deletions(-) create mode 100644 src/test/groovy/edu/ie3/datamodel/io/source/ThermalSourceTest.groovy diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/ThermalSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/ThermalSourceTest.groovy new file mode 100644 index 000000000..224773490 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/source/ThermalSourceTest.groovy @@ -0,0 +1,62 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.io.source + +import static edu.ie3.test.helper.EntityMap.map + +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.io.factory.input.ThermalUnitInputEntityData +import edu.ie3.datamodel.models.input.OperatorInput +import edu.ie3.datamodel.models.input.thermal.ThermalBusInput +import edu.ie3.datamodel.models.input.thermal.ThermalUnitInput +import edu.ie3.datamodel.utils.Try +import spock.lang.Specification + +import java.util.stream.Collectors +import java.util.stream.Stream + +class ThermalSourceTest extends Specification { + + def "A ThermalSource should build thermal unit input entity from valid and invalid input data as expected"() { + given: + def operator = new OperatorInput(UUID.fromString("8f9682df-0744-4b58-a122-f0dc730f6510"), "testOperator") + def validFieldsToAttributes = [ + "uuid" : "717af017-cc69-406f-b452-e022d7fb516a", + "id" : "test_thermal_unit", + "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", + "operatesFrom" : "2020-03-24 15:11:31", + "operatesUntil" : "2020-03-25 15:11:31", + "thermalBus" : "0d95d7f2-49fb-4d49-8636-383a5220384e" + ] + def assetInputEntityData = Stream.of(new Try.Success(new AssetInputEntityData(validFieldsToAttributes, ThermalUnitInput, operator))) + + when: + def resultingDataOpt = ThermalSource.thermalUnitInputEntityDataStream(assetInputEntityData, map(thermalBuses)).collect(Collectors.toList()) + + then: + resultingDataOpt.size() == 1 + resultingDataOpt.first().data.present == resultIsPresent + resultingDataOpt.first().data.ifPresent({ resultingData -> + assert (resultingData == expectedThermalUnitInputEntityData) + }) + + where: + thermalBuses || resultIsPresent | expectedThermalUnitInputEntityData + [] || false | null // thermal buses are not present -> method should return an empty optional -> do not check for thermal unit entity data + [ + new ThermalBusInput(UUID.fromString("0d95d7f2-49fb-4d49-8636-383a5220384e"), "test_thermal_bus") + ] || true | + new ThermalUnitInputEntityData([ + "uuid" : "717af017-cc69-406f-b452-e022d7fb516a", + "id" : "test_thermal_unit", + "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", + "operatesFrom" : "2020-03-24 15:11:31", + "operatesUntil": "2020-03-25 15:11:31"], + ThermalUnitInput, + new OperatorInput(UUID.fromString("8f9682df-0744-4b58-a122-f0dc730f6510"), "testOperator"), + new ThermalBusInput(UUID.fromString("0d95d7f2-49fb-4d49-8636-383a5220384e"), "test_thermal_bus")) + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy index e94c288e1..0098dbf53 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy @@ -5,20 +5,13 @@ */ package edu.ie3.datamodel.io.source.csv -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData -import edu.ie3.datamodel.io.factory.input.ThermalUnitInputEntityData import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.ThermalSource import edu.ie3.datamodel.io.source.TypeSource -import edu.ie3.datamodel.models.input.OperatorInput -import edu.ie3.datamodel.models.input.thermal.ThermalBusInput -import edu.ie3.datamodel.models.input.thermal.ThermalUnitInput import edu.ie3.test.common.SystemParticipantTestData as sptd import edu.ie3.test.common.ThermalUnitInputTestData import spock.lang.Specification -import java.util.stream.Collectors - class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { def "A CsvThermalSource should return ThermalBuses from valid and invalid input data as expected"() { @@ -33,10 +26,11 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingThermalBusesWoOperator.size() == 1 - resultingThermalBusesWoOperator.first().uuid == sptd.thermalBus.uuid - resultingThermalBusesWoOperator.first().id == sptd.thermalBus.id - resultingThermalBusesWoOperator.first().operator == sptd.thermalBus.operator - resultingThermalBusesWoOperator.first().operationTime == sptd.thermalBus.operationTime + def thermalBusWoOp = resultingThermalBusesWoOperator.values().first() + thermalBusWoOp.uuid == sptd.thermalBus.uuid + thermalBusWoOp.id == sptd.thermalBus.id + thermalBusWoOp.operator == sptd.thermalBus.operator + thermalBusWoOp.operationTime == sptd.thermalBus.operationTime //test method when operators are provided as constructor parameters when: @@ -44,10 +38,11 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingThermalBuses.size() == 1 - resultingThermalBuses.first().uuid == sptd.thermalBus.uuid - resultingThermalBuses.first().id == sptd.thermalBus.id - resultingThermalBuses.first().operator == sptd.thermalBus.operator - resultingThermalBuses.first().operationTime == sptd.thermalBus.operationTime + def thermalBus = resultingThermalBuses.values().first() + thermalBus.uuid == sptd.thermalBus.uuid + thermalBus.id == sptd.thermalBus.id + thermalBus.operator == sptd.thermalBus.operator + thermalBus.operationTime == sptd.thermalBus.operationTime } def "A CsvThermalSource should return a CylindricalStorageInput from valid and invalid input data as expected"() { @@ -92,47 +87,6 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { resultingCylindricalStorage.first().c == sptd.c } - def "A CsvThermalSource should build thermal unit input entity from valid and invalid input data as expected"() { - given: - def csvTypeSource = new TypeSource(new CsvDataSource(",", typeFolderPath, new FileNamingStrategy())) - def csvThermalSource = new ThermalSource(csvTypeSource, new CsvDataSource(csvSep, thermalFolderPath, fileNamingStrategy)) - def operator = new OperatorInput(UUID.fromString("8f9682df-0744-4b58-a122-f0dc730f6510"), "testOperator") - def validFieldsToAttributes = [ - "uuid" : "717af017-cc69-406f-b452-e022d7fb516a", - "id" : "test_thermal_unit", - "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom" : "2020-03-24 15:11:31", - "operatesUntil" : "2020-03-25 15:11:31", - "thermalBus" : "0d95d7f2-49fb-4d49-8636-383a5220384e" - ] - def assetInputEntityData = new AssetInputEntityData(validFieldsToAttributes, ThermalUnitInput, operator) - - when: - def resultingDataOpt = csvThermalSource.buildThermalUnitInputEntityData(assetInputEntityData, thermalBuses).collect(Collectors.toList()) - - then: - resultingDataOpt.size() == 1 - resultingDataOpt.first().data.present == resultIsPresent - resultingDataOpt.first().data.ifPresent({ resultingData -> - assert (resultingData == expectedThermalUnitInputEntityData) - }) - - where: - thermalBuses || resultIsPresent || expectedThermalUnitInputEntityData - []|| false || null // thermal buses are not present -> method should return an empty optional -> do not check for thermal unit entity data - [ - new ThermalBusInput(UUID.fromString("0d95d7f2-49fb-4d49-8636-383a5220384e"), "test_thermal_bus") - ]|| true || - new ThermalUnitInputEntityData(["uuid": "717af017-cc69-406f-b452-e022d7fb516a", - "id": "test_thermal_unit", - "operator": "8f9682df-0744-4b58-a122-f0dc730f6510", - "operatesFrom": "2020-03-24 15:11:31", - "operatesUntil": "2020-03-25 15:11:31"], - ThermalUnitInput, - new OperatorInput(UUID.fromString("8f9682df-0744-4b58-a122-f0dc730f6510"), "testOperator"), - new ThermalBusInput(UUID.fromString("0d95d7f2-49fb-4d49-8636-383a5220384e"), "test_thermal_bus")) - } - def "A CsvThermalSource should return a ThermalHouseInput from valid and invalid input data as expected"() { given: def csvTypeSource = new TypeSource(new CsvDataSource(",", typeFolderPath, new FileNamingStrategy())) @@ -146,17 +100,18 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingThermalHouseWoOperator.size() == 1 - resultingThermalHouseWoOperator.first().uuid == ThermalUnitInputTestData.thermalHouseInput.uuid - resultingThermalHouseWoOperator.first().id == ThermalUnitInputTestData.thermalHouseInput.id - resultingThermalHouseWoOperator.first().operator == ThermalUnitInputTestData.thermalHouseInput.operator - resultingThermalHouseWoOperator.first().operationTime.isLimited() - resultingThermalHouseWoOperator.first().operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime - resultingThermalHouseWoOperator.first().thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus - resultingThermalHouseWoOperator.first().ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses - resultingThermalHouseWoOperator.first().ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa - resultingThermalHouseWoOperator.first().targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature - resultingThermalHouseWoOperator.first().upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit - resultingThermalHouseWoOperator.first().lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit + def thermalHouseWoOp = resultingThermalHouseWoOperator.values().first() + thermalHouseWoOp.uuid == ThermalUnitInputTestData.thermalHouseInput.uuid + thermalHouseWoOp.id == ThermalUnitInputTestData.thermalHouseInput.id + thermalHouseWoOp.operator == ThermalUnitInputTestData.thermalHouseInput.operator + thermalHouseWoOp.operationTime.isLimited() + thermalHouseWoOp.operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime + thermalHouseWoOp.thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus + thermalHouseWoOp.ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses + thermalHouseWoOp.ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa + thermalHouseWoOp.targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature + thermalHouseWoOp.upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit + thermalHouseWoOp.lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit //test method when operators and thermal buses are provided as constructor parameters when: @@ -164,16 +119,17 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingThermalHouse.size() == 1 - resultingThermalHouse.first().uuid == ThermalUnitInputTestData.thermalHouseInput.uuid - resultingThermalHouse.first().id == ThermalUnitInputTestData.thermalHouseInput.id - resultingThermalHouse.first().operator == ThermalUnitInputTestData.thermalHouseInput.operator - resultingThermalHouse.first().operationTime.isLimited() - resultingThermalHouse.first().operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime - resultingThermalHouseWoOperator.first().thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus - resultingThermalHouse.first().ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses - resultingThermalHouse.first().ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa - resultingThermalHouse.first().targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature - resultingThermalHouse.first().upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit - resultingThermalHouse.first().lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit + def thermalHouse = resultingThermalHouse.values().first() + thermalHouse .uuid == ThermalUnitInputTestData.thermalHouseInput.uuid + thermalHouse.id == ThermalUnitInputTestData.thermalHouseInput.id + thermalHouse.operator == ThermalUnitInputTestData.thermalHouseInput.operator + thermalHouse.operationTime.isLimited() + thermalHouse.operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime + thermalHouse.thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus + thermalHouse.ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses + thermalHouse.ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa + thermalHouse.targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature + thermalHouse.upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit + thermalHouse.lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit } } \ No newline at end of file diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy index 8eee5450b..b21f73dfe 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.models.input.system import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification - class ChpInputTest extends Specification { def "A ChpInput copy method should work as expected"() { @@ -19,7 +18,6 @@ class ChpInputTest extends Specification { def alteredUnit = chpInput.copy().thermalBus(SystemParticipantTestData.thermalBus) .type(SystemParticipantTestData.chpTypeInput).thermalStorage(SystemParticipantTestData.thermalStorage).marketReaction(true).build() - then: alteredUnit.with { assert uuid == chpInput.uuid diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index 97c38532e..dbcc06e33 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -177,6 +177,8 @@ class SystemParticipantTestData { public static final ThermalStorageInput thermalStorage = new CylindricalStorageInput( UUID.fromString("8851813b-3a7d-4fee-874b-4df9d724e4b3"), "test_cylindricThermalStorage", + GridTestData.profBroccoli, + OperationTime.notLimited(), thermalBus, storageVolumeLvl, storageVolumeLvlMin, diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_thermal/cylindrical_storage_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_thermal/cylindrical_storage_input.csv index 7d9de239a..4a11cda89 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_thermal/cylindrical_storage_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_thermal/cylindrical_storage_input.csv @@ -1,2 +1,2 @@ uuid,c,id,inlet_temp,operates_from,operates_until,operator,return_temp,storage_volume_lvl,storage_volume_lvl_min,thermal_bus -8851813b-3a7d-4fee-874b-4df9d724e4b3,1.0,test_cylindricThermalStorage,110.0,,,7d6f1763-0c1d-4266-a76f-59163ad3808b,80.0,1.039154027,0.3,0d95d7f2-49fb-4d49-8636-383a5220384e +8851813b-3a7d-4fee-874b-4df9d724e4b3,1.0,test_cylindricThermalStorage,110.0,,,f15105c4-a2de-4ab8-a621-4bc98e372d92,80.0,1.039154027,0.3,0d95d7f2-49fb-4d49-8636-383a5220384e From 67a13002969e972a6e48f9c01c48948bbc6b3f0d Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Sat, 30 Dec 2023 22:42:53 +0100 Subject: [PATCH 066/228] Fixing TypeSource tests --- .../io/source/csv/CsvTypeSourceTest.groovy | 189 ++++++++---------- 1 file changed, 88 insertions(+), 101 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy index ecc205a40..922166edd 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy @@ -12,7 +12,6 @@ import edu.ie3.test.common.GridTestData as gtd import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Specification - class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def "A CsvTypeSource should read and handle valid 2W Transformer type file as expected"() { @@ -21,9 +20,7 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { expect: def transformer2WTypes = typeSource.transformer2WTypes - def transformerToBeFound = transformer2WTypes.find {trafoType -> - trafoType.uuid ==gtd.transformerTypeBtoD.uuid - } + def transformerToBeFound = transformer2WTypes.get(gtd.transformerTypeBtoD.uuid) transformerToBeFound.id == gtd.transformerTypeBtoD.id transformerToBeFound.rSc == gtd.transformerTypeBtoD.rSc transformerToBeFound.xSc == gtd.transformerTypeBtoD.xSc @@ -50,10 +47,8 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { expect: def operators = typeSource.operators - operators.first().uuid == firstOperator.uuid - operators.first().id == firstOperator.id - operators[1].uuid == secondOperator.uuid - operators[1].id == secondOperator.id + operators.get(firstOperator.uuid) == firstOperator + operators.get(secondOperator.uuid) == secondOperator } def "A CsvTypeSource should read and handle valid line type file as expected"() { @@ -61,15 +56,14 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def lineTypes = typeSource.lineTypes - lineTypes.first().uuid == gtd.lineTypeInputCtoD.uuid - lineTypes.first().id == gtd.lineTypeInputCtoD.id - lineTypes.first().b == gtd.lineTypeInputCtoD.b - lineTypes.first().g == gtd.lineTypeInputCtoD.g - lineTypes.first().r == gtd.lineTypeInputCtoD.r - lineTypes.first().x == gtd.lineTypeInputCtoD.x - lineTypes.first().iMax == gtd.lineTypeInputCtoD.iMax - lineTypes.first().vRated == gtd.lineTypeInputCtoD.vRated + def lineType = typeSource.lineTypes.get(gtd.lineTypeInputCtoD.uuid) + lineType.id == gtd.lineTypeInputCtoD.id + lineType.b == gtd.lineTypeInputCtoD.b + lineType.g == gtd.lineTypeInputCtoD.g + lineType.r == gtd.lineTypeInputCtoD.r + lineType.x == gtd.lineTypeInputCtoD.x + lineType.iMax == gtd.lineTypeInputCtoD.iMax + lineType.vRated == gtd.lineTypeInputCtoD.vRated } def "A CsvTypeSource should read and handle valid 3W Transformer type file as expected"() { @@ -77,28 +71,27 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def transformer3WTypes = typeSource.transformer3WTypes - transformer3WTypes.first().uuid == gtd.transformerTypeAtoBtoC.uuid - transformer3WTypes.first().id == gtd.transformerTypeAtoBtoC.id - transformer3WTypes.first().sRatedA == gtd.transformerTypeAtoBtoC.sRatedA - transformer3WTypes.first().sRatedB == gtd.transformerTypeAtoBtoC.sRatedB - transformer3WTypes.first().sRatedC == gtd.transformerTypeAtoBtoC.sRatedC - transformer3WTypes.first().vRatedA == gtd.transformerTypeAtoBtoC.vRatedA - transformer3WTypes.first().vRatedB == gtd.transformerTypeAtoBtoC.vRatedB - transformer3WTypes.first().vRatedC == gtd.transformerTypeAtoBtoC.vRatedC - transformer3WTypes.first().rScA == gtd.transformerTypeAtoBtoC.rScA - transformer3WTypes.first().rScB == gtd.transformerTypeAtoBtoC.rScB - transformer3WTypes.first().rScC == gtd.transformerTypeAtoBtoC.rScC - transformer3WTypes.first().xScA == gtd.transformerTypeAtoBtoC.xScA - transformer3WTypes.first().xScB == gtd.transformerTypeAtoBtoC.xScB - transformer3WTypes.first().xScC == gtd.transformerTypeAtoBtoC.xScC - transformer3WTypes.first().gM == gtd.transformerTypeAtoBtoC.gM - transformer3WTypes.first().bM == gtd.transformerTypeAtoBtoC.bM - transformer3WTypes.first().dV == gtd.transformerTypeAtoBtoC.dV - transformer3WTypes.first().dPhi == gtd.transformerTypeAtoBtoC.dPhi - transformer3WTypes.first().tapNeutr == gtd.transformerTypeAtoBtoC.tapNeutr - transformer3WTypes.first().tapMin == gtd.transformerTypeAtoBtoC.tapMin - transformer3WTypes.first().tapMax == gtd.transformerTypeAtoBtoC.tapMax + def transformer3WType = typeSource.transformer3WTypes.get(gtd.transformerTypeAtoBtoC.uuid) + transformer3WType.id == gtd.transformerTypeAtoBtoC.id + transformer3WType.sRatedA == gtd.transformerTypeAtoBtoC.sRatedA + transformer3WType.sRatedB == gtd.transformerTypeAtoBtoC.sRatedB + transformer3WType.sRatedC == gtd.transformerTypeAtoBtoC.sRatedC + transformer3WType.vRatedA == gtd.transformerTypeAtoBtoC.vRatedA + transformer3WType.vRatedB == gtd.transformerTypeAtoBtoC.vRatedB + transformer3WType.vRatedC == gtd.transformerTypeAtoBtoC.vRatedC + transformer3WType.rScA == gtd.transformerTypeAtoBtoC.rScA + transformer3WType.rScB == gtd.transformerTypeAtoBtoC.rScB + transformer3WType.rScC == gtd.transformerTypeAtoBtoC.rScC + transformer3WType.xScA == gtd.transformerTypeAtoBtoC.xScA + transformer3WType.xScB == gtd.transformerTypeAtoBtoC.xScB + transformer3WType.xScC == gtd.transformerTypeAtoBtoC.xScC + transformer3WType.gM == gtd.transformerTypeAtoBtoC.gM + transformer3WType.bM == gtd.transformerTypeAtoBtoC.bM + transformer3WType.dV == gtd.transformerTypeAtoBtoC.dV + transformer3WType.dPhi == gtd.transformerTypeAtoBtoC.dPhi + transformer3WType.tapNeutr == gtd.transformerTypeAtoBtoC.tapNeutr + transformer3WType.tapMin == gtd.transformerTypeAtoBtoC.tapMin + transformer3WType.tapMax == gtd.transformerTypeAtoBtoC.tapMax } def "A CsvTypeSource should read and handle valid bm type file as expected"() { @@ -106,14 +99,13 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def bmTypes = typeSource.bmTypes - bmTypes.first().uuid == sptd.bmTypeInput.uuid - bmTypes.first().id == sptd.bmTypeInput.id - bmTypes.first().capex == sptd.bmTypeInput.capex - bmTypes.first().opex == sptd.bmTypeInput.opex - bmTypes.first().cosPhiRated == sptd.bmTypeInput.cosPhiRated - bmTypes.first().activePowerGradient == sptd.bmTypeInput.activePowerGradient - bmTypes.first().etaConv == sptd.bmTypeInput.etaConv + def bmType = typeSource.bmTypes.get(sptd.bmTypeInput.uuid) + bmType.id == sptd.bmTypeInput.id + bmType.capex == sptd.bmTypeInput.capex + bmType.opex == sptd.bmTypeInput.opex + bmType.cosPhiRated == sptd.bmTypeInput.cosPhiRated + bmType.activePowerGradient == sptd.bmTypeInput.activePowerGradient + bmType.etaConv == sptd.bmTypeInput.etaConv } def "A CsvTypeSource should read and handle valid chp type file as expected"() { @@ -121,16 +113,15 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def chpTypes = typeSource.chpTypes - chpTypes.first().uuid == sptd.chpTypeInput.uuid - chpTypes.first().id == sptd.chpTypeInput.id - chpTypes.first().capex == sptd.chpTypeInput.capex - chpTypes.first().opex == sptd.chpTypeInput.opex - chpTypes.first().etaEl == sptd.chpTypeInput.etaEl - chpTypes.first().etaThermal == sptd.chpTypeInput.etaThermal - chpTypes.first().sRated == sptd.chpTypeInput.sRated - chpTypes.first().pThermal == sptd.chpTypeInput.pThermal - chpTypes.first().pOwn == sptd.chpTypeInput.pOwn + def chpType = typeSource.chpTypes.get(sptd.chpTypeInput.uuid) + chpType.id == sptd.chpTypeInput.id + chpType.capex == sptd.chpTypeInput.capex + chpType.opex == sptd.chpTypeInput.opex + chpType.etaEl == sptd.chpTypeInput.etaEl + chpType.etaThermal == sptd.chpTypeInput.etaThermal + chpType.sRated == sptd.chpTypeInput.sRated + chpType.pThermal == sptd.chpTypeInput.pThermal + chpType.pOwn == sptd.chpTypeInput.pOwn } def "A CsvTypeSource should read and handle valid hp type file as expected"() { @@ -138,14 +129,13 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def hpTypes = typeSource.hpTypes - hpTypes.first().uuid == sptd.hpTypeInput.uuid - hpTypes.first().id == sptd.hpTypeInput.id - hpTypes.first().capex == sptd.hpTypeInput.capex - hpTypes.first().opex == sptd.hpTypeInput.opex - hpTypes.first().sRated == sptd.hpTypeInput.sRated - hpTypes.first().cosPhiRated == sptd.hpTypeInput.cosPhiRated - hpTypes.first().pThermal == sptd.hpTypeInput.pThermal + def hpType = typeSource.hpTypes.get(sptd.hpTypeInput.uuid) + hpType.id == sptd.hpTypeInput.id + hpType.capex == sptd.hpTypeInput.capex + hpType.opex == sptd.hpTypeInput.opex + hpType.sRated == sptd.hpTypeInput.sRated + hpType.cosPhiRated == sptd.hpTypeInput.cosPhiRated + hpType.pThermal == sptd.hpTypeInput.pThermal } def "A CsvTypeSource should read and handle valid storage type file as expected"() { @@ -153,20 +143,19 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def storageTypes = typeSource.storageTypes - storageTypes.first().uuid == sptd.storageTypeInput.uuid - storageTypes.first().id == sptd.storageTypeInput.id - storageTypes.first().capex == sptd.storageTypeInput.capex - storageTypes.first().opex == sptd.storageTypeInput.opex - storageTypes.first().eStorage == sptd.storageTypeInput.eStorage - storageTypes.first().sRated == sptd.storageTypeInput.sRated - storageTypes.first().cosPhiRated == sptd.storageTypeInput.cosPhiRated - storageTypes.first().pMax == sptd.storageTypeInput.pMax - storageTypes.first().activePowerGradient == sptd.storageTypeInput.activePowerGradient - storageTypes.first().eta == sptd.storageTypeInput.eta - storageTypes.first().dod == sptd.storageTypeInput.dod - storageTypes.first().lifeTime == sptd.storageTypeInput.lifeTime - storageTypes.first().lifeCycle == sptd.storageTypeInput.lifeCycle + def storageType = typeSource.storageTypes.get(sptd.storageTypeInput.uuid) + storageType.id == sptd.storageTypeInput.id + storageType.capex == sptd.storageTypeInput.capex + storageType.opex == sptd.storageTypeInput.opex + storageType.eStorage == sptd.storageTypeInput.eStorage + storageType.sRated == sptd.storageTypeInput.sRated + storageType.cosPhiRated == sptd.storageTypeInput.cosPhiRated + storageType.pMax == sptd.storageTypeInput.pMax + storageType.activePowerGradient == sptd.storageTypeInput.activePowerGradient + storageType.eta == sptd.storageTypeInput.eta + storageType.dod == sptd.storageTypeInput.dod + storageType.lifeTime == sptd.storageTypeInput.lifeTime + storageType.lifeCycle == sptd.storageTypeInput.lifeCycle } def "A CsvTypeSource should read and handle valid wec type file as expected"() { @@ -174,20 +163,19 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def wecTypes = typeSource.wecTypes - wecTypes.first().uuid == sptd.wecType.uuid - wecTypes.first().id == sptd.wecType.id - wecTypes.first().capex == sptd.wecType.capex - wecTypes.first().opex == sptd.wecType.opex - wecTypes.first().cosPhiRated == sptd.wecType.cosPhiRated - wecTypes.first().etaConv == sptd.wecType.etaConv - wecTypes.first().sRated == sptd.wecType.sRated - wecTypes.first().rotorArea == sptd.wecType.rotorArea - wecTypes.first().hubHeight == sptd.wecType.hubHeight - wecTypes.first().cpCharacteristic == sptd.wecType.cpCharacteristic + def wecType = typeSource.wecTypes.get(sptd.wecType.uuid) + wecType.id == sptd.wecType.id + wecType.capex == sptd.wecType.capex + wecType.opex == sptd.wecType.opex + wecType.cosPhiRated == sptd.wecType.cosPhiRated + wecType.etaConv == sptd.wecType.etaConv + wecType.sRated == sptd.wecType.sRated + wecType.rotorArea == sptd.wecType.rotorArea + wecType.hubHeight == sptd.wecType.hubHeight + wecType.cpCharacteristic == sptd.wecType.cpCharacteristic //check for the individual points - if (wecTypes.first().cpCharacteristic.points.iterator().hasNext()) - wecTypes.first().cpCharacteristic.points.iterator().next() == sptd.wecType.cpCharacteristic.points.iterator().next() + if (wecType.cpCharacteristic.points.iterator().hasNext()) + wecType.cpCharacteristic.points.iterator().next() == sptd.wecType.cpCharacteristic.points.iterator().next() } def "A CsvTypeSource should read and handle valid ev type file as expected"() { @@ -195,14 +183,13 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def evTypes = typeSource.evTypes - evTypes.first().uuid == sptd.evTypeInput.uuid - evTypes.first().id == sptd.evTypeInput.id - evTypes.first().capex == sptd.evTypeInput.capex - evTypes.first().opex == sptd.evTypeInput.opex - evTypes.first().eStorage == sptd.evTypeInput.eStorage - evTypes.first().eCons == sptd.evTypeInput.eCons - evTypes.first().sRated == sptd.evTypeInput.sRated - evTypes.first().cosPhiRated == sptd.evTypeInput.cosPhiRated + def evType = typeSource.evTypes.get(sptd.evTypeInput.uuid) + evType.id == sptd.evTypeInput.id + evType.capex == sptd.evTypeInput.capex + evType.opex == sptd.evTypeInput.opex + evType.eStorage == sptd.evTypeInput.eStorage + evType.eCons == sptd.evTypeInput.eCons + evType.sRated == sptd.evTypeInput.sRated + evType.cosPhiRated == sptd.evTypeInput.cosPhiRated } } From 69ada8e465044f7ace4ac70681f18a0dfc2eab0b Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Sat, 30 Dec 2023 22:43:30 +0100 Subject: [PATCH 067/228] Fixing JointGridContainer tests --- .../models/input/container/JointGridContainerTest.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index bb614d5c8..5b8147f20 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -29,7 +29,7 @@ class JointGridContainerTest extends Specification { def "A single subgrid can be used to build a JointGridContainer"() { when: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) then: noExceptionThrown() @@ -38,7 +38,7 @@ class JointGridContainerTest extends Specification { def "A JointGridContainer's copy method should work as expected"() { given: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) def rawGrid = new RawGridElements(List.of(GridTestData.lineAtoB, GridTestData.transformerAtoBtoC)) def systemParticipants = new SystemParticipants(List.of(SystemParticipantTestData.bmInput)) def graphics = new GraphicElements(Set.of(GridTestData.nodeGraphicD), Set.of(GridTestData.lineGraphicCtoD)) From 8c26f18a37bd1d60728eecac99b4135dd0cbd496 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Sat, 30 Dec 2023 23:14:33 +0100 Subject: [PATCH 068/228] Fixing some code smells --- .../factory/input/EmAssetInputEntityData.java | 23 +++++++++-- .../ie3/datamodel/io/source/EntitySource.java | 40 +++++++++---------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java index 43d6babb2..d001c405e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; import java.util.Map; +import java.util.Objects; /** * Data used for the construction of {@link edu.ie3.datamodel.models.input.AssetInput} entities @@ -37,10 +38,6 @@ public EmAssetInputEntityData( this.emUnit = emUnit; } - public EmInput getEmUnit() { - return emUnit; - } - /** * Creates a new EmAssetInputEntityData object based on a given {@link AssetInputEntityData} * object and given em unit @@ -52,4 +49,22 @@ public EmAssetInputEntityData(AssetInputEntityData entityData, EmInput emUnit) { super(entityData, entityData.getOperatorInput()); this.emUnit = emUnit; } + + public EmInput getEmUnit() { + return emUnit; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + EmAssetInputEntityData that = (EmAssetInputEntityData) o; + return Objects.equals(emUnit, that.emUnit); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), emUnit); + } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 672a14a6c..7eeebda49 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -85,45 +85,45 @@ Try enrichEntityData( * * @param entityData The entity data of the entity that provides links to two other entities via * UUID - * @param fieldNameA The field name of the field that provides the UUID of the first linked entity - * @param linkedEntitiesA The first map of UUID to entities, of which one should be linked to + * @param fieldName1 The field name of the field that provides the UUID of the first linked entity + * @param linkedEntities1 The first map of UUID to entities, of which one should be linked to * given entity data - * @param fieldNameB The field name of the field that provides the UUID of the second linked + * @param fieldName2 The field name of the field that provides the UUID of the second linked * entity - * @param linkedEntitiesB The second map of UUID to entities, of which one should be linked to + * @param linkedEntities2 The second map of UUID to entities, of which one should be linked to * given entity data * @param createEntityData The function that creates the resulting entity data given entityData * and the linked entities * @param Type of input entity data - * @param Type of the first linked entity - * @param Type of the second linked entity + * @param Type of the first linked entity + * @param Type of the second linked entity * @param Type of resulting entity data that combines the given entityData and two linked * entities * @return {@link Try} to enhanced data */ protected static < - E extends EntityData, TA extends UniqueEntity, TB extends UniqueEntity, R extends E> + E extends EntityData, T1 extends UniqueEntity, T2 extends UniqueEntity, R extends E> Try enrichEntityData( E entityData, - String fieldNameA, - Map linkedEntitiesA, - String fieldNameB, - Map linkedEntitiesB, - TriFunction createEntityData) { - return getLinkedEntity(entityData, fieldNameA, linkedEntitiesA) + String fieldName1, + Map linkedEntities1, + String fieldName2, + Map linkedEntities2, + TriFunction createEntityData) { + return getLinkedEntity(entityData, fieldName1, linkedEntities1) .flatMap( - linkedEntityA -> - getLinkedEntity(entityData, fieldNameB, linkedEntitiesB) + linkedEntity1 -> + getLinkedEntity(entityData, fieldName2, linkedEntities2) .map( - linkedEntityB -> { + linkedEntity2 -> { Map fieldsToAttributes = entityData.getFieldsToValues(); // remove fields that are passed as objects to constructor - fieldsToAttributes.keySet().remove(fieldNameA); - fieldsToAttributes.keySet().remove(fieldNameB); + fieldsToAttributes.keySet().remove(fieldName1); + fieldsToAttributes.keySet().remove(fieldName2); // build resulting entity data - return createEntityData.apply(entityData, linkedEntityA, linkedEntityB); + return createEntityData.apply(entityData, linkedEntity1, linkedEntity2); })); } @@ -254,7 +254,7 @@ Try optionallyEnrichEntityData( private static Try getEntity(UUID uuid, Map entityMap) { return Optional.ofNullable(entityMap.get(uuid)) // We either find a matching entity for given UUID, thus return a success - .map(entity -> (Try) new Try.Success(entity)) + .map(entity -> Try.of(() -> entity, SourceException.class)) // ... or find no matching entity, returning a failure. .orElse( new Try.Failure<>( From c8fa0e4cabc47358151df8dd63da5aa9cdbca8ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:35:08 +0000 Subject: [PATCH 069/228] Bump org.apache.logging.log4j:log4j-bom from 2.22.0 to 2.22.1 (#974) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 77efa335e..30cc3e69e 100644 --- a/build.gradle +++ b/build.gradle @@ -83,7 +83,7 @@ dependencies { testImplementation "org.testcontainers:couchbase:$testcontainersVersion" // logging - implementation platform('org.apache.logging.log4j:log4j-bom:2.22.0') + implementation platform('org.apache.logging.log4j:log4j-bom:2.22.1') implementation 'org.apache.logging.log4j:log4j-api' // log4j implementation 'org.apache.logging.log4j:log4j-core' // log4j implementation 'org.apache.logging.log4j:log4j-slf4j-impl' // log4j -> slf4j From d6e5432a349ff44efc0d5701d0253757372c9eff Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 10:32:00 +0100 Subject: [PATCH 070/228] Improving EnergyManagementSource a bit, providing test --- .../io/source/EnergyManagementSource.java | 55 ++-- .../source/EnergyManagementSourceTest.groovy | 284 ++++++++++++++++++ .../csv/CsvEnergyManagementSourceTest.groovy | 1 - 3 files changed, 312 insertions(+), 28 deletions(-) create mode 100644 src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 14550060f..2b8a2f4b6 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -24,13 +24,11 @@ public class EnergyManagementSource extends EntitySource { private final TypeSource typeSource; - private final EmInputFactory emInputFactory; + private static final EmInputFactory emInputFactory = new EmInputFactory(); public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { super(dataSource); this.typeSource = typeSource; - - this.emInputFactory = new EmInputFactory(); } /** @@ -65,7 +63,7 @@ public Map getEmUnits() throws SourceException { * @return a map of uuid to {@link EmInput} entities */ public Map getEmUnits(Map operators) throws SourceException { - return buildHierarchicalEmInputs(operators); + return createEmInputs(buildAssetInputEntityData(EmInput.class, operators)); } /** @@ -74,14 +72,13 @@ public Map getEmUnits(Map operators) throws * in {@link SystemParticipantSource}. Instead, we use a recursive approach, starting with EMs at * root level (which are not EM-controlled themselves). * - * @param operators a map of uuid to {@link OperatorInput} that should be used for the returning - * instances + * @param assetEntityDataStream the data stream of {@link AssetInputEntityData} * {@link Try} + * objects * @return a map of uuid to {@link EmInput} entities */ - private Map buildHierarchicalEmInputs(Map operators) + private static Map createEmInputs( + Stream> assetEntityDataStream) throws SourceException { - Stream> assetEntityDataStream = - buildAssetInputEntityData(EmInput.class, operators); // Split stream by failures and EMs that are themselves EM-controlled on one side, and EMs at // root position (that have not failed so far) on the other side, which do not have parents per @@ -112,8 +109,11 @@ private Map buildHierarchicalEmInputs(Map op EmInput.class); if (!others.isEmpty()) { - // there's more levels beyond EMs at root level. Build them recursively + // there's more EM levels beyond root level. Build them recursively Stream othersWithParentUuid = + // We try to keep the Tries as long as possible so that as many failures as possible can + // be reported. At this point however, we need to "unpack" (and throw, if applicable), + // because without valid parent EM UUID, we cannot proceed. unpack( others.stream() .map( @@ -141,14 +141,14 @@ private Map buildHierarchicalEmInputs(Map op })), AssetDataAndValidParentUuid.class); - allEms.putAll(buildHierarchicalEmInputs(othersWithParentUuid, allEms)); + allEms.putAll(createHierarchicalEmInputs(othersWithParentUuid, allEms)); } return allEms; } - private Map buildHierarchicalEmInputs( - Stream assetEntityDataStream, Map builtEms) + private static Map createHierarchicalEmInputs( + Stream assetEntityDataStream, Map lastLevelEms) throws SourceException { // Split stream by assets whose parent is already built (which can be built at this level), and @@ -156,33 +156,34 @@ private Map buildHierarchicalEmInputs( // or not at all) Map> split = assetEntityDataStream.collect( - Collectors.partitioningBy(data -> builtEms.containsKey(data.parentEm))); + Collectors.partitioningBy(data -> lastLevelEms.containsKey(data.parentEm))); List toBeBuiltAtThisLevel = split.get(true); - List others = split.get(false); + List toBeBuiltAtNextLevel = split.get(false); if (toBeBuiltAtThisLevel.isEmpty()) { - // Since we only start a new recursion step if the asset data stream is not empty, - // we can conclude at this point that from all asset data at this recursion level, - // no new EMs can be built - thus, parents must be missing + // Since we only start a new recursion step if the asset data stream is not empty, there have + // to be EMs to be built at next level. This does not work if there's no EMs at the current + // recursion level. throw new SourceException( - "EMs " + others + " were assigned a parent EM that does not exist."); + "EMs " + toBeBuiltAtNextLevel + " were assigned a parent EM that does not exist."); } else { // New EMs can be built at this level Map newEms = unpackMap( toBeBuiltAtThisLevel.stream() .map( - data -> - emInputFactory.get( - new EmAssetInputEntityData( - data.entityData, builtEms.get(data.parentEm)))), + data -> { + // exists because we checked above + EmInput parentEm = lastLevelEms.get(data.parentEm); + return emInputFactory.get( + new EmAssetInputEntityData(data.entityData, parentEm)); + }), EmInput.class); - // This also means that if there's more EMs left to build, the new EMs might function as - // parents there - if (!others.isEmpty()) { - newEms.putAll(buildHierarchicalEmInputs(others.stream(), newEms)); + if (!toBeBuiltAtNextLevel.isEmpty()) { + // If there's more EMs left to build, the new EMs have to function as parents there + newEms.putAll(createHierarchicalEmInputs(toBeBuiltAtNextLevel.stream(), newEms)); } return newEms; } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy new file mode 100644 index 000000000..4dcb4546e --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy @@ -0,0 +1,284 @@ +/* + * © 2024. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.io.source + +import static edu.ie3.test.helper.EntityMap.map + +import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.exceptions.SourceException +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.models.input.EmInput +import edu.ie3.datamodel.utils.Try +import spock.lang.Specification + +import java.util.stream.Stream + +class EnergyManagementSourceTest extends Specification { + + def "An EnergyManagementSource should construct hierarchical EmInputs with two branches as expected"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-0", + "id": "root", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "child 1", + "parentem" : "0-0-0-0-0", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-11", + "id": "child 1-1", + "parentem" : "0-0-0-0-1", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "child 2", + "parentem" : "0-0-0-0-0", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-21", + "id": "child 2-1", + "parentem" : "0-0-0-0-2", + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException.class)) + + expect: + def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) + + def expectedRootEm = new EmInput( + UUID.fromString("0-0-0-0-0"), + "root", + "", + null + ) + def expectedEm1 = new EmInput( + UUID.fromString("0-0-0-0-1"), + "child 1", + "", + expectedRootEm + ) + def expectedEm11 = new EmInput( + UUID.fromString("0-0-0-0-11"), + "child 1-1", + "", + expectedEm1 + ) + def expectedEm2 = new EmInput( + UUID.fromString("0-0-0-0-2"), + "child 2", + "", + expectedRootEm + ) + def expectedEm21 = new EmInput( + UUID.fromString("0-0-0-0-21"), + "child 2-1", + "", + expectedEm2 + ) + + emUnits == map([expectedRootEm, expectedEm1, expectedEm11, expectedEm2, expectedEm21]) + } + + def "An EnergyManagementSource should construct flat EmInputs without hierarchy as expected"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "", + "controlstrategy" : "strat_b"], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-3", + "id": "em 3", + "parentem" : "", + "controlstrategy" : "other"], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException.class)) + + expect: + def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) + + def expectedEm1 = new EmInput( + UUID.fromString("0-0-0-0-1"), + "em 1", + "", + null + ) + def expectedEm2 = new EmInput( + UUID.fromString("0-0-0-0-2"), + "em 2", + "strat_b", + null + ) + def expectedEm3 = new EmInput( + UUID.fromString("0-0-0-0-3"), + "em 3", + "other", + null + ) + + emUnits == map([expectedEm1, expectedEm2, expectedEm3]) + } + + def "An EnergyManagementSource should fail if any entity data already failed before"() { + given: + def assetEntityDataStream = Stream.of( + new Try.Success(new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + )), + new Try.Success(new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "", + "controlstrategy" : ""], + EmInput + )), + new Try.Failure(new SourceException("test failure abc")) + ) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.cause.message.contains("test failure abc") + } + + def "An EnergyManagementSource should fail if a parent EM UUID is malformed"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "not-a-uuid", + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException.class)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.cause.message.contains("Exception while trying to parse UUID of field \"parentem\" with value \"not-a-uuid\"") + } + + def "An EnergyManagementSource should fail if the factory fails for one EM"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", // id is missing + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException.class)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.cause.message.contains("An error occurred when creating instance of EmInput.class") + exc.cause.cause.class == FactoryException + } + + def "An EnergyManagementSource should fail if a parent em is not provided"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "1-2-3-4-5", // does not exist + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException.class)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.message.contains("were assigned a parent EM that does not exist.") + } + + def "An EnergyManagementSource should fail if no parent ems are provided"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "1-2-3-4-5", // does not exist + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "1-2-3-4-5", // does not exist + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException.class)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.message.contains("were assigned a parent EM that does not exist.") + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index f16a275bb..7f5cb7124 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -15,7 +15,6 @@ import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification -// TODO test recursion class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { def "An EnergyManagementSource with csv input should return data from valid em input file as expected"() { From 5bbce85d1a7fdef315f08cbdd8ded1ed12302c99 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 11:26:57 +0100 Subject: [PATCH 071/228] Re-using input data that is used multiple times --- .../datamodel/io/source/GraphicSource.java | 20 ++++- .../datamodel/io/source/RawGridSource.java | 85 +++++++++++++------ .../io/source/SystemParticipantSource.java | 38 ++++++++- .../csv/CsvJointGridContainerSource.java | 22 ++++- 4 files changed, 129 insertions(+), 36 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 8bd81a3be..d2c387f27 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -54,13 +54,25 @@ public GraphicElements getGraphicElements() throws SourceException { // read all needed entities /// start with types and operators - Map operators = - typeSource.getOperators(); // fixme those only need to be fetched once, if done smartly + Map operators = typeSource.getOperators(); Map lineTypes = typeSource.getLineTypes(); Map nodes = rawGridSource.getNodes(operators); - Map lines = rawGridSource.getLines(nodes, lineTypes, operators); + Map lines = rawGridSource.getLines(operators, nodes, lineTypes); + + return getGraphicElements(nodes, lines); + } + /** + * Returns the graphic elements of the grid or throws a {@link SourceException}. + * + *

This constructor reuses some basic input data to improve performance. + * + * @param nodes All nodes of the grid in a map UUID -> node + * @param lines All lines of the grid in a map UUID -> line + */ + public GraphicElements getGraphicElements(Map nodes, Map lines) + throws SourceException { Try, SourceException> nodeGraphics = Try.of(() -> getNodeGraphicInput(nodes), SourceException.class); Try, SourceException> lineGraphics = @@ -105,7 +117,7 @@ public Set getLineGraphicInput() throws SourceException { Map operators = typeSource.getOperators(); return getLineGraphicInput( rawGridSource.getLines( - rawGridSource.getNodes(operators), typeSource.getLineTypes(), operators)); + operators, rawGridSource.getNodes(operators), typeSource.getLineTypes())); } public Set getLineGraphicInput(Map lines) diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index f427bd9f6..bbd0410af 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -30,7 +30,9 @@ import java.util.stream.Stream; /** - * Implementation that provides the capability to build entities that are hold by a {@link + * todo javadoc + * + *

Implementation that provides the capability to build entities that are hold by a {@link * RawGridElements} as well as the {@link RawGridElements} container as well from different data * sources e.g. .csv files or databases. * @@ -84,36 +86,69 @@ public RawGridSource(TypeSource typeSource, DataSource dataSource) { * e.g. in the sense that not duplicate UUIDs exist within all entities contained in the returning * instance. * - * @return either a valid, complete {@link RawGridElements} or throws a {@link SourceException} + * @return a valid, complete {@link RawGridElements} + * @throws SourceException on error */ public RawGridElements getGridData() throws SourceException { /* read all needed entities start with the types and operators */ Map operators = typeSource.getOperators(); Map lineTypes = typeSource.getLineTypes(); + + /* assets */ + Map nodes = getNodes(operators); + Map lines = getLines(operators, nodes, lineTypes); + + return getGridData(operators, nodes, lines); + } + + /** + * Should return either a consistent instance of {@link RawGridElements} or throw a {@link + * SourceException}. The decision to throw a {@link SourceException} instead of returning the + * incomplete {@link RawGridElements} instance is motivated by the fact, that a {@link + * RawGridElements} is a container instance that depends on several other entities. Without being + * complete, it is useless for further processing. + * + *

Hence, whenever at least one entity {@link RawGridElements} depends on cannot be provided, + * {@link SourceException} should be thrown. The thrown exception should provide enough + * information to debug the error and fix the persistent data that has been failed to processed. + * + *

Furthermore, it is expected, that the specific implementation of this method ensures not + * only the completeness of the resulting {@link RawGridElements} instance, but also its validity + * e.g. in the sense that not duplicate UUIDs exist within all entities contained in the returning + * instance. + * + *

This constructor reuses some basic input data to improve performance. + * + * @param operators All operators of the grid in a map UUID -> operator + * @param nodes All nodes of the grid in a map UUID -> node + * @param lines All lines of the grid in a map UUID -> line + * @return a valid, complete {@link RawGridElements} + * @throws SourceException on error + */ + public RawGridElements getGridData( + Map operators, Map nodes, Map lines) + throws SourceException { + /* read all needed entities start with the types and operators */ Map transformer2WTypeInputs = typeSource.getTransformer2WTypes(); Map transformer3WTypeInputs = typeSource.getTransformer3WTypes(); /* assets */ - Map nodes = getNodes(operators); - Try, SourceException> lineInputs = - Try.of(() -> getLines(nodes, lineTypes, operators), SourceException.class); Try, SourceException> transformer2WInputs = Try.of( - () -> get2WTransformers(nodes, transformer2WTypeInputs, operators), + () -> get2WTransformers(operators, nodes, transformer2WTypeInputs), SourceException.class); Try, SourceException> transformer3WInputs = Try.of( - () -> get3WTransformers(nodes, transformer3WTypeInputs, operators), + () -> get3WTransformers(operators, nodes, transformer3WTypeInputs), SourceException.class); Try, SourceException> switches = - Try.of(() -> getSwitches(nodes, operators), SourceException.class); + Try.of(() -> getSwitches(operators, nodes), SourceException.class); Try, SourceException> measurementUnits = - Try.of(() -> getMeasurementUnits(nodes, operators), SourceException.class); + Try.of(() -> getMeasurementUnits(operators, nodes), SourceException.class); List exceptions = Try.getExceptions( - List.of( - lineInputs, transformer2WInputs, transformer3WInputs, switches, measurementUnits)); + List.of(transformer2WInputs, transformer3WInputs, switches, measurementUnits)); if (!exceptions.isEmpty()) { throw new RawGridException( @@ -124,7 +159,7 @@ public RawGridElements getGridData() throws SourceException { // filtered and thrown before return new RawGridElements( new HashSet<>(nodes.values()), - new HashSet<>(lineInputs.getOrThrow().values()), + new HashSet<>(lines.values()), transformer2WInputs.getOrThrow(), transformer3WInputs.getOrThrow(), switches.getOrThrow(), @@ -180,7 +215,7 @@ public Map getNodes(Map operators) throws */ public Map getLines() throws SourceException { Map operators = typeSource.getOperators(); - return getLines(getNodes(operators), typeSource.getLineTypes(), operators); + return getLines(operators, getNodes(operators), typeSource.getLineTypes()); } /** @@ -204,9 +239,9 @@ public Map getLines() throws SourceException { * @return a set of object and uuid unique {@link LineInput} entities */ public Map getLines( + Map operators, Map nodes, - Map lineTypeInputs, - Map operators) + Map lineTypeInputs) throws SourceException { return unpackMap( buildTypedEntityData(LineInput.class, lineInputFactory, nodes, operators, lineTypeInputs), @@ -225,7 +260,7 @@ public Map getLines( */ public Set get2WTransformers() throws SourceException { Map operators = typeSource.getOperators(); - return get2WTransformers(getNodes(operators), typeSource.getTransformer2WTypes(), operators); + return get2WTransformers(operators, getNodes(operators), typeSource.getTransformer2WTypes()); } /** @@ -251,9 +286,9 @@ public Set get2WTransformers() throws SourceException { * @return a set of object and uuid unique {@link Transformer2WInput} entities */ public Set get2WTransformers( + Map operators, Map nodes, - Map transformer2WTypes, - Map operators) + Map transformer2WTypes) throws SourceException { return unpackSet( buildTypedEntityData( @@ -277,7 +312,7 @@ public Set get2WTransformers( */ public Set get3WTransformers() throws SourceException { Map operators = typeSource.getOperators(); - return get3WTransformers(getNodes(operators), typeSource.getTransformer3WTypes(), operators); + return get3WTransformers(operators, getNodes(operators), typeSource.getTransformer3WTypes()); } /** @@ -303,9 +338,9 @@ public Set get3WTransformers() throws SourceException { * @return a set of object and uuid unique {@link Transformer3WInput} entities */ public Set get3WTransformers( + Map operators, Map nodes, - Map transformer3WTypeInputs, - Map operators) + Map transformer3WTypeInputs) throws SourceException { return unpackSet( buildTransformer3WEntities( @@ -325,7 +360,7 @@ public Set get3WTransformers( */ public Set getSwitches() throws SourceException { Map operators = typeSource.getOperators(); - return getSwitches(getNodes(operators), operators); + return getSwitches(operators, getNodes(operators)); } /** @@ -348,7 +383,7 @@ public Set getSwitches() throws SourceException { * @return a set of object and uuid unique {@link SwitchInput} entities */ public Set getSwitches( - Map nodes, Map operators) throws SourceException { + Map operators, Map nodes) throws SourceException { return buildUntypedConnectorInputEntities( SwitchInput.class, switchInputFactory, nodes, operators); } @@ -365,7 +400,7 @@ public Set getSwitches( */ public Set getMeasurementUnits() throws SourceException { Map operators = typeSource.getOperators(); - return getMeasurementUnits(getNodes(operators), operators); + return getMeasurementUnits(operators, getNodes(operators)); } /** @@ -389,7 +424,7 @@ public Set getMeasurementUnits() throws SourceException { * @return a set of object and uuid unique {@link MeasurementUnitInput} entities */ public Set getMeasurementUnits( - Map nodes, Map operators) throws SourceException { + Map operators, Map nodes) throws SourceException { return unpackSet( buildNodeAssetEntityData(MeasurementUnitInput.class, operators, nodes) .map(measurementUnitInputFactory::get), diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 4a71536f0..7b99e604a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -90,13 +90,45 @@ public SystemParticipantSource( * validity e.g. in the sense that not duplicate UUIDs exist within all entities contained in the * returning instance. * - * @return either a valid, complete {@link SystemParticipants} or throws a {@link SourceException} + * @return a valid, complete {@link SystemParticipants} + * @throws SourceException on error */ public SystemParticipants getSystemParticipants() throws SourceException { + Map operators = typeSource.getOperators(); + Map nodes = rawGridSource.getNodes(operators); + + return getSystemParticipants(operators, nodes); + } + + /** + * Should return either a consistent instance of {@link SystemParticipants} or throw a {@link + * SourceException}. The decision to throw a {@link SourceException} instead of returning the + * incomplete {@link SystemParticipants} instance is motivated by the fact, that a {@link + * SystemParticipants} is a container instance that depends on several other entities. Without + * being complete, it is useless for further processing. + * + *

Hence, whenever at least one entity {@link SystemParticipants} depends on cannot be + * provided, {@link SourceException} should be thrown. The thrown exception should provide enough + * information to debug the error and fix the persistent data that has been failed to processed. + * + *

Furthermore, it is expected, that the specific implementation of this method ensures not + * only the completeness of the resulting {@link SystemParticipants} instance, but also its + * validity e.g. in the sense that not duplicate UUIDs exist within all entities contained in the + * returning instance. + * + *

This constructor reuses some basic input data to improve performance. + * + * @param operators All operators of the grid in a map UUID -> operator + * @param nodes All nodes of the grid in a map UUID -> node + * @return a valid, complete {@link SystemParticipants} + * @throws SourceException on error + */ + public SystemParticipants getSystemParticipants( + Map operators, Map nodes) throws SourceException { + // read all needed entities /// start with types and operators - Map operators = typeSource.getOperators(); Map bmTypes = typeSource.getBmTypes(); Map chpTypes = typeSource.getChpTypes(); Map evTypes = typeSource.getEvTypes(); @@ -110,8 +142,6 @@ public SystemParticipants getSystemParticipants() throws SourceException { Map thermalStorages = thermalSource.getThermalStorages(operators, thermalBuses); - /// go on with the nodes - Map nodes = rawGridSource.getNodes(operators); Try, SourceException> fixedFeedInInputs = Try.of(() -> getFixedFeedIns(operators, nodes, emUnits), SourceException.class); Try, SourceException> pvInputs = diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index f2e113816..1ea0f0afd 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -12,10 +12,16 @@ import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.*; +import edu.ie3.datamodel.models.input.NodeInput; +import edu.ie3.datamodel.models.input.OperatorInput; +import edu.ie3.datamodel.models.input.connector.LineInput; +import edu.ie3.datamodel.models.input.connector.type.LineTypeInput; import edu.ie3.datamodel.models.input.container.*; import edu.ie3.datamodel.utils.Try; import java.nio.file.Path; import java.util.List; +import java.util.Map; +import java.util.UUID; /** Convenience class for cases where all used data comes from CSV sources */ public class CsvJointGridContainerSource { @@ -50,13 +56,23 @@ public static JointGridContainer read( new SystemParticipantSource(typeSource, thermalSource, rawGridSource, emSource, dataSource); GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); + /* Loading basic inputs that are used multiple times */ + Map operators = typeSource.getOperators(); + + Map lineTypes = typeSource.getLineTypes(); + + Map nodes = rawGridSource.getNodes(operators); + Map lines = rawGridSource.getLines(operators, nodes, lineTypes); + /* Loading models */ Try rawGridElements = - Try.of(rawGridSource::getGridData, SourceException.class); + Try.of(() -> rawGridSource.getGridData(operators, nodes, lines), SourceException.class); Try systemParticipants = - Try.of(systemParticipantSource::getSystemParticipants, SourceException.class); + Try.of( + () -> systemParticipantSource.getSystemParticipants(operators, nodes), + SourceException.class); Try graphicElements = - Try.of(graphicSource::getGraphicElements, SourceException.class); + Try.of(() -> graphicSource.getGraphicElements(nodes, lines), SourceException.class); List exceptions = Try.getExceptions(List.of(rawGridElements, systemParticipants, graphicElements)); From 8c3d29196a98ba562310cc978589d6270328c4e4 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 12:01:18 +0100 Subject: [PATCH 072/228] Fixing codacy issues --- .../io/source/EntitySourceTest.groovy | 22 +- .../io/source/csv/CsvRawGridSourceTest.groovy | 2 +- .../csv/CsvSystemParticipantSourceTest.groovy | 4 +- .../io/source/csv/CsvThermalSourceTest.groovy | 94 ++++---- .../io/source/csv/CsvTypeSourceTest.groovy | 212 +++++++++--------- 5 files changed, 175 insertions(+), 159 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index bebec151a..076bd98a2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -43,7 +43,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : GridTestData.nodeA.uuid.toString(), ] - def entityData = new AssetInputEntityData(parameter, AssetInput.class) + def entityData = new AssetInputEntityData(parameter, AssetInput) Map entityMap = map([GridTestData.nodeA]) @@ -59,7 +59,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : GridTestData.nodeB.uuid.toString(), ] - def entityData = new AssetInputEntityData(parameter, AssetInput.class) + def entityData = new AssetInputEntityData(parameter, AssetInput) Map entityMap = map([GridTestData.nodeA]) @@ -77,7 +77,7 @@ class EntitySourceTest extends Specification { "t_bus" : sptd.thermalBus.uuid.toString(), "t_storage" : sptd.thermalStorage.uuid.toString() ] - def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput.class, sptd.participantNode, null, sptd.chpTypeInput) + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, null, sptd.chpTypeInput) Map busMap = map([sptd.thermalBus]) Map storageMap = map([sptd.thermalStorage]) @@ -95,7 +95,7 @@ class EntitySourceTest extends Specification { "t_bus" : sptd.thermalBus.uuid.toString(), "t_storage" : "8851813b-3a7d-4fee-874b-4df9d724e4b4" ] - def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput.class, sptd.participantNode, null, sptd.chpTypeInput) + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, null, sptd.chpTypeInput) Map busMap = map([sptd.thermalBus]) Map storageMap = map([sptd.thermalStorage]) @@ -113,7 +113,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : sptd.emInput.uuid.toString(), ] - def entityData = new EntityData(parameter, AssetInput.class) + def entityData = new EntityData(parameter, AssetInput) Map entityMap = map([sptd.emInput]) @@ -129,7 +129,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : sptd.parentEm.uuid.toString(), ] - def entityData = new EntityData(parameter, AssetInput.class) + def entityData = new EntityData(parameter, AssetInput) Map entityMap = map([sptd.emInput]) @@ -146,7 +146,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : "not-a-uuid", ] - def entityData = new EntityData(parameter, AssetInput.class) + def entityData = new EntityData(parameter, AssetInput) Map entityMap = map([sptd.emInput]) @@ -163,7 +163,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : GridTestData.nodeA.uuid.toString(), ] - def entityData = new AssetInputEntityData(parameter, AssetInput.class) + def entityData = new AssetInputEntityData(parameter, AssetInput) Map entityMap = map([GridTestData.nodeA]) @@ -179,7 +179,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : "", ] - def entityData = new AssetInputEntityData(parameter, AssetInput.class) + def entityData = new AssetInputEntityData(parameter, AssetInput) Map entityMap = map([GridTestData.nodeA]) @@ -195,7 +195,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : "4ca90220-74c2-4369-9afa-a18bf068840e", ] - def entityData = new AssetInputEntityData(parameter, AssetInput.class) + def entityData = new AssetInputEntityData(parameter, AssetInput) Map entityMap = map([GridTestData.nodeA]) @@ -213,7 +213,7 @@ class EntitySourceTest extends Specification { Map parameter = [ "linked_entity" : "not-a-uuid", ] - def entityData = new AssetInputEntityData(parameter, AssetInput.class) + def entityData = new AssetInputEntityData(parameter, AssetInput) Map entityMap = map([GridTestData.nodeA]) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy index cf03c2db7..da933fc65 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy @@ -435,7 +435,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "all lines are there" actualSet.size() == expectedSet.size() - actualSet.each {entry -> + actualSet.each { entry -> def actual = entry.value def expected = expectedSet.find {it.uuid == actual.uuid} assert expected != null diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index e18f9aa46..8d1bd118d 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -59,8 +59,8 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat ]) { // partly fake the return method of the csv raw grid source to always return empty node sets // -> elements to build NodeGraphicInputs are missing - getNodes() >> new HashMap() - getNodes(_) >> new HashMap() + getNodes() >> [:] + getNodes(_) >> [:] } as RawGridSource def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy index 0098dbf53..7351cf1a2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvThermalSourceTest.groovy @@ -58,16 +58,18 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingCylindricalStorageWoOperator.size() == 1 - resultingCylindricalStorageWoOperator.first().uuid == sptd.thermalStorage.uuid - resultingCylindricalStorageWoOperator.first().id == sptd.thermalStorage.id - resultingCylindricalStorageWoOperator.first().operator == sptd.thermalStorage.operator - resultingCylindricalStorageWoOperator.first().operationTime == sptd.thermalStorage.operationTime - resultingCylindricalStorageWoOperator.first().thermalBus == sptd.thermalStorage.thermalBus - resultingCylindricalStorageWoOperator.first().storageVolumeLvl == sptd.storageVolumeLvl - resultingCylindricalStorageWoOperator.first().storageVolumeLvlMin == sptd.storageVolumeLvlMin - resultingCylindricalStorageWoOperator.first().inletTemp == sptd.inletTemp - resultingCylindricalStorageWoOperator.first().returnTemp == sptd.returnTemp - resultingCylindricalStorageWoOperator.first().c == sptd.c + with(resultingCylindricalStorageWoOperator.first()) { + uuid == sptd.thermalStorage.uuid + id == sptd.thermalStorage.id + operator == sptd.thermalStorage.operator + operationTime == sptd.thermalStorage.operationTime + thermalBus == sptd.thermalStorage.thermalBus + storageVolumeLvl == sptd.storageVolumeLvl + storageVolumeLvlMin == sptd.storageVolumeLvlMin + inletTemp == sptd.inletTemp + returnTemp == sptd.returnTemp + c == sptd.c + } //test method when operators and thermal buses are provided as constructor parameters when: @@ -75,16 +77,18 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingCylindricalStorage.size() == 1 - resultingCylindricalStorage.first().uuid == sptd.thermalStorage.uuid - resultingCylindricalStorage.first().id == sptd.thermalStorage.id - resultingCylindricalStorage.first().operator == sptd.thermalStorage.operator - resultingCylindricalStorage.first().operationTime == sptd.thermalStorage.operationTime - resultingCylindricalStorage.first().thermalBus == sptd.thermalStorage.thermalBus - resultingCylindricalStorage.first().storageVolumeLvl == sptd.storageVolumeLvl - resultingCylindricalStorage.first().storageVolumeLvlMin == sptd.storageVolumeLvlMin - resultingCylindricalStorage.first().inletTemp == sptd.inletTemp - resultingCylindricalStorage.first().returnTemp == sptd.returnTemp - resultingCylindricalStorage.first().c == sptd.c + with(resultingCylindricalStorage.first()) { + uuid == sptd.thermalStorage.uuid + id == sptd.thermalStorage.id + operator == sptd.thermalStorage.operator + operationTime == sptd.thermalStorage.operationTime + thermalBus == sptd.thermalStorage.thermalBus + storageVolumeLvl == sptd.storageVolumeLvl + storageVolumeLvlMin == sptd.storageVolumeLvlMin + inletTemp == sptd.inletTemp + returnTemp == sptd.returnTemp + c == sptd.c + } } def "A CsvThermalSource should return a ThermalHouseInput from valid and invalid input data as expected"() { @@ -100,18 +104,19 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingThermalHouseWoOperator.size() == 1 - def thermalHouseWoOp = resultingThermalHouseWoOperator.values().first() - thermalHouseWoOp.uuid == ThermalUnitInputTestData.thermalHouseInput.uuid - thermalHouseWoOp.id == ThermalUnitInputTestData.thermalHouseInput.id - thermalHouseWoOp.operator == ThermalUnitInputTestData.thermalHouseInput.operator - thermalHouseWoOp.operationTime.isLimited() - thermalHouseWoOp.operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime - thermalHouseWoOp.thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus - thermalHouseWoOp.ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses - thermalHouseWoOp.ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa - thermalHouseWoOp.targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature - thermalHouseWoOp.upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit - thermalHouseWoOp.lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit + with(resultingThermalHouseWoOperator.values().first()) { + uuid == ThermalUnitInputTestData.thermalHouseInput.uuid + id == ThermalUnitInputTestData.thermalHouseInput.id + operator == ThermalUnitInputTestData.thermalHouseInput.operator + operationTime.isLimited() + operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime + thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus + ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses + ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa + targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature + upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit + lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit + } //test method when operators and thermal buses are provided as constructor parameters when: @@ -119,17 +124,18 @@ class CsvThermalSourceTest extends Specification implements CsvTestDataMeta { then: resultingThermalHouse.size() == 1 - def thermalHouse = resultingThermalHouse.values().first() - thermalHouse .uuid == ThermalUnitInputTestData.thermalHouseInput.uuid - thermalHouse.id == ThermalUnitInputTestData.thermalHouseInput.id - thermalHouse.operator == ThermalUnitInputTestData.thermalHouseInput.operator - thermalHouse.operationTime.isLimited() - thermalHouse.operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime - thermalHouse.thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus - thermalHouse.ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses - thermalHouse.ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa - thermalHouse.targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature - thermalHouse.upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit - thermalHouse.lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit + with(resultingThermalHouse.values().first()) { + uuid == ThermalUnitInputTestData.thermalHouseInput.uuid + id == ThermalUnitInputTestData.thermalHouseInput.id + operator == ThermalUnitInputTestData.thermalHouseInput.operator + operationTime.isLimited() + operationTime == ThermalUnitInputTestData.thermalHouseInput.operationTime + thermalBus == ThermalUnitInputTestData.thermalHouseInput.thermalBus + ethLosses == ThermalUnitInputTestData.thermalHouseInput.ethLosses + ethCapa == ThermalUnitInputTestData.thermalHouseInput.ethCapa + targetTemperature == ThermalUnitInputTestData.thermalHouseInput.targetTemperature + upperTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.upperTemperatureLimit + lowerTemperatureLimit == ThermalUnitInputTestData.thermalHouseInput.lowerTemperatureLimit + } } } \ No newline at end of file diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy index 922166edd..44e2716ce 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTypeSourceTest.groovy @@ -20,21 +20,22 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { expect: def transformer2WTypes = typeSource.transformer2WTypes - def transformerToBeFound = transformer2WTypes.get(gtd.transformerTypeBtoD.uuid) - transformerToBeFound.id == gtd.transformerTypeBtoD.id - transformerToBeFound.rSc == gtd.transformerTypeBtoD.rSc - transformerToBeFound.xSc == gtd.transformerTypeBtoD.xSc - transformerToBeFound.sRated == gtd.transformerTypeBtoD.sRated - transformerToBeFound.vRatedA == gtd.transformerTypeBtoD.vRatedA - transformerToBeFound.vRatedB == gtd.transformerTypeBtoD.vRatedB - transformerToBeFound.gM == gtd.transformerTypeBtoD.gM - transformerToBeFound.bM == gtd.transformerTypeBtoD.bM - transformerToBeFound.dV == gtd.transformerTypeBtoD.dV - transformerToBeFound.dPhi == gtd.transformerTypeBtoD.dPhi - transformerToBeFound.tapSide == gtd.transformerTypeBtoD.tapSide - transformerToBeFound.tapNeutr == gtd.transformerTypeBtoD.tapNeutr - transformerToBeFound.tapMin == gtd.transformerTypeBtoD.tapMin - transformerToBeFound.tapMax == gtd.transformerTypeBtoD.tapMax + with(transformer2WTypes.get(gtd.transformerTypeBtoD.uuid)) { + id == gtd.transformerTypeBtoD.id + rSc == gtd.transformerTypeBtoD.rSc + xSc == gtd.transformerTypeBtoD.xSc + sRated == gtd.transformerTypeBtoD.sRated + vRatedA == gtd.transformerTypeBtoD.vRatedA + vRatedB == gtd.transformerTypeBtoD.vRatedB + gM == gtd.transformerTypeBtoD.gM + bM == gtd.transformerTypeBtoD.bM + dV == gtd.transformerTypeBtoD.dV + dPhi == gtd.transformerTypeBtoD.dPhi + tapSide == gtd.transformerTypeBtoD.tapSide + tapNeutr == gtd.transformerTypeBtoD.tapNeutr + tapMin == gtd.transformerTypeBtoD.tapMin + tapMax == gtd.transformerTypeBtoD.tapMax + } } def "A CsvTypeSource should read and handle valid operator file as expected"() { @@ -56,14 +57,15 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def lineType = typeSource.lineTypes.get(gtd.lineTypeInputCtoD.uuid) - lineType.id == gtd.lineTypeInputCtoD.id - lineType.b == gtd.lineTypeInputCtoD.b - lineType.g == gtd.lineTypeInputCtoD.g - lineType.r == gtd.lineTypeInputCtoD.r - lineType.x == gtd.lineTypeInputCtoD.x - lineType.iMax == gtd.lineTypeInputCtoD.iMax - lineType.vRated == gtd.lineTypeInputCtoD.vRated + with(typeSource.lineTypes.get(gtd.lineTypeInputCtoD.uuid)) { + id == gtd.lineTypeInputCtoD.id + b == gtd.lineTypeInputCtoD.b + g == gtd.lineTypeInputCtoD.g + r == gtd.lineTypeInputCtoD.r + x == gtd.lineTypeInputCtoD.x + iMax == gtd.lineTypeInputCtoD.iMax + vRated == gtd.lineTypeInputCtoD.vRated + } } def "A CsvTypeSource should read and handle valid 3W Transformer type file as expected"() { @@ -71,27 +73,28 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def transformer3WType = typeSource.transformer3WTypes.get(gtd.transformerTypeAtoBtoC.uuid) - transformer3WType.id == gtd.transformerTypeAtoBtoC.id - transformer3WType.sRatedA == gtd.transformerTypeAtoBtoC.sRatedA - transformer3WType.sRatedB == gtd.transformerTypeAtoBtoC.sRatedB - transformer3WType.sRatedC == gtd.transformerTypeAtoBtoC.sRatedC - transformer3WType.vRatedA == gtd.transformerTypeAtoBtoC.vRatedA - transformer3WType.vRatedB == gtd.transformerTypeAtoBtoC.vRatedB - transformer3WType.vRatedC == gtd.transformerTypeAtoBtoC.vRatedC - transformer3WType.rScA == gtd.transformerTypeAtoBtoC.rScA - transformer3WType.rScB == gtd.transformerTypeAtoBtoC.rScB - transformer3WType.rScC == gtd.transformerTypeAtoBtoC.rScC - transformer3WType.xScA == gtd.transformerTypeAtoBtoC.xScA - transformer3WType.xScB == gtd.transformerTypeAtoBtoC.xScB - transformer3WType.xScC == gtd.transformerTypeAtoBtoC.xScC - transformer3WType.gM == gtd.transformerTypeAtoBtoC.gM - transformer3WType.bM == gtd.transformerTypeAtoBtoC.bM - transformer3WType.dV == gtd.transformerTypeAtoBtoC.dV - transformer3WType.dPhi == gtd.transformerTypeAtoBtoC.dPhi - transformer3WType.tapNeutr == gtd.transformerTypeAtoBtoC.tapNeutr - transformer3WType.tapMin == gtd.transformerTypeAtoBtoC.tapMin - transformer3WType.tapMax == gtd.transformerTypeAtoBtoC.tapMax + with(typeSource.transformer3WTypes.get(gtd.transformerTypeAtoBtoC.uuid)) { + id == gtd.transformerTypeAtoBtoC.id + sRatedA == gtd.transformerTypeAtoBtoC.sRatedA + sRatedB == gtd.transformerTypeAtoBtoC.sRatedB + sRatedC == gtd.transformerTypeAtoBtoC.sRatedC + vRatedA == gtd.transformerTypeAtoBtoC.vRatedA + vRatedB == gtd.transformerTypeAtoBtoC.vRatedB + vRatedC == gtd.transformerTypeAtoBtoC.vRatedC + rScA == gtd.transformerTypeAtoBtoC.rScA + rScB == gtd.transformerTypeAtoBtoC.rScB + rScC == gtd.transformerTypeAtoBtoC.rScC + xScA == gtd.transformerTypeAtoBtoC.xScA + xScB == gtd.transformerTypeAtoBtoC.xScB + xScC == gtd.transformerTypeAtoBtoC.xScC + gM == gtd.transformerTypeAtoBtoC.gM + bM == gtd.transformerTypeAtoBtoC.bM + dV == gtd.transformerTypeAtoBtoC.dV + dPhi == gtd.transformerTypeAtoBtoC.dPhi + tapNeutr == gtd.transformerTypeAtoBtoC.tapNeutr + tapMin == gtd.transformerTypeAtoBtoC.tapMin + tapMax == gtd.transformerTypeAtoBtoC.tapMax + } } def "A CsvTypeSource should read and handle valid bm type file as expected"() { @@ -99,13 +102,14 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def bmType = typeSource.bmTypes.get(sptd.bmTypeInput.uuid) - bmType.id == sptd.bmTypeInput.id - bmType.capex == sptd.bmTypeInput.capex - bmType.opex == sptd.bmTypeInput.opex - bmType.cosPhiRated == sptd.bmTypeInput.cosPhiRated - bmType.activePowerGradient == sptd.bmTypeInput.activePowerGradient - bmType.etaConv == sptd.bmTypeInput.etaConv + with(typeSource.bmTypes.get(sptd.bmTypeInput.uuid)) { + id == sptd.bmTypeInput.id + capex == sptd.bmTypeInput.capex + opex == sptd.bmTypeInput.opex + cosPhiRated == sptd.bmTypeInput.cosPhiRated + activePowerGradient == sptd.bmTypeInput.activePowerGradient + etaConv == sptd.bmTypeInput.etaConv + } } def "A CsvTypeSource should read and handle valid chp type file as expected"() { @@ -113,15 +117,16 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def chpType = typeSource.chpTypes.get(sptd.chpTypeInput.uuid) - chpType.id == sptd.chpTypeInput.id - chpType.capex == sptd.chpTypeInput.capex - chpType.opex == sptd.chpTypeInput.opex - chpType.etaEl == sptd.chpTypeInput.etaEl - chpType.etaThermal == sptd.chpTypeInput.etaThermal - chpType.sRated == sptd.chpTypeInput.sRated - chpType.pThermal == sptd.chpTypeInput.pThermal - chpType.pOwn == sptd.chpTypeInput.pOwn + with(typeSource.chpTypes.get(sptd.chpTypeInput.uuid)) { + id == sptd.chpTypeInput.id + capex == sptd.chpTypeInput.capex + opex == sptd.chpTypeInput.opex + etaEl == sptd.chpTypeInput.etaEl + etaThermal == sptd.chpTypeInput.etaThermal + sRated == sptd.chpTypeInput.sRated + pThermal == sptd.chpTypeInput.pThermal + pOwn == sptd.chpTypeInput.pOwn + } } def "A CsvTypeSource should read and handle valid hp type file as expected"() { @@ -129,13 +134,14 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def hpType = typeSource.hpTypes.get(sptd.hpTypeInput.uuid) - hpType.id == sptd.hpTypeInput.id - hpType.capex == sptd.hpTypeInput.capex - hpType.opex == sptd.hpTypeInput.opex - hpType.sRated == sptd.hpTypeInput.sRated - hpType.cosPhiRated == sptd.hpTypeInput.cosPhiRated - hpType.pThermal == sptd.hpTypeInput.pThermal + with(typeSource.hpTypes.get(sptd.hpTypeInput.uuid)) { + id == sptd.hpTypeInput.id + capex == sptd.hpTypeInput.capex + opex == sptd.hpTypeInput.opex + sRated == sptd.hpTypeInput.sRated + cosPhiRated == sptd.hpTypeInput.cosPhiRated + pThermal == sptd.hpTypeInput.pThermal + } } def "A CsvTypeSource should read and handle valid storage type file as expected"() { @@ -143,19 +149,20 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def storageType = typeSource.storageTypes.get(sptd.storageTypeInput.uuid) - storageType.id == sptd.storageTypeInput.id - storageType.capex == sptd.storageTypeInput.capex - storageType.opex == sptd.storageTypeInput.opex - storageType.eStorage == sptd.storageTypeInput.eStorage - storageType.sRated == sptd.storageTypeInput.sRated - storageType.cosPhiRated == sptd.storageTypeInput.cosPhiRated - storageType.pMax == sptd.storageTypeInput.pMax - storageType.activePowerGradient == sptd.storageTypeInput.activePowerGradient - storageType.eta == sptd.storageTypeInput.eta - storageType.dod == sptd.storageTypeInput.dod - storageType.lifeTime == sptd.storageTypeInput.lifeTime - storageType.lifeCycle == sptd.storageTypeInput.lifeCycle + with(typeSource.storageTypes.get(sptd.storageTypeInput.uuid)) { + id == sptd.storageTypeInput.id + capex == sptd.storageTypeInput.capex + opex == sptd.storageTypeInput.opex + eStorage == sptd.storageTypeInput.eStorage + sRated == sptd.storageTypeInput.sRated + cosPhiRated == sptd.storageTypeInput.cosPhiRated + pMax == sptd.storageTypeInput.pMax + activePowerGradient == sptd.storageTypeInput.activePowerGradient + eta == sptd.storageTypeInput.eta + dod == sptd.storageTypeInput.dod + lifeTime == sptd.storageTypeInput.lifeTime + lifeCycle == sptd.storageTypeInput.lifeCycle + } } def "A CsvTypeSource should read and handle valid wec type file as expected"() { @@ -163,19 +170,21 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def wecType = typeSource.wecTypes.get(sptd.wecType.uuid) - wecType.id == sptd.wecType.id - wecType.capex == sptd.wecType.capex - wecType.opex == sptd.wecType.opex - wecType.cosPhiRated == sptd.wecType.cosPhiRated - wecType.etaConv == sptd.wecType.etaConv - wecType.sRated == sptd.wecType.sRated - wecType.rotorArea == sptd.wecType.rotorArea - wecType.hubHeight == sptd.wecType.hubHeight - wecType.cpCharacteristic == sptd.wecType.cpCharacteristic - //check for the individual points - if (wecType.cpCharacteristic.points.iterator().hasNext()) - wecType.cpCharacteristic.points.iterator().next() == sptd.wecType.cpCharacteristic.points.iterator().next() + with(typeSource.wecTypes.get(sptd.wecType.uuid)) { + id == sptd.wecType.id + capex == sptd.wecType.capex + opex == sptd.wecType.opex + cosPhiRated == sptd.wecType.cosPhiRated + etaConv == sptd.wecType.etaConv + sRated == sptd.wecType.sRated + rotorArea == sptd.wecType.rotorArea + hubHeight == sptd.wecType.hubHeight + cpCharacteristic == sptd.wecType.cpCharacteristic + //check for the individual points + if (cpCharacteristic.points.iterator().hasNext()) { + assert cpCharacteristic.points.iterator().next() == sptd.wecType.cpCharacteristic.points.iterator().next() + } + } } def "A CsvTypeSource should read and handle valid ev type file as expected"() { @@ -183,13 +192,14 @@ class CsvTypeSourceTest extends Specification implements CsvTestDataMeta { def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, new FileNamingStrategy())) expect: - def evType = typeSource.evTypes.get(sptd.evTypeInput.uuid) - evType.id == sptd.evTypeInput.id - evType.capex == sptd.evTypeInput.capex - evType.opex == sptd.evTypeInput.opex - evType.eStorage == sptd.evTypeInput.eStorage - evType.eCons == sptd.evTypeInput.eCons - evType.sRated == sptd.evTypeInput.sRated - evType.cosPhiRated == sptd.evTypeInput.cosPhiRated + with(typeSource.evTypes.get(sptd.evTypeInput.uuid)) { + id == sptd.evTypeInput.id + capex == sptd.evTypeInput.capex + opex == sptd.evTypeInput.opex + eStorage == sptd.evTypeInput.eStorage + eCons == sptd.evTypeInput.eCons + sRated == sptd.evTypeInput.sRated + cosPhiRated == sptd.evTypeInput.cosPhiRated + } } } From 84cae6bc1496db1f486078e231de5e61736deaa6 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 13:25:20 +0100 Subject: [PATCH 073/228] Adapting JavaDoc to changes --- .../io/source/EnergyManagementSource.java | 15 +-- .../ie3/datamodel/io/source/EntitySource.java | 46 ++++--- .../datamodel/io/source/GraphicSource.java | 12 +- .../datamodel/io/source/RawGridSource.java | 107 ++++++++------- .../io/source/SystemParticipantSource.java | 115 +++++++++------- .../datamodel/io/source/ThermalSource.java | 76 +++++------ .../ie3/datamodel/io/source/TypeSource.java | 123 ++++++++++-------- .../source/EnergyManagementSourceTest.groovy | 16 +-- 8 files changed, 265 insertions(+), 245 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 2b8a2f4b6..b64c10edc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -36,9 +36,9 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. + * {@link EmInput#equals(Object)} is NOT restricted on the UUID of {@link EmInput}. * - * @return a map of uuid to {@link EmInput} entities + * @return a map of UUID to {@link EmInput} entities */ public Map getEmUnits() throws SourceException { Map operators = typeSource.getOperators(); @@ -48,7 +48,7 @@ public Map getEmUnits() throws SourceException { /** * This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. + * {@link EmInput#equals(Object)} is NOT restricted on the UUID of {@link EmInput}. * *

In contrast to {@link #getEmUnits()} this method provides the ability to pass in an already * existing set of {@link OperatorInput} entities, the {@link EmInput} instances depend on. Doing @@ -58,9 +58,8 @@ public Map getEmUnits() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a map of uuid to {@link OperatorInput} that should be used for the returning - * instances - * @return a map of uuid to {@link EmInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @return a map of UUID to {@link EmInput} entities */ public Map getEmUnits(Map operators) throws SourceException { return createEmInputs(buildAssetInputEntityData(EmInput.class, operators)); @@ -72,9 +71,9 @@ public Map getEmUnits(Map operators) throws * in {@link SystemParticipantSource}. Instead, we use a recursive approach, starting with EMs at * root level (which are not EM-controlled themselves). * - * @param assetEntityDataStream the data stream of {@link AssetInputEntityData} * {@link Try} + * @param assetEntityDataStream the data stream of {@link AssetInputEntityData} {@link Try} * objects - * @return a map of uuid to {@link EmInput} entities + * @return a map of UUID to {@link EmInput} entities */ private static Map createEmInputs( Stream> assetEntityDataStream) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 7eeebda49..08488121d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -48,7 +48,8 @@ protected EntitySource(DataSource dataSource) { * chosen by taking into account the UUID found by retrieving the field with given fieldName from * entityData. * - * @param entityData The entity data of the entity that provides a link to another entity via UUID + * @param entityData The entity data to be enhanced, which also provides a link to another entity + * via UUID * @param fieldName The field name of the field that provides the UUID of the linked entity * @param linkedEntities A map of UUID to entities, of which one should be linked to given entity * data @@ -81,10 +82,10 @@ Try enrichEntityData( /** * Enhances given entity data with two entities from the given entity maps. The linked entities * are chosen by taking into account the UUIDs found by retrieving the fields with given - * fieldNameA and fieldNameB from entityData. + * fieldName1 and fieldName2 from entityData. * - * @param entityData The entity data of the entity that provides links to two other entities via - * UUID + * @param entityData The entity data to be enhanced, which also provides links to two other + * entities via UUID * @param fieldName1 The field name of the field that provides the UUID of the first linked entity * @param linkedEntities1 The first map of UUID to entities, of which one should be linked to * given entity data @@ -128,15 +129,11 @@ Try enrichEntityData( } /** - * todo javadoc - * - *

Checks if the requested type of asset can be found in the provided collection of types based - * on the provided fields to values mapping. The provided fields to values mapping needs to have - * one and only one field with key {@link #TYPE} and a corresponding UUID value. If the type can - * be found in the provided collection based on the UUID it is returned wrapped in a {@link - * Success}. Otherwise, a {@link Failure} is returned and a warning is logged. + * Checks if the linked entity can be found in the provided map of entities. The linked entities + * are chosen by taking into account the UUIDs found by retrieving the fields with given + * fieldName1 and fieldName2 from entityData. * - * @param entityData The entity data of the entity that provides a link to another entity + * @param entityData The entity data of the entity that provides a link to another entity via UUID * @param fieldName The field name of the field that provides the UUID of the linked entity * @param linkedEntities A map of UUID to entities, of which one should be linked to given entity * data @@ -174,17 +171,18 @@ protected static Try getLinkedEntit /** * Enhances given entity data with an entity from the given entity map or the default value. The - * linked entity is chosen by taking into account the UUID found by retrieving the field with - * given fieldName from entityData. If no entity is linked, the default value is used. + * linked entity is possibly chosen by taking into account the UUID found by retrieving the field + * with given fieldName from entityData. If no entity is linked, the default value is used. * - * @param entityData The entity data of the entity that provides a link to another entity via UUID - * @param fieldName The field name of the field that provides the UUID of the linked entity + * @param entityData The entity data to be enhanced, which also might provide a link to another + * entity via UUID + * @param fieldName The field name of the field that might provide the UUID of the linked entity * @param linkedEntities A map of UUID to entities, of which one should be linked to given entity * data * @param defaultEntity The default linked entity to use, if no actual linked entity could be * found * @param createEntityData The function that creates the resulting entity data given entityData - * and the linked entity + * and the linked entity (either retrieved from the map or the standard entity) * @param Type of input entity data * @param Type of the linked entity * @param Type of resulting entity data that combines the given entityData and linked entity @@ -264,13 +262,13 @@ private static Try getEntity(UUID uuid, Map ent // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /** - * Returns a stream of {@link Try} entities that can be build by using {@link + * Returns a stream of {@link Try} entities that can be built by using {@link * NodeAssetInputEntityData} and their corresponding factory. * * @param entityClass the entity class that should be build - * @param nodes a collection of {@link NodeInput} entities that should be used to build the + * @param nodes a map of UUID to {@link NodeInput} entities that should be used to build the * entities - * @param operators a collection of {@link OperatorInput} entities should be used to build the + * @param operators a map of UUID to {@link OperatorInput} entities should be used to build the * entities * @return stream of tries of the entities that has been built by the factory */ @@ -288,7 +286,7 @@ protected Stream> buildNodeAssetE * * @param assetInputEntityDataStream a stream consisting of {@link AssetInputEntityData} that is * enriched with {@link NodeInput} data - * @param nodes a collection of {@link NodeInput} entities that should be used to build the data + * @param nodes a map of UUID to {@link NodeInput} entities that should be used to build the data * @return stream of the entity data wrapped in a {@link Try} */ protected static Stream> @@ -311,7 +309,7 @@ protected Stream> buildNodeAssetE * consumes this data. * * @param entityClass the entity class that should be build - * @param operators a collection of {@link OperatorInput} entities that should be used to build + * @param operators a map of UUID to {@link OperatorInput} entities that should be used to build * the data * @return stream of the entity data wrapped in a {@link Try} */ @@ -327,8 +325,8 @@ protected Stream> buildAssetInputEnti * * @param entityDataStream a stream consisting of {@link EntityData} that is enriched with {@link * OperatorInput} data - * @param operators a collection of {@link OperatorInput} entities that should be used to build - * the data + * @param operators map of UUID to {@link OperatorInput} entities that should be used to build the + * data * @return stream of the entity data wrapped in a {@link Try} */ protected static Stream> assetInputEntityDataStream( diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index d2c387f27..d171ef979 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -66,10 +66,12 @@ public GraphicElements getGraphicElements() throws SourceException { /** * Returns the graphic elements of the grid or throws a {@link SourceException}. * - *

This constructor reuses some basic input data to improve performance. + *

In contrast to {@link #getGraphicElements()}, this method provides the ability to pass in + * already existing input objects that this method depends on. Doing so, already loaded nodes and + * lines can be recycled to improve performance and prevent unnecessary loading operations. * - * @param nodes All nodes of the grid in a map UUID -> node - * @param lines All lines of the grid in a map UUID -> line + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param lines a map of UUID to object- and uuid-unique {@link LineInput} entities */ public GraphicElements getGraphicElements(Map nodes, Map lines) throws SourceException { @@ -142,7 +144,7 @@ public Set getLineGraphicInput(Map lines) * NodeGraphicInputEntityData} instance, a {@link Failure} is included in the stream and warning * is logged. * - * @param nodes a set of nodes with unique uuids + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities * @return a stream of tries of {@link NodeGraphicInput} entities */ protected Stream> buildNodeGraphicEntityData( @@ -168,7 +170,7 @@ protected Stream> buildNodeGrap * LineGraphicInputEntityData} instance, a {@link Failure} is included in the stream and warning * is logged. * - * @param lines a set of lines with unique uuids + * @param lines a map of UUID to object- and uuid-unique {@link LineInput} entities * @return a stream of tries of {@link LineGraphicInput} entities */ protected Stream> buildLineGraphicEntityData( diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index bbd0410af..8d6264bf5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -30,11 +30,9 @@ import java.util.stream.Stream; /** - * todo javadoc - * - *

Implementation that provides the capability to build entities that are hold by a {@link - * RawGridElements} as well as the {@link RawGridElements} container as well from different data - * sources e.g. .csv files or databases. + * Implementation that provides the capability to build entities held by {@link RawGridElements} as + * well as the {@link RawGridElements} container from different data sources e.g. .csv files or + * databases. * * @version 0.1 * @since 08.04.20 @@ -117,11 +115,13 @@ public RawGridElements getGridData() throws SourceException { * e.g. in the sense that not duplicate UUIDs exist within all entities contained in the returning * instance. * - *

This constructor reuses some basic input data to improve performance. + *

In contrast to {@link #getGridData()}, this method provides the ability to pass in already + * existing input objects that this method depends on. Doing so, already loaded operators, nodes + * and lines can be recycled to improve performance and prevent unnecessary loading operations. * - * @param operators All operators of the grid in a map UUID -> operator - * @param nodes All nodes of the grid in a map UUID -> node - * @param lines All lines of the grid in a map UUID -> line + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param lines a map of UUID to object- and uuid-unique {@link LineInput} entities * @return a valid, complete {@link RawGridElements} * @throws SourceException on error */ @@ -168,23 +168,24 @@ public RawGridElements getGridData( } /** - * Returns a unique set of {@link NodeInput} instances. + * Returns a unique set of {@link NodeInput} instances within a map by UUID. * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link NodeInput} which has to be checked manually, * as {@link NodeInput#equals(Object)} is NOT restricted on the uuid of {@link NodeInput}. * - * @return a set of object and uuid unique {@link NodeInput} entities + * @return a map of UUID to object- and uuid-unique {@link NodeInput} entities */ public Map getNodes() throws SourceException { return getNodes(typeSource.getOperators()); } /** - * Returns a set of {@link NodeInput} instances. This set has to be unique in the sense of object - * uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided {@link - * NodeInput} which has to be checked manually, as {@link NodeInput#equals(Object)} is NOT - * restricted on the uuid of {@link NodeInput}. + * Returns a unique set of {@link NodeInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link NodeInput} which has to be checked manually, + * as {@link NodeInput#equals(Object)} is NOT restricted on the uuid of {@link NodeInput}. * *

In contrast to {@link #getNodes} this method provides the ability to pass in an already * existing set of {@link OperatorInput} entities, the {@link NodeInput} instances depend on. @@ -194,9 +195,8 @@ public Map getNodes() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @return a set of object and uuid unique {@link NodeInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @return a map of UUID to object- and uuid-unique {@link NodeInput} entities */ public Map getNodes(Map operators) throws SourceException { return unpackMap( @@ -205,13 +205,13 @@ public Map getNodes(Map operators) throws } /** - * Returns a unique set of {@link LineInput} instances. + * Returns a unique set of {@link LineInput} instances within a map by UUID. * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link LineInput} which has to be checked manually, * as {@link LineInput#equals(Object)} is NOT restricted on the uuid of {@link LineInput}. * - * @return a set of object and uuid unique {@link LineInput} entities + * @return a map of UUID to object- and uuid-unique {@link LineInput} entities */ public Map getLines() throws SourceException { Map operators = typeSource.getOperators(); @@ -219,10 +219,11 @@ public Map getLines() throws SourceException { } /** - * Returns a set of {@link LineInput} instances. This set has to be unique in the sense of object - * uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided {@link - * LineInput} which has to be checked manually, as {@link LineInput#equals(Object)} is NOT - * restricted on the uuid of {@link LineInput}. + * Returns a unique set of {@link LineInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link LineInput} which has to be checked manually, + * as {@link LineInput#equals(Object)} is NOT restricted on the uuid of {@link LineInput}. * *

In contrast to {@link #getNodes} this method provides the ability to pass in an already * existing set of {@link NodeInput}, {@link LineTypeInput} and {@link OperatorInput} entities, @@ -232,11 +233,10 @@ public Map getLines() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param lineTypeInputs a set of object and uuid unique {@link LineTypeInput} entities - * @return a set of object and uuid unique {@link LineInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param lineTypeInputs a map of UUID to object- and uuid-unique {@link LineTypeInput} entities + * @return a map of UUID to object- and uuid-unique {@link LineInput} entities */ public Map getLines( Map operators, @@ -256,7 +256,7 @@ public Map getLines( * manually, as {@link Transformer2WInput#equals(Object)} is NOT restricted on the uuid of {@link * Transformer2WInput}. * - * @return a set of object and uuid unique {@link Transformer2WInput} entities + * @return a set of object- and uuid-unique {@link Transformer2WInput} entities */ public Set get2WTransformers() throws SourceException { Map operators = typeSource.getOperators(); @@ -278,12 +278,11 @@ public Set get2WTransformers() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param transformer2WTypes a set of object and uuid unique {@link Transformer2WTypeInput} - * entities - * @return a set of object and uuid unique {@link Transformer2WInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param transformer2WTypes a map of UUID to object- and uuid-unique {@link + * Transformer2WTypeInput} entities + * @return a set of object- and uuid-unique {@link Transformer2WInput} entities */ public Set get2WTransformers( Map operators, @@ -308,7 +307,7 @@ public Set get2WTransformers( * manually, as {@link Transformer3WInput#equals(Object)} is NOT restricted on the uuid of {@link * Transformer3WInput}. * - * @return a set of object and uuid unique {@link Transformer3WInput} entities + * @return a set of object- and uuid-unique {@link Transformer3WInput} entities */ public Set get3WTransformers() throws SourceException { Map operators = typeSource.getOperators(); @@ -330,21 +329,19 @@ public Set get3WTransformers() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param transformer3WTypeInputs a set of object and uuid unique {@link Transformer3WTypeInput} - * entities - * @return a set of object and uuid unique {@link Transformer3WInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param transformer3WTypes a map of UUID to object- and uuid-unique {@link + * Transformer3WTypeInput} entities + * @return a set of object- and uuid-unique {@link Transformer3WInput} entities */ public Set get3WTransformers( Map operators, Map nodes, - Map transformer3WTypeInputs) + Map transformer3WTypes) throws SourceException { return unpackSet( - buildTransformer3WEntities( - transformer3WInputFactory, nodes, transformer3WTypeInputs, operators), + buildTransformer3WEntities(transformer3WInputFactory, nodes, transformer3WTypes, operators), Transformer3WInput.class); } @@ -356,7 +353,7 @@ public Set get3WTransformers( * manually, as {@link SwitchInput#equals(Object)} is NOT restricted on the uuid of {@link * SwitchInput}. * - * @return a set of object and uuid unique {@link SwitchInput} entities + * @return a set of object- and uuid-unique {@link SwitchInput} entities */ public Set getSwitches() throws SourceException { Map operators = typeSource.getOperators(); @@ -377,10 +374,9 @@ public Set getSwitches() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link SwitchInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @return a set of object- and uuid-unique {@link SwitchInput} entities */ public Set getSwitches( Map operators, Map nodes) throws SourceException { @@ -396,7 +392,7 @@ public Set getSwitches( * manually, as {@link MeasurementUnitInput#equals(Object)} is NOT restricted on the uuid of * {@link MeasurementUnitInput}. * - * @return a set of object and uuid unique {@link MeasurementUnitInput} entities + * @return a set of object- and uuid-unique {@link MeasurementUnitInput} entities */ public Set getMeasurementUnits() throws SourceException { Map operators = typeSource.getOperators(); @@ -418,10 +414,9 @@ public Set getMeasurementUnits() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link MeasurementUnitInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @return a set of object- and uuid-unique {@link MeasurementUnitInput} entities */ public Set getMeasurementUnits( Map operators, Map nodes) throws SourceException { diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 7b99e604a..29d44be56 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -117,10 +117,12 @@ public SystemParticipants getSystemParticipants() throws SourceException { * validity e.g. in the sense that not duplicate UUIDs exist within all entities contained in the * returning instance. * - *

This constructor reuses some basic input data to improve performance. + *

In contrast to {@link #getSystemParticipants()}, this method provides the ability to pass in + * already existing input objects that this method depends on. Doing so, already loaded operators + * and nodes can be recycled to improve performance and prevent unnecessary loading operations. * - * @param operators All operators of the grid in a map UUID -> operator - * @param nodes All nodes of the grid in a map UUID -> node + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities * @return a valid, complete {@link SystemParticipants} * @throws SourceException on error */ @@ -211,7 +213,7 @@ public SystemParticipants getSystemParticipants( * manually, as {@link FixedFeedInInput#equals(Object)} is NOT restricted on the uuid of {@link * FixedFeedInInput}. * - * @return a set of object and uuid unique {@link FixedFeedInInput} entities + * @return a set of object- and uuid-unique {@link FixedFeedInInput} entities */ public Set getFixedFeedIns() throws SourceException { Map operators = typeSource.getOperators(); @@ -233,10 +235,10 @@ public Set getFixedFeedIns() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link FixedFeedInInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @return a set of object- and uuid-unique {@link FixedFeedInInput} entities */ public Set getFixedFeedIns( Map operators, Map nodes, Map emUnits) @@ -254,7 +256,7 @@ public Set getFixedFeedIns( * java.util.UUID} uniqueness of the provided {@link PvInput} which has to be checked manually, as * {@link PvInput#equals(Object)} is NOT restricted on the uuid of {@link PvInput}. * - * @return a set of object and uuid unique {@link PvInput} entities + * @return a set of object- and uuid-unique {@link PvInput} entities */ public Set getPvPlants() throws SourceException { Map operators = typeSource.getOperators(); @@ -276,10 +278,10 @@ public Set getPvPlants() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link PvInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @return a set of object- and uuid-unique {@link PvInput} entities */ public Set getPvPlants( Map operators, Map nodes, Map emUnits) @@ -297,7 +299,7 @@ public Set getPvPlants( * java.util.UUID} uniqueness of the provided {@link LoadInput} which has to be checked manually, * as {@link LoadInput#equals(Object)} is NOT restricted on the uuid of {@link LoadInput}. * - * @return a set of object and uuid unique {@link LoadInput} entities + * @return a set of object- and uuid-unique {@link LoadInput} entities */ public Set getLoads() throws SourceException { Map operators = typeSource.getOperators(); @@ -319,10 +321,10 @@ public Set getLoads() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link LoadInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @return a set of object- and uuid-unique {@link LoadInput} entities */ public Set getLoads( Map operators, Map nodes, Map emUnits) @@ -340,7 +342,7 @@ public Set getLoads( * java.util.UUID} uniqueness of the provided {@link EvcsInput} which has to be checked manually, * as {@link EvcsInput#equals(Object)} is NOT restricted on the uuid of {@link EvcsInput}. * - * @return a set of object and uuid unique {@link EvcsInput} entities + * @return a set of object- and uuid-unique {@link EvcsInput} entities */ public Set getEvcs() throws SourceException { Map operators = typeSource.getOperators(); @@ -362,10 +364,10 @@ public Set getEvcs() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @return a set of object and uuid unique {@link EvcsInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @return a set of object- and uuid-unique {@link EvcsInput} entities */ public Set getEvcs( Map operators, Map nodes, Map emUnits) @@ -383,7 +385,7 @@ public Set getEvcs( * java.util.UUID} uniqueness of the provided {@link BmInput} which has to be checked manually, as * {@link BmInput#equals(Object)} is NOT restricted on the uuid of {@link BmInput}. * - * @return a set of object and uuid unique {@link BmInput} entities + * @return a set of object- and uuid-unique {@link BmInput} entities */ public Set getBmPlants() throws SourceException { Map operators = typeSource.getOperators(); @@ -406,11 +408,11 @@ public Set getBmPlants() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param types a set of object and uuid unique {@link BmTypeInput} entities - * @return a set of object and uuid unique {@link BmInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @param types a map of UUID to object- and uuid-unique {@link BmTypeInput} entities + * @return a set of object- and uuid-unique {@link BmInput} entities */ public Set getBmPlants( Map operators, @@ -432,7 +434,7 @@ public Set getBmPlants( * manually, as {@link StorageInput#equals(Object)} is NOT restricted on the uuid of {@link * StorageInput}. * - * @return a set of object and uuid unique {@link StorageInput} entities + * @return a set of object- and uuid-unique {@link StorageInput} entities */ public Set getStorages() throws SourceException { Map operators = typeSource.getOperators(); @@ -455,11 +457,12 @@ public Set getStorages() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param types a set of object and uuid unique {@link StorageTypeInput} entities - * @return a set of object and uuid unique {@link StorageInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} that should be + * used for the returning instances + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @param types a map of UUID to object- and uuid-unique {@link StorageTypeInput} entities + * @return a set of object- and uuid-unique {@link StorageInput} entities */ public Set getStorages( Map operators, @@ -480,7 +483,7 @@ public Set getStorages( * java.util.UUID} uniqueness of the provided {@link WecInput} which has to be checked manually, * as {@link WecInput#equals(Object)} is NOT restricted on the uuid of {@link WecInput}. * - * @return a set of object and uuid unique {@link WecInput} entities + * @return a set of object- and uuid-unique {@link WecInput} entities */ public Set getWecPlants() throws SourceException { Map operators = typeSource.getOperators(); @@ -503,11 +506,11 @@ public Set getWecPlants() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param types a set of object and uuid unique {@link WecTypeInput} entities - * @return a set of object and uuid unique {@link WecInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @param types a map of UUID to object- and uuid-unique {@link WecTypeInput} entities + * @return a set of object- and uuid-unique {@link WecInput} entities */ public Set getWecPlants( Map operators, @@ -528,7 +531,7 @@ public Set getWecPlants( * java.util.UUID} uniqueness of the provided {@link EvInput} which has to be checked manually, as * {@link EvInput#equals(Object)} is NOT restricted on the uuid of {@link EvInput}. * - * @return a set of object and uuid unique {@link EvInput} entities + * @return a set of object- and uuid-unique {@link EvInput} entities */ public Set getEvs() throws SourceException { Map operators = typeSource.getOperators(); @@ -550,11 +553,11 @@ public Set getEvs() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param nodes a set of object and uuid unique {@link NodeInput} entities - * @param types a set of object and uuid unique {@link EvTypeInput} entities - * @return a set of object and uuid unique {@link EvInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @param types a map of UUID to object- and uuid-unique {@link EvTypeInput} entities + * @return a set of object- and uuid-unique {@link EvInput} entities */ public Set getEvs( Map operators, @@ -590,6 +593,15 @@ public Set getChpPlants() throws SourceException { * *

If the set with {@link OperatorInput} is not exhaustive, the corresponding operator is set * to {@link OperatorInput#NO_OPERATOR_ASSIGNED} + * + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @param types a map of UUID to object- and uuid-unique {@link ChpTypeInput} entities + * @param thermalBuses a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities + * @param thermalStorages a map of UUID to object- and uuid-unique {@link ThermalStorageInput} + * entities + * @return a set of object- and uuid-unique {@link ChpInput} entities */ public Set getChpPlants( Map operators, @@ -629,6 +641,13 @@ public Set getHeatPumps() throws SourceException { * *

If the set with {@link OperatorInput} is not exhaustive, the corresponding operator is set * to {@link OperatorInput#NO_OPERATOR_ASSIGNED} + * + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities + * @param types a map of UUID to object- and uuid-unique {@link HpTypeInput} entities + * @param thermalBuses a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities + * @return a set of object- and uuid-unique {@link HpInput} entities */ public Set getHeatPumps( Map operators, @@ -698,8 +717,8 @@ private static Stream> hpEntityStream( * Constructs a stream of {@link SystemParticipantTypedEntityData} wrapped in {@link Try}'s. * * @param entityClass the class of the entities that should be built - * @param nodes the nodes that should be considered for these entities * @param operators the operators that should be considered for these entities + * @param nodes the nodes that should be considered for these entities * @param types the types that should be considered for these entities * @param the type of the type model of the resulting entity * @return a stream of tries holding an instance of a {@link SystemParticipantTypedEntityData} diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 7fada86a1..024190824 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -22,9 +22,7 @@ import java.util.stream.Stream; /** - * todo javadoc - * - *

Interface that provides the capability to build thermal {@link + * Interface that provides the capability to build thermal {@link * edu.ie3.datamodel.models.input.AssetInput} entities from persistent data e.g. .csv files or * databases * @@ -50,24 +48,26 @@ public ThermalSource(TypeSource typeSource, DataSource dataSource) { } /** - * Returns a unique set of {@link ThermalBusInput} instances. + * Returns a unique set of {@link ThermalBusInput} instances within a map by UUID. * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link ThermalBusInput} which has to be checked * manually, as {@link ThermalBusInput#equals(Object)} is NOT restricted on the uuid of {@link * ThermalBusInput}. * - * @return a set of object and uuid unique {@link ThermalBusInput} entities + * @return a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities */ public Map getThermalBuses() throws SourceException { return getThermalBuses(typeSource.getOperators()); } /** - * Returns a set of {@link ThermalBusInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link ThermalBusInput} which has to be checked manually, as {@link - * ThermalBusInput#equals(Object)} is NOT restricted on the uuid of {@link ThermalBusInput}. + * Returns a unique set of {@link ThermalBusInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link ThermalBusInput} which has to be checked + * manually, as {@link ThermalBusInput#equals(Object)} is NOT restricted on the uuid of {@link + * ThermalBusInput}. * *

In contrast to {@link #getThermalBuses()} this interface provides the ability to pass in an * already existing set of {@link OperatorInput} entities, the {@link ThermalBusInput} instances @@ -77,9 +77,8 @@ public Map getThermalBuses() throws SourceException { *

If something fails during the creation process it's up to the concrete implementation of an * empty set or a set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @return a set of object and uuid unique {@link ThermalBusInput} entities + * @param operators a set of object- and uuid-unique {@link OperatorInput} entities + * @return a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities */ public Map getThermalBuses(Map operators) throws SourceException { @@ -91,14 +90,14 @@ public Map getThermalBuses(Map opera /** * Returns a unique set of instances of all entities implementing the {@link ThermalStorageInput} - * abstract class. + * abstract class within a map by UUID. * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link ThermalStorageInput} which has to be checked * manually, as {@link ThermalStorageInput#equals(Object)} is NOT restricted on the uuid of {@link * ThermalStorageInput}. * - * @return a set of object and uuid unique {@link ThermalStorageInput} entities + * @return a map of UUID to object- and uuid-unique {@link ThermalStorageInput} entities */ public Map getThermalStorages() throws SourceException { return getCylindricalStorages().stream() @@ -120,11 +119,9 @@ public Map getThermalStorages() throws SourceExceptio *

If something fails during the creation process it's up to the concrete implementation of an * empty set or a set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param thermalBuses a set of object and uuid unique {@link ThermalBusInput} that should be used - * for the returning instances - * @return a set of object and uuid unique {@link ThermalStorageInput} entities + * @param operators a set of object- and uuid-unique {@link OperatorInput} entities + * @param thermalBuses a set of object- and uuid-unique {@link ThermalBusInput} entities + * @return a map of UUID to object- and uuid-unique {@link ThermalStorageInput} entities */ public Map getThermalStorages( Map operators, Map thermalBuses) @@ -141,7 +138,7 @@ public Map getThermalStorages( * manually, as {@link ThermalHouseInput#equals(Object)} is NOT restricted on the uuid of {@link * ThermalHouseInput}. * - * @return a set of object and uuid unique {@link ThermalHouseInput} entities + * @return a map of UUID to object- and uuid-unique {@link ThermalHouseInput} entities */ public Map getThermalHouses() throws SourceException { Map operators = typeSource.getOperators(); @@ -151,10 +148,12 @@ public Map getThermalHouses() throws SourceException { } /** - * Returns a set of {@link ThermalHouseInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link ThermalHouseInput} which has to be checked manually, as {@link - * ThermalHouseInput#equals(Object)} is NOT restricted on the uuid of {@link ThermalHouseInput}. + * Returns a set of {@link ThermalHouseInput} instances. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link ThermalHouseInput} which has to be checked + * manually, as {@link ThermalHouseInput#equals(Object)} is NOT restricted on the uuid of {@link + * ThermalHouseInput}. * *

In contrast to {@link #getThermalHouses()} this interface provides the ability to pass in an * already existing set of {@link OperatorInput} entities, the {@link ThermalHouseInput} instances @@ -164,11 +163,9 @@ public Map getThermalHouses() throws SourceException { *

If something fails during the creation process it's up to the concrete implementation of an * empty set or a set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param thermalBuses a set of object and uuid unique {@link ThermalBusInput} that should be used - * for the returning instances - * @return a set of object and uuid unique {@link ThermalHouseInput} entities + * @param operators a set of object- and uuid-unique {@link OperatorInput} entities + * @param thermalBuses a set of object- and uuid-unique {@link ThermalBusInput} entities + * @return a map of UUID to object- and uuid-unique {@link ThermalHouseInput} entities */ public Map getThermalHouses( Map operators, Map thermalBuses) @@ -188,7 +185,7 @@ public Map getThermalHouses( * checked manually, as {@link CylindricalStorageInput#equals(Object)} is NOT restricted on the * uuid of {@link CylindricalStorageInput}. * - * @return a set of object and uuid unique {@link CylindricalStorageInput} entities + * @return a set of object- and uuid-unique {@link CylindricalStorageInput} entities */ public Set getCylindricalStorages() throws SourceException { Map operators = typeSource.getOperators(); @@ -198,11 +195,12 @@ public Set getCylindricalStorages() throws SourceExcept } /** - * Returns a set of {@link CylindricalStorageInput} instances. This set has to be unique in the - * sense of object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the - * provided {@link CylindricalStorageInput} which has to be checked manually, as {@link - * CylindricalStorageInput#equals(Object)} is NOT restricted on the uuid of {@link - * CylindricalStorageInput}. + * Returns a set of {@link CylindricalStorageInput} instances. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * java.util.UUID} uniqueness of the provided {@link CylindricalStorageInput} which has to be + * checked manually, as {@link CylindricalStorageInput#equals(Object)} is NOT restricted on the + * uuid of {@link CylindricalStorageInput}. * *

In contrast to {@link #getCylindricalStorages()} this interface provides the ability to pass * in an already existing set of {@link OperatorInput} entities, the {@link @@ -212,11 +210,9 @@ public Set getCylindricalStorages() throws SourceExcept *

If something fails during the creation process it's up to the concrete implementation of an * empty set or a set with all entities that has been able to be build is returned. * - * @param operators a set of object and uuid unique {@link OperatorInput} that should be used for - * the returning instances - * @param thermalBuses a set of object and uuid unique {@link ThermalBusInput} that should be used - * for the returning instances - * @return a set of object and uuid unique {@link CylindricalStorageInput} entities + * @param operators a set of object- and uuid-unique {@link OperatorInput} entities + * @param thermalBuses a set of object- and uuid-unique {@link ThermalBusInput} entities + * @return a set of object- and uuid-unique {@link CylindricalStorageInput} entities */ public Set getCylindricalStorages( Map operators, Map thermalBuses) diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index 1271c29f5..a74dcba57 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -53,13 +53,14 @@ public TypeSource(DataSource dataSource) { } /** - * Returns a set of {@link Transformer2WTypeInput} instances. This set has to be unique in the - * sense of object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the - * provided {@link Transformer2WTypeInput} which has to be checked manually, as {@link - * Transformer2WTypeInput#equals(Object)} is NOT restricted on the uuid of {@link - * Transformer2WTypeInput}. + * Returns a set of {@link Transformer2WTypeInput} instances within a map by UUID. * - * @return a set of object and uuid unique {@link Transformer2WTypeInput} entities + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link Transformer2WTypeInput} which has to be checked + * manually, as {@link Transformer2WTypeInput#equals(Object)} is NOT restricted on the uuid of + * {@link Transformer2WTypeInput}. + * + * @return a map of UUID to object- and uuid-unique {@link Transformer2WTypeInput} entities */ public Map getTransformer2WTypes() throws SourceException { return unpackMap( @@ -68,12 +69,13 @@ public Map getTransformer2WTypes() throws SourceEx } /** - * Returns a set of {@link OperatorInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link OperatorInput} which has to be checked manually, as {@link OperatorInput#equals(Object)} - * is NOT restricted on the uuid of {@link OperatorInput}. + * Returns a set of {@link OperatorInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link OperatorInput} which has to be checked manually, as + * {@link OperatorInput#equals(Object)} is NOT restricted on the uuid of {@link OperatorInput}. * - * @return a set of object and uuid unique {@link OperatorInput} entities + * @return a map of UUID to object- and uuid-unique {@link OperatorInput} entities */ public Map getOperators() throws SourceException { return unpackMap( @@ -81,12 +83,13 @@ public Map getOperators() throws SourceException { } /** - * Returns a set of {@link LineTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link LineTypeInput} which has to be checked manually, as {@link LineTypeInput#equals(Object)} - * is NOT restricted on the uuid of {@link LineTypeInput}. + * Returns a set of {@link LineTypeInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link LineTypeInput} which has to be checked manually, as + * {@link LineTypeInput#equals(Object)} is NOT restricted on the uuid of {@link LineTypeInput}. * - * @return a set of object and uuid unique {@link LineTypeInput} entities + * @return a map of UUID to object- and uuid-unique {@link LineTypeInput} entities */ public Map getLineTypes() throws SourceException { return unpackMap( @@ -94,13 +97,14 @@ public Map getLineTypes() throws SourceException { } /** - * Returns a set of {@link Transformer3WTypeInput} instances. This set has to be unique in the - * sense of object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the - * provided {@link Transformer3WTypeInput} which has to be checked manually, as {@link - * Transformer3WTypeInput#equals(Object)} is NOT restricted on the uuid of {@link - * Transformer3WTypeInput}. + * Returns a set of {@link Transformer3WTypeInput} instances within a map by UUID. * - * @return a set of object and uuid unique {@link Transformer3WTypeInput} entities + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link Transformer3WTypeInput} which has to be checked + * manually, as {@link Transformer3WTypeInput#equals(Object)} is NOT restricted on the uuid of + * {@link Transformer3WTypeInput}. + * + * @return a map of UUID to object- and uuid-unique {@link Transformer3WTypeInput} entities */ public Map getTransformer3WTypes() throws SourceException { return unpackMap( @@ -109,12 +113,13 @@ public Map getTransformer3WTypes() throws SourceEx } /** - * Returns a set of {@link BmTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link BmTypeInput} which has to be checked manually, as {@link BmTypeInput#equals(Object)} is - * NOT restricted on the uuid of {@link BmTypeInput}. + * Returns a set of {@link BmTypeInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link BmTypeInput} which has to be checked manually, as + * {@link BmTypeInput#equals(Object)} is NOT restricted on the uuid of {@link BmTypeInput}. * - * @return a set of object and uuid unique {@link BmTypeInput} entities + * @return a map of UUID to object- and uuid-unique {@link BmTypeInput} entities */ public Map getBmTypes() throws SourceException { return unpackMap( @@ -122,12 +127,13 @@ public Map getBmTypes() throws SourceException { } /** - * Returns a set of {@link ChpTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link ChpTypeInput} which has to be checked manually, as {@link ChpTypeInput#equals(Object)} - * is NOT restricted on the uuid of {@link ChpTypeInput}. + * Returns a set of {@link ChpTypeInput} instances within a map by UUID. * - * @return a set of object and uuid unique {@link ChpTypeInput} entities + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link ChpTypeInput} which has to be checked manually, as + * {@link ChpTypeInput#equals(Object)} is NOT restricted on the uuid of {@link ChpTypeInput}. + * + * @return a map of UUID to object- and uuid-unique {@link ChpTypeInput} entities */ public Map getChpTypes() throws SourceException { return unpackMap( @@ -135,12 +141,13 @@ public Map getChpTypes() throws SourceException { } /** - * Returns a set of {@link HpTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link HpTypeInput} which has to be checked manually, as {@link HpTypeInput#equals(Object)} is - * NOT restricted on the uuid of {@link HpTypeInput}. + * Returns a set of {@link HpTypeInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link HpTypeInput} which has to be checked manually, as + * {@link HpTypeInput#equals(Object)} is NOT restricted on the uuid of {@link HpTypeInput}. * - * @return a set of object and uuid unique {@link HpTypeInput} entities + * @return a map of UUID to object- and uuid-unique {@link HpTypeInput} entities */ public Map getHpTypes() throws SourceException { return unpackMap( @@ -148,12 +155,14 @@ public Map getHpTypes() throws SourceException { } /** - * Returns a set of {@link StorageTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link StorageTypeInput} which has to be checked manually, as {@link - * StorageTypeInput#equals(Object)} is NOT restricted on the uuid of {@link StorageTypeInput}. + * Returns a set of {@link StorageTypeInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link StorageTypeInput} which has to be checked manually, as + * {@link StorageTypeInput#equals(Object)} is NOT restricted on the uuid of {@link + * StorageTypeInput}. * - * @return a set of object and uuid unique {@link StorageTypeInput} entities + * @return a map of UUID to object- and uuid-unique {@link StorageTypeInput} entities */ public Map getStorageTypes() throws SourceException { return unpackMap( @@ -162,12 +171,13 @@ public Map getStorageTypes() throws SourceException { } /** - * Returns a set of {@link WecTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link WecTypeInput} which has to be checked manually, as {@link WecTypeInput#equals(Object)} - * is NOT restricted on the uuid of {@link WecTypeInput}. + * Returns a set of {@link WecTypeInput} instances within a map by UUID. * - * @return a set of object and uuid unique {@link WecTypeInput} entities + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link WecTypeInput} which has to be checked manually, as + * {@link WecTypeInput#equals(Object)} is NOT restricted on the uuid of {@link WecTypeInput}. + * + * @return a map of UUID to object- and uuid-unique {@link WecTypeInput} entities */ public Map getWecTypes() throws SourceException { return unpackMap( @@ -175,12 +185,13 @@ public Map getWecTypes() throws SourceException { } /** - * Returns a set of {@link EvTypeInput} instances. This set has to be unique in the sense of - * object uniqueness but also in the sense of {@link java.util.UUID} uniqueness of the provided - * {@link EvTypeInput} which has to be checked manually, as {@link EvTypeInput#equals(Object)} is - * NOT restricted on the uuid of {@link EvTypeInput}. + * Returns a set of {@link EvTypeInput} instances within a map by UUID. + * + *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link + * UUID} uniqueness of the provided {@link EvTypeInput} which has to be checked manually, as + * {@link EvTypeInput#equals(Object)} is NOT restricted on the uuid of {@link EvTypeInput}. * - * @return a set of object and uuid unique {@link EvTypeInput} entities + * @return a map of UUID to object- and uuid-unique {@link EvTypeInput} entities */ public Map getEvTypes() throws SourceException { return unpackMap( @@ -191,10 +202,10 @@ public Map getEvTypes() throws SourceException { * Build and cast entities to the correct type, since {@link SystemParticipantTypeInputFactory} * outputs {@link SystemParticipantTypeInput} of general type. * - * @param entityClass - * @param factory - * @return - * @param + * @param entityClass The class of type input entity to build + * @param factory The factory to use to build the entity + * @return a stream of {@link Try}s containing the desired entities + * @param The type of AssetType to return */ @SuppressWarnings("unchecked") private Stream> buildEntities( diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy index 4dcb4546e..00ea6e434 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy @@ -56,7 +56,7 @@ class EnergyManagementSourceTest extends Specification { "controlstrategy" : ""], EmInput ), - ).map(data -> Try.of(() -> data, SourceException.class)) + ).map(data -> Try.of(() -> data, SourceException)) expect: def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) @@ -119,7 +119,7 @@ class EnergyManagementSourceTest extends Specification { "controlstrategy" : "other"], EmInput ), - ).map(data -> Try.of(() -> data, SourceException.class)) + ).map(data -> Try.of(() -> data, SourceException)) expect: def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) @@ -191,7 +191,7 @@ class EnergyManagementSourceTest extends Specification { "controlstrategy" : ""], EmInput ), - ).map(data -> Try.of(() -> data, SourceException.class)) + ).map(data -> Try.of(() -> data, SourceException)) when: EnergyManagementSource.createEmInputs(assetEntityDataStream) @@ -217,15 +217,15 @@ class EnergyManagementSourceTest extends Specification { "controlstrategy" : ""], EmInput ), - ).map(data -> Try.of(() -> data, SourceException.class)) + ).map(data -> Try.of(() -> data, SourceException)) when: EnergyManagementSource.createEmInputs(assetEntityDataStream) then: def exc = thrown(SourceException) - exc.cause.message.contains("An error occurred when creating instance of EmInput.class") - exc.cause.cause.class == FactoryException + exc.cause.message.contains("An error occurred when creating instance of EmInput") + exc.cause.cause == FactoryException } def "An EnergyManagementSource should fail if a parent em is not provided"() { @@ -245,7 +245,7 @@ class EnergyManagementSourceTest extends Specification { "controlstrategy" : ""], EmInput ), - ).map(data -> Try.of(() -> data, SourceException.class)) + ).map(data -> Try.of(() -> data, SourceException)) when: EnergyManagementSource.createEmInputs(assetEntityDataStream) @@ -272,7 +272,7 @@ class EnergyManagementSourceTest extends Specification { "controlstrategy" : ""], EmInput ), - ).map(data -> Try.of(() -> data, SourceException.class)) + ).map(data -> Try.of(() -> data, SourceException)) when: EnergyManagementSource.createEmInputs(assetEntityDataStream) From da48f0a81860ee70c8f3f51db5be3310f682eb4a Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 13:35:40 +0100 Subject: [PATCH 074/228] Fix --- .../ie3/datamodel/io/source/EnergyManagementSourceTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy index 00ea6e434..3b3503a35 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy @@ -225,7 +225,7 @@ class EnergyManagementSourceTest extends Specification { then: def exc = thrown(SourceException) exc.cause.message.contains("An error occurred when creating instance of EmInput") - exc.cause.cause == FactoryException + exc.cause.class == FactoryException } def "An EnergyManagementSource should fail if a parent em is not provided"() { From 136132bc0464fefb216c910ac50d5bafcdac5e2e Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 13:47:10 +0100 Subject: [PATCH 075/228] Ok, try again --- .../ie3/datamodel/io/source/EnergyManagementSourceTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy index 3b3503a35..288c6be0a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy @@ -225,7 +225,7 @@ class EnergyManagementSourceTest extends Specification { then: def exc = thrown(SourceException) exc.cause.message.contains("An error occurred when creating instance of EmInput") - exc.cause.class == FactoryException + exc.cause.cause.class == FactoryException } def "An EnergyManagementSource should fail if a parent em is not provided"() { From cfc9181444284c42c3ba10059a1a9a6ab19bef52 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 14:42:28 +0100 Subject: [PATCH 076/228] Refactored RawGridSource --- .../datamodel/io/source/RawGridSource.java | 130 +++++++----------- .../io/source/csv/CsvRawGridSourceTest.groovy | 14 +- 2 files changed, 59 insertions(+), 85 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index 8d6264bf5..d63ac6398 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -5,10 +5,8 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.RawGridException; import edu.ie3.datamodel.exceptions.SourceException; -import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.input.*; import edu.ie3.datamodel.models.input.*; import edu.ie3.datamodel.models.input.MeasurementUnitInput; @@ -244,7 +242,8 @@ public Map getLines( Map lineTypeInputs) throws SourceException { return unpackMap( - buildTypedEntityData(LineInput.class, lineInputFactory, nodes, operators, lineTypeInputs), + buildTypedEntityData(LineInput.class, operators, nodes, lineTypeInputs) + .map(lineInputFactory::get), LineInput.class); } @@ -290,12 +289,8 @@ public Set get2WTransformers( Map transformer2WTypes) throws SourceException { return unpackSet( - buildTypedEntityData( - Transformer2WInput.class, - transformer2WInputFactory, - nodes, - operators, - transformer2WTypes), + buildTypedEntityData(Transformer2WInput.class, operators, nodes, transformer2WTypes) + .map(transformer2WInputFactory::get), Transformer2WInput.class); } @@ -341,7 +336,11 @@ public Set get3WTransformers( Map transformer3WTypes) throws SourceException { return unpackSet( - buildTransformer3WEntities(transformer3WInputFactory, nodes, transformer3WTypes, operators), + transformer3WEntityDataStream( + buildTypedEntityData( + Transformer3WInput.class, operators, nodes, transformer3WTypes), + nodes) + .map(transformer3WInputFactory::get), Transformer3WInput.class); } @@ -380,8 +379,9 @@ public Set getSwitches() throws SourceException { */ public Set getSwitches( Map operators, Map nodes) throws SourceException { - return buildUntypedConnectorInputEntities( - SwitchInput.class, switchInputFactory, nodes, operators); + return unpackSet( + buildUntypedEntityData(SwitchInput.class, operators, nodes).map(switchInputFactory::get), + SwitchInput.class); } /** @@ -428,63 +428,53 @@ public Set getMeasurementUnits( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - // todo refactoring + /** + * Enriches the Stream of tries on {@link Transformer3WInputEntityData} with the information of + * the internal node. + * + * @param typedConnectorEntityDataStream Stream of already typed input entity data + * @param nodes Yet available nodes + * @return A stream of {@link Try} on enriched data + */ + protected Stream> + transformer3WEntityDataStream( + Stream, SourceException>> + typedConnectorEntityDataStream, + Map nodes) { + return typedConnectorEntityDataStream + .parallel() + .map( + typedEntityDataOpt -> + typedEntityDataOpt.flatMap( + typeEntityData -> + enrichEntityData( + typeEntityData, "nodeC", nodes, Transformer3WInputEntityData::new))); + } private - Stream> buildTypedEntityData( + Stream, SourceException>> buildTypedEntityData( Class entityClass, - EntityFactory> factory, - Map nodes, Map operators, + Map nodes, Map types) { - return buildTypedConnectorEntityData( - buildUntypedConnectorInputEntityData( - buildAssetInputEntityData(entityClass, operators), nodes), - types) - .map(factory::get); - } - - public Set buildUntypedConnectorInputEntities( - Class entityClass, - EntityFactory factory, - Map nodes, - Map operators) - throws SourceException { - return unpackSet( - buildUntypedConnectorInputEntityData( - buildAssetInputEntityData(entityClass, operators), nodes) - .map(factory::get), - entityClass); - } - - public Stream> buildTransformer3WEntities( - Transformer3WInputFactory transformer3WInputFactory, - Map nodes, - Map transformer3WTypeInputs, - Map operators) { - return buildTransformer3WEntityData( - buildTypedConnectorEntityData( - buildUntypedConnectorInputEntityData( - buildAssetInputEntityData(Transformer3WInput.class, operators), nodes), - transformer3WTypeInputs), - nodes) - .map(transformer3WInputFactory::get); + return typedConnectorEntityDataStream( + buildUntypedEntityData(entityClass, operators, nodes), types); } /** * Enriches the given untyped entity data with the equivalent asset type. If this is not possible, * a {@link Failure} is returned. * - * @param noTypeConnectorEntityDataStream Stream of untyped entity data + * @param connectorEntityDataStream Stream of untyped entity data * @param availableTypes Yet available asset types * @param Type of the asset type * @return Stream of {@link Try} to enhanced data */ protected - Stream, SourceException>> buildTypedConnectorEntityData( - Stream> noTypeConnectorEntityDataStream, + Stream, SourceException>> typedConnectorEntityDataStream( + Stream> connectorEntityDataStream, Map availableTypes) { - return noTypeConnectorEntityDataStream + return connectorEntityDataStream .parallel() .map( noTypeEntityDataOpt -> @@ -497,6 +487,13 @@ Stream, SourceException>> buildTypedConnect TypedConnectorInputEntityData::new))); } + public + Stream> buildUntypedEntityData( + Class entityClass, Map operators, Map nodes) { + return untypedConnectorEntityDataStream( + buildAssetInputEntityData(entityClass, operators), nodes); + } + /** * Converts a stream of {@link AssetInputEntityData} in connection with a collection of known * {@link NodeInput}s to a stream of {@link ConnectorInputEntityData}. @@ -505,10 +502,9 @@ Stream, SourceException>> buildTypedConnect * @param nodes A collection of known nodes * @return A stream on {@link Try} to matching {@link ConnectorInputEntityData} */ - protected Stream> - buildUntypedConnectorInputEntityData( - Stream> assetInputEntityDataStream, - Map nodes) { + protected Stream> untypedConnectorEntityDataStream( + Stream> assetInputEntityDataStream, + Map nodes) { return assetInputEntityDataStream .parallel() .map( @@ -523,26 +519,4 @@ Stream, SourceException>> buildTypedConnect nodes, ConnectorInputEntityData::new))); } - - /** - * Enriches the Stream of tries on {@link Transformer3WInputEntityData} with the information of - * the internal node. - * - * @param typedConnectorEntityDataStream Stream of already typed input entity data - * @param nodes Yet available nodes - * @return A stream of {@link Try} on enriched data - */ - protected Stream> buildTransformer3WEntityData( - Stream, SourceException>> - typedConnectorEntityDataStream, - Map nodes) { - return typedConnectorEntityDataStream - .parallel() - .map( - typedEntityDataOpt -> - typedEntityDataOpt.flatMap( - typeEntityData -> - enrichEntityData( - typeEntityData, "nodeC", nodes, Transformer3WInputEntityData::new))); - } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy index da933fc65..cca9a018b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy @@ -63,7 +63,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { def nodes = map([rgtd.nodeA, rgtd.nodeB]) when: "the source tries to convert it" - def connectorDataOption = source.buildUntypedConnectorInputEntityData(validAssetEntityInputData, nodes) + def connectorDataOption = source.untypedConnectorEntityDataStream(validAssetEntityInputData, nodes) then: "everything is fine" connectorDataOption.forEach { actualTry -> @@ -95,9 +95,9 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { def nodes = map([rgtd.nodeA, rgtd.nodeB]) when: "the source tries to convert it" - def connectorDataOption = source.buildUntypedConnectorInputEntityData(validAssetEntityInputData, nodes) + def connectorDataOption = source.untypedConnectorEntityDataStream(validAssetEntityInputData, nodes) - then: "it returns en empty Optional" + then: "it returns a Failure" connectorDataOption.allMatch(Try::isFailure) } @@ -171,7 +171,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { ]) when: "the source tries to convert it" - def actualSet = source.buildUntypedConnectorInputEntityData(validStream, nodes).collect(Collectors.toSet()) + def actualSet = source.untypedConnectorEntityDataStream(validStream, nodes).collect(Collectors.toSet()) then: "everything is fine" actualSet.size() == expectedSet.size() @@ -256,7 +256,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { def availableTypes = map([rgtd.lineTypeInputCtoD]) when: "the source tries to convert it" - def actualSet = source.buildTypedConnectorEntityData(validStream, availableTypes).collect(Collectors.toSet()) + def actualSet = source.typedConnectorEntityDataStream(validStream, availableTypes).collect(Collectors.toSet()) then: "everything is fine" actualSet.size() == expectedSet.size() @@ -324,7 +324,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { rgtd.transformerTypeAtoBtoC) when: "the sources tries to add nodes" - def actualSet = source.buildTransformer3WEntityData(inputStream, availableNodes).collect(Collectors.toSet()) + def actualSet = source.transformer3WEntityDataStream(inputStream, availableNodes).collect(Collectors.toSet()) def successes = actualSet.stream().filter { it.success }.toList() @@ -553,7 +553,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "all elements are there" actual != null actual.with { - /* It's okay, to only test the uuids, because content is tested with the other test mehtods */ + /* It's okay, to only test the uuids, because content is tested with the other test methods */ assert nodes.size() == expected.nodes.size() assert nodes.each {entry -> expected.nodes.contains({it.uuid == entry.uuid})} assert lines.size() == expected.lines.size() From b1ff33752a3b1f38298de21078d1e32f8fc2b6d6 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 14:55:21 +0100 Subject: [PATCH 077/228] Moved todo to issue #975 --- src/main/java/edu/ie3/datamodel/io/source/EntitySource.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 08488121d..70e057ae0 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -26,7 +26,6 @@ /** Class that provides all functionalities to build entities */ public abstract class EntitySource { - // TODO make all subclasses static? protected static final Logger log = LoggerFactory.getLogger(EntitySource.class); From 40fba631981530f870c44e8d95789f2897b8a362 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 17:52:04 +0100 Subject: [PATCH 078/228] Adapted EntitySourceClassDiagram.puml --- docs/uml/main/EntitySourceClassDiagram.puml | 188 ++++++++++-------- .../ie3/datamodel/io/source/EntitySource.java | 5 +- 2 files changed, 102 insertions(+), 91 deletions(-) diff --git a/docs/uml/main/EntitySourceClassDiagram.puml b/docs/uml/main/EntitySourceClassDiagram.puml index 03723a79d..56ac69c40 100644 --- a/docs/uml/main/EntitySourceClassDiagram.puml +++ b/docs/uml/main/EntitySourceClassDiagram.puml @@ -1,15 +1,23 @@ @startuml -' todo apapt note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes abstract class EntitySource { - - DataSource dataSource - - Set buildNodeAssetEntities(Class, EntityFactory, Collection, Collection, ConcurrentMap, LongAdder>) - - Set buildNodeAssetEntities(Class, EntityFactory, Collection, Collection) - - Set buildAssetInputEntities(Class, EntityFactory, Collection) - - Set buildAssetInputEntities(Class, EntityFactory) + # DataSource dataSource + # {static} Try enrichEntityData(E, String, Map, BiFunction) + # {static} Try enrichEntityData(E, String, Map, String, Map, TriFunction) + # {static} Try getLinkedEntity(EntityData, String, Map) + # {static} Try optionallyEnrichEntityData(E, String, Map, T, BiFunction) + # Stream> buildNodeAssetEntities(Class, Map, Map) + # {static} Stream> nodeAssetInputEntityDataStream(Stream>, Map) + # Stream> buildAssetInputEntities(Class, Map) + # {static} Stream> assetInputEntityDataStream(Stream>, Map) + # Stream> buildEntityData(Class) + # {static} Map unpackMap(Stream>, Class) throws SourceException + # {static} Set unpackSet(Stream>, Class) throws SourceException + # {static} Stream unpackSet(Stream>, Class) throws SourceException } + EntitySource <|-- GraphicSource EntitySource <|-- RawGridSource EntitySource <|-- ResultEntitySource @@ -22,12 +30,13 @@ class GraphicSource { - RawGridSource rawGridSource - LineGraphicInputFactory lineGraphicInputFactory - NodeGraphicInputFactory nodeGraphicInputFactory - - GraphicSource(TypeSource, RawGridSource, DataSource) - - Optional getGraphicElements() - - Set getNodeGraphicInput() - - Set getNodeGraphicInput(Set) - - Set getLineGraphicInput() - - Set getLineGraphicInput(Set) + + GraphicSource(TypeSource, RawGridSource, DataSource) + + GraphicElements getGraphicElements() throws SourceException + + GraphicElements getGraphicElements(Map, Map) throws SourceException + + Set getNodeGraphicInput() throws SourceException + + Set getNodeGraphicInput(Map) throws SourceException + + Set getLineGraphicInput() throws SourceException + + Set getLineGraphicInput(Map) throws SourceException } class RawGridSource { @@ -38,19 +47,21 @@ class RawGridSource { - Transformer3WInputFactory transformer3WInputFactory - SwitchInputFactory switchInputFactory - MeasurementUnitInputFactory measurementUnitInputFactory - - Optional getGridData() - - Set getNodes() - - Set getNodes(Set) - - Set getLines() - - Set getLines(Set, Set, Set) - - Set get2WTransformers() - - Set get2WTransformers(Set, Set, Set) - - Set get3WTransformers() - - Set get3WTransformers(Set, Set, Set) - - Set getSwitches() - - Set getSwitches(Set, Set) - - Set getMeasurementUnits() - - Set getMeasurementUnits(Set, Set) + + RawGridSource(TypeSource typeSource, DataSource dataSource) + + RawGridElements getGridData() throws SourceException + + RawGridElements getGridData(Map, Map, Map) throws SourceException + + Map getNodes() throws SourceException + + Map getNodes(Map) throws SourceException + + Map getLines() throws SourceException + + Map getLines(Map, Map, Set) throws SourceException + + Set get2WTransformers() throws SourceException + + Set get2WTransformers(Map, Map, Set) throws SourceException + + Set get3WTransformers() throws SourceException + + Set get3WTransformers(Map, Map, Set) throws SourceException + + Set getSwitches() throws SourceException + + Set getSwitches(Map, Map) throws SourceException + + Set getMeasurementUnits() throws SourceException + + Set getMeasurementUnits(Map, Map) throws SourceException } class ResultEntitySource { @@ -60,27 +71,27 @@ class ResultEntitySource { - NodeResultFactory nodeResultFactory - ConnectorResultFactory connectorResultFactory - FlexOptionsResultFactory flexOptionsResultFactory - - ResultEntitySource(DataSource) - - ResultEntitySource(DataSource, String) - - Set getNodeResults() - - Set getSwitchResults() - - Set getLineResults() - - Set getTransformer2WResultResults() - - Set getTransformer3WResultResults() - - Set getFlexOptionsResults() - - Set getLoadResults() - - Set getPvResults() - - Set getFixedFeedInResults() - - Set getBmResults() - - Set getChpResults() - - Set getWecResults() - - Set getStorageResults() - - Set getEvcsResults() - - Set getEvResults() - - Set getHpResults() - - Set getCylindricalStorageResult() - - Set getThermalHouseResults() - - Set getEmResults() + + ResultEntitySource(DataSource) + + ResultEntitySource(DataSource, String) + + Set getNodeResults() throws SourceException + + Set getSwitchResults() throws SourceException + + Set getLineResults() throws SourceException + + Set getTransformer2WResultResults() throws SourceException + + Set getTransformer3WResultResults() throws SourceException + + Set getFlexOptionsResults() throws SourceException + + Set getLoadResults() throws SourceException + + Set getPvResults() throws SourceException + + Set getFixedFeedInResults() throws SourceException + + Set getBmResults() throws SourceException + + Set getChpResults() throws SourceException + + Set getWecResults() throws SourceException + + Set getStorageResults() throws SourceException + + Set getEvcsResults() throws SourceException + + Set getEvResults() throws SourceException + + Set getHpResults() throws SourceException + + Set getCylindricalStorageResult() throws SourceException + + Set getThermalHouseResults() throws SourceException + + Set getEmResults() throws SourceException } class SystemParticipantSource{ @@ -97,28 +108,29 @@ class SystemParticipantSource{ - StorageInputFactory storageInputFactory - WecInputFactory wecInputFactory - EvcsInputFactory evcsInputFactory - - SystemParticipantSource(TypeSource, ThermalSource, RawGridSource, DataSource) - - Optional getSystemParticipants() - - Set getBmPlants() - - Set getBmPlants(Set, Set, Set) - - Set getChpPlants() - - Set getChpPlants(Set, Set, Set, Set, Set) - - Set getEvs() - - Set getEvs(Set, Set, Set) - - Set getEvcs() - - Set getEvcs(Set, Set) - - Set getFixedFeedIns() - - Set getFixedFeedIns(Set, Set) - - Set getHeatPumps() - - Set getHeatPumps(Set, Set, Set, Set) - - Set getLoads() - - Set getLoads(Set, Set) - - Set getPvPlants() - - Set getPvPlants(Set, Set) - - Set getStorages() - - Set getStorages(Set, Set, Set) - - Set getWecPlants() - - Set getWecPlants(Set, Set, Set) + + SystemParticipantSource(TypeSource, ThermalSource, RawGridSource, DataSource) + + SystemParticipants getSystemParticipants() throws SourceException + + SystemParticipants getSystemParticipants(Map, Map) throws SourceException + + Set getBmPlants() throws SourceException + + Set getBmPlants(Map, Map, Set) throws SourceException + + Set getChpPlants() throws SourceException + + Set getChpPlants(Map, Map, Set, Map, Set) throws SourceException + + Set getEvs() throws SourceException + + Set getEvs(Map, Map, Set) throws SourceException + + Set getEvcs() throws SourceException + + Set getEvcs(Map, Map) throws SourceException + + Set getFixedFeedIns() throws SourceException + + Set getFixedFeedIns(Map, Map) throws SourceException + + Set getHeatPumps() throws SourceException + + Set getHeatPumps(Map, Map, Set, Map) throws SourceException + + Set getLoads() throws SourceException + + Set getLoads(Map, Map) throws SourceException + + Set getPvPlants() throws SourceException + + Set getPvPlants(Map, Map) throws SourceException + + Set getStorages() throws SourceException + + Set getStorages(Map, Map, Set) throws SourceException + + Set getWecPlants() throws SourceException + + Set getWecPlants(Map, Map, Set) throws SourceException } class ThermalSource { @@ -126,15 +138,15 @@ class ThermalSource { - ThermalBusInputFactory thermalBusInputFactory - CylindricalStorageInputFactory cylindricalStorageInputFactory - ThermalHouseInputFactory thermalHouseInputFactory - - ThermalSource(TypeSource, DataSource) - - Set getThermalBuses() - - Set getThermalBuses(Set) - - Set getThermalStorages() - - Set getThermalStorages(Set, Set) - - Set getThermalHouses() - - Set getThermalHouses(Set, Set) - - Set getCylindricStorages() - - Set getCylindricStorages(Set, Set) + + ThermalSource(TypeSource, DataSource) + + Map getThermalBuses() throws SourceException + + Map getThermalBuses(Map) throws SourceException + + Set getThermalStorages() throws SourceException + + Set getThermalStorages(Map, Map) throws SourceException + + Set getThermalHouses() throws SourceException + + Set getThermalHouses(Map, Map) throws SourceException + + Set getCylindricStorages() throws SourceException + + Set getCylindricStorages(Map, Map) throws SourceException } class TypeSource { @@ -143,16 +155,16 @@ class TypeSource { - LineTypeInputFactory lineTypeInputFactory - Transformer3WTypeInputFactory transformer3WTypeInputFactory - SystemParticipantTypeInputFactory systemParticipantTypeInputFactory - - TypeSource(DataSource) - - Set getTransformer2WTypes() - - Set getTransformer3WTypes() - - Set getOperators() - - Set getLineTypes() - - Set getBmTypes() - - Set getChpTypes() - - Set getHpTypes() - - Set getStorageTypes() - - Set getWecTypes() - - Set getEvTypes() + + TypeSource(DataSource) + + Map getTransformer2WTypes() throws SourceException + + Map getTransformer3WTypes() throws SourceException + + Map getOperators() throws SourceException + + Map getLineTypes() throws SourceException + + Map getBmTypes() throws SourceException + + Map getChpTypes() throws SourceException + + Map getHpTypes() throws SourceException + + Map getStorageTypes() throws SourceException + + Map getWecTypes() throws SourceException + + Map getEvTypes() throws SourceException } @enduml \ No newline at end of file diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 70e057ae0..3005945d4 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -351,11 +351,10 @@ protected static Stream> assetInputEn * data. * * @param entityClass the entity class that should be build - * @param type of the entity that should be build * @return stream of the entity data wrapped in a {@link Try} */ - protected Stream> buildEntityData( - Class entityClass) { + protected Stream> buildEntityData( + Class entityClass) { return dataSource .getSourceData(entityClass) .map(fieldsToAttributes -> new Success<>(new EntityData(fieldsToAttributes, entityClass))); From 79ba2c5454fb08bbf10e278e51d874a8f5f3e9c2 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 19:33:20 +0100 Subject: [PATCH 079/228] Rolling back EmInput additions in this branch --- .../ie3/datamodel/io/factory/FactoryData.java | 23 ++ .../factory/input/EmAssetInputEntityData.java | 70 ----- .../input/participant/BmInputFactory.java | 3 - .../input/participant/ChpInputEntityData.java | 7 +- .../input/participant/ChpInputFactory.java | 3 - .../input/participant/EmInputFactory.java | 55 ++-- .../input/participant/EvInputFactory.java | 5 +- .../input/participant/EvcsInputFactory.java | 13 +- .../participant/FixedFeedInInputFactory.java | 9 +- .../input/participant/HpInputEntityData.java | 12 +- .../input/participant/HpInputFactory.java | 4 - .../input/participant/LoadInputFactory.java | 8 +- .../input/participant/PvInputFactory.java | 8 +- .../participant/StorageInputFactory.java | 5 +- .../SystemParticipantEntityData.java | 113 ------- .../SystemParticipantInputEntityFactory.java | 8 +- .../SystemParticipantTypedEntityData.java | 25 +- .../input/participant/WecInputFactory.java | 4 +- .../ie3/datamodel/io/processor/Processor.java | 20 +- .../io/source/EnergyManagementSource.java | 163 ++-------- .../io/source/SystemParticipantSource.java | 176 +++-------- .../csv/CsvJointGridContainerSource.java | 7 +- .../ie3/datamodel/models/ControlStrategy.java | 35 +++ .../datamodel/models/EmControlStrategy.java | 45 +++ .../ie3/datamodel/models/input/EmInput.java | 139 --------- .../container/EnergyManagementUnits.java | 100 ++++++ .../models/input/container/GridContainer.java | 30 +- .../input/container/JointGridContainer.java | 9 +- .../input/container/SubGridContainer.java | 10 +- .../models/input/system/BmInput.java | 15 +- .../models/input/system/ChpInput.java | 13 +- .../models/input/system/EmInput.java | 176 +++++++++++ .../models/input/system/EvInput.java | 13 +- .../models/input/system/EvcsInput.java | 19 +- .../models/input/system/FixedFeedInInput.java | 13 +- .../models/input/system/HpInput.java | 13 +- .../models/input/system/LoadInput.java | 19 +- .../models/input/system/PvInput.java | 13 +- .../models/input/system/StorageInput.java | 13 +- .../input/system/SystemParticipantInput.java | 49 +-- .../models/input/system/WecInput.java | 13 +- .../models/result/system/EmResult.java | 3 +- .../utils/ContainerNodeUpdateUtil.java | 2 + .../ie3/datamodel/utils/ContainerUtils.java | 23 +- .../io/extractor/ExtractorTest.groovy | 2 +- .../participant/BmInputFactoryTest.groovy | 5 +- .../participant/ChpInputFactoryTest.groovy | 5 +- .../participant/EmInputFactoryTest.groovy | 57 ++-- .../participant/EvInputFactoryTest.groovy | 5 +- .../participant/EvcsInputFactoryTest.groovy | 12 +- .../FixedFeedInInputFactoryTest.groovy | 15 +- .../participant/HpInputFactoryTest.groovy | 5 +- .../participant/LoadInputFactoryTest.groovy | 6 +- .../participant/PvInputFactoryTest.groovy | 6 +- .../StorageInputFactoryTest.groovy | 5 +- .../participant/WecInputFactoryTest.groovy | 5 +- ...EntityPersistenceNamingStrategyTest.groovy | 2 +- .../io/processor/ProcessorProviderTest.groovy | 1 - .../input/InputEntityProcessorTest.groovy | 74 ++--- .../datamodel/io/sink/CsvFileSinkTest.groovy | 6 +- .../source/EnergyManagementSourceTest.groovy | 284 ------------------ .../io/source/EntitySourceTest.groovy | 19 +- .../source/SystemParticipantSourceTest.groovy | 37 +-- .../csv/CsvEnergyManagementSourceTest.groovy | 8 +- .../csv/CsvSystemParticipantSourceTest.groovy | 65 ++-- .../models/EmControlStrategyTest.groovy | 45 +++ .../EnergyManagementUnitsTest.groovy | 29 ++ .../container/JointGridContainerTest.groovy | 9 +- .../models/input/system/BmInputTest.groovy | 1 - .../models/input/system/ChpInputTest.groovy | 1 - .../models/input/system/EmInputTest.groovy | 59 ++-- .../models/input/system/EvInputTest.groovy | 1 - .../models/input/system/EvcsInputTest.groovy | 1 - .../input/system/FixedFeedInInputTest.groovy | 1 - .../models/input/system/HpInputTest.groovy | 1 - .../models/input/system/LoadInputTest.groovy | 1 - .../models/input/system/PvInputTest.groovy | 1 - .../input/system/StorageInputTest.groovy | 1 - .../models/input/system/WecInputTest.groovy | 1 - .../datamodel/utils/ContainerUtilsTest.groovy | 8 + .../InvalidSystemParticipantInput.groovy | 2 +- .../ie3/test/common/ComplexTopology.groovy | 8 + .../common/EnergyManagementTestData.groovy | 30 ++ .../ie3/test/common/SampleJointGrid.groovy | 6 +- .../common/SystemParticipantTestData.groovy | 30 -- .../io/source/csv/_participants/em_input.csv | 5 +- 86 files changed, 916 insertions(+), 1455 deletions(-) delete mode 100644 src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java delete mode 100644 src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java create mode 100644 src/main/java/edu/ie3/datamodel/models/ControlStrategy.java create mode 100644 src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/input/EmInput.java create mode 100644 src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java create mode 100644 src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java delete mode 100644 src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy create mode 100644 src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy create mode 100644 src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy create mode 100644 src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java index 6ed7dcb7e..f88d24423 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java @@ -135,6 +135,29 @@ field, getField(field)), } } + /** + * Parses and returns an array of UUIDs from field value of given field name. Throws {@link + * FactoryException} if field does not exist or parsing fails. + * + * @param field field name + * @return UUID + */ + public UUID[] getUUIDs(String field) { + try { + String fieldValue = getField(field); + if (fieldValue.trim().isEmpty()) return new UUID[0]; + + String[] uuidFields = fieldValue.split(" "); + return Arrays.stream(uuidFields).map(UUID::fromString).toArray(UUID[]::new); + } catch (IllegalArgumentException iae) { + throw new FactoryException( + String.format( + "Exception while trying to parse UUIDs of field \"%s\" with value \"%s\"", + field, getField(field)), + iae); + } + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java deleted file mode 100644 index d001c405e..000000000 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.io.factory.input; - -import edu.ie3.datamodel.models.UniqueEntity; -import edu.ie3.datamodel.models.input.EmInput; -import edu.ie3.datamodel.models.input.OperatorInput; -import java.util.Map; -import java.util.Objects; - -/** - * Data used for the construction of {@link edu.ie3.datamodel.models.input.AssetInput} entities - * which also require an EM attribute. This data object can include additional information about the - * {@link EmInput}, which cannot be provided through the attribute map as it is a complex shared - * entity. - */ -public class EmAssetInputEntityData extends AssetInputEntityData { - - private final EmInput emUnit; - - public EmAssetInputEntityData( - Map fieldsToAttributes, - Class entityClass, - EmInput emUnit) { - super(fieldsToAttributes, entityClass); - this.emUnit = emUnit; - } - - public EmAssetInputEntityData( - Map fieldsToAttributes, - Class entityClass, - OperatorInput operator, - EmInput emUnit) { - super(fieldsToAttributes, entityClass, operator); - this.emUnit = emUnit; - } - - /** - * Creates a new EmAssetInputEntityData object based on a given {@link AssetInputEntityData} - * object and given em unit - * - * @param entityData The entity data object to use attributes of - * @param emUnit The em input to use - */ - public EmAssetInputEntityData(AssetInputEntityData entityData, EmInput emUnit) { - super(entityData, entityData.getOperatorInput()); - this.emUnit = emUnit; - } - - public EmInput getEmUnit() { - return emUnit; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - EmAssetInputEntityData that = (EmAssetInputEntityData) o; - return Objects.equals(emUnit, that.emUnit); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), emUnit); - } -} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java index bf8079394..799837d3c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.BmInput; @@ -42,7 +41,6 @@ protected BmInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); final BmTypeInput typeInput = data.getTypeInput(); final boolean marketReaction = data.getBoolean(MARKET_REACTION); final boolean costControlled = data.getBoolean(COST_CONTROLLED); @@ -56,7 +54,6 @@ protected BmInput buildModel( operationTime, node, qCharacteristics, - em, typeInput, marketReaction, costControlled, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java index 81c11572a..95b46c44c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; @@ -22,11 +21,10 @@ public class ChpInputEntityData extends SystemParticipantTypedEntityData fieldsToAttributes, NodeInput node, - EmInput em, ChpTypeInput typeInput, ThermalBusInput thermalBusInput, ThermalStorageInput thermalStorageInput) { - super(fieldsToAttributes, ChpInput.class, node, em, typeInput); + super(fieldsToAttributes, ChpInput.class, node, typeInput); this.thermalBusInput = thermalBusInput; this.thermalStorageInput = thermalStorageInput; } @@ -35,11 +33,10 @@ public ChpInputEntityData( Map fieldsToAttributes, OperatorInput operator, NodeInput node, - EmInput em, ChpTypeInput typeInput, ThermalBusInput thermalBusInput, ThermalStorageInput thermalStorageInput) { - super(fieldsToAttributes, ChpInput.class, operator, node, em, typeInput); + super(fieldsToAttributes, ChpInput.class, operator, node, typeInput); this.thermalBusInput = thermalBusInput; this.thermalStorageInput = thermalStorageInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java index 4ad47b060..f04b85e86 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; @@ -35,7 +34,6 @@ protected ChpInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); final boolean marketReaction = data.getBoolean(MARKET_REACTION); return new ChpInput( @@ -46,7 +44,6 @@ protected ChpInput buildModel( node, data.getThermalBusInput(), qCharacteristics, - em, data.getTypeInput(), data.getThermalStorageInput(), marketReaction); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index 30c280383..3e2e39d60 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -5,54 +5,55 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.exceptions.ParsingException; +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityFactory; -import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData; +import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import edu.ie3.datamodel.models.input.system.EmInput; import java.util.UUID; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class EmInputFactory extends AssetInputEntityFactory { +public class EmInputFactory extends AssetInputEntityFactory { + private static final Logger logger = LoggerFactory.getLogger(EmInputFactory.class); - private static final String CONTROL_STRATEGY = "controlstrategy"; + private static final String CONNECTED_ASSETS = "connectedassets"; - public static final String PARENT_EM = "parentem"; + private static final String CONTROL_STRATEGY = "controlstrategy"; public EmInputFactory() { super(EmInput.class); } - @Override - protected List> getFields(EmAssetInputEntityData data) { - List> fields = new ArrayList<>(super.getFields(data)); - - List> withEm = - fields.stream().map(f -> (Set) expandSet(f, PARENT_EM)).toList(); - - fields.addAll(withEm); - - return fields; - } - @Override protected String[] getAdditionalFields() { - return new String[] {CONTROL_STRATEGY}; + return new String[] {CONNECTED_ASSETS, CONTROL_STRATEGY}; } @Override protected EmInput buildModel( - EmAssetInputEntityData data, + AssetInputEntityData data, UUID uuid, String id, OperatorInput operator, OperationTime operationTime) { - String controlStrategy = data.getField(CONTROL_STRATEGY); - - EmInput parentEm = data.getEmUnit(); - - return new EmInput(uuid, id, operator, operationTime, controlStrategy, parentEm); + ControlStrategy controlStrategy; + try { + controlStrategy = ControlStrategy.parse(data.getField(CONTROL_STRATEGY)); + } catch (ParsingException e) { + logger.warn( + "Cannot parse control strategy \"{}\" of energy management system \"{}\". Assign no control strategy instead.", + data.getField(CONTROL_STRATEGY), + id); + controlStrategy = ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY; + } + final UUID[] connectedAssets = data.getUUIDs(CONNECTED_ASSETS); + + if (connectedAssets.length == 0) + logger.warn("There are no connected assets for energy management system \"{}\".", id); + + return new EmInput(uuid, id, operator, operationTime, connectedAssets, controlStrategy); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java index b2d492ce5..1f0f8e80c 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EvInput; @@ -36,9 +35,7 @@ protected EvInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); - return new EvInput( - uuid, id, operator, operationTime, node, qCharacteristics, em, data.getTypeInput()); + uuid, id, operator, operationTime, node, qCharacteristics, data.getTypeInput()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java index 183cbf08b..8ed807267 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java @@ -8,8 +8,8 @@ import edu.ie3.datamodel.exceptions.ChargingPointTypeException; import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.ParsingException; +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EvcsInput; @@ -21,14 +21,14 @@ import java.util.UUID; /** - * Factory to create instances of {@link EvcsInput}s based on {@link SystemParticipantEntityData} - * and additional fields. + * Factory to create instances of {@link EvcsInput}s based on {@link NodeAssetInputEntityData} and + * additional fields. * * @version 0.1 * @since 26.07.20 */ public class EvcsInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String TYPE = "type"; private static final String CHARGING_POINTS = "chargingpoints"; @@ -47,14 +47,14 @@ protected String[] getAdditionalFields() { @Override protected EvcsInput buildModel( - SystemParticipantEntityData data, + NodeAssetInputEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); + final ChargingPointType type; try { type = ChargingPointTypeUtils.parse(data.getField(TYPE)); @@ -88,7 +88,6 @@ protected EvcsInput buildModel( operationTime, node, qCharacteristics, - em, type, chargingPoints, cosPhi, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java index bdede37bc..36e527b61 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java @@ -5,9 +5,9 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.FixedFeedInInput; @@ -17,7 +17,7 @@ import tech.units.indriya.ComparableQuantity; public class FixedFeedInInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String S_RATED = "srated"; private static final String COSPHI_RATED = "cosphirated"; @@ -33,18 +33,17 @@ protected String[] getAdditionalFields() { @Override protected FixedFeedInInput buildModel( - SystemParticipantEntityData data, + NodeAssetInputEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); final ComparableQuantity sRated = data.getQuantity(S_RATED, StandardUnits.S_RATED); final double cosPhiRated = data.getDouble(COSPHI_RATED); return new FixedFeedInInput( - uuid, id, operator, operationTime, node, qCharacteristics, em, sRated, cosPhiRated); + uuid, id, operator, operationTime, node, qCharacteristics, sRated, cosPhiRated); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java index a240b5f04..f4ea57dfb 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java @@ -5,8 +5,6 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.ConnectorInputEntityData; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.HpInput; @@ -21,10 +19,9 @@ public class HpInputEntityData extends SystemParticipantTypedEntityData fieldsToAttributes, NodeInput node, - EmInput em, HpTypeInput typeInput, ThermalBusInput thermalBusInput) { - super(fieldsToAttributes, HpInput.class, node, em, typeInput); + super(fieldsToAttributes, HpInput.class, node, typeInput); this.thermalBusInput = thermalBusInput; } @@ -32,16 +29,15 @@ public HpInputEntityData( Map fieldsToAttributes, OperatorInput operator, NodeInput node, - EmInput em, HpTypeInput typeInput, ThermalBusInput thermalBusInput) { - super(fieldsToAttributes, HpInput.class, operator, node, em, typeInput); + super(fieldsToAttributes, HpInput.class, operator, node, typeInput); this.thermalBusInput = thermalBusInput; } /** - * Creates a new HpInputEntityData object based on a given {@link ConnectorInputEntityData} object - * and given thermal bus input + * Creates a new HpInputEntityData object based on a given {@link + * SystemParticipantTypedEntityData} object and given thermal bus input * * @param entityData The SystemParticipantTypedEntityData object to enhance * @param thermalBusInput The thermal bus input diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java index b01ede298..cd814e044 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.HpInput; @@ -34,8 +33,6 @@ protected HpInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); - return new HpInput( uuid, id, @@ -44,7 +41,6 @@ protected HpInput buildModel( node, data.getThermalBusInput(), qCharacteristics, - em, data.getTypeInput()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java index 188504bb6..9d2cd7396 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.exceptions.ParsingException; +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.LoadInput; @@ -22,7 +22,7 @@ import tech.units.indriya.ComparableQuantity; public class LoadInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final Logger logger = LoggerFactory.getLogger(LoadInputFactory.class); private static final String LOAD_PROFILE = "loadprofile"; @@ -42,7 +42,7 @@ protected String[] getAdditionalFields() { @Override protected LoadInput buildModel( - SystemParticipantEntityData data, + NodeAssetInputEntityData data, UUID uuid, String id, NodeInput node, @@ -59,7 +59,6 @@ protected LoadInput buildModel( id); loadProfile = LoadProfile.DefaultLoadProfiles.NO_LOAD_PROFILE; } - final EmInput em = data.getEm().orElse(null); final boolean dsm = data.getBoolean(DSM); final ComparableQuantity eConsAnnual = data.getQuantity(E_CONS_ANNUAL, StandardUnits.ENERGY_IN); @@ -73,7 +72,6 @@ protected LoadInput buildModel( operationTime, node, qCharacteristics, - em, loadProfile, dsm, eConsAnnual, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java index 3d359fde2..23f7f70ae 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java @@ -5,9 +5,9 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.PvInput; @@ -19,7 +19,7 @@ import tech.units.indriya.ComparableQuantity; public class PvInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String ALBEDO = "albedo"; private static final String AZIMUTH = "azimuth"; private static final String ETA_CONV = "etaconv"; @@ -43,14 +43,13 @@ protected String[] getAdditionalFields() { @Override protected PvInput buildModel( - SystemParticipantEntityData data, + NodeAssetInputEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); final double albedo = data.getDouble(ALBEDO); final ComparableQuantity azimuth = data.getQuantity(AZIMUTH, StandardUnits.AZIMUTH); final ComparableQuantity etaConv = @@ -70,7 +69,6 @@ protected PvInput buildModel( operationTime, node, qCharacteristics, - em, albedo, azimuth, etaConv, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java index aea43ba85..04645c459 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.StorageInput; @@ -36,9 +35,7 @@ protected StorageInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - final EmInput em = data.getEm().orElse(null); final StorageTypeInput typeInput = data.getTypeInput(); - return new StorageInput( - uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput); + return new StorageInput(uuid, id, operator, operationTime, node, qCharacteristics, typeInput); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java deleted file mode 100644 index 971832be4..000000000 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.io.factory.input.participant; - -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; -import edu.ie3.datamodel.models.UniqueEntity; -import edu.ie3.datamodel.models.input.EmInput; -import edu.ie3.datamodel.models.input.NodeInput; -import edu.ie3.datamodel.models.input.OperatorInput; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -/** - * Data used for those classes of {@link - * edu.ie3.datamodel.models.input.system.SystemParticipantInput}, including an (optional) link to an - * {@link EmInput} entity. - */ -public class SystemParticipantEntityData extends NodeAssetInputEntityData { - - /** Energy management unit that is managing the system participant. Can be null. */ - private final EmInput em; - - /** - * Creates a new SystemParticipantEntityData object for an operated, always on system participant - * input - * - * @param fieldsToAttributes attribute map: field name to value - * @param entityClass class of the entity to be created with this data - * @param node input node - * @param em The energy management unit that is managing the system participant. Null, if the - * system participant is not managed. - */ - public SystemParticipantEntityData( - Map fieldsToAttributes, - Class entityClass, - NodeInput node, - EmInput em) { - super(fieldsToAttributes, entityClass, node); - this.em = em; - } - - public Optional getEm() { - return Optional.ofNullable(em); - } - - /** - * Creates a new SystemParticipantEntityData object for an operable system participant input - * - * @param fieldsToAttributes attribute map: field name to value - * @param entityClass class of the entity to be created with this data - * @param operator operator input - * @param node input node - * @param em The energy management unit that is managing the system participant. Null, if the - * system participant is not managed. - */ - public SystemParticipantEntityData( - Map fieldsToAttributes, - Class entityClass, - OperatorInput operator, - NodeInput node, - EmInput em) { - super(fieldsToAttributes, entityClass, operator, node); - this.em = em; - } - - /** - * Creates a new SystemParticipantEntityData object based on a given {@link - * NodeAssetInputEntityData} object and given energy management unit - * - * @param nodeAssetInputEntityData The node asset entity data object to use attributes of - * @param em The energy management unit that is managing the system participant. Null, if the - * system participant is not managed. - */ - public SystemParticipantEntityData( - NodeAssetInputEntityData nodeAssetInputEntityData, EmInput em) { - super(nodeAssetInputEntityData, nodeAssetInputEntityData.getNode()); - this.em = em; - } - - @Override - public String toString() { - return "SystemParticipantEntityData{" - + "em=" - + getEm().map(EmInput::toString).orElse("") - + ", node=" - + getNode().getUuid() - + ", operatorInput=" - + getOperatorInput().getUuid() - + ", fieldsToValues=" - + getFieldsToValues() - + ", targetClass=" - + getTargetClass() - + '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - SystemParticipantEntityData that = (SystemParticipantEntityData) o; - return getEm().equals(that.getEm()); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), getEm()); - } -} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java index e8101b582..cc7348200 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java @@ -27,13 +27,11 @@ * @since 28.01.20 */ public abstract class SystemParticipantInputEntityFactory< - T extends SystemParticipantInput, D extends SystemParticipantEntityData> + T extends SystemParticipantInput, D extends NodeAssetInputEntityData> extends AssetInputEntityFactory { private static final String Q_CHARACTERISTICS = "qcharacteristics"; - public static final String EM = "em"; - protected SystemParticipantInputEntityFactory(Class... allowedClasses) { super(allowedClasses); } @@ -43,10 +41,6 @@ protected List> getFields(D data) { List> fields = new ArrayList<>(super.getFields(data)); for (Set set : fields) set.add(Q_CHARACTERISTICS); - List> withEm = fields.stream().map(f -> (Set) expandSet(f, EM)).toList(); - - fields.addAll(withEm); - return fields; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java index ab0bbe4b3..871c70bd0 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java @@ -5,8 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.type.SystemParticipantTypeInput; @@ -22,7 +22,7 @@ * of the SystemParticipantInput */ public class SystemParticipantTypedEntityData - extends SystemParticipantEntityData { + extends NodeAssetInputEntityData { private final T typeInput; @@ -33,17 +33,14 @@ public class SystemParticipantTypedEntityData fieldsToAttributes, Class entityClass, NodeInput node, - EmInput em, T typeInput) { - super(fieldsToAttributes, entityClass, node, em); + super(fieldsToAttributes, entityClass, node); this.typeInput = typeInput; } @@ -55,8 +52,6 @@ public SystemParticipantTypedEntityData( * @param entityClass class of the entity to be created with this data * @param operator operator input * @param node input node - * @param em The energy management unit that is managing the system participant. Null, if the - * system participant is not managed. * @param typeInput type input */ public SystemParticipantTypedEntityData( @@ -64,23 +59,21 @@ public SystemParticipantTypedEntityData( Class entityClass, OperatorInput operator, NodeInput node, - EmInput em, T typeInput) { - super(fieldsToAttributes, entityClass, operator, node, em); + super(fieldsToAttributes, entityClass, operator, node); this.typeInput = typeInput; } /** * Creates a new SystemParticipantTypedEntityData object based on a given {@link - * SystemParticipantEntityData} object and given type input + * NodeAssetInputEntityData} object and given type input * - * @param systemParticipantEntityData The system participant entity data object to use attributes - * of + * @param nodeAssetEntityData The system participant entity data object to use attributes of * @param typeInput type input */ public SystemParticipantTypedEntityData( - SystemParticipantEntityData systemParticipantEntityData, T typeInput) { - super(systemParticipantEntityData, systemParticipantEntityData.getEm().orElse(null)); + NodeAssetInputEntityData nodeAssetEntityData, T typeInput) { + super(nodeAssetEntityData, nodeAssetEntityData.getNode()); this.typeInput = typeInput; } @@ -93,8 +86,6 @@ public String toString() { return "SystemParticipantTypedEntityData{" + "typeInput=" + typeInput.getUuid() - + ", em=" - + getEm().map(EmInput::toString).orElse("") + ", node=" + getNode().getUuid() + ", operatorInput=" diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java index c6159adeb..83bbbdd43 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.WecInput; @@ -38,10 +37,9 @@ protected WecInput buildModel( OperatorInput operator, OperationTime operationTime) { WecTypeInput typeInput = data.getTypeInput(); - EmInput em = data.getEm().orElse(null); final boolean marketReaction = data.getBoolean(MARKET_REACTION); return new WecInput( - uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput, marketReaction); + uuid, id, operator, operationTime, node, qCharacteristics, typeInput, marketReaction); } } diff --git a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java index 163d51b74..830fbef02 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.exceptions.EntityProcessorException; import edu.ie3.datamodel.io.factory.input.NodeInputFactory; import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor; +import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.UniqueEntity; @@ -235,12 +236,10 @@ protected String processMethodResult(Object methodReturnObject, Method method, S ((Optional) methodReturnObject) .map( o -> { - if (o instanceof Quantity quantity) { + if (o instanceof Quantity) { return Try.of( - () -> handleQuantity(quantity, fieldName), + () -> handleQuantity((Quantity) o, fieldName), EntityProcessorException.class); - } else if (o instanceof UniqueEntity entity) { - return Try.of(entity::getUuid, EntityProcessorException.class); } else { return Failure.of( new EntityProcessorException( @@ -275,8 +274,8 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "TimeSeries", "Transformer2WTypeInput", "Transformer3WTypeInput", - "WecTypeInput", - "EmInput" -> resultStringBuilder.append(((UniqueEntity) methodReturnObject).getUuid()); + "WecTypeInput" -> resultStringBuilder.append( + ((UniqueEntity) methodReturnObject).getUuid()); case "OperatorInput" -> resultStringBuilder.append( ((OperatorInput) methodReturnObject).getId().equalsIgnoreCase("NO_OPERATOR_ASSIGNED") ? "" @@ -290,6 +289,9 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "ReactivePowerCharacteristic", "CharacteristicInput" -> resultStringBuilder.append( ((CharacteristicInput) methodReturnObject).serialize()); + case "UUID[]" -> resultStringBuilder.append(processUUIDArray((UUID[]) methodReturnObject)); + case "ControlStrategy" -> resultStringBuilder.append( + ((ControlStrategy) methodReturnObject).getKey()); default -> throw new EntityProcessorException( "Unable to process value for attribute/field '" + fieldName @@ -370,6 +372,12 @@ protected String handleQuantity(Quantity quantity, String fieldName) protected abstract Try handleProcessorSpecificQuantity( Quantity quantity, String fieldName); + protected String processUUIDArray(UUID[] uuids) { + StringBuilder strb = new StringBuilder(); + for (UUID uuid : uuids) strb.append(uuid.toString()).append(" "); + return strb.toString().strip(); + } + /** * Handling of elements of type {@link OperationTime} * diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index b64c10edc..1aae01392 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -5,30 +5,26 @@ */ package edu.ie3.datamodel.io.source; -import static edu.ie3.datamodel.io.factory.input.participant.EmInputFactory.PARENT_EM; - import edu.ie3.datamodel.exceptions.SourceException; -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; -import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.utils.Try; -import java.util.List; +import edu.ie3.datamodel.models.input.container.EnergyManagementUnits; +import edu.ie3.datamodel.models.input.system.EmInput; import java.util.Map; +import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.Stream; public class EnergyManagementSource extends EntitySource { private final TypeSource typeSource; - private static final EmInputFactory emInputFactory = new EmInputFactory(); + private final EmInputFactory emInputFactory; public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { super(dataSource); this.typeSource = typeSource; + + this.emInputFactory = new EmInputFactory(); } /** @@ -36,11 +32,11 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the UUID of {@link EmInput}. + * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. * - * @return a map of UUID to {@link EmInput} entities + * @return a set of object and uuid unique {@link EmInput} entities */ - public Map getEmUnits() throws SourceException { + public EnergyManagementUnits getEmUnits() throws SourceException { Map operators = typeSource.getOperators(); return getEmUnits(operators); } @@ -48,7 +44,7 @@ public Map getEmUnits() throws SourceException { /** * This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the UUID of {@link EmInput}. + * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. * *

In contrast to {@link #getEmUnits()} this method provides the ability to pass in an already * existing set of {@link OperatorInput} entities, the {@link EmInput} instances depend on. Doing @@ -58,139 +54,16 @@ public Map getEmUnits() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities - * @return a map of UUID to {@link EmInput} entities - */ - public Map getEmUnits(Map operators) throws SourceException { - return createEmInputs(buildAssetInputEntityData(EmInput.class, operators)); - } - - /** - * Since each EM can itself be controlled by another EM, it does not suffice to link {@link - * EmInput}s via {@link EntitySource#optionallyEnrichEntityData} as we do for system participants - * in {@link SystemParticipantSource}. Instead, we use a recursive approach, starting with EMs at - * root level (which are not EM-controlled themselves). - * - * @param assetEntityDataStream the data stream of {@link AssetInputEntityData} {@link Try} - * objects - * @return a map of UUID to {@link EmInput} entities + * @param operators a map of UUID to object and uuid unique {@link OperatorInput} that should be + * used for the returning instances + * @return a set of object and uuid unique {@link EmInput} entities */ - private static Map createEmInputs( - Stream> assetEntityDataStream) + public EnergyManagementUnits getEmUnits(Map operators) throws SourceException { - - // Split stream by failures and EMs that are themselves EM-controlled on one side, and EMs at - // root position (that have not failed so far) on the other side, which do not have parents per - // definition. - Map>> split = - assetEntityDataStream.collect( - Collectors.partitioningBy( - dataTry -> - dataTry - .map( - data -> - data.containsKey(PARENT_EM) && !data.getField(PARENT_EM).isBlank()) - .getOrElse(() -> true))); - - List> rootEmsEntityData = split.get(false); - List> others = split.get(true); - - // at the start, this is only root ems - Map allEms = - unpackMap( - rootEmsEntityData.stream() - .parallel() - .map( - entityDataTry -> - entityDataTry.map( - entityData -> new EmAssetInputEntityData(entityData, null))) - .map(emInputFactory::get), + Set emUnits = + unpackSet( + buildAssetInputEntityData(EmInput.class, operators).map(emInputFactory::get), EmInput.class); - - if (!others.isEmpty()) { - // there's more EM levels beyond root level. Build them recursively - Stream othersWithParentUuid = - // We try to keep the Tries as long as possible so that as many failures as possible can - // be reported. At this point however, we need to "unpack" (and throw, if applicable), - // because without valid parent EM UUID, we cannot proceed. - unpack( - others.stream() - .map( - dataTry -> - dataTry.flatMap( - data -> { - // we already filtered out those entities that do not have a parent, - // so the field should exist - String uuidString = data.getField(PARENT_EM); - return Try.of( - () -> UUID.fromString(uuidString), - IllegalArgumentException.class) - .transformF( - iae -> - new SourceException( - String.format( - "Exception while trying to parse UUID of field \"%s\" with value \"%s\"", - PARENT_EM, uuidString), - iae)) - // failed UUID parses are filtered out at this point. We save - // the parsed UUID with the asset data - .map( - parentUuid -> - new AssetDataAndValidParentUuid(data, parentUuid)); - })), - AssetDataAndValidParentUuid.class); - - allEms.putAll(createHierarchicalEmInputs(othersWithParentUuid, allEms)); - } - - return allEms; + return new EnergyManagementUnits(emUnits); } - - private static Map createHierarchicalEmInputs( - Stream assetEntityDataStream, Map lastLevelEms) - throws SourceException { - - // Split stream by assets whose parent is already built (which can be built at this level), and - // those whose parents are not built yet (which have to be built at some lower recursion level - // or not at all) - Map> split = - assetEntityDataStream.collect( - Collectors.partitioningBy(data -> lastLevelEms.containsKey(data.parentEm))); - - List toBeBuiltAtThisLevel = split.get(true); - List toBeBuiltAtNextLevel = split.get(false); - - if (toBeBuiltAtThisLevel.isEmpty()) { - // Since we only start a new recursion step if the asset data stream is not empty, there have - // to be EMs to be built at next level. This does not work if there's no EMs at the current - // recursion level. - throw new SourceException( - "EMs " + toBeBuiltAtNextLevel + " were assigned a parent EM that does not exist."); - } else { - // New EMs can be built at this level - Map newEms = - unpackMap( - toBeBuiltAtThisLevel.stream() - .map( - data -> { - // exists because we checked above - EmInput parentEm = lastLevelEms.get(data.parentEm); - return emInputFactory.get( - new EmAssetInputEntityData(data.entityData, parentEm)); - }), - EmInput.class); - - if (!toBeBuiltAtNextLevel.isEmpty()) { - // If there's more EMs left to build, the new EMs have to function as parents there - newEms.putAll(createHierarchicalEmInputs(toBeBuiltAtNextLevel.stream(), newEms)); - } - return newEms; - } - } - - /** - * Helper data record that holds an {@link AssetInputEntityData} and the UUID successfully parsed - * from {@link EmInputFactory#PARENT_EM} field - */ - private record AssetDataAndValidParentUuid(AssetInputEntityData entityData, UUID parentEm) {} } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 29d44be56..dbb9d0af8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -9,7 +9,6 @@ import edu.ie3.datamodel.exceptions.SystemParticipantsException; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.*; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.container.SystemParticipants; @@ -34,7 +33,6 @@ public class SystemParticipantSource extends EntitySource { private final TypeSource typeSource; private final RawGridSource rawGridSource; private final ThermalSource thermalSource; - private final EnergyManagementSource energyManagementSource; // factories private final BmInputFactory bmInputFactory; @@ -52,14 +50,12 @@ public SystemParticipantSource( TypeSource typeSource, ThermalSource thermalSource, RawGridSource rawGridSource, - EnergyManagementSource energyManagementSource, DataSource dataSource) { super(dataSource); this.typeSource = typeSource; this.rawGridSource = rawGridSource; this.thermalSource = thermalSource; - this.energyManagementSource = energyManagementSource; // init factories this.bmInputFactory = new BmInputFactory(); @@ -137,7 +133,6 @@ public SystemParticipants getSystemParticipants( Map hpTypes = typeSource.getHpTypes(); Map storageTypes = typeSource.getStorageTypes(); Map wecTypes = typeSource.getWecTypes(); - Map emUnits = energyManagementSource.getEmUnits(); /// go on with the thermal assets Map thermalBuses = thermalSource.getThermalBuses(operators); @@ -145,29 +140,27 @@ public SystemParticipants getSystemParticipants( thermalSource.getThermalStorages(operators, thermalBuses); Try, SourceException> fixedFeedInInputs = - Try.of(() -> getFixedFeedIns(operators, nodes, emUnits), SourceException.class); + Try.of(() -> getFixedFeedIns(operators, nodes), SourceException.class); Try, SourceException> pvInputs = - Try.of(() -> getPvPlants(operators, nodes, emUnits), SourceException.class); + Try.of(() -> getPvPlants(operators, nodes), SourceException.class); Try, SourceException> loads = - Try.of(() -> getLoads(operators, nodes, emUnits), SourceException.class); + Try.of(() -> getLoads(operators, nodes), SourceException.class); Try, SourceException> bmInputs = - Try.of(() -> getBmPlants(operators, nodes, emUnits, bmTypes), SourceException.class); + Try.of(() -> getBmPlants(operators, nodes, bmTypes), SourceException.class); Try, SourceException> storages = - Try.of(() -> getStorages(operators, nodes, emUnits, storageTypes), SourceException.class); + Try.of(() -> getStorages(operators, nodes, storageTypes), SourceException.class); Try, SourceException> wecInputs = - Try.of(() -> getWecPlants(operators, nodes, emUnits, wecTypes), SourceException.class); + Try.of(() -> getWecPlants(operators, nodes, wecTypes), SourceException.class); Try, SourceException> evs = - Try.of(() -> getEvs(operators, nodes, emUnits, evTypes), SourceException.class); + Try.of(() -> getEvs(operators, nodes, evTypes), SourceException.class); Try, SourceException> evcs = - Try.of(() -> getEvcs(operators, nodes, emUnits), SourceException.class); + Try.of(() -> getEvcs(operators, nodes), SourceException.class); Try, SourceException> chpInputs = Try.of( - () -> getChpPlants(operators, nodes, emUnits, chpTypes, thermalBuses, thermalStorages), + () -> getChpPlants(operators, nodes, chpTypes, thermalBuses, thermalStorages), SourceException.class); Try, SourceException> hpInputs = - Try.of( - () -> getHeatPumps(operators, nodes, emUnits, hpTypes, thermalBuses), - SourceException.class); + Try.of(() -> getHeatPumps(operators, nodes, hpTypes, thermalBuses), SourceException.class); List exceptions = Try.getExceptions( @@ -217,8 +210,7 @@ public SystemParticipants getSystemParticipants( */ public Set getFixedFeedIns() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getFixedFeedIns(operators, rawGridSource.getNodes(operators), emUnits); + return getFixedFeedIns(operators, rawGridSource.getNodes(operators)); } /** @@ -237,14 +229,12 @@ public Set getFixedFeedIns() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link FixedFeedInInput} entities */ public Set getFixedFeedIns( - Map operators, Map nodes, Map emUnits) - throws SourceException { + Map operators, Map nodes) throws SourceException { return unpackSet( - buildSystemParticipantEntityData(FixedFeedInInput.class, operators, nodes, emUnits) + buildNodeAssetEntityData(FixedFeedInInput.class, operators, nodes) .map(fixedFeedInInputFactory::get), FixedFeedInInput.class); } @@ -260,8 +250,7 @@ public Set getFixedFeedIns( */ public Set getPvPlants() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getPvPlants(operators, rawGridSource.getNodes(operators), emUnits); + return getPvPlants(operators, rawGridSource.getNodes(operators)); } /** @@ -280,15 +269,12 @@ public Set getPvPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link PvInput} entities */ - public Set getPvPlants( - Map operators, Map nodes, Map emUnits) + public Set getPvPlants(Map operators, Map nodes) throws SourceException { return unpackSet( - buildSystemParticipantEntityData(PvInput.class, operators, nodes, emUnits) - .map(pvInputFactory::get), + buildNodeAssetEntityData(PvInput.class, operators, nodes).map(pvInputFactory::get), PvInput.class); } @@ -303,8 +289,7 @@ public Set getPvPlants( */ public Set getLoads() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getLoads(operators, rawGridSource.getNodes(operators), emUnits); + return getLoads(operators, rawGridSource.getNodes(operators)); } /** @@ -323,15 +308,12 @@ public Set getLoads() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link LoadInput} entities */ - public Set getLoads( - Map operators, Map nodes, Map emUnits) + public Set getLoads(Map operators, Map nodes) throws SourceException { return unpackSet( - buildSystemParticipantEntityData(LoadInput.class, operators, nodes, emUnits) - .map(loadInputFactory::get), + buildNodeAssetEntityData(LoadInput.class, operators, nodes).map(loadInputFactory::get), LoadInput.class); } @@ -346,8 +328,7 @@ public Set getLoads( */ public Set getEvcs() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getEvcs(operators, rawGridSource.getNodes(operators), emUnits); + return getEvcs(operators, rawGridSource.getNodes(operators)); } /** @@ -366,15 +347,12 @@ public Set getEvcs() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link EvcsInput} entities */ - public Set getEvcs( - Map operators, Map nodes, Map emUnits) + public Set getEvcs(Map operators, Map nodes) throws SourceException { return unpackSet( - buildSystemParticipantEntityData(EvcsInput.class, operators, nodes, emUnits) - .map(evcsInputFactory::get), + buildNodeAssetEntityData(EvcsInput.class, operators, nodes).map(evcsInputFactory::get), EvcsInput.class); } @@ -389,9 +367,7 @@ public Set getEvcs( */ public Set getBmPlants() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getBmPlants( - operators, rawGridSource.getNodes(operators), emUnits, typeSource.getBmTypes()); + return getBmPlants(operators, rawGridSource.getNodes(operators), typeSource.getBmTypes()); } /** @@ -410,18 +386,14 @@ public Set getBmPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link BmTypeInput} entities * @return a set of object- and uuid-unique {@link BmInput} entities */ public Set getBmPlants( - Map operators, - Map nodes, - Map emUnits, - Map types) + Map operators, Map nodes, Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(BmInput.class, operators, nodes, emUnits, types) + buildTypedSystemParticipantEntityData(BmInput.class, operators, nodes, types) .map(bmInputFactory::get), BmInput.class); } @@ -438,9 +410,7 @@ public Set getBmPlants( */ public Set getStorages() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getStorages( - operators, rawGridSource.getNodes(operators), emUnits, typeSource.getStorageTypes()); + return getStorages(operators, rawGridSource.getNodes(operators), typeSource.getStorageTypes()); } /** @@ -460,18 +430,16 @@ public Set getStorages() throws SourceException { * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} that should be * used for the returning instances * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link StorageTypeInput} entities * @return a set of object- and uuid-unique {@link StorageInput} entities */ public Set getStorages( Map operators, Map nodes, - Map emUnits, Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(StorageInput.class, operators, nodes, emUnits, types) + buildTypedSystemParticipantEntityData(StorageInput.class, operators, nodes, types) .map(storageInputFactory::get), StorageInput.class); } @@ -487,9 +455,7 @@ public Set getStorages( */ public Set getWecPlants() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getWecPlants( - operators, rawGridSource.getNodes(operators), emUnits, typeSource.getWecTypes()); + return getWecPlants(operators, rawGridSource.getNodes(operators), typeSource.getWecTypes()); } /** @@ -508,18 +474,14 @@ public Set getWecPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link WecTypeInput} entities * @return a set of object- and uuid-unique {@link WecInput} entities */ public Set getWecPlants( - Map operators, - Map nodes, - Map emUnits, - Map types) + Map operators, Map nodes, Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(WecInput.class, operators, nodes, emUnits, types) + buildTypedSystemParticipantEntityData(WecInput.class, operators, nodes, types) .map(wecInputFactory::get), WecInput.class); } @@ -535,8 +497,7 @@ public Set getWecPlants( */ public Set getEvs() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); - return getEvs(operators, rawGridSource.getNodes(operators), emUnits, typeSource.getEvTypes()); + return getEvs(operators, rawGridSource.getNodes(operators), typeSource.getEvTypes()); } /** @@ -555,30 +516,24 @@ public Set getEvs() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link EvTypeInput} entities * @return a set of object- and uuid-unique {@link EvInput} entities */ public Set getEvs( - Map operators, - Map nodes, - Map emUnits, - Map types) + Map operators, Map nodes, Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(EvInput.class, operators, nodes, emUnits, types) + buildTypedSystemParticipantEntityData(EvInput.class, operators, nodes, types) .map(evInputFactory::get), EvInput.class); } public Set getChpPlants() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); Map thermalBuses = thermalSource.getThermalBuses(operators); return getChpPlants( operators, rawGridSource.getNodes(operators), - emUnits, typeSource.getChpTypes(), thermalBuses, thermalSource.getThermalStorages(operators, thermalBuses)); @@ -596,7 +551,6 @@ public Set getChpPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link ChpTypeInput} entities * @param thermalBuses a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities * @param thermalStorages a map of UUID to object- and uuid-unique {@link ThermalStorageInput} @@ -606,15 +560,13 @@ public Set getChpPlants() throws SourceException { public Set getChpPlants( Map operators, Map nodes, - Map emUnits, Map types, Map thermalBuses, Map thermalStorages) throws SourceException { return unpackSet( chpEntityStream( - buildTypedSystemParticipantEntityData( - ChpInput.class, operators, nodes, emUnits, types), + buildTypedSystemParticipantEntityData(ChpInput.class, operators, nodes, types), thermalStorages, thermalBuses) .map(chpInputFactory::get), @@ -623,11 +575,9 @@ public Set getChpPlants( public Set getHeatPumps() throws SourceException { Map operators = typeSource.getOperators(); - Map emUnits = energyManagementSource.getEmUnits(operators); return getHeatPumps( operators, rawGridSource.getNodes(operators), - emUnits, typeSource.getHpTypes(), thermalSource.getThermalBuses()); } @@ -644,7 +594,6 @@ public Set getHeatPumps() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities - * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link HpTypeInput} entities * @param thermalBuses a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities * @return a set of object- and uuid-unique {@link HpInput} entities @@ -652,14 +601,12 @@ public Set getHeatPumps() throws SourceException { public Set getHeatPumps( Map operators, Map nodes, - Map emUnits, Map types, Map thermalBuses) throws SourceException { return unpackSet( hpEntityStream( - buildTypedSystemParticipantEntityData( - HpInput.class, operators, nodes, emUnits, types), + buildTypedSystemParticipantEntityData(HpInput.class, operators, nodes, types), thermalBuses) .map(hpInputFactory::get), HpInput.class); @@ -729,19 +676,17 @@ private static Stream> hpEntityStream( Class entityClass, Map operators, Map nodes, - Map emUnits, Map types) { return typedSystemParticipantEntityStream( - buildSystemParticipantEntityData(entityClass, operators, nodes, emUnits), types); + buildNodeAssetEntityData(entityClass, operators, nodes), types); } /** - * Enriches a given stream of {@link SystemParticipantEntityData} {@link Try} objects with a type - * of {@link SystemParticipantTypeInput} based on the provided collection of types and the fields - * to values mapping that inside the already provided {@link SystemParticipantEntityData} - * instance. + * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of + * {@link SystemParticipantTypeInput} based on the provided collection of types and the fields to + * values mapping that inside the already provided {@link NodeAssetInputEntityData} instance. * - * @param systemParticipantEntityDataStream the data stream of {@link SystemParticipantEntityData} + * @param systemParticipantEntityDataStream the data stream of {@link NodeAssetInputEntityData} * {@link Try} objects * @param types the types that should be used for enrichment and to build {@link * SystemParticipantTypedEntityData} from @@ -752,7 +697,7 @@ private static Stream> hpEntityStream( private static Stream, SourceException>> typedSystemParticipantEntityStream( - Stream> + Stream> systemParticipantEntityDataStream, Map types) { return systemParticipantEntityDataStream @@ -767,43 +712,4 @@ private static Stream> hpEntityStream( types, SystemParticipantTypedEntityData::new))); } - - private Stream> - buildSystemParticipantEntityData( - Class entityClass, - Map operators, - Map nodes, - Map emUnits) { - return systemParticipantEntityStream( - buildNodeAssetEntityData(entityClass, operators, nodes), emUnits); - } - - /** - * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of - * {@link EmInput} based on the provided collection of EMs and the fields to values mapping that - * inside the already provided {@link NodeAssetInputEntityData} instance. - * - * @param nodeAssetEntityDataStream the data stream of {@link NodeAssetInputEntityData} {@link - * Try} objects - * @param emUnits the energy management units that should be used for enrichment and to build - * {@link SystemParticipantEntityData} from - * @return a stream of tries of {@link SystemParticipantEntityData} instances - */ - private static Stream> - systemParticipantEntityStream( - Stream> nodeAssetEntityDataStream, - Map emUnits) { - return nodeAssetEntityDataStream - .parallel() - .map( - nodeAssetInputEntityDataTry -> - nodeAssetInputEntityDataTry.flatMap( - nodeAssetInputEntityData -> - optionallyEnrichEntityData( - nodeAssetInputEntityData, - SystemParticipantInputEntityFactory.EM, - emUnits, - null, - SystemParticipantEntityData::new))); - } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 1ea0f0afd..6815c3826 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -51,9 +51,9 @@ public static JointGridContainer read( TypeSource typeSource = new TypeSource(dataSource); RawGridSource rawGridSource = new RawGridSource(typeSource, dataSource); ThermalSource thermalSource = new ThermalSource(typeSource, dataSource); - EnergyManagementSource emSource = new EnergyManagementSource(typeSource, dataSource); SystemParticipantSource systemParticipantSource = - new SystemParticipantSource(typeSource, thermalSource, rawGridSource, emSource, dataSource); + new SystemParticipantSource(typeSource, thermalSource, rawGridSource, dataSource); + EnergyManagementSource emSource = new EnergyManagementSource(typeSource, dataSource); GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* Loading basic inputs that are used multiple times */ @@ -71,6 +71,8 @@ public static JointGridContainer read( Try.of( () -> systemParticipantSource.getSystemParticipants(operators, nodes), SourceException.class); + Try emUnits = + Try.of(() -> emSource.getEmUnits(operators), SourceException.class); Try graphicElements = Try.of(() -> graphicSource.getGraphicElements(nodes, lines), SourceException.class); @@ -87,6 +89,7 @@ public static JointGridContainer read( gridName, rawGridElements.getOrThrow(), systemParticipants.getOrThrow(), + emUnits.getOrThrow(), graphicElements.getOrThrow()); } } diff --git a/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java b/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java new file mode 100644 index 000000000..61ad82ddf --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java @@ -0,0 +1,35 @@ +/* + * © 2022. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models; + +import edu.ie3.datamodel.exceptions.ParsingException; +import java.io.Serializable; +import java.util.Arrays; + +public interface ControlStrategy extends Serializable { + String getKey(); + + static ControlStrategy parse(String key) throws ParsingException { + if (key == null || key.isEmpty()) + return ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY; + + String filterKey = key.toLowerCase().replace("-", "_"); + return Arrays.stream(EmControlStrategy.values()) + .filter(profile -> profile.getKey().equals(filterKey)) + .findFirst() + .orElseThrow( + () -> new ParsingException("Cannot parse \"" + key + "\" to a valid control strategy")); + } + + enum DefaultControlStrategies implements ControlStrategy { + NO_CONTROL_STRATEGY; + + @Override + public String getKey() { + return "No control strategy assigned"; + } + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java b/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java new file mode 100644 index 000000000..ffb216a35 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java @@ -0,0 +1,45 @@ +/* + * © 2022. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models; + +import java.util.Arrays; +import java.util.Locale; +import java.util.stream.Collectors; + +public enum EmControlStrategy implements ControlStrategy { + SELF_OPTIMIZATION("self_optimization"); + + private final String key; + + EmControlStrategy(String key) { + this.key = key.toLowerCase(Locale.ROOT); + } + + public static EmControlStrategy get(String key) { + return Arrays.stream(EmControlStrategy.values()) + .filter(controlStrategy -> controlStrategy.key.equalsIgnoreCase(key)) + .findFirst() + .orElseThrow( + () -> + new IllegalArgumentException( + "No predefined energy management control strategy '" + + key + + "' found. Please provide one of the following keys: " + + Arrays.stream(EmControlStrategy.values()) + .map(EmControlStrategy::getKey) + .collect(Collectors.joining(", ")))); + } + + @Override + public String getKey() { + return key; + } + + @Override + public String toString() { + return "EmControlStrategy{" + "key='" + key + '\'' + '}'; + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java deleted file mode 100644 index 1376caa1c..000000000 --- a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models.input; - -import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.UniqueEntity; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; - -public class EmInput extends AssetInput { - - /** Reference to the control strategy to be used for this model */ - private final String controlStrategy; - - /** - * Optional UUID of the parent {@link EmInput} that is controlling this em unit. If null, this em - * unit is not em-controlled. - */ - private final EmInput parentEm; - - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param operator of the asset - * @param operationTime time for which the entity is operated - * @param emControlStrategy the control strategy - * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. - */ - public EmInput( - UUID uuid, - String id, - OperatorInput operator, - OperationTime operationTime, - String emControlStrategy, - EmInput parentEm) { - super(uuid, id, operator, operationTime); - this.controlStrategy = emControlStrategy; - this.parentEm = parentEm; - } - - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param emControlStrategy the control strategy - * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. - */ - public EmInput(UUID uuid, String id, String emControlStrategy, EmInput parentEm) { - super(uuid, id); - this.controlStrategy = emControlStrategy; - this.parentEm = parentEm; - } - - public String getControlStrategy() { - return controlStrategy; - } - - public Optional getParentEm() { - return Optional.ofNullable(parentEm); - } - - @Override - public EmInputCopyBuilder copy() { - return new EmInputCopyBuilder(this); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof EmInput emInput)) return false; - if (!super.equals(o)) return false; - return Objects.equals(controlStrategy, emInput.controlStrategy) - && Objects.equals(parentEm, emInput.parentEm); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), controlStrategy, parentEm); - } - - @Override - public String toString() { - return "EmInput{" - + "uuid=" - + getUuid() - + ", id='" - + getId() - + ", operator=" - + getOperator().getUuid() - + ", operationTime=" - + getOperationTime() - + ", controlStrategy=" - + getControlStrategy() - + ", parentEm=" - + getParentEm().map(UniqueEntity::getUuid).map(UUID::toString).orElse("") - + '}'; - } - - public static class EmInputCopyBuilder extends AssetInputCopyBuilder { - - private String controlStrategy; - - private EmInput parentEm; - - protected EmInputCopyBuilder(EmInput entity) { - super(entity); - this.controlStrategy = entity.getControlStrategy(); - this.parentEm = entity.parentEm; - } - - public EmInputCopyBuilder controlStrategy(String controlStrategy) { - this.controlStrategy = controlStrategy; - return this; - } - - public EmInputCopyBuilder parentEm(EmInput parentEm) { - this.parentEm = parentEm; - return thisInstance(); - } - - @Override - public EmInput build() { - return new EmInput( - getUuid(), getId(), getOperator(), getOperationTime(), controlStrategy, parentEm); - } - - @Override - protected EmInputCopyBuilder thisInstance() { - return this; - } - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java new file mode 100644 index 000000000..4142a745d --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java @@ -0,0 +1,100 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models.input.container; + +import edu.ie3.datamodel.models.input.system.EmInput; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** Represents the accumulation of energy management units */ +public class EnergyManagementUnits implements InputContainer { + + protected final Map emUnits; + + public EnergyManagementUnits(Set emUnits) { + this.emUnits = + emUnits.stream().collect(Collectors.toMap(EmInput::getUuid, Function.identity())); + } + + /** + * Combine different already existing containers + * + * @param emUnits already existing containers + */ + public EnergyManagementUnits(Collection emUnits) { + this.emUnits = + emUnits.stream() + .flatMap(units -> units.emUnits.entrySet().stream()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + public Set getEmUnits() { + return new HashSet<>(emUnits.values()); + } + + @Override + public List allEntitiesAsList() { + return emUnits.values().stream().toList(); + } + + // TODO useful once #957 is implemented + public Map getEmUnitsMap() { + return emUnits; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EnergyManagementUnits that)) return false; + return Objects.equals(emUnits, that.emUnits); + } + + @Override + public int hashCode() { + return Objects.hash(emUnits); + } + + @Override + public EnergyManagementUnitsCopyBuilder copy() { + return new EnergyManagementUnitsCopyBuilder(this); + } + + /** + * A builder pattern based approach to create copies of {@link EnergyManagementUnits} containers + * with altered field values. For detailed field descriptions refer to java docs of {@link + * EnergyManagementUnits} + */ + public static class EnergyManagementUnitsCopyBuilder + implements InputContainerCopyBuilder { + protected Set emUnits; + + /** + * Constructor for {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} + * + * @param energyManagementUnits instance of {@link EnergyManagementUnits} + */ + protected EnergyManagementUnitsCopyBuilder(EnergyManagementUnits energyManagementUnits) { + this.emUnits = energyManagementUnits.getEmUnits(); + } + + /** + * Method to alter the {@link EmInput}s + * + * @param emUnits set of altered {@link EmInput}s + * @return this instance of {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} + */ + public EnergyManagementUnits.EnergyManagementUnitsCopyBuilder emUnits(Set emUnits) { + this.emUnits = emUnits; + return this; + } + + @Override + public EnergyManagementUnits build() { + return new EnergyManagementUnits(emUnits); + } + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java index 3c076cfff..12f5b7c9d 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java +++ b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java @@ -15,6 +15,8 @@ public abstract class GridContainer implements InputContainer { protected final RawGridElements rawGrid; /** Accumulated system participant elements */ protected final SystemParticipants systemParticipants; + /** Accumulated energy management units */ + protected final EnergyManagementUnits emUnits; /** Accumulated graphic data entities (node graphics, line graphics) */ protected final GraphicElements graphics; @@ -22,11 +24,13 @@ protected GridContainer( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, + EnergyManagementUnits emUnits, GraphicElements graphics) { this.gridName = gridName; this.rawGrid = rawGrid; this.systemParticipants = systemParticipants; + this.emUnits = emUnits; this.graphics = graphics; } @@ -35,6 +39,7 @@ public List allEntitiesAsList() { List allEntities = new LinkedList<>(); allEntities.addAll(rawGrid.allEntitiesAsList()); allEntities.addAll(systemParticipants.allEntitiesAsList()); + allEntities.addAll(emUnits.allEntitiesAsList()); allEntities.addAll(graphics.allEntitiesAsList()); return Collections.unmodifiableList(allEntities); } @@ -55,6 +60,10 @@ public SystemParticipants getSystemParticipants() { return systemParticipants; } + public EnergyManagementUnits getEmUnits() { + return emUnits; + } + public GraphicElements getGraphics() { return graphics; } @@ -66,12 +75,13 @@ public boolean equals(Object o) { return gridName.equals(that.gridName) && rawGrid.equals(that.rawGrid) && systemParticipants.equals(that.systemParticipants) + && emUnits.equals(that.emUnits) && graphics.equals(that.graphics); } @Override public int hashCode() { - return Objects.hash(gridName, rawGrid, systemParticipants, graphics); + return Objects.hash(gridName, rawGrid, systemParticipants, emUnits, graphics); } @Override @@ -91,6 +101,7 @@ protected abstract static class GridContainerCopyBuilder feedInTariff) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.type = type; this.marketReaction = marketReaction; this.costControlled = costControlled; @@ -73,7 +70,6 @@ public BmInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of BM * @param marketReaction Is this asset market oriented? * @param costControlled Does this plant increase the output power if the revenues exceed the @@ -85,12 +81,11 @@ public BmInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, BmTypeInput type, boolean marketReaction, boolean costControlled, ComparableQuantity feedInTariff) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.type = type; this.marketReaction = marketReaction; this.costControlled = costControlled; @@ -149,9 +144,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() - + ", type=" + + '\'' + + "type=" + type.getUuid() + ", marketReaction=" + marketReaction @@ -214,7 +208,6 @@ public BmInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), type, marketReaction, costControlled, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java index 1478c949b..422817ecb 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java @@ -9,7 +9,6 @@ import edu.ie3.datamodel.io.extractor.HasThermalStorage; import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -42,7 +41,6 @@ public class ChpInput extends SystemParticipantInput * @param thermalBus The thermal bus, this model is connected to (normally equal to the thermal * bus of the provided thermal storage!) * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of CHP * @param thermalStorage Thermal storage model * @param marketReaction Is this asset market oriented? @@ -55,11 +53,10 @@ public ChpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ChpTypeInput type, ThermalStorageInput thermalStorage, boolean marketReaction) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.thermalBus = thermalBus; this.type = type; this.thermalStorage = thermalStorage; @@ -75,7 +72,6 @@ public ChpInput( * @param thermalBus The thermal bus, this model is connected to (normally equal to the thermal * bus of the provided thermal storage!) * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of CHP * @param thermalStorage Thermal storage model * @param marketReaction Is this asset market oriented? @@ -86,11 +82,10 @@ public ChpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ChpTypeInput type, ThermalStorageInput thermalStorage, boolean marketReaction) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.thermalBus = thermalBus; this.type = type; this.thermalStorage = thermalStorage; @@ -150,8 +145,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", thermalBus=" + thermalBus.getUuid() + ", type=" @@ -196,7 +190,6 @@ public ChpInput build() { getNode(), thermalBus, getqCharacteristics(), - getEm(), type, thermalStorage, marketReaction); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java new file mode 100644 index 000000000..f9bbbaa9f --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java @@ -0,0 +1,176 @@ +/* + * © 2022. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models.input.system; + +import edu.ie3.datamodel.models.ControlStrategy; +import edu.ie3.datamodel.models.EmControlStrategy; +import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.AssetInput; +import edu.ie3.datamodel.models.input.OperatorInput; +import java.util.Arrays; +import java.util.Objects; +import java.util.UUID; + +public class EmInput extends AssetInput { + + /** Reference via UUID to all SystemParticipantInputs connected to this model */ + private final UUID[] connectedAssets; + + /** Reference to the control strategy to be used for this model */ + private final ControlStrategy controlStrategy; + /** + * Constructor for an operated energy management system + * + * @param uuid of the input entity + * @param id of the asset + * @param operator of the asset + * @param operationTime time for which the entity is operated + * @param connectedAssets array of all connected assets + * @param controlStrategy control strategy used for this model + */ + public EmInput( + UUID uuid, + String id, + OperatorInput operator, + OperationTime operationTime, + UUID[] connectedAssets, + ControlStrategy controlStrategy) { + super(uuid, id, operator, operationTime); + this.connectedAssets = connectedAssets; + this.controlStrategy = controlStrategy; + } + + /** + * Constructor for an operated energy management system + * + * @param uuid of the input entity + * @param id of the asset + * @param operator of the asset + * @param operationTime time for which the entity is operated + * @param connectedAssets array of all connected assets + * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy + * key + */ + public EmInput( + UUID uuid, + String id, + OperatorInput operator, + OperationTime operationTime, + UUID[] connectedAssets, + String emControlStrategy) { + super(uuid, id, operator, operationTime); + this.connectedAssets = connectedAssets; + this.controlStrategy = EmControlStrategy.get(emControlStrategy); + } + + /** + * Constructor for an operated energy management system + * + * @param uuid of the input entity + * @param id of the asset + * @param connectedAssets array of all connected assets + * @param controlStrategy control strategy used for this model + */ + public EmInput(UUID uuid, String id, UUID[] connectedAssets, ControlStrategy controlStrategy) { + super(uuid, id); + this.connectedAssets = connectedAssets; + this.controlStrategy = controlStrategy; + } + + /** + * Constructor for an operated energy management system + * + * @param uuid of the input entity + * @param id of the asset + * @param connectedAssets array of all connected assets + * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy + * key + */ + public EmInput(UUID uuid, String id, UUID[] connectedAssets, String emControlStrategy) { + super(uuid, id); + this.connectedAssets = connectedAssets; + this.controlStrategy = EmControlStrategy.get(emControlStrategy); + } + + public UUID[] getConnectedAssets() { + return connectedAssets; + } + + public ControlStrategy getControlStrategy() { + return controlStrategy; + } + + @Override + public EmInputCopyBuilder copy() { + return new EmInputCopyBuilder(this); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EmInput emInput)) return false; + if (!super.equals(o)) return false; + return Arrays.equals(connectedAssets, emInput.connectedAssets) + && controlStrategy == emInput.controlStrategy; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), Arrays.hashCode(connectedAssets), controlStrategy); + } + + @Override + public String toString() { + return "EmInput{" + + "uuid=" + + getUuid() + + ", id='" + + getId() + + ", operator=" + + getOperator().getUuid() + + ", operationTime=" + + getOperationTime() + + ", connectedAssets=" + + Arrays.toString(connectedAssets) + + ", controlStrategy=" + + controlStrategy + + '}'; + } + + public static class EmInputCopyBuilder extends AssetInputCopyBuilder { + + private UUID[] connectedAssets; + + private ControlStrategy controlStrategy; + + protected EmInputCopyBuilder(EmInput entity) { + super(entity); + this.connectedAssets = entity.getConnectedAssets(); + this.controlStrategy = entity.getControlStrategy(); + } + + public EmInputCopyBuilder connectedAssets(UUID[] connectedAssets) { + this.connectedAssets = connectedAssets; + return this; + } + + public EmInputCopyBuilder controlStrategy(ControlStrategy controlStrategy) { + this.controlStrategy = controlStrategy; + return this; + } + + @Override + public EmInput build() { + return new EmInput( + getUuid(), getId(), getOperator(), getOperationTime(), connectedAssets, controlStrategy); + } + + @Override + protected EmInputCopyBuilder thisInstance() { + return this; + } + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java index b4796b844..5f2edeae9 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -29,7 +28,6 @@ public class EvInput extends SystemParticipantInput implements HasType { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of EV */ public EvInput( @@ -39,9 +37,8 @@ public EvInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, EvTypeInput type) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.type = type; } @@ -52,7 +49,6 @@ public EvInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of EV */ public EvInput( @@ -60,9 +56,8 @@ public EvInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, EvTypeInput type) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.type = type; } @@ -103,8 +98,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", type=" + type.getUuid() + '}'; @@ -136,7 +130,6 @@ public EvInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), type); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java index 8513edd5c..e3f3c381f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.models.input.system; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -39,7 +38,6 @@ public class EvcsInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param chargingPoints number of charging points available at this charging station * @param cosPhiRated rated cos phi @@ -53,13 +51,12 @@ public EvcsInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ChargingPointType type, int chargingPoints, double cosPhiRated, EvcsLocationType locationType, boolean v2gSupport) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.type = type; this.chargingPoints = chargingPoints; this.cosPhiRated = cosPhiRated; @@ -74,7 +71,6 @@ public EvcsInput( * @param operationTime Time for which the entity is operated * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param cosPhiRated rated cos phi * @param locationType the location type @@ -87,7 +83,6 @@ public EvcsInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ChargingPointType type, double cosPhiRated, EvcsLocationType locationType, @@ -99,7 +94,6 @@ public EvcsInput( operationTime, node, qCharacteristics, - em, type, 1, cosPhiRated, @@ -111,7 +105,6 @@ public EvcsInput( * @param id Human readable identifier * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param chargingPoints number of charging points available at this charging station * @param cosPhiRated rated cos phi @@ -123,13 +116,12 @@ public EvcsInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ChargingPointType type, int chargingPoints, double cosPhiRated, EvcsLocationType locationType, boolean v2gSupport) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.type = type; this.chargingPoints = chargingPoints; this.cosPhiRated = cosPhiRated; @@ -142,7 +134,6 @@ public EvcsInput( * @param id Human readable identifier * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param cosPhiRated rated cos phi * @param locationType the location type @@ -153,12 +144,11 @@ public EvcsInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ChargingPointType type, double cosPhiRated, EvcsLocationType locationType, boolean v2gSupport) { - this(uuid, id, node, qCharacteristics, em, type, 1, cosPhiRated, locationType, v2gSupport); + this(uuid, id, node, qCharacteristics, type, 1, cosPhiRated, locationType, v2gSupport); } public ChargingPointType getType() { @@ -218,8 +208,6 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + ", type=" + type + ", chargingPoints=" @@ -292,7 +280,6 @@ public EvcsInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), type, chargingPoints, cosPhiRated, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java index b765ca695..16ba19dc7 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -32,7 +31,6 @@ public class FixedFeedInInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param sRated Rated apparent power * @param cosPhiRated Power factor */ @@ -43,10 +41,9 @@ public FixedFeedInInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.sRated = sRated.to(StandardUnits.S_RATED); this.cosPhiRated = cosPhiRated; } @@ -58,7 +55,6 @@ public FixedFeedInInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param sRated Rated apparent power * @param cosPhiRated Power factor */ @@ -67,10 +63,9 @@ public FixedFeedInInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.sRated = sRated.to(StandardUnits.S_RATED); this.cosPhiRated = cosPhiRated; } @@ -115,8 +110,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", sRated=" + sRated + ", cosphiRated=" @@ -153,7 +147,6 @@ public FixedFeedInInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), sRated, cosPhiRated); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java index 89771ae58..ef5bf7fea 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java @@ -8,7 +8,6 @@ import edu.ie3.datamodel.io.extractor.HasThermalBus; import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -34,7 +33,6 @@ public class HpInput extends SystemParticipantInput implements HasType, HasTherm * @param node the asset is connected to * @param thermalBus The thermal bus, this model is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of HP */ public HpInput( @@ -45,9 +43,8 @@ public HpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, - EmInput em, HpTypeInput type) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.thermalBus = thermalBus; this.type = type; } @@ -60,7 +57,6 @@ public HpInput( * @param node the asset is connected to * @param thermalBus The thermal bus, this model is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of HP */ public HpInput( @@ -69,9 +65,8 @@ public HpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, - EmInput em, HpTypeInput type) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.thermalBus = thermalBus; this.type = type; } @@ -118,8 +113,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", type=" + type.getUuid() + ", thermalBus=" @@ -156,7 +150,6 @@ public HpInput build() { getNode(), thermalBus, getqCharacteristics(), - getEm(), type); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java index 196952d65..9f320d851 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.models.*; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -48,7 +47,6 @@ public class LoadInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfile Load profile to use for this model * @param dsm True, if demand side management is activated for this load * @param eConsAnnual Annually consumed energy (typically in kWh) @@ -62,13 +60,12 @@ public LoadInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, LoadProfile loadProfile, boolean dsm, ComparableQuantity eConsAnnual, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.loadProfile = loadProfile; this.dsm = dsm; this.eConsAnnual = eConsAnnual.to(StandardUnits.ENERGY_IN); @@ -85,7 +82,6 @@ public LoadInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfileKey Load profile key corresponding to {@link * edu.ie3.datamodel.models.profile.BdewStandardLoadProfile} or {@link * edu.ie3.datamodel.models.profile.NbwTemperatureDependantLoadProfile} @@ -101,7 +97,6 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, String loadProfileKey, boolean dsm, ComparableQuantity eConsAnnual, @@ -116,7 +111,6 @@ public LoadInput( operationTime, node, qCharacteristics, - em, LoadProfile.parse(loadProfileKey), dsm, eConsAnnual, @@ -131,7 +125,6 @@ public LoadInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfile Standard load profile to use for this model * @param dsm True, if demand side management is activated for this load * @param eConsAnnual Annually consumed energy (typically in kWh) @@ -143,13 +136,12 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, LoadProfile loadProfile, boolean dsm, ComparableQuantity eConsAnnual, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.loadProfile = loadProfile; this.dsm = dsm; this.eConsAnnual = eConsAnnual.to(StandardUnits.ENERGY_IN); @@ -164,7 +156,6 @@ public LoadInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfileKey load profile key corresponding to {@link * edu.ie3.datamodel.models.profile.BdewStandardLoadProfile} or {@link * edu.ie3.datamodel.models.profile.NbwTemperatureDependantLoadProfile} @@ -178,7 +169,6 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, String loadProfileKey, boolean dsm, ComparableQuantity eConsAnnual, @@ -190,7 +180,6 @@ public LoadInput( id, node, qCharacteristics, - em, LoadProfile.parse(loadProfileKey), dsm, eConsAnnual, @@ -254,8 +243,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", dsm=" + dsm + ", eConsAnnual=" @@ -326,7 +314,6 @@ public LoadInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), loadProfile, dsm, eConsAnnual, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java index 2117ef313..49a68253f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -49,7 +48,6 @@ public class PvInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param albedo Albedo value (typically a value between 0 and 1) * @param azimuth Inclination in a compass direction (typically °: South 0◦; West 90◦; East -90◦) * @param etaConv Efficiency of converter (typically in %) @@ -67,7 +65,6 @@ public PvInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, double albedo, ComparableQuantity azimuth, ComparableQuantity etaConv, @@ -77,7 +74,7 @@ public PvInput( boolean marketReaction, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.albedo = albedo; this.azimuth = azimuth.to(StandardUnits.AZIMUTH); this.etaConv = etaConv.to(StandardUnits.EFFICIENCY); @@ -96,7 +93,6 @@ public PvInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param albedo Albedo value (typically a value between 0 and 1) * @param azimuth Inclination in a compass direction (typically °: South 0◦; West 90◦; East -90◦) * @param etaConv Efficiency of converter (typically in %) @@ -112,7 +108,6 @@ public PvInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, double albedo, ComparableQuantity azimuth, ComparableQuantity etaConv, @@ -122,7 +117,7 @@ public PvInput( boolean marketReaction, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.albedo = albedo; this.azimuth = azimuth.to(StandardUnits.AZIMUTH); this.etaConv = etaConv.to(StandardUnits.EFFICIENCY); @@ -220,8 +215,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", albedo=" + albedo + ", azimuth=" @@ -330,7 +324,6 @@ public PvInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), albedo, azimuth, etaConv, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java index ed37c1448..26726cb03 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -29,7 +28,6 @@ public class StorageInput extends SystemParticipantInput implements HasType { * @param operationTime time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic for integrated inverter - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of storage */ public StorageInput( @@ -39,9 +37,8 @@ public StorageInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, StorageTypeInput type) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.type = type; } @@ -52,7 +49,6 @@ public StorageInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of storage */ public StorageInput( @@ -60,9 +56,8 @@ public StorageInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, StorageTypeInput type) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.type = type; } @@ -103,8 +98,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", type=" + type.getUuid() + '}'; @@ -136,7 +130,6 @@ public StorageInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), type); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java index eea7df273..9fa4a00a6 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java @@ -7,9 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasNodes; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.AssetInput; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -24,12 +22,6 @@ public abstract class SystemParticipantInput extends AssetInput implements HasNo /** Description of a reactive power characteristic. For details see further documentation */ private final ReactivePowerCharacteristic qCharacteristics; - /** - * Optional {@link EmInput} that is controlling this system participant. If null, this system - * participant is not em-controlled. - */ - private final EmInput em; - /** * Constructor for an operated system participant * @@ -39,7 +31,6 @@ public abstract class SystemParticipantInput extends AssetInput implements HasNo * @param operationTime Time for which the entity is operated * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. */ protected SystemParticipantInput( UUID uuid, @@ -47,12 +38,10 @@ protected SystemParticipantInput( OperatorInput operator, OperationTime operationTime, NodeInput node, - ReactivePowerCharacteristic qCharacteristics, - EmInput em) { + ReactivePowerCharacteristic qCharacteristics) { super(uuid, id, operator, operationTime); this.node = node; this.qCharacteristics = qCharacteristics; - this.em = em; } /** @@ -62,30 +51,20 @@ protected SystemParticipantInput( * @param id of the asset * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. */ protected SystemParticipantInput( - UUID uuid, - String id, - NodeInput node, - ReactivePowerCharacteristic qCharacteristics, - EmInput em) { + UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics) { super(uuid, id); this.node = node; this.qCharacteristics = qCharacteristics; - this.em = em; - } - - public NodeInput getNode() { - return node; } public ReactivePowerCharacteristic getqCharacteristics() { return qCharacteristics; } - public Optional getEm() { - return Optional.ofNullable(em); + public NodeInput getNode() { + return node; } @Override @@ -102,13 +81,12 @@ public boolean equals(Object o) { if (!(o instanceof SystemParticipantInput that)) return false; if (!super.equals(o)) return false; return Objects.equals(node, that.node) - && Objects.equals(qCharacteristics, that.qCharacteristics) - && Objects.equals(em, that.em); + && Objects.equals(qCharacteristics, that.qCharacteristics); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), node, qCharacteristics, em); + return Objects.hash(super.hashCode(), node, qCharacteristics); } @Override @@ -126,8 +104,7 @@ public String toString() { + node.getUuid() + ", qCharacteristics='" + qCharacteristics - + "', em=" - + getEm().map(UniqueEntity::getUuid).map(UUID::toString).orElse("") + + '\'' + '}'; } @@ -144,13 +121,11 @@ public abstract static class SystemParticipantInputCopyBuilder< private NodeInput node; private ReactivePowerCharacteristic qCharacteristics; - private EmInput em; protected SystemParticipantInputCopyBuilder(SystemParticipantInput entity) { super(entity); this.node = entity.getNode(); this.qCharacteristics = entity.getqCharacteristics(); - this.em = entity.getEm().orElse(null); } public B node(NodeInput node) { @@ -163,11 +138,6 @@ public B qCharacteristics(ReactivePowerCharacteristic qCharacteristics) { return thisInstance(); } - public B em(EmInput em) { - this.em = em; - return thisInstance(); - } - protected NodeInput getNode() { return node; } @@ -176,11 +146,6 @@ protected ReactivePowerCharacteristic getqCharacteristics() { return qCharacteristics; } - /** @return The {@link EmInput} controlling this system participant. CAN BE NULL. */ - public EmInput getEm() { - return em; - } - @Override public abstract SystemParticipantInput build(); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java index 05d170e59..d5c5122d5 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java @@ -7,7 +7,6 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -32,7 +31,6 @@ public class WecInput extends SystemParticipantInput implements HasType { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of this WEC * @param marketReaction Is this asset market oriented? */ @@ -43,10 +41,9 @@ public WecInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, WecTypeInput type, boolean marketReaction) { - super(uuid, id, operator, operationTime, node, qCharacteristics, em); + super(uuid, id, operator, operationTime, node, qCharacteristics); this.type = type; this.marketReaction = marketReaction; } @@ -58,7 +55,6 @@ public WecInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic - * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of this WEC * @param marketReaction Is this asset market oriented? */ @@ -67,10 +63,9 @@ public WecInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, - EmInput em, WecTypeInput type, boolean marketReaction) { - super(uuid, id, node, qCharacteristics, em); + super(uuid, id, node, qCharacteristics); this.type = type; this.marketReaction = marketReaction; } @@ -117,8 +112,7 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + "', em=" - + getEm() + + '\'' + ", type=" + type.getUuid() + ", marketReaction=" @@ -154,7 +148,6 @@ public WecInput build() { getOperationTime(), getNode(), getqCharacteristics(), - getEm(), type, marketReaction); } diff --git a/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java b/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java index 0935b4b5b..d27667b8f 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java @@ -5,13 +5,12 @@ */ package edu.ie3.datamodel.models.result.system; -import edu.ie3.datamodel.models.input.EmInput; import java.time.ZonedDateTime; import java.util.UUID; import javax.measure.quantity.Power; import tech.units.indriya.ComparableQuantity; -/** Represents calculation results of an {@link EmInput} */ +/** Represents calculation results of an {@link edu.ie3.datamodel.models.input.system.EmInput} */ public class EmResult extends SystemParticipantResult { /** diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java index 4778fabea..a482ce658 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java @@ -77,6 +77,7 @@ public static JointGridContainer updateGridWithNodes( grid.getGridName(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), + grid.getEmUnits(), updatedEntities.graphicElements()); } @@ -112,6 +113,7 @@ public static SubGridContainer updateGridWithNodes( grid.getSubnet(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), + grid.getEmUnits(), updatedEntities.graphicElements()); } diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java index 5033221a2..eb8d431ff 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java @@ -501,6 +501,7 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, + EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { /* Collect the different sub nets. Through the validation of lines, it is ensured, that no galvanically connected @@ -509,7 +510,8 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( /* Build the single sub grid models */ HashMap subgrids = - buildSubGridContainers(gridName, subnetNumbers, rawGrid, systemParticipants, graphics); + buildSubGridContainers( + gridName, subnetNumbers, rawGrid, systemParticipants, energyManagementUnits, graphics); /* Build the graph structure denoting the topology of the grid */ return buildSubGridTopologyGraph(subgrids, rawGrid); @@ -540,6 +542,7 @@ private static HashMap buildSubGridContainers( SortedSet subnetNumbers, RawGridElements rawGrid, SystemParticipants systemParticipants, + EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { HashMap subGrids = new HashMap<>(subnetNumbers.size()); @@ -552,7 +555,12 @@ private static HashMap buildSubGridContainers( subGrids.put( subnetNumber, new SubGridContainer( - gridName, subnetNumber, rawGridElements, systemParticipantElements, graphicElements)); + gridName, + subnetNumber, + rawGridElements, + systemParticipantElements, + energyManagementUnits, + graphicElements)); } return subGrids; } @@ -804,6 +812,9 @@ public static JointGridContainer combineToJointGrid( GraphicElements graphicElements = new GraphicElements( subGridContainers.stream().map(GridContainer::getGraphics).collect(Collectors.toSet())); + EnergyManagementUnits energyManagementUnits = + new EnergyManagementUnits( + subGridContainers.stream().map(GridContainer::getEmUnits).collect(Collectors.toSet())); Map subGridMapping = subGridContainers.stream() @@ -812,7 +823,12 @@ public static JointGridContainer combineToJointGrid( SubGridTopologyGraph subGridTopologyGraph = buildSubGridTopologyGraph(subGridMapping, rawGrid); return new JointGridContainer( - gridName, rawGrid, systemParticipants, graphicElements, subGridTopologyGraph); + gridName, + rawGrid, + systemParticipants, + energyManagementUnits, + graphicElements, + subGridTopologyGraph); } /** @@ -985,6 +1001,7 @@ public static SubGridContainer withTrafoNodeAsSlack(final SubGridContainer subGr subGridContainer.getRawGrid().getSwitches(), subGridContainer.getRawGrid().getMeasurementUnits()), subGridContainer.getSystemParticipants(), + subGridContainer.getEmUnits(), new GraphicElements(newNodeGraphics, subGridContainer.getGraphics().getLineGraphics())); } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy index c380d2418..20d14f658 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy @@ -145,7 +145,7 @@ class ExtractorTest extends Specification { given: def sampleFixedFeedInput = new FixedFeedInInput(UUID.fromString("717af017-cc69-406f-b452-e022d7fb516a"), "test_fixedFeedInInput", OperatorInput.NO_OPERATOR_ASSIGNED, - sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.em.orElse(null), + sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated,sptd.fixedFeedInInput.cosPhiRated) expect: Extractor.extractElements(sampleFixedFeedInput) as Set == [ diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy index bd9e10266..48b7a5410 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy @@ -9,7 +9,6 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.BmInput @@ -49,12 +48,11 @@ class BmInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = BmInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) def typeInput = Mock(BmTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) then: input.success @@ -74,7 +72,6 @@ class BmInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == typeInput assert !marketReaction assert costControlled diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy index aedb04fce..eba32b0f9 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.ChpInput @@ -48,14 +47,13 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = ChpInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) def typeInput = Mock(ChpTypeInput) def thermalBusInput = Mock(ThermalBusInput) def thermalStorageInput = Mock(ThermalStorageInput) when: Try input = inputFactory.get( - new ChpInputEntityData(parameter, operatorInput, nodeInput, emUnit, typeInput, thermalBusInput, thermalStorageInput)) + new ChpInputEntityData(parameter, operatorInput, nodeInput, typeInput, thermalBusInput, thermalStorageInput)) then: input.success @@ -75,7 +73,6 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == typeInput assert marketReaction } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index 673185c12..707a71ccd 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -6,13 +6,16 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData -import edu.ie3.datamodel.models.input.EmInput +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.models.ControlStrategy +import edu.ie3.datamodel.models.EmControlStrategy import edu.ie3.datamodel.models.input.OperatorInput +import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.utils.Try import spock.lang.Specification import java.time.ZonedDateTime +import javax.measure.quantity.Dimensionless class EmInputFactoryTest extends Specification { @@ -25,7 +28,7 @@ class EmInputFactoryTest extends Specification { inputFactory.supportedClasses == expectedClasses } - def "A EmInputFactory should parse a valid EmInput with parent EM correctly"() { + def "A EmInputFactory should parse a valid EmInput correctly"() { given: def inputFactory = new EmInputFactory() Map parameter = [ @@ -33,15 +36,15 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "controlstrategy" : "no_control" + "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914 a17aa6f0-e663-4186-ac34-a7b68573938b", + "controlstrategy" : "self_optimization" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) - def parentEmUnit = Mock(EmInput) when: Try input = inputFactory.get( - new EmAssetInputEntityData(parameter, inputClass, operatorInput, parentEmUnit)) + new AssetInputEntityData(parameter, inputClass, operatorInput)) then: input.success @@ -54,12 +57,15 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert controlStrategy == parameter["controlstrategy"] - assert parentEm == Optional.of(parentEmUnit) + assert connectedAssets == [ + UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914"), + UUID.fromString("a17aa6f0-e663-4186-ac34-a7b68573938b") + ] as UUID[] + assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION } } - def "A EmInputFactory should parse a valid EmInput without parent EM correctly"() { + def "A EmInputFactory should parse a valid EmInput with zero connected assets correctly"() { given: def inputFactory = new EmInputFactory() Map parameter = [ @@ -67,14 +73,15 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "controlstrategy" : "no_control" + "connectedassets" : "", + "controlstrategy" : "self_optimization" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new EmAssetInputEntityData(parameter, inputClass, operatorInput, null)) + new AssetInputEntityData(parameter, inputClass, operatorInput)) then: input.success @@ -87,28 +94,40 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert controlStrategy == parameter["controlstrategy"] - assert parentEm == Optional.empty() + assert connectedAssets == [] as UUID[] + assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION } } - def "A EmInputFactory should fail when passing an invalid UUID"() { + def "A EmInputFactory should use a default control strategy if value cannot be parsed"() { given: def inputFactory = new EmInputFactory() Map parameter = [ - "uuid" : "- broken -", + "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", "id" : "TestID", - "controlstrategy" : "no_control" + "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914", + "controlstrategy" : " -- invalid --" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new EmAssetInputEntityData(parameter, inputClass, operatorInput, null)) + new AssetInputEntityData(parameter, inputClass, operatorInput)) then: - input.failure - input.exception.get().cause.message == "Exception while trying to parse UUID of field \"uuid\" with value \"- broken -\"" + input.success + input.data.get().getClass() == inputClass + input.data.get().with { + assert uuid == UUID.fromString(parameter["uuid"]) + assert operationTime.startDate.empty + assert operationTime.endDate.empty + assert operator == operatorInput + assert id == parameter["id"] + assert connectedAssets == [ + UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914") + ] as UUID[] + assert controlStrategy == ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY + } } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy index b9c492de7..34a68ea5c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EvInput @@ -45,12 +44,11 @@ class EvInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) def typeInput = Mock(EvTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) then: input.success @@ -70,7 +68,6 @@ class EvInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == typeInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy index 7f59dedd2..10d2be4f1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.models.input.EmInput +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EvcsInput @@ -55,11 +55,10 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) + new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) then: input.success @@ -79,7 +78,6 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PowerSystemUnits.PU), Quantities.getQuantity(1d, PowerSystemUnits.PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == ChargingPointTypeUtils.HouseholdSocket assert chargingPoints == Integer.parseInt(parameter["chargingpoints"]) assert cosPhiRated == Double.parseDouble(parameter["cosphirated"]) @@ -106,11 +104,10 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) + new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) then: input.failure @@ -135,11 +132,10 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) + new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index e209d1f08..ff5ef36a1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -8,8 +8,8 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.FixedFeedInInput @@ -47,10 +47,9 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe def inputClass = FixedFeedInInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) when: - Try input = inputFactory.get(new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) + Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) then: input.success @@ -69,7 +68,6 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert sRated == getQuant(parameter["srated"], StandardUnits.S_RATED) assert cosPhiRated == Double.parseDouble(parameter["cosphirated"]) } @@ -86,10 +84,9 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe ] def inputClass = FixedFeedInInput def nodeInput = Mock(NodeInput) - def emUnit = Mock(EmInput) when: - Try input = inputFactory.get(new SystemParticipantEntityData(parameter, inputClass, nodeInput, emUnit)) + Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) then: input.failure @@ -102,10 +99,6 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe "0: [cosphirated, id, qcharacteristics, srated, uuid]\n" + "1: [cosphirated, id, operatesfrom, qcharacteristics, srated, uuid]\n" + "2: [cosphirated, id, operatesuntil, qcharacteristics, srated, uuid]\n" + - "3: [cosphirated, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" + - "4: [cosphirated, em, id, qcharacteristics, srated, uuid]\n" + - "5: [cosphirated, em, id, operatesfrom, qcharacteristics, srated, uuid]\n" + - "6: [cosphirated, em, id, operatesuntil, qcharacteristics, srated, uuid]\n" + - "7: [cosphirated, em, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" + "3: [cosphirated, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy index 550a088fc..a24587257 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.HpInput @@ -46,13 +45,12 @@ class HpInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = HpInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) def typeInput = Mock(HpTypeInput) def thermalBusInput = Mock(ThermalBusInput) when: Try input = inputFactory.get( - new HpInputEntityData(parameter, operatorInput, nodeInput, emUnit, typeInput, thermalBusInput)) + new HpInputEntityData(parameter, operatorInput, nodeInput, typeInput, thermalBusInput)) then: input.success @@ -72,7 +70,6 @@ class HpInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == typeInput assert thermalBus == thermalBusInput } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy index c0bc33bfa..910d59195 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy @@ -8,9 +8,9 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.LoadInput @@ -38,7 +38,6 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { given: "a system participant input type factory and model data" def inputClass = LoadInput def nodeInput = Mock(NodeInput) - def emUnit = Mock(EmInput) when: def inputFactory = new LoadInputFactory() @@ -53,7 +52,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { "cosphirated" : "5" ] Try input = inputFactory.get( - new SystemParticipantEntityData(parameter, inputClass, nodeInput, emUnit)) + new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) then: input.success @@ -70,7 +69,6 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert loadProfile == profile assert dsm assert eConsAnnual == getQuant(parameter["econsannual"], StandardUnits.ENERGY_IN) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy index 8ea8a4cf8..a3a6d42ae 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy @@ -8,8 +8,8 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.PvInput @@ -54,11 +54,10 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = PvInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) + new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) then: input.success @@ -78,7 +77,6 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert albedo == Double.parseDouble(parameter["albedo"]) assert azimuth == getQuant(parameter["azimuth"], StandardUnits.AZIMUTH) assert etaConv == getQuant(parameter["etaconv"], StandardUnits.EFFICIENCY) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy index d20685662..453e294f2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.StorageInput @@ -45,12 +44,11 @@ class StorageInputFactoryTest extends Specification implements FactoryTestHelper def inputClass = StorageInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) def typeInput = Mock(StorageTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) then: input.success @@ -70,7 +68,6 @@ class StorageInputFactoryTest extends Specification implements FactoryTestHelper new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == typeInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy index d258837ec..e97d47a09 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy @@ -8,7 +8,6 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.WecInput @@ -46,12 +45,11 @@ class WecInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = WecInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) - def emUnit = Mock(EmInput) def typeInput = Mock(WecTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) then: input.success @@ -70,7 +68,6 @@ class WecInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } - assert em == Optional.of(emUnit) assert type == typeInput assert marketReaction } diff --git a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy index f34873c24..f3e89647b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.naming import edu.ie3.datamodel.io.source.TimeSeriesMappingSource -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -21,6 +20,7 @@ import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.models.input.system.BmInput import edu.ie3.datamodel.models.input.system.ChpInput +import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvInput import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.FixedFeedInInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy index 296be7a8c..5fffb0fa1 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -11,7 +11,6 @@ import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey import edu.ie3.datamodel.io.source.TimeSeriesMappingSource import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 0f25a83ba..ac2c24ab9 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -9,7 +9,6 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -144,10 +143,9 @@ class InputEntityProcessorTest extends Specification { def processingResult = processor.handleEntity(validInput) then: "make sure that the result is as expected " - processingResult.forEach { - k, v -> + processingResult.forEach { k, v -> if (k != "nodeInternal") // the internal 3w node is always randomly generated, hence we can skip to test on this - assert (v == expectedResult.get(k)) + assert (v == expectedResult.get(k)) } where: @@ -161,8 +159,7 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.fixedFeedInInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.fixedFeedInInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "sRated" : SystemParticipantTestData.fixedFeedInInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString(), - "em" : SystemParticipantTestData.fixedFeedInInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "sRated" : SystemParticipantTestData.fixedFeedInInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString() ] PvInput | SystemParticipantTestData.pvInput || [ "uuid" : SystemParticipantTestData.pvInput.uuid.toString(), @@ -180,8 +177,7 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.pvInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.pvInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "sRated" : SystemParticipantTestData.pvInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString(), - "em" : SystemParticipantTestData.pvInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "sRated" : SystemParticipantTestData.pvInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString() ] WecInput | SystemParticipantTestData.wecInput || [ "uuid" : SystemParticipantTestData.wecInput.uuid.toString(), @@ -192,8 +188,7 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.wecInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.wecInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiPSerialized, - "type" : SystemParticipantTestData.wecInput.type.uuid.toString(), - "em" : SystemParticipantTestData.wecInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "type" : SystemParticipantTestData.wecInput.type.uuid.toString() ] ChpInput | SystemParticipantTestData.chpInput || [ "uuid" : SystemParticipantTestData.chpInput.uuid.toString(), @@ -207,7 +202,6 @@ class InputEntityProcessorTest extends Specification { "thermalBus" : SystemParticipantTestData.chpInput.thermalBus.uuid.toString(), "thermalStorage" : SystemParticipantTestData.chpInput.thermalStorage.uuid.toString(), "type" : SystemParticipantTestData.chpInput.type.uuid.toString(), - "em" : SystemParticipantTestData.chpInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] BmInput | SystemParticipantTestData.bmInput || [ "uuid" : SystemParticipantTestData.bmInput.uuid.toString(), @@ -220,8 +214,7 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.bmInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.bmInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.qVSerialized, - "type" : SystemParticipantTestData.bmInput.type.uuid.toString(), - "em" : SystemParticipantTestData.bmInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "type" : SystemParticipantTestData.bmInput.type.uuid.toString() ] EvInput | SystemParticipantTestData.evInput || [ "uuid" : SystemParticipantTestData.evInput.uuid.toString(), @@ -231,8 +224,7 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.evInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.evInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "type" : SystemParticipantTestData.evInput.type.getUuid().toString(), - "em" : SystemParticipantTestData.evInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "type" : SystemParticipantTestData.evInput.type.getUuid().toString() ] LoadInput | SystemParticipantTestData.loadInput || [ @@ -247,8 +239,7 @@ class InputEntityProcessorTest extends Specification { "operator" : SystemParticipantTestData.loadInput.operator.uuid.toString(), "qCharacteristics" : SystemParticipantTestData.cosPhiFixedSerialized, "sRated" : SystemParticipantTestData.loadInput.sRated.getValue().doubleValue().toString(), - "loadProfile" : SystemParticipantTestData.loadInput.loadProfile.key, - "em" : SystemParticipantTestData.loadInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "loadProfile" : SystemParticipantTestData.loadInput.loadProfile.key ] StorageInput | SystemParticipantTestData.storageInput || [ "uuid" : SystemParticipantTestData.storageInput.uuid.toString(), @@ -258,8 +249,7 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.storageInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.storageInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "type" : SystemParticipantTestData.storageInput.type.uuid.toString(), - "em" : SystemParticipantTestData.storageInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "type" : SystemParticipantTestData.storageInput.type.uuid.toString() ] HpInput | SystemParticipantTestData.hpInput || [ "uuid" : SystemParticipantTestData.hpInput.uuid.toString(), @@ -270,8 +260,7 @@ class InputEntityProcessorTest extends Specification { "operator" : SystemParticipantTestData.hpInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, "thermalBus" : SystemParticipantTestData.hpInput.thermalBus.uuid.toString(), - "type" : SystemParticipantTestData.hpInput.type.uuid.toString(), - "em" : SystemParticipantTestData.hpInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "type" : SystemParticipantTestData.hpInput.type.uuid.toString() ] EvcsInput | SystemParticipantTestData.evcsInput || [ "uuid" : SystemParticipantTestData.evcsInput.uuid.toString(), @@ -285,8 +274,7 @@ class InputEntityProcessorTest extends Specification { "cosPhiRated" : SystemParticipantTestData.evcsInput.cosPhiRated.toString(), "chargingPoints" : SystemParticipantTestData.evcsInput.chargingPoints.toString(), "locationType" : SystemParticipantTestData.evcsInput.locationType.name(), - "v2gSupport" : SystemParticipantTestData.evcsInput.v2gSupport.toString(), - "em" : SystemParticipantTestData.evcsInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") + "v2gSupport" : SystemParticipantTestData.evcsInput.v2gSupport.toString() ] } @@ -366,18 +354,18 @@ class InputEntityProcessorTest extends Specification { given: InputEntityProcessor processor = new InputEntityProcessor(RandomLoadParameters) RandomLoadParameters parameters = new RandomLoadParameters( - UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), - 4, - 1.2, - 2.3, - 3.4, - 4.5, - 5.6, - 6.7, - 7.8, - 8.9, - 9.10 - ) + UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), + 4, + 1.2, + 2.3, + 3.4, + 4.5, + 5.6, + 6.7, + 7.8, + 8.9, + 9.10 + ) Map expected = [ "uuid" : "a5b0f432-27b5-4b3e-b87a-61867b9edd79", "quarterHour": "4", @@ -629,14 +617,14 @@ class InputEntityProcessorTest extends Specification { given: InputEntityProcessor processor = new InputEntityProcessor(NodeInput) def nodeWithOutOperator = new NodeInput( - UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), "node_d", OperatorInput.NO_OPERATOR_ASSIGNED, - OperationTime.notLimited() - , - Quantities.getQuantity(1d, PU), - false, - null, - GermanVoltageLevelUtils.MV_20KV, - 4) + UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), "node_d", OperatorInput.NO_OPERATOR_ASSIGNED, + OperationTime.notLimited() + , + Quantities.getQuantity(1d, PU), + false, + null, + GermanVoltageLevelUtils.MV_20KV, + 4) Map expected = [ "geoPosition" : "", diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 21c527359..6c98e7b53 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -17,7 +17,6 @@ import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.LineInput @@ -26,6 +25,7 @@ import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput +import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.LoadInput import edu.ie3.datamodel.models.input.system.PvInput @@ -45,6 +45,7 @@ import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.EnergyPriceValue import edu.ie3.datamodel.models.value.Value +import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SampleJointGrid import edu.ie3.test.common.SystemParticipantTestData @@ -170,7 +171,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { ThermalUnitInputTestData.thermalHouseInput, SystemParticipantTestData.evcsInput, SystemParticipantTestData.loadInput, - SystemParticipantTestData.emInput + EnergyManagementTestData.emInput ]) csvFileSink.shutdown() @@ -251,7 +252,6 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { OperationTime.notLimited(), Mock(NodeInput), new CosPhiFixed("cosPhiFixed:{(0.0,0.95)}"), - Mock(EmInput), 0.2, Quantities.getQuantity(-8.926613807678223, DEGREE_GEOM), Quantities.getQuantity(95d, PERCENT), diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy deleted file mode 100644 index 288c6be0a..000000000 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy +++ /dev/null @@ -1,284 +0,0 @@ -/* - * © 2024. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.datamodel.io.source - -import static edu.ie3.test.helper.EntityMap.map - -import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.exceptions.SourceException -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData -import edu.ie3.datamodel.models.input.EmInput -import edu.ie3.datamodel.utils.Try -import spock.lang.Specification - -import java.util.stream.Stream - -class EnergyManagementSourceTest extends Specification { - - def "An EnergyManagementSource should construct hierarchical EmInputs with two branches as expected"() { - given: - def assetEntityDataStream = Stream.of( - new AssetInputEntityData( - ["uuid": "0-0-0-0-0", - "id": "root", - "parentem" : "", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "child 1", - "parentem" : "0-0-0-0-0", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-11", - "id": "child 1-1", - "parentem" : "0-0-0-0-1", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-2", - "id": "child 2", - "parentem" : "0-0-0-0-0", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-21", - "id": "child 2-1", - "parentem" : "0-0-0-0-2", - "controlstrategy" : ""], - EmInput - ), - ).map(data -> Try.of(() -> data, SourceException)) - - expect: - def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) - - def expectedRootEm = new EmInput( - UUID.fromString("0-0-0-0-0"), - "root", - "", - null - ) - def expectedEm1 = new EmInput( - UUID.fromString("0-0-0-0-1"), - "child 1", - "", - expectedRootEm - ) - def expectedEm11 = new EmInput( - UUID.fromString("0-0-0-0-11"), - "child 1-1", - "", - expectedEm1 - ) - def expectedEm2 = new EmInput( - UUID.fromString("0-0-0-0-2"), - "child 2", - "", - expectedRootEm - ) - def expectedEm21 = new EmInput( - UUID.fromString("0-0-0-0-21"), - "child 2-1", - "", - expectedEm2 - ) - - emUnits == map([expectedRootEm, expectedEm1, expectedEm11, expectedEm2, expectedEm21]) - } - - def "An EnergyManagementSource should construct flat EmInputs without hierarchy as expected"() { - given: - def assetEntityDataStream = Stream.of( - new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "em 1", - "parentem" : "", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-2", - "id": "em 2", - "parentem" : "", - "controlstrategy" : "strat_b"], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-3", - "id": "em 3", - "parentem" : "", - "controlstrategy" : "other"], - EmInput - ), - ).map(data -> Try.of(() -> data, SourceException)) - - expect: - def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) - - def expectedEm1 = new EmInput( - UUID.fromString("0-0-0-0-1"), - "em 1", - "", - null - ) - def expectedEm2 = new EmInput( - UUID.fromString("0-0-0-0-2"), - "em 2", - "strat_b", - null - ) - def expectedEm3 = new EmInput( - UUID.fromString("0-0-0-0-3"), - "em 3", - "other", - null - ) - - emUnits == map([expectedEm1, expectedEm2, expectedEm3]) - } - - def "An EnergyManagementSource should fail if any entity data already failed before"() { - given: - def assetEntityDataStream = Stream.of( - new Try.Success(new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "em 1", - "parentem" : "", - "controlstrategy" : ""], - EmInput - )), - new Try.Success(new AssetInputEntityData( - ["uuid": "0-0-0-0-2", - "id": "em 2", - "parentem" : "", - "controlstrategy" : ""], - EmInput - )), - new Try.Failure(new SourceException("test failure abc")) - ) - - when: - EnergyManagementSource.createEmInputs(assetEntityDataStream) - - then: - def exc = thrown(SourceException) - exc.cause.message.contains("test failure abc") - } - - def "An EnergyManagementSource should fail if a parent EM UUID is malformed"() { - given: - def assetEntityDataStream = Stream.of( - new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "em 1", - "parentem" : "", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-2", - "id": "em 2", - "parentem" : "not-a-uuid", - "controlstrategy" : ""], - EmInput - ), - ).map(data -> Try.of(() -> data, SourceException)) - - when: - EnergyManagementSource.createEmInputs(assetEntityDataStream) - - then: - def exc = thrown(SourceException) - exc.cause.message.contains("Exception while trying to parse UUID of field \"parentem\" with value \"not-a-uuid\"") - } - - def "An EnergyManagementSource should fail if the factory fails for one EM"() { - given: - def assetEntityDataStream = Stream.of( - new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "em 1", - "parentem" : "", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-2", // id is missing - "parentem" : "", - "controlstrategy" : ""], - EmInput - ), - ).map(data -> Try.of(() -> data, SourceException)) - - when: - EnergyManagementSource.createEmInputs(assetEntityDataStream) - - then: - def exc = thrown(SourceException) - exc.cause.message.contains("An error occurred when creating instance of EmInput") - exc.cause.cause.class == FactoryException - } - - def "An EnergyManagementSource should fail if a parent em is not provided"() { - given: - def assetEntityDataStream = Stream.of( - new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "em 1", - "parentem" : "", - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-2", - "id": "em 2", - "parentem" : "1-2-3-4-5", // does not exist - "controlstrategy" : ""], - EmInput - ), - ).map(data -> Try.of(() -> data, SourceException)) - - when: - EnergyManagementSource.createEmInputs(assetEntityDataStream) - - then: - def exc = thrown(SourceException) - exc.message.contains("were assigned a parent EM that does not exist.") - } - - def "An EnergyManagementSource should fail if no parent ems are provided"() { - given: - def assetEntityDataStream = Stream.of( - new AssetInputEntityData( - ["uuid": "0-0-0-0-1", - "id": "em 1", - "parentem" : "1-2-3-4-5", // does not exist - "controlstrategy" : ""], - EmInput - ), - new AssetInputEntityData( - ["uuid": "0-0-0-0-2", - "id": "em 2", - "parentem" : "1-2-3-4-5", // does not exist - "controlstrategy" : ""], - EmInput - ), - ).map(data -> Try.of(() -> data, SourceException)) - - when: - EnergyManagementSource.createEmInputs(assetEntityDataStream) - - then: - def exc = thrown(SourceException) - exc.message.contains("were assigned a parent EM that does not exist.") - } -} diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 076bd98a2..8e6fc4f4d 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -15,7 +15,6 @@ import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData import edu.ie3.datamodel.io.source.csv.CsvDataSource import edu.ie3.datamodel.models.input.AssetInput -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.system.ChpInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput @@ -77,7 +76,7 @@ class EntitySourceTest extends Specification { "t_bus" : sptd.thermalBus.uuid.toString(), "t_storage" : sptd.thermalStorage.uuid.toString() ] - def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, null, sptd.chpTypeInput) + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, sptd.chpTypeInput) Map busMap = map([sptd.thermalBus]) Map storageMap = map([sptd.thermalStorage]) @@ -95,7 +94,7 @@ class EntitySourceTest extends Specification { "t_bus" : sptd.thermalBus.uuid.toString(), "t_storage" : "8851813b-3a7d-4fee-874b-4df9d724e4b4" ] - def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, null, sptd.chpTypeInput) + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, sptd.chpTypeInput) Map busMap = map([sptd.thermalBus]) Map storageMap = map([sptd.thermalStorage]) @@ -111,34 +110,34 @@ class EntitySourceTest extends Specification { def "An EntitySource should find a linked entity, if it was provided"() { given: Map parameter = [ - "linked_entity" : sptd.emInput.uuid.toString(), + "linked_entity" : sptd.chpTypeInput.uuid.toString(), ] def entityData = new EntityData(parameter, AssetInput) - Map entityMap = map([sptd.emInput]) + Map entityMap = map([sptd.chpTypeInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) then: - result == new Try.Success(sptd.emInput) + result == new Try.Success(sptd.chpTypeInput) } def "An EntitySource trying to find a linked entity should fail, if no matching linked entity was provided"() { given: Map parameter = [ - "linked_entity" : sptd.parentEm.uuid.toString(), + "linked_entity" : "5ebd8f7e-dedb-4017-bb86-6373c4b60000", ] def entityData = new EntityData(parameter, AssetInput) - Map entityMap = map([sptd.emInput]) + Map entityMap = map([sptd.chpTypeInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) then: result.isFailure() - result.getException().get().message == "Linked linked_entity with UUID 897bfc17-8e54-43d0-8d98-740786fd94dd was not found for entity EntityData{fieldsToAttributes={linked_entity=897bfc17-8e54-43d0-8d98-740786fd94dd}, targetClass=class edu.ie3.datamodel.models.input.AssetInput}" + result.getException().get().message == "Linked linked_entity with UUID 5ebd8f7e-dedb-4017-bb86-6373c4b60000 was not found for entity EntityData{fieldsToAttributes={linked_entity=5ebd8f7e-dedb-4017-bb86-6373c4b60000}, targetClass=class edu.ie3.datamodel.models.input.AssetInput}" } def "An EntitySource trying to find a linked entity should fail, if corresponding UUID is malformed"() { @@ -148,7 +147,7 @@ class EntitySourceTest extends Specification { ] def entityData = new EntityData(parameter, AssetInput) - Map entityMap = map([sptd.emInput]) + Map entityMap = map([sptd.chpTypeInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy index 57e7a5566..402b657be 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy @@ -10,7 +10,6 @@ import static edu.ie3.test.helper.EntityMap.map import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData import edu.ie3.datamodel.io.factory.input.participant.HpInputEntityData -import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantEntityData import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData import edu.ie3.datamodel.models.input.system.ChpInput import edu.ie3.datamodel.models.input.system.HpInput @@ -24,33 +23,9 @@ import java.util.stream.Stream class SystemParticipantSourceTest extends Specification { - def "A SystemParticipantSource should build system participant entity from valid and invalid input data as expected"() { - given: - def nodeAssetInputEntityData = Stream.of(new Try.Success<>(new NodeAssetInputEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node))) - - when: - def sysPartEntityDataStream = SystemParticipantSource.systemParticipantEntityStream(nodeAssetInputEntityData, map(emUnits)) - - then: - def element = sysPartEntityDataStream.findFirst().get() - element.success == resultIsPresent - element.data.ifPresent({ - typedEntityData -> - assert (typedEntityData == resultData) - }) - - where: - emUnits | fieldsToAttributes || resultIsPresent || resultData - [] | ["em": "977157f4-25e5-4c72-bf34-440edc778792"] || false || null - [SystemParticipantTestData.emInput] | ["bla": "foo"] || true || new SystemParticipantEntityData(["bla": "foo"], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null) - [SystemParticipantTestData.emInput] | [:] || true || new SystemParticipantEntityData([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null) - [SystemParticipantTestData.emInput] | ["em": "977157f4-25e5-4c72-bf34-440edc778793"] || false || null - [SystemParticipantTestData.emInput] | ["em": "977157f4-25e5-4c72-bf34-440edc778792"] || true || new SystemParticipantEntityData([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput) - } - def "A SystemParticipantSource should build typed entity from valid and invalid input data as expected"() { given: - def systemParticipantEntityData = Stream.of(new Try.Success<>(new SystemParticipantEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null))) + def systemParticipantEntityData = Stream.of(new Try.Success<>(new NodeAssetInputEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node))) when: def typedEntityDataStream = SystemParticipantSource.typedSystemParticipantEntityStream(systemParticipantEntityData, map(types)) @@ -69,12 +44,12 @@ class SystemParticipantSourceTest extends Specification { [SystemParticipantTestData.chpTypeInput] | ["bla": "foo"] || false || null [SystemParticipantTestData.chpTypeInput] | [:] || false || null [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb9"] || false || null - [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || true || new SystemParticipantTypedEntityData<>([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null, SystemParticipantTestData.chpTypeInput) + [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || true || new SystemParticipantTypedEntityData<>([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.chpTypeInput) } def "A SystemParticipantSource should build hp input entity from valid and invalid input data as expected"() { given: - def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.hpTypeInput))) + def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.hpTypeInput))) when: def hpInputEntityDataOpt = SystemParticipantSource.hpEntityStream(sysPartTypedEntityData, map(thermalBuses)) @@ -93,12 +68,12 @@ class SystemParticipantSourceTest extends Specification { [SystemParticipantTestData.hpInput.thermalBus] | ["bla": "foo"] || false || null [SystemParticipantTestData.hpInput.thermalBus] | [:] || false || null [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384f"] || false || null - [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.hpTypeInput, SystemParticipantTestData.hpInput.thermalBus) + [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.hpTypeInput, SystemParticipantTestData.hpInput.thermalBus) } def "A SystemParticipantSource should build chp input entity from valid and invalid input data as expected"(List thermalStorages, List thermalBuses, Map fieldsToAttributes, boolean resultIsPresent, ChpInputEntityData resultData) { given: - def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.chpTypeInput))) + def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.chpTypeInput))) when: def hpInputEntityDataOpt = SystemParticipantSource.chpEntityStream(sysPartTypedEntityData, map(thermalStorages), map(thermalBuses)) @@ -116,6 +91,6 @@ class SystemParticipantSourceTest extends Specification { [] | [] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || false | null [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["bla": "foo"] || false | null [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | [:] || false | null - [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.chpTypeInput, SystemParticipantTestData.chpInput.thermalBus, SystemParticipantTestData.chpInput.thermalStorage) + [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.chpTypeInput, SystemParticipantTestData.chpInput.thermalBus, SystemParticipantTestData.chpInput.thermalStorage) } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index 7f5cb7124..15e528a93 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -12,7 +12,7 @@ import edu.ie3.datamodel.io.source.EnergyManagementSource import edu.ie3.datamodel.io.source.TypeSource import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.utils.Try -import edu.ie3.test.common.SystemParticipantTestData +import edu.ie3.test.common.EnergyManagementTestData import spock.lang.Specification class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { @@ -23,13 +23,13 @@ class CsvEnergyManagementSourceTest extends Specification implements CsvTestData Mock(TypeSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - Map operatorMap = map([SystemParticipantTestData.emInput.operator]) + Map operatorMap = map([EnergyManagementTestData.emInput.operator]) expect: def emUnits = Try.of(() -> csvEnergyManagementSource.getEmUnits(operatorMap), SourceException) emUnits.success - emUnits.data.get().size() == 2 - emUnits.data.get() == map([SystemParticipantTestData.emInput, SystemParticipantTestData.parentEm]) + emUnits.data.get().emUnits.size() == 1 + emUnits.data.get().emUnits == [EnergyManagementTestData.emInput] as Set } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index 8d1bd118d..cfb0cfb4b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -10,7 +10,6 @@ import static edu.ie3.test.helper.EntityMap.map import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.exceptions.SystemParticipantsException import edu.ie3.datamodel.io.source.* -import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.* import edu.ie3.datamodel.utils.Try @@ -24,12 +23,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) def thermalSource = new ThermalSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def rawGridSource = new RawGridSource(typeSource, new CsvDataSource(csvSep, gridDefaultFolderPath, fileNamingStrategy)) - def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( typeSource, thermalSource, rawGridSource, - energyManagementSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) when: @@ -62,12 +59,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat getNodes() >> [:] getNodes(_) >> [:] } as RawGridSource - def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( typeSource, thermalSource, rawGridSource, - energyManagementSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) when: @@ -91,13 +86,11 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def nodeMap = map([sptd.hpInput.node]) - def emUnitsMap = map([sptd.emInput]) expect: - def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, emUnitsMap, map(types), map(thermalBuses)), SourceException) + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, map(types), map(thermalBuses)), SourceException) if (heatPumps.success) { heatPumps.data.get().size() == resultingSize @@ -110,7 +103,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types | thermalBuses || resultingSize | resultingSet [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [sptd.hpInput] [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ - new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.emInput, sptd.hpInput.type) + new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) ] [] | [] | [] | [] || 0 | [] [sptd.hpInput.node] | [] | [] | [] || 0 | [] @@ -124,13 +117,11 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def nodeMap = map([sptd.hpInput.node]) - def emUnitsMap = map([sptd.emInput]) expect: - def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, emUnitsMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) if (chpUnits.success) { chpUnits.data.get().size() == resultingSize @@ -143,7 +134,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet [sptd.chpInput.operator] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [sptd.chpInput] [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ - new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.emInput, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) + new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) ] [] | [] | [] | [] || 0 || [] [] | [] | [] | [] || 0 || [] @@ -157,12 +148,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -175,7 +164,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.evInput.node] | [sptd.evInput.operator] | [sptd.evInput.type] || 1 || [sptd.evInput] [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ - new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.emInput, sptd.evInput.type) + new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) ] [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] [sptd.evInput.node] | [] | [] || 0 || [] @@ -188,12 +177,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -206,7 +193,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.wecInput.node] | [sptd.wecInput.operator] | [sptd.wecInput.type] || 1 || [sptd.wecInput] [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ - new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.emInput, sptd.wecInput.type, sptd.wecInput.marketReaction) + new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) ] [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] [sptd.wecInput.node] | [] | [] || 0 || [] @@ -219,12 +206,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -237,7 +222,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.storageInput.node] | [sptd.storageInput.operator] | [sptd.storageInput.type] || 1 || [sptd.storageInput] [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ - new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.emInput, sptd.storageInput.type) + new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) ] [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] [sptd.storageInput.node] | [] | [] || 0 || [] @@ -250,12 +235,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -268,7 +251,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [sptd.bmInput.operator] | [sptd.bmInput.type] || 1 || [sptd.bmInput] [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ - new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.emInput, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) + new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) ] [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] [sptd.bmInput.node] | [] | [] || 0 || [] @@ -281,12 +264,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes), emUnitsMap), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -299,7 +280,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.evcsInput.node] | [sptd.evcsInput.operator] || 1 || [sptd.evcsInput] [sptd.evcsInput.node] | [] || 1 || [ - new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.emInput, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) + new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) ] [] | [sptd.evcsInput.operator] || 0 || [] [] | [] || 0 || [] @@ -311,12 +292,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes), emUnitsMap), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -329,7 +308,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.loadInput.node] | [sptd.loadInput.operator] || 1 || [sptd.loadInput] [sptd.loadInput.node] | [] || 1 || [ - new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.emInput, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) + new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) ] [] | [sptd.loadInput.operator] || 0 || [] [] | [] || 0 || [] @@ -341,12 +320,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes), emUnitsMap), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -359,7 +336,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.pvInput.node] | [sptd.pvInput.operator] || 1 || [sptd.pvInput] [sptd.pvInput.node] | [] || 1 || [ - new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.emInput, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) + new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) ] [] | [sptd.pvInput.operator] || 0 || [] [] | [] || 0 || [] @@ -371,12 +348,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), - Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes), emUnitsMap), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -389,7 +364,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.fixedFeedInInput.node] | [sptd.fixedFeedInInput.operator] || 1 || [sptd.fixedFeedInInput] [sptd.fixedFeedInInput.node] | [] || 1 || [ - new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.emInput, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) + new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) ] [] | [sptd.fixedFeedInInput.operator] || 0 || [] [] | [] || 0 || [] diff --git a/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy new file mode 100644 index 000000000..ea13b2f35 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy @@ -0,0 +1,45 @@ +/* + * © 2022. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.models + +import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData +import edu.ie3.datamodel.io.factory.input.participant.FixedFeedInInputFactory +import edu.ie3.datamodel.models.input.NodeInput +import edu.ie3.datamodel.models.input.system.FixedFeedInInput +import spock.lang.Specification + +import java.util.stream.Collectors + +class EmControlStrategyTest extends Specification { + + def "An em control strategy should be gotten by their key"() { + given: + EmControlStrategy actual = EmControlStrategy.get(key) + + expect: + actual == expected + + where: + key || expected + EmControlStrategy.SELF_OPTIMIZATION.getKey() || EmControlStrategy.SELF_OPTIMIZATION + } + + def "An em control strategy should throw an exception when calling get on unkown key"() { + given: + String unknownKey = "nobody_knows_me" + + when: + EmControlStrategy _ = EmControlStrategy.get(unknownKey) + + then: + IllegalArgumentException ex = thrown() + ex.message == "No predefined energy management control strategy '" + + unknownKey + + "' found. Please provide one of the following keys: " + + Arrays.stream(EmControlStrategy.values()).map(EmControlStrategy::getKey).collect(Collectors.joining(", ")) + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy new file mode 100644 index 000000000..7bb2e6902 --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy @@ -0,0 +1,29 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.models.input.container + +import edu.ie3.test.common.EnergyManagementTestData +import spock.lang.Specification + +class EnergyManagementUnitsTest extends Specification { + + def "An EnergyManagementUnits' copy method should work as expected"() { + given: + def energyManagementUnits = new EnergyManagementUnits( + Collections.singleton(EnergyManagementTestData.emInput) + ) + + def modifiedEmInput = EnergyManagementTestData.emInput.copy().id("modified").build() + + when: + def modifiedEnergyManagementUnits = energyManagementUnits.copy() + .emUnits(Set.of(modifiedEmInput)) + .build() + + then: + modifiedEnergyManagementUnits.emUnits.first() == modifiedEmInput + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index 5b8147f20..21bc87957 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -5,8 +5,10 @@ */ package edu.ie3.datamodel.models.input.container +import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants +import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification @@ -29,7 +31,7 @@ class JointGridContainerTest extends Specification { def "A single subgrid can be used to build a JointGridContainer"() { when: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) then: noExceptionThrown() @@ -38,9 +40,10 @@ class JointGridContainerTest extends Specification { def "A JointGridContainer's copy method should work as expected"() { given: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) def rawGrid = new RawGridElements(List.of(GridTestData.lineAtoB, GridTestData.transformerAtoBtoC)) def systemParticipants = new SystemParticipants(List.of(SystemParticipantTestData.bmInput)) + def emUnits = new EnergyManagementUnits(Set.of(EnergyManagementTestData.emInput)) def graphics = new GraphicElements(Set.of(GridTestData.nodeGraphicD), Set.of(GridTestData.lineGraphicCtoD)) when: @@ -48,6 +51,7 @@ class JointGridContainerTest extends Specification { .gridName("new grid name") .rawGrid(rawGrid) .systemParticipants(systemParticipants) + .emUnits(emUnits) .graphics(graphics) .build() @@ -55,6 +59,7 @@ class JointGridContainerTest extends Specification { modifiedJointGridContainer.gridName == "new grid name" modifiedJointGridContainer.rawGrid == rawGrid modifiedJointGridContainer.systemParticipants == systemParticipants + modifiedJointGridContainer.emUnits == emUnits modifiedJointGridContainer.graphics == graphics } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy index 6088e7218..877a35be1 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy @@ -33,7 +33,6 @@ class BmInputTest extends Specification { assert qCharacteristics == bmInput.qCharacteristics assert feedInTariff == Quantities.getQuantity(15, EURO_PER_MEGAWATTHOUR) assert type == SystemParticipantTestData.bmTypeInput - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy index b21f73dfe..69dcb4f92 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy @@ -29,7 +29,6 @@ class ChpInputTest extends Specification { assert thermalStorage == SystemParticipantTestData.thermalStorage assert marketReaction assert type == SystemParticipantTestData.chpTypeInput - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 3c1c6f706..755699e22 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -5,8 +5,10 @@ */ package edu.ie3.datamodel.models.input.system -import edu.ie3.datamodel.models.input.EmInput -import edu.ie3.test.common.SystemParticipantTestData +import static edu.ie3.datamodel.models.ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY + +import edu.ie3.datamodel.models.ControlStrategy +import edu.ie3.test.common.EnergyManagementTestData import spock.lang.Specification class EmInputTest extends Specification { @@ -16,68 +18,67 @@ class EmInputTest extends Specification { def emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", - SystemParticipantTestData.emControlStrategy, - SystemParticipantTestData.parentEm + EnergyManagementTestData.connectedAssets, + EnergyManagementTestData.emControlStrategy ) then: emInput.with { assert uuid == UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792") assert id == "test_emInput" - assert controlStrategy == SystemParticipantTestData.emControlStrategy + assert connectedAssets == EnergyManagementTestData.connectedAssets + assert controlStrategy.key == EnergyManagementTestData.emControlStrategy } } def "EmInputs are comparable"() { given: - def emInputA = SystemParticipantTestData.emInput + def emInputA = EnergyManagementTestData.emInput expect: (emInputA == emInputB) == isEqual where: - emInputB || isEqual - SystemParticipantTestData.emInput || true - SystemParticipantTestData.emInput.copy().build() || true - SystemParticipantTestData.emInput.copy().id("otherId").build() || false + emInputB || isEqual + EnergyManagementTestData.emInput || true + EnergyManagementTestData.emInput.copy().build() || true + EnergyManagementTestData.emInput.copy().id("otherId").build() || false } def "The EmInput to String method work as expected"() { given: - def emInputToString = SystemParticipantTestData.emInput.toString() + def emInputToString = EnergyManagementTestData.emInput.toString() expect: emInputToString == "EmInput{" + "uuid=" + - SystemParticipantTestData.emInput.uuid + + EnergyManagementTestData.emInput.uuid + ", id='" + - SystemParticipantTestData.emInput.id + + EnergyManagementTestData.emInput.id + ", operator=" + - SystemParticipantTestData.emInput.operator.uuid + + EnergyManagementTestData.emInput.operator.uuid + ", operationTime=" + - SystemParticipantTestData.emInput.operationTime + + EnergyManagementTestData.emInput.operationTime + + ", connectedAssets=" + + Arrays.toString(EnergyManagementTestData.emInput.connectedAssets) + ", controlStrategy=" + - SystemParticipantTestData.emInput.controlStrategy + - ", parentEm=" + - SystemParticipantTestData.parentEm.uuid + + EnergyManagementTestData.emInput.controlStrategy + '}' } def "A EmInput copy method should work as expected"() { given: - def emInput = SystemParticipantTestData.emInput - def newStrat = "new_strat" - def givenParentEm = new EmInput( - UUID.fromString("cfc0639b-65bc-47e5-a8e5-82703de3c650"), - "testParent", - "controlStrat", - null - ) + def emInput = EnergyManagementTestData.emInput + def newConnectedAssets = [ + UUID.randomUUID(), + UUID.randomUUID() + ] as UUID[] + when: - def alteredUnit = emInput.copy().controlStrategy(newStrat).parentEm(givenParentEm).build() + def alteredUnit = emInput.copy().connectedAssets(newConnectedAssets).controlStrategy(ControlStrategy.parse("")).build() then: alteredUnit.with { @@ -85,8 +86,8 @@ class EmInputTest extends Specification { assert operationTime == emInput.operationTime assert operator == emInput.operator assert id == emInput.id - assert controlStrategy == newStrat - assert parentEm == Optional.of(givenParentEm) + assert connectedAssets == newConnectedAssets + assert controlStrategy == NO_CONTROL_STRATEGY } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy index 507384dcb..f31375f45 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy @@ -26,7 +26,6 @@ class EvInputTest extends Specification { assert id == ev.id assert qCharacteristics == ev.qCharacteristics assert type == SystemParticipantTestData.evTypeInput - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy index eadd65ea7..65dd93c14 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy @@ -36,7 +36,6 @@ class EvcsInputTest extends Specification { assert chargingPoints == 1 assert locationType == EvcsLocationType.CHARGING_HUB_HIGHWAY assert v2gSupport - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy index 5c29f2544..500da895b 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy @@ -29,7 +29,6 @@ class FixedFeedInInputTest extends Specification { assert qCharacteristics == ffIn.qCharacteristics assert sRated == Quantities.getQuantity(10d, PowerSystemUnits.VOLTAMPERE) assert cosPhiRated == 0.8d - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy index 98a15d0df..9e40de6d6 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy @@ -28,7 +28,6 @@ class HpInputTest extends Specification { assert qCharacteristics == hpInput.qCharacteristics assert thermalBus == SystemParticipantTestData.thermalBus assert type == SystemParticipantTestData.hpTypeInput - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy index 166406e36..a1d04cc30 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy @@ -41,7 +41,6 @@ class LoadInputTest extends Specification { assert eConsAnnual == Quantities.getQuantity(6000, KILOWATTHOUR) assert sRated == Quantities.getQuantity(0d, KILOVOLTAMPERE) assert cosPhiRated == 0.8d - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy index 5506582e8..ea9a0262d 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy @@ -40,7 +40,6 @@ class PvInputTest extends Specification { assert elevationAngle == Quantities.getQuantity(50, DEGREE_GEOM) assert kG == 10 assert kT == 5 - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy index da2e9d233..0bea4865f 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy @@ -26,7 +26,6 @@ class StorageInputTest extends Specification { assert id == storageInput.id assert qCharacteristics == storageInput.qCharacteristics assert type == SystemParticipantTestData.storageTypeInput - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy index 135adc2fb..9d8b823af 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy @@ -27,7 +27,6 @@ class WecInputTest extends Specification { assert qCharacteristics == wec.qCharacteristics assert type == SystemParticipantTestData.wecType assert marketReaction - assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy index c07ff0d54..72461b659 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy @@ -294,6 +294,7 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics HashMap expectedSubGrids = ComplexTopology.expectedSubGrids @@ -304,6 +305,7 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGrid, systemParticipants, + emUnits, graphics) then: @@ -323,6 +325,7 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGridInput= ComplexTopology.grid.rawGrid SystemParticipants systemParticipantsInput = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphicsInput = ComplexTopology.grid.graphics HashMap unmodifiedSubGrids = ComplexTopology.expectedSubGrids @@ -332,6 +335,7 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGridInput, systemParticipantsInput, + emUnits, graphicsInput) when: @@ -386,12 +390,14 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics Map subgrids = ContainerUtils.buildSubGridContainers( gridName, subNetNumbers, rawGrid, systemParticipants, + emUnits, graphics) SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -409,6 +415,7 @@ class ContainerUtilsTest extends Specification { String gridName = ComplexTopology.gridName RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticpants = ComplexTopology.grid.systemParticipants + EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -417,6 +424,7 @@ class ContainerUtilsTest extends Specification { gridName, rawGrid, systemParticpants, + emUnits, graphics) then: diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy index e8f27b4df..9aee7acf6 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy @@ -13,7 +13,7 @@ import java.time.ZonedDateTime class InvalidSystemParticipantInput extends SystemParticipantInput { InvalidSystemParticipantInput(NodeInput node) { - super(UUID.randomUUID(), "invalid_system_participant", node, CosPhiFixed.CONSTANT_CHARACTERISTIC, null) + super(UUID.randomUUID(), "invalid_system_participant", node, CosPhiFixed.CONSTANT_CHARACTERISTIC) } @Override diff --git a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy index 1c56b3838..172675589 100644 --- a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy +++ b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy @@ -5,6 +5,7 @@ */ package edu.ie3.test.common +import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants import edu.ie3.datamodel.graph.SubGridGate @@ -45,6 +46,7 @@ class ComplexTopology extends GridTestData { gridName, rawGrid, emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set)) @@ -65,6 +67,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -81,6 +84,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -97,6 +101,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -113,6 +118,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -132,6 +138,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -151,6 +158,7 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, + emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy new file mode 100644 index 000000000..4d8714c6b --- /dev/null +++ b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy @@ -0,0 +1,30 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.test.common + +import edu.ie3.datamodel.models.input.container.EnergyManagementUnits +import edu.ie3.datamodel.models.input.system.EmInput + +class EnergyManagementTestData { + + public static final UUID[] connectedAssets = new UUID[]{ + SystemParticipantTestData.loadInput.uuid, + SystemParticipantTestData.pvInput.uuid + } + public static final String emControlStrategy = "self_optimization" + + public static final emInput = new EmInput( + UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), + "test_emInput", + SystemParticipantTestData.operator, + SystemParticipantTestData.operationTime, + connectedAssets, + emControlStrategy + ) + + public static EnergyManagementUnits emptyEnergyManagementUnits = + new EnergyManagementUnits([] as List) +} diff --git a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy index ea7ea00ec..44243df05 100644 --- a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy +++ b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy @@ -15,6 +15,7 @@ import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput +import edu.ie3.datamodel.models.input.container.EnergyManagementUnits import edu.ie3.datamodel.models.input.container.GraphicElements import edu.ie3.datamodel.models.input.container.JointGridContainer import edu.ie3.datamodel.models.input.container.RawGridElements @@ -47,6 +48,7 @@ class SampleJointGrid extends SystemParticipantTestData { "sampleGrid", rawGridElements, systemParticipants(rawGridElements), + new EnergyManagementUnits(Collections.emptySet()), new GraphicElements(Collections.emptySet())) } @@ -70,7 +72,6 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, albedo, azimuth, etaConv, @@ -90,7 +91,6 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, standardLoadProfile, false, eConsAnnual, @@ -105,7 +105,6 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, standardLoadProfile, false, eConsAnnual, @@ -121,7 +120,6 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, storageTypeInput) return new SystemParticipants( diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index dbcc06e33..bd0f2bf43 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -8,7 +8,6 @@ package edu.ie3.test.common import static edu.ie3.datamodel.models.StandardUnits.* import edu.ie3.datamodel.models.OperationTime -import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.container.SystemParticipants @@ -56,25 +55,6 @@ class SystemParticipantTestData { private static final ComparableQuantity opex = Quantities.getQuantity(50d, ENERGY_PRICE) static final ComparableQuantity etaConv = Quantities.getQuantity(98d, EFFICIENCY) - // EmInput - public static final String emControlStrategy = "self_optimization" - public static final EmInput parentEm = new EmInput( - UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd"), - "test_parentEmInput", - SystemParticipantTestData.operator, - SystemParticipantTestData.operationTime, - emControlStrategy, - null - ) - - public static final EmInput emInput = new EmInput( - UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), - "test_emInput", - SystemParticipantTestData.operator, - SystemParticipantTestData.operationTime, - emControlStrategy, - parentEm - ) // FixedFeedInput public static final FixedFeedInInput fixedFeedInInput = new FixedFeedInInput( @@ -84,7 +64,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, sRated, cosPhiRated ) @@ -102,7 +81,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, albedo, azimuth, etaConv, @@ -139,7 +117,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiP, - emInput, wecType, false ) @@ -195,7 +172,6 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, - emInput, chpTypeInput, thermalStorage, false @@ -222,7 +198,6 @@ class SystemParticipantTestData { operationTime, participantNode, qV, - emInput, bmTypeInput, false, false, @@ -248,7 +223,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, evTypeInput ) @@ -262,7 +236,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, standardLoadProfile, false, eConsAnnual, @@ -299,7 +272,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, storageTypeInput ) @@ -322,7 +294,6 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, - emInput, hpTypeInput ) @@ -335,7 +306,6 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, - emInput, ChargingPointTypeUtils.HouseholdSocket, 4, cosPhiRated, diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv index e1bd3d5fa..5cc111444 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv @@ -1,3 +1,2 @@ -uuid,control_strategy,id,operates_from,operates_until,operator,parent_em -977157f4-25e5-4c72-bf34-440edc778792,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,897bfc17-8e54-43d0-8d98-740786fd94dd -897bfc17-8e54-43d0-8d98-740786fd94dd,self_optimization,test_parentEmInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510, \ No newline at end of file +uuid,connected_assets,control_strategy,id,operates_from,operates_until,operator +977157f4-25e5-4c72-bf34-440edc778792,eaf77f7e-9001-479f-94ca-7fb657766f5f d56f15b7-8293-4b98-b5bd-58f6273ce229,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510 From dcdf90d69fcda55aab563592ca9c2e7da0a0783b Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 3 Jan 2024 20:05:20 +0100 Subject: [PATCH 080/228] Fixing JavaDoc --- .../io/factory/input/participant/HpInputEntityData.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java index a240b5f04..83f01970f 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputEntityData.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.ConnectorInputEntityData; import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; @@ -40,8 +39,8 @@ public HpInputEntityData( } /** - * Creates a new HpInputEntityData object based on a given {@link ConnectorInputEntityData} object - * and given thermal bus input + * Creates a new HpInputEntityData object based on a given {@link + * SystemParticipantTypedEntityData} object and given thermal bus input * * @param entityData The SystemParticipantTypedEntityData object to enhance * @param thermalBusInput The thermal bus input From 8d63f7436dd075e0c3600645d47108914c92dbda Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 10:17:04 +0100 Subject: [PATCH 081/228] Changelog addition --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9a1a69a1..2b33ad187 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Adding JavaDoc to `EntitySource.safeMapGet` [#828](https://github.com/ie3-institute/PowerSystemDataModel/issues/828) - Abstracting some methods in `ValidationUtils` [#852](https://github.com/ie3-institute/PowerSystemDataModel/issues/852) - `EmInput` should not be connected to the grid [#955](https://github.com/ie3-institute/PowerSystemDataModel/issues/955) +- Refactored and abstracted `EntitySource`s and `EntityData` creation [#969](https://github.com/ie3-institute/PowerSystemDataModel/issues/969) ## [4.1.0] - 2023-11-02 From 9742e21a2eced64eb15d47e627104dc7477e77a7 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 10:21:00 +0100 Subject: [PATCH 082/228] Revert "Rolling back EmInput additions in this branch" This reverts commit 79ba2c54 --- .../ie3/datamodel/io/factory/FactoryData.java | 23 -- .../factory/input/EmAssetInputEntityData.java | 70 +++++ .../input/participant/BmInputFactory.java | 3 + .../input/participant/ChpInputEntityData.java | 7 +- .../input/participant/ChpInputFactory.java | 3 + .../input/participant/EmInputFactory.java | 55 ++-- .../input/participant/EvInputFactory.java | 5 +- .../input/participant/EvcsInputFactory.java | 13 +- .../participant/FixedFeedInInputFactory.java | 9 +- .../input/participant/HpInputFactory.java | 4 + .../input/participant/LoadInputFactory.java | 8 +- .../input/participant/PvInputFactory.java | 8 +- .../participant/StorageInputFactory.java | 5 +- .../SystemParticipantEntityData.java | 113 +++++++ .../SystemParticipantInputEntityFactory.java | 8 +- .../SystemParticipantTypedEntityData.java | 25 +- .../input/participant/WecInputFactory.java | 4 +- .../ie3/datamodel/io/processor/Processor.java | 20 +- .../io/source/EnergyManagementSource.java | 163 ++++++++-- .../io/source/SystemParticipantSource.java | 176 ++++++++--- .../csv/CsvJointGridContainerSource.java | 7 +- .../ie3/datamodel/models/ControlStrategy.java | 35 --- .../datamodel/models/EmControlStrategy.java | 45 --- .../ie3/datamodel/models/input/EmInput.java | 139 +++++++++ .../container/EnergyManagementUnits.java | 100 ------ .../models/input/container/GridContainer.java | 30 +- .../input/container/JointGridContainer.java | 9 +- .../input/container/SubGridContainer.java | 10 +- .../models/input/system/BmInput.java | 15 +- .../models/input/system/ChpInput.java | 13 +- .../models/input/system/EmInput.java | 176 ----------- .../models/input/system/EvInput.java | 13 +- .../models/input/system/EvcsInput.java | 19 +- .../models/input/system/FixedFeedInInput.java | 13 +- .../models/input/system/HpInput.java | 13 +- .../models/input/system/LoadInput.java | 19 +- .../models/input/system/PvInput.java | 13 +- .../models/input/system/StorageInput.java | 13 +- .../input/system/SystemParticipantInput.java | 49 ++- .../models/input/system/WecInput.java | 13 +- .../models/result/system/EmResult.java | 3 +- .../utils/ContainerNodeUpdateUtil.java | 2 - .../ie3/datamodel/utils/ContainerUtils.java | 23 +- .../io/extractor/ExtractorTest.groovy | 2 +- .../participant/BmInputFactoryTest.groovy | 5 +- .../participant/ChpInputFactoryTest.groovy | 5 +- .../participant/EmInputFactoryTest.groovy | 57 ++-- .../participant/EvInputFactoryTest.groovy | 5 +- .../participant/EvcsInputFactoryTest.groovy | 12 +- .../FixedFeedInInputFactoryTest.groovy | 15 +- .../participant/HpInputFactoryTest.groovy | 5 +- .../participant/LoadInputFactoryTest.groovy | 6 +- .../participant/PvInputFactoryTest.groovy | 6 +- .../StorageInputFactoryTest.groovy | 5 +- .../participant/WecInputFactoryTest.groovy | 5 +- ...EntityPersistenceNamingStrategyTest.groovy | 2 +- .../io/processor/ProcessorProviderTest.groovy | 1 + .../input/InputEntityProcessorTest.groovy | 74 +++-- .../datamodel/io/sink/CsvFileSinkTest.groovy | 6 +- .../source/EnergyManagementSourceTest.groovy | 284 ++++++++++++++++++ .../io/source/EntitySourceTest.groovy | 19 +- .../source/SystemParticipantSourceTest.groovy | 37 ++- .../csv/CsvEnergyManagementSourceTest.groovy | 8 +- .../csv/CsvSystemParticipantSourceTest.groovy | 65 ++-- .../models/EmControlStrategyTest.groovy | 45 --- .../EnergyManagementUnitsTest.groovy | 29 -- .../container/JointGridContainerTest.groovy | 9 +- .../models/input/system/BmInputTest.groovy | 1 + .../models/input/system/ChpInputTest.groovy | 1 + .../models/input/system/EmInputTest.groovy | 59 ++-- .../models/input/system/EvInputTest.groovy | 1 + .../models/input/system/EvcsInputTest.groovy | 1 + .../input/system/FixedFeedInInputTest.groovy | 1 + .../models/input/system/HpInputTest.groovy | 1 + .../models/input/system/LoadInputTest.groovy | 1 + .../models/input/system/PvInputTest.groovy | 1 + .../input/system/StorageInputTest.groovy | 1 + .../models/input/system/WecInputTest.groovy | 1 + .../datamodel/utils/ContainerUtilsTest.groovy | 8 - .../InvalidSystemParticipantInput.groovy | 2 +- .../ie3/test/common/ComplexTopology.groovy | 8 - .../common/EnergyManagementTestData.groovy | 30 -- .../ie3/test/common/SampleJointGrid.groovy | 6 +- .../common/SystemParticipantTestData.groovy | 30 ++ .../io/source/csv/_participants/em_input.csv | 5 +- 85 files changed, 1447 insertions(+), 912 deletions(-) create mode 100644 src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java create mode 100644 src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/ControlStrategy.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java create mode 100644 src/main/java/edu/ie3/datamodel/models/input/EmInput.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java delete mode 100644 src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java create mode 100644 src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy delete mode 100644 src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy delete mode 100644 src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy delete mode 100644 src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java index f88d24423..6ed7dcb7e 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java @@ -135,29 +135,6 @@ field, getField(field)), } } - /** - * Parses and returns an array of UUIDs from field value of given field name. Throws {@link - * FactoryException} if field does not exist or parsing fails. - * - * @param field field name - * @return UUID - */ - public UUID[] getUUIDs(String field) { - try { - String fieldValue = getField(field); - if (fieldValue.trim().isEmpty()) return new UUID[0]; - - String[] uuidFields = fieldValue.split(" "); - return Arrays.stream(uuidFields).map(UUID::fromString).toArray(UUID[]::new); - } catch (IllegalArgumentException iae) { - throw new FactoryException( - String.format( - "Exception while trying to parse UUIDs of field \"%s\" with value \"%s\"", - field, getField(field)), - iae); - } - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java new file mode 100644 index 000000000..d001c405e --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/EmAssetInputEntityData.java @@ -0,0 +1,70 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.factory.input; + +import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.EmInput; +import edu.ie3.datamodel.models.input.OperatorInput; +import java.util.Map; +import java.util.Objects; + +/** + * Data used for the construction of {@link edu.ie3.datamodel.models.input.AssetInput} entities + * which also require an EM attribute. This data object can include additional information about the + * {@link EmInput}, which cannot be provided through the attribute map as it is a complex shared + * entity. + */ +public class EmAssetInputEntityData extends AssetInputEntityData { + + private final EmInput emUnit; + + public EmAssetInputEntityData( + Map fieldsToAttributes, + Class entityClass, + EmInput emUnit) { + super(fieldsToAttributes, entityClass); + this.emUnit = emUnit; + } + + public EmAssetInputEntityData( + Map fieldsToAttributes, + Class entityClass, + OperatorInput operator, + EmInput emUnit) { + super(fieldsToAttributes, entityClass, operator); + this.emUnit = emUnit; + } + + /** + * Creates a new EmAssetInputEntityData object based on a given {@link AssetInputEntityData} + * object and given em unit + * + * @param entityData The entity data object to use attributes of + * @param emUnit The em input to use + */ + public EmAssetInputEntityData(AssetInputEntityData entityData, EmInput emUnit) { + super(entityData, entityData.getOperatorInput()); + this.emUnit = emUnit; + } + + public EmInput getEmUnit() { + return emUnit; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + EmAssetInputEntityData that = (EmAssetInputEntityData) o; + return Objects.equals(emUnit, that.emUnit); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), emUnit); + } +} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java index 799837d3c..bf8079394 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/BmInputFactory.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.BmInput; @@ -41,6 +42,7 @@ protected BmInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final BmTypeInput typeInput = data.getTypeInput(); final boolean marketReaction = data.getBoolean(MARKET_REACTION); final boolean costControlled = data.getBoolean(COST_CONTROLLED); @@ -54,6 +56,7 @@ protected BmInput buildModel( operationTime, node, qCharacteristics, + em, typeInput, marketReaction, costControlled, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java index 95b46c44c..81c11572a 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputEntityData.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.factory.input.participant; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; @@ -21,10 +22,11 @@ public class ChpInputEntityData extends SystemParticipantTypedEntityData fieldsToAttributes, NodeInput node, + EmInput em, ChpTypeInput typeInput, ThermalBusInput thermalBusInput, ThermalStorageInput thermalStorageInput) { - super(fieldsToAttributes, ChpInput.class, node, typeInput); + super(fieldsToAttributes, ChpInput.class, node, em, typeInput); this.thermalBusInput = thermalBusInput; this.thermalStorageInput = thermalStorageInput; } @@ -33,10 +35,11 @@ public ChpInputEntityData( Map fieldsToAttributes, OperatorInput operator, NodeInput node, + EmInput em, ChpTypeInput typeInput, ThermalBusInput thermalBusInput, ThermalStorageInput thermalStorageInput) { - super(fieldsToAttributes, ChpInput.class, operator, node, typeInput); + super(fieldsToAttributes, ChpInput.class, operator, node, em, typeInput); this.thermalBusInput = thermalBusInput; this.thermalStorageInput = thermalStorageInput; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java index f04b85e86..4ad47b060 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactory.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.ChpInput; @@ -34,6 +35,7 @@ protected ChpInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final boolean marketReaction = data.getBoolean(MARKET_REACTION); return new ChpInput( @@ -44,6 +46,7 @@ protected ChpInput buildModel( node, data.getThermalBusInput(), qCharacteristics, + em, data.getTypeInput(), data.getThermalStorageInput(), marketReaction); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java index 3e2e39d60..30c280383 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EmInputFactory.java @@ -5,55 +5,54 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityFactory; -import edu.ie3.datamodel.models.ControlStrategy; +import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.system.EmInput; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; import java.util.UUID; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public class EmInputFactory extends AssetInputEntityFactory { - private static final Logger logger = LoggerFactory.getLogger(EmInputFactory.class); - - private static final String CONNECTED_ASSETS = "connectedassets"; +public class EmInputFactory extends AssetInputEntityFactory { private static final String CONTROL_STRATEGY = "controlstrategy"; + public static final String PARENT_EM = "parentem"; + public EmInputFactory() { super(EmInput.class); } + @Override + protected List> getFields(EmAssetInputEntityData data) { + List> fields = new ArrayList<>(super.getFields(data)); + + List> withEm = + fields.stream().map(f -> (Set) expandSet(f, PARENT_EM)).toList(); + + fields.addAll(withEm); + + return fields; + } + @Override protected String[] getAdditionalFields() { - return new String[] {CONNECTED_ASSETS, CONTROL_STRATEGY}; + return new String[] {CONTROL_STRATEGY}; } @Override protected EmInput buildModel( - AssetInputEntityData data, + EmAssetInputEntityData data, UUID uuid, String id, OperatorInput operator, OperationTime operationTime) { - ControlStrategy controlStrategy; - try { - controlStrategy = ControlStrategy.parse(data.getField(CONTROL_STRATEGY)); - } catch (ParsingException e) { - logger.warn( - "Cannot parse control strategy \"{}\" of energy management system \"{}\". Assign no control strategy instead.", - data.getField(CONTROL_STRATEGY), - id); - controlStrategy = ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY; - } - final UUID[] connectedAssets = data.getUUIDs(CONNECTED_ASSETS); - - if (connectedAssets.length == 0) - logger.warn("There are no connected assets for energy management system \"{}\".", id); - - return new EmInput(uuid, id, operator, operationTime, connectedAssets, controlStrategy); + String controlStrategy = data.getField(CONTROL_STRATEGY); + + EmInput parentEm = data.getEmUnit(); + + return new EmInput(uuid, id, operator, operationTime, controlStrategy, parentEm); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java index 1f0f8e80c..b2d492ce5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvInputFactory.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EvInput; @@ -35,7 +36,9 @@ protected EvInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); + return new EvInput( - uuid, id, operator, operationTime, node, qCharacteristics, data.getTypeInput()); + uuid, id, operator, operationTime, node, qCharacteristics, em, data.getTypeInput()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java index 8ed807267..183cbf08b 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactory.java @@ -8,8 +8,8 @@ import edu.ie3.datamodel.exceptions.ChargingPointTypeException; import edu.ie3.datamodel.exceptions.FactoryException; import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.EvcsInput; @@ -21,14 +21,14 @@ import java.util.UUID; /** - * Factory to create instances of {@link EvcsInput}s based on {@link NodeAssetInputEntityData} and - * additional fields. + * Factory to create instances of {@link EvcsInput}s based on {@link SystemParticipantEntityData} + * and additional fields. * * @version 0.1 * @since 26.07.20 */ public class EvcsInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String TYPE = "type"; private static final String CHARGING_POINTS = "chargingpoints"; @@ -47,14 +47,14 @@ protected String[] getAdditionalFields() { @Override protected EvcsInput buildModel( - NodeAssetInputEntityData data, + SystemParticipantEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { - + final EmInput em = data.getEm().orElse(null); final ChargingPointType type; try { type = ChargingPointTypeUtils.parse(data.getField(TYPE)); @@ -88,6 +88,7 @@ protected EvcsInput buildModel( operationTime, node, qCharacteristics, + em, type, chargingPoints, cosPhi, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java index 36e527b61..bdede37bc 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactory.java @@ -5,9 +5,9 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.FixedFeedInInput; @@ -17,7 +17,7 @@ import tech.units.indriya.ComparableQuantity; public class FixedFeedInInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String S_RATED = "srated"; private static final String COSPHI_RATED = "cosphirated"; @@ -33,17 +33,18 @@ protected String[] getAdditionalFields() { @Override protected FixedFeedInInput buildModel( - NodeAssetInputEntityData data, + SystemParticipantEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final ComparableQuantity sRated = data.getQuantity(S_RATED, StandardUnits.S_RATED); final double cosPhiRated = data.getDouble(COSPHI_RATED); return new FixedFeedInInput( - uuid, id, operator, operationTime, node, qCharacteristics, sRated, cosPhiRated); + uuid, id, operator, operationTime, node, qCharacteristics, em, sRated, cosPhiRated); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java index cd814e044..b01ede298 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/HpInputFactory.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.HpInput; @@ -33,6 +34,8 @@ protected HpInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); + return new HpInput( uuid, id, @@ -41,6 +44,7 @@ protected HpInput buildModel( node, data.getThermalBusInput(), qCharacteristics, + em, data.getTypeInput()); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java index 9d2cd7396..188504bb6 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactory.java @@ -6,9 +6,9 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.exceptions.ParsingException; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.LoadInput; @@ -22,7 +22,7 @@ import tech.units.indriya.ComparableQuantity; public class LoadInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final Logger logger = LoggerFactory.getLogger(LoadInputFactory.class); private static final String LOAD_PROFILE = "loadprofile"; @@ -42,7 +42,7 @@ protected String[] getAdditionalFields() { @Override protected LoadInput buildModel( - NodeAssetInputEntityData data, + SystemParticipantEntityData data, UUID uuid, String id, NodeInput node, @@ -59,6 +59,7 @@ protected LoadInput buildModel( id); loadProfile = LoadProfile.DefaultLoadProfiles.NO_LOAD_PROFILE; } + final EmInput em = data.getEm().orElse(null); final boolean dsm = data.getBoolean(DSM); final ComparableQuantity eConsAnnual = data.getQuantity(E_CONS_ANNUAL, StandardUnits.ENERGY_IN); @@ -72,6 +73,7 @@ protected LoadInput buildModel( operationTime, node, qCharacteristics, + em, loadProfile, dsm, eConsAnnual, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java index 23f7f70ae..3d359fde2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/PvInputFactory.java @@ -5,9 +5,9 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.PvInput; @@ -19,7 +19,7 @@ import tech.units.indriya.ComparableQuantity; public class PvInputFactory - extends SystemParticipantInputEntityFactory { + extends SystemParticipantInputEntityFactory { private static final String ALBEDO = "albedo"; private static final String AZIMUTH = "azimuth"; private static final String ETA_CONV = "etaconv"; @@ -43,13 +43,14 @@ protected String[] getAdditionalFields() { @Override protected PvInput buildModel( - NodeAssetInputEntityData data, + SystemParticipantEntityData data, UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final double albedo = data.getDouble(ALBEDO); final ComparableQuantity azimuth = data.getQuantity(AZIMUTH, StandardUnits.AZIMUTH); final ComparableQuantity etaConv = @@ -69,6 +70,7 @@ protected PvInput buildModel( operationTime, node, qCharacteristics, + em, albedo, azimuth, etaConv, diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java index 04645c459..aea43ba85 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactory.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.StorageInput; @@ -35,7 +36,9 @@ protected StorageInput buildModel( ReactivePowerCharacteristic qCharacteristics, OperatorInput operator, OperationTime operationTime) { + final EmInput em = data.getEm().orElse(null); final StorageTypeInput typeInput = data.getTypeInput(); - return new StorageInput(uuid, id, operator, operationTime, node, qCharacteristics, typeInput); + return new StorageInput( + uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java new file mode 100644 index 000000000..971832be4 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantEntityData.java @@ -0,0 +1,113 @@ +/* + * © 2023. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.factory.input.participant; + +import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; +import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.EmInput; +import edu.ie3.datamodel.models.input.NodeInput; +import edu.ie3.datamodel.models.input.OperatorInput; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + * Data used for those classes of {@link + * edu.ie3.datamodel.models.input.system.SystemParticipantInput}, including an (optional) link to an + * {@link EmInput} entity. + */ +public class SystemParticipantEntityData extends NodeAssetInputEntityData { + + /** Energy management unit that is managing the system participant. Can be null. */ + private final EmInput em; + + /** + * Creates a new SystemParticipantEntityData object for an operated, always on system participant + * input + * + * @param fieldsToAttributes attribute map: field name to value + * @param entityClass class of the entity to be created with this data + * @param node input node + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. + */ + public SystemParticipantEntityData( + Map fieldsToAttributes, + Class entityClass, + NodeInput node, + EmInput em) { + super(fieldsToAttributes, entityClass, node); + this.em = em; + } + + public Optional getEm() { + return Optional.ofNullable(em); + } + + /** + * Creates a new SystemParticipantEntityData object for an operable system participant input + * + * @param fieldsToAttributes attribute map: field name to value + * @param entityClass class of the entity to be created with this data + * @param operator operator input + * @param node input node + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. + */ + public SystemParticipantEntityData( + Map fieldsToAttributes, + Class entityClass, + OperatorInput operator, + NodeInput node, + EmInput em) { + super(fieldsToAttributes, entityClass, operator, node); + this.em = em; + } + + /** + * Creates a new SystemParticipantEntityData object based on a given {@link + * NodeAssetInputEntityData} object and given energy management unit + * + * @param nodeAssetInputEntityData The node asset entity data object to use attributes of + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. + */ + public SystemParticipantEntityData( + NodeAssetInputEntityData nodeAssetInputEntityData, EmInput em) { + super(nodeAssetInputEntityData, nodeAssetInputEntityData.getNode()); + this.em = em; + } + + @Override + public String toString() { + return "SystemParticipantEntityData{" + + "em=" + + getEm().map(EmInput::toString).orElse("") + + ", node=" + + getNode().getUuid() + + ", operatorInput=" + + getOperatorInput().getUuid() + + ", fieldsToValues=" + + getFieldsToValues() + + ", targetClass=" + + getTargetClass() + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + SystemParticipantEntityData that = (SystemParticipantEntityData) o; + return getEm().equals(that.getEm()); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), getEm()); + } +} diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java index cc7348200..e8101b582 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java @@ -27,11 +27,13 @@ * @since 28.01.20 */ public abstract class SystemParticipantInputEntityFactory< - T extends SystemParticipantInput, D extends NodeAssetInputEntityData> + T extends SystemParticipantInput, D extends SystemParticipantEntityData> extends AssetInputEntityFactory { private static final String Q_CHARACTERISTICS = "qcharacteristics"; + public static final String EM = "em"; + protected SystemParticipantInputEntityFactory(Class... allowedClasses) { super(allowedClasses); } @@ -41,6 +43,10 @@ protected List> getFields(D data) { List> fields = new ArrayList<>(super.getFields(data)); for (Set set : fields) set.add(Q_CHARACTERISTICS); + List> withEm = fields.stream().map(f -> (Set) expandSet(f, EM)).toList(); + + fields.addAll(withEm); + return fields; } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java index 871c70bd0..ab0bbe4b3 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantTypedEntityData.java @@ -5,8 +5,8 @@ */ package edu.ie3.datamodel.io.factory.input.participant; -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.type.SystemParticipantTypeInput; @@ -22,7 +22,7 @@ * of the SystemParticipantInput */ public class SystemParticipantTypedEntityData - extends NodeAssetInputEntityData { + extends SystemParticipantEntityData { private final T typeInput; @@ -33,14 +33,17 @@ public class SystemParticipantTypedEntityData fieldsToAttributes, Class entityClass, NodeInput node, + EmInput em, T typeInput) { - super(fieldsToAttributes, entityClass, node); + super(fieldsToAttributes, entityClass, node, em); this.typeInput = typeInput; } @@ -52,6 +55,8 @@ public SystemParticipantTypedEntityData( * @param entityClass class of the entity to be created with this data * @param operator operator input * @param node input node + * @param em The energy management unit that is managing the system participant. Null, if the + * system participant is not managed. * @param typeInput type input */ public SystemParticipantTypedEntityData( @@ -59,21 +64,23 @@ public SystemParticipantTypedEntityData( Class entityClass, OperatorInput operator, NodeInput node, + EmInput em, T typeInput) { - super(fieldsToAttributes, entityClass, operator, node); + super(fieldsToAttributes, entityClass, operator, node, em); this.typeInput = typeInput; } /** * Creates a new SystemParticipantTypedEntityData object based on a given {@link - * NodeAssetInputEntityData} object and given type input + * SystemParticipantEntityData} object and given type input * - * @param nodeAssetEntityData The system participant entity data object to use attributes of + * @param systemParticipantEntityData The system participant entity data object to use attributes + * of * @param typeInput type input */ public SystemParticipantTypedEntityData( - NodeAssetInputEntityData nodeAssetEntityData, T typeInput) { - super(nodeAssetEntityData, nodeAssetEntityData.getNode()); + SystemParticipantEntityData systemParticipantEntityData, T typeInput) { + super(systemParticipantEntityData, systemParticipantEntityData.getEm().orElse(null)); this.typeInput = typeInput; } @@ -86,6 +93,8 @@ public String toString() { return "SystemParticipantTypedEntityData{" + "typeInput=" + typeInput.getUuid() + + ", em=" + + getEm().map(EmInput::toString).orElse("") + ", node=" + getNode().getUuid() + ", operatorInput=" diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java index 83bbbdd43..c6159adeb 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/participant/WecInputFactory.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.WecInput; @@ -37,9 +38,10 @@ protected WecInput buildModel( OperatorInput operator, OperationTime operationTime) { WecTypeInput typeInput = data.getTypeInput(); + EmInput em = data.getEm().orElse(null); final boolean marketReaction = data.getBoolean(MARKET_REACTION); return new WecInput( - uuid, id, operator, operationTime, node, qCharacteristics, typeInput, marketReaction); + uuid, id, operator, operationTime, node, qCharacteristics, em, typeInput, marketReaction); } } diff --git a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java index 830fbef02..163d51b74 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java @@ -8,7 +8,6 @@ import edu.ie3.datamodel.exceptions.EntityProcessorException; import edu.ie3.datamodel.io.factory.input.NodeInputFactory; import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor; -import edu.ie3.datamodel.models.ControlStrategy; import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.UniqueEntity; @@ -236,10 +235,12 @@ protected String processMethodResult(Object methodReturnObject, Method method, S ((Optional) methodReturnObject) .map( o -> { - if (o instanceof Quantity) { + if (o instanceof Quantity quantity) { return Try.of( - () -> handleQuantity((Quantity) o, fieldName), + () -> handleQuantity(quantity, fieldName), EntityProcessorException.class); + } else if (o instanceof UniqueEntity entity) { + return Try.of(entity::getUuid, EntityProcessorException.class); } else { return Failure.of( new EntityProcessorException( @@ -274,8 +275,8 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "TimeSeries", "Transformer2WTypeInput", "Transformer3WTypeInput", - "WecTypeInput" -> resultStringBuilder.append( - ((UniqueEntity) methodReturnObject).getUuid()); + "WecTypeInput", + "EmInput" -> resultStringBuilder.append(((UniqueEntity) methodReturnObject).getUuid()); case "OperatorInput" -> resultStringBuilder.append( ((OperatorInput) methodReturnObject).getId().equalsIgnoreCase("NO_OPERATOR_ASSIGNED") ? "" @@ -289,9 +290,6 @@ protected String processMethodResult(Object methodReturnObject, Method method, S "ReactivePowerCharacteristic", "CharacteristicInput" -> resultStringBuilder.append( ((CharacteristicInput) methodReturnObject).serialize()); - case "UUID[]" -> resultStringBuilder.append(processUUIDArray((UUID[]) methodReturnObject)); - case "ControlStrategy" -> resultStringBuilder.append( - ((ControlStrategy) methodReturnObject).getKey()); default -> throw new EntityProcessorException( "Unable to process value for attribute/field '" + fieldName @@ -372,12 +370,6 @@ protected String handleQuantity(Quantity quantity, String fieldName) protected abstract Try handleProcessorSpecificQuantity( Quantity quantity, String fieldName); - protected String processUUIDArray(UUID[] uuids) { - StringBuilder strb = new StringBuilder(); - for (UUID uuid : uuids) strb.append(uuid.toString()).append(" "); - return strb.toString().strip(); - } - /** * Handling of elements of type {@link OperationTime} * diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 1aae01392..b64c10edc 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -5,26 +5,30 @@ */ package edu.ie3.datamodel.io.source; +import static edu.ie3.datamodel.io.factory.input.participant.EmInputFactory.PARENT_EM; + import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; +import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.OperatorInput; -import edu.ie3.datamodel.models.input.container.EnergyManagementUnits; -import edu.ie3.datamodel.models.input.system.EmInput; +import edu.ie3.datamodel.utils.Try; +import java.util.List; import java.util.Map; -import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class EnergyManagementSource extends EntitySource { private final TypeSource typeSource; - private final EmInputFactory emInputFactory; + private static final EmInputFactory emInputFactory = new EmInputFactory(); public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { super(dataSource); this.typeSource = typeSource; - - this.emInputFactory = new EmInputFactory(); } /** @@ -32,11 +36,11 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { * *

This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. + * {@link EmInput#equals(Object)} is NOT restricted on the UUID of {@link EmInput}. * - * @return a set of object and uuid unique {@link EmInput} entities + * @return a map of UUID to {@link EmInput} entities */ - public EnergyManagementUnits getEmUnits() throws SourceException { + public Map getEmUnits() throws SourceException { Map operators = typeSource.getOperators(); return getEmUnits(operators); } @@ -44,7 +48,7 @@ public EnergyManagementUnits getEmUnits() throws SourceException { /** * This set has to be unique in the sense of object uniqueness but also in the sense of {@link * java.util.UUID} uniqueness of the provided {@link EmInput} which has to be checked manually, as - * {@link EmInput#equals(Object)} is NOT restricted on the uuid of {@link EmInput}. + * {@link EmInput#equals(Object)} is NOT restricted on the UUID of {@link EmInput}. * *

In contrast to {@link #getEmUnits()} this method provides the ability to pass in an already * existing set of {@link OperatorInput} entities, the {@link EmInput} instances depend on. Doing @@ -54,16 +58,139 @@ public EnergyManagementUnits getEmUnits() throws SourceException { *

If something fails during the creation process a {@link SourceException} is thrown, else a * set with all entities that has been able to be build is returned. * - * @param operators a map of UUID to object and uuid unique {@link OperatorInput} that should be - * used for the returning instances - * @return a set of object and uuid unique {@link EmInput} entities + * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities + * @return a map of UUID to {@link EmInput} entities + */ + public Map getEmUnits(Map operators) throws SourceException { + return createEmInputs(buildAssetInputEntityData(EmInput.class, operators)); + } + + /** + * Since each EM can itself be controlled by another EM, it does not suffice to link {@link + * EmInput}s via {@link EntitySource#optionallyEnrichEntityData} as we do for system participants + * in {@link SystemParticipantSource}. Instead, we use a recursive approach, starting with EMs at + * root level (which are not EM-controlled themselves). + * + * @param assetEntityDataStream the data stream of {@link AssetInputEntityData} {@link Try} + * objects + * @return a map of UUID to {@link EmInput} entities */ - public EnergyManagementUnits getEmUnits(Map operators) + private static Map createEmInputs( + Stream> assetEntityDataStream) throws SourceException { - Set emUnits = - unpackSet( - buildAssetInputEntityData(EmInput.class, operators).map(emInputFactory::get), + + // Split stream by failures and EMs that are themselves EM-controlled on one side, and EMs at + // root position (that have not failed so far) on the other side, which do not have parents per + // definition. + Map>> split = + assetEntityDataStream.collect( + Collectors.partitioningBy( + dataTry -> + dataTry + .map( + data -> + data.containsKey(PARENT_EM) && !data.getField(PARENT_EM).isBlank()) + .getOrElse(() -> true))); + + List> rootEmsEntityData = split.get(false); + List> others = split.get(true); + + // at the start, this is only root ems + Map allEms = + unpackMap( + rootEmsEntityData.stream() + .parallel() + .map( + entityDataTry -> + entityDataTry.map( + entityData -> new EmAssetInputEntityData(entityData, null))) + .map(emInputFactory::get), EmInput.class); - return new EnergyManagementUnits(emUnits); + + if (!others.isEmpty()) { + // there's more EM levels beyond root level. Build them recursively + Stream othersWithParentUuid = + // We try to keep the Tries as long as possible so that as many failures as possible can + // be reported. At this point however, we need to "unpack" (and throw, if applicable), + // because without valid parent EM UUID, we cannot proceed. + unpack( + others.stream() + .map( + dataTry -> + dataTry.flatMap( + data -> { + // we already filtered out those entities that do not have a parent, + // so the field should exist + String uuidString = data.getField(PARENT_EM); + return Try.of( + () -> UUID.fromString(uuidString), + IllegalArgumentException.class) + .transformF( + iae -> + new SourceException( + String.format( + "Exception while trying to parse UUID of field \"%s\" with value \"%s\"", + PARENT_EM, uuidString), + iae)) + // failed UUID parses are filtered out at this point. We save + // the parsed UUID with the asset data + .map( + parentUuid -> + new AssetDataAndValidParentUuid(data, parentUuid)); + })), + AssetDataAndValidParentUuid.class); + + allEms.putAll(createHierarchicalEmInputs(othersWithParentUuid, allEms)); + } + + return allEms; } + + private static Map createHierarchicalEmInputs( + Stream assetEntityDataStream, Map lastLevelEms) + throws SourceException { + + // Split stream by assets whose parent is already built (which can be built at this level), and + // those whose parents are not built yet (which have to be built at some lower recursion level + // or not at all) + Map> split = + assetEntityDataStream.collect( + Collectors.partitioningBy(data -> lastLevelEms.containsKey(data.parentEm))); + + List toBeBuiltAtThisLevel = split.get(true); + List toBeBuiltAtNextLevel = split.get(false); + + if (toBeBuiltAtThisLevel.isEmpty()) { + // Since we only start a new recursion step if the asset data stream is not empty, there have + // to be EMs to be built at next level. This does not work if there's no EMs at the current + // recursion level. + throw new SourceException( + "EMs " + toBeBuiltAtNextLevel + " were assigned a parent EM that does not exist."); + } else { + // New EMs can be built at this level + Map newEms = + unpackMap( + toBeBuiltAtThisLevel.stream() + .map( + data -> { + // exists because we checked above + EmInput parentEm = lastLevelEms.get(data.parentEm); + return emInputFactory.get( + new EmAssetInputEntityData(data.entityData, parentEm)); + }), + EmInput.class); + + if (!toBeBuiltAtNextLevel.isEmpty()) { + // If there's more EMs left to build, the new EMs have to function as parents there + newEms.putAll(createHierarchicalEmInputs(toBeBuiltAtNextLevel.stream(), newEms)); + } + return newEms; + } + } + + /** + * Helper data record that holds an {@link AssetInputEntityData} and the UUID successfully parsed + * from {@link EmInputFactory#PARENT_EM} field + */ + private record AssetDataAndValidParentUuid(AssetInputEntityData entityData, UUID parentEm) {} } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index dbb9d0af8..29d44be56 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.exceptions.SystemParticipantsException; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.*; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.container.SystemParticipants; @@ -33,6 +34,7 @@ public class SystemParticipantSource extends EntitySource { private final TypeSource typeSource; private final RawGridSource rawGridSource; private final ThermalSource thermalSource; + private final EnergyManagementSource energyManagementSource; // factories private final BmInputFactory bmInputFactory; @@ -50,12 +52,14 @@ public SystemParticipantSource( TypeSource typeSource, ThermalSource thermalSource, RawGridSource rawGridSource, + EnergyManagementSource energyManagementSource, DataSource dataSource) { super(dataSource); this.typeSource = typeSource; this.rawGridSource = rawGridSource; this.thermalSource = thermalSource; + this.energyManagementSource = energyManagementSource; // init factories this.bmInputFactory = new BmInputFactory(); @@ -133,6 +137,7 @@ public SystemParticipants getSystemParticipants( Map hpTypes = typeSource.getHpTypes(); Map storageTypes = typeSource.getStorageTypes(); Map wecTypes = typeSource.getWecTypes(); + Map emUnits = energyManagementSource.getEmUnits(); /// go on with the thermal assets Map thermalBuses = thermalSource.getThermalBuses(operators); @@ -140,27 +145,29 @@ public SystemParticipants getSystemParticipants( thermalSource.getThermalStorages(operators, thermalBuses); Try, SourceException> fixedFeedInInputs = - Try.of(() -> getFixedFeedIns(operators, nodes), SourceException.class); + Try.of(() -> getFixedFeedIns(operators, nodes, emUnits), SourceException.class); Try, SourceException> pvInputs = - Try.of(() -> getPvPlants(operators, nodes), SourceException.class); + Try.of(() -> getPvPlants(operators, nodes, emUnits), SourceException.class); Try, SourceException> loads = - Try.of(() -> getLoads(operators, nodes), SourceException.class); + Try.of(() -> getLoads(operators, nodes, emUnits), SourceException.class); Try, SourceException> bmInputs = - Try.of(() -> getBmPlants(operators, nodes, bmTypes), SourceException.class); + Try.of(() -> getBmPlants(operators, nodes, emUnits, bmTypes), SourceException.class); Try, SourceException> storages = - Try.of(() -> getStorages(operators, nodes, storageTypes), SourceException.class); + Try.of(() -> getStorages(operators, nodes, emUnits, storageTypes), SourceException.class); Try, SourceException> wecInputs = - Try.of(() -> getWecPlants(operators, nodes, wecTypes), SourceException.class); + Try.of(() -> getWecPlants(operators, nodes, emUnits, wecTypes), SourceException.class); Try, SourceException> evs = - Try.of(() -> getEvs(operators, nodes, evTypes), SourceException.class); + Try.of(() -> getEvs(operators, nodes, emUnits, evTypes), SourceException.class); Try, SourceException> evcs = - Try.of(() -> getEvcs(operators, nodes), SourceException.class); + Try.of(() -> getEvcs(operators, nodes, emUnits), SourceException.class); Try, SourceException> chpInputs = Try.of( - () -> getChpPlants(operators, nodes, chpTypes, thermalBuses, thermalStorages), + () -> getChpPlants(operators, nodes, emUnits, chpTypes, thermalBuses, thermalStorages), SourceException.class); Try, SourceException> hpInputs = - Try.of(() -> getHeatPumps(operators, nodes, hpTypes, thermalBuses), SourceException.class); + Try.of( + () -> getHeatPumps(operators, nodes, emUnits, hpTypes, thermalBuses), + SourceException.class); List exceptions = Try.getExceptions( @@ -210,7 +217,8 @@ public SystemParticipants getSystemParticipants( */ public Set getFixedFeedIns() throws SourceException { Map operators = typeSource.getOperators(); - return getFixedFeedIns(operators, rawGridSource.getNodes(operators)); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getFixedFeedIns(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -229,12 +237,14 @@ public Set getFixedFeedIns() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link FixedFeedInInput} entities */ public Set getFixedFeedIns( - Map operators, Map nodes) throws SourceException { + Map operators, Map nodes, Map emUnits) + throws SourceException { return unpackSet( - buildNodeAssetEntityData(FixedFeedInInput.class, operators, nodes) + buildSystemParticipantEntityData(FixedFeedInInput.class, operators, nodes, emUnits) .map(fixedFeedInInputFactory::get), FixedFeedInInput.class); } @@ -250,7 +260,8 @@ public Set getFixedFeedIns( */ public Set getPvPlants() throws SourceException { Map operators = typeSource.getOperators(); - return getPvPlants(operators, rawGridSource.getNodes(operators)); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getPvPlants(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -269,12 +280,15 @@ public Set getPvPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link PvInput} entities */ - public Set getPvPlants(Map operators, Map nodes) + public Set getPvPlants( + Map operators, Map nodes, Map emUnits) throws SourceException { return unpackSet( - buildNodeAssetEntityData(PvInput.class, operators, nodes).map(pvInputFactory::get), + buildSystemParticipantEntityData(PvInput.class, operators, nodes, emUnits) + .map(pvInputFactory::get), PvInput.class); } @@ -289,7 +303,8 @@ public Set getPvPlants(Map operators, Map getLoads() throws SourceException { Map operators = typeSource.getOperators(); - return getLoads(operators, rawGridSource.getNodes(operators)); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getLoads(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -308,12 +323,15 @@ public Set getLoads() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link LoadInput} entities */ - public Set getLoads(Map operators, Map nodes) + public Set getLoads( + Map operators, Map nodes, Map emUnits) throws SourceException { return unpackSet( - buildNodeAssetEntityData(LoadInput.class, operators, nodes).map(loadInputFactory::get), + buildSystemParticipantEntityData(LoadInput.class, operators, nodes, emUnits) + .map(loadInputFactory::get), LoadInput.class); } @@ -328,7 +346,8 @@ public Set getLoads(Map operators, Map getEvcs() throws SourceException { Map operators = typeSource.getOperators(); - return getEvcs(operators, rawGridSource.getNodes(operators)); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getEvcs(operators, rawGridSource.getNodes(operators), emUnits); } /** @@ -347,12 +366,15 @@ public Set getEvcs() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @return a set of object- and uuid-unique {@link EvcsInput} entities */ - public Set getEvcs(Map operators, Map nodes) + public Set getEvcs( + Map operators, Map nodes, Map emUnits) throws SourceException { return unpackSet( - buildNodeAssetEntityData(EvcsInput.class, operators, nodes).map(evcsInputFactory::get), + buildSystemParticipantEntityData(EvcsInput.class, operators, nodes, emUnits) + .map(evcsInputFactory::get), EvcsInput.class); } @@ -367,7 +389,9 @@ public Set getEvcs(Map operators, Map getBmPlants() throws SourceException { Map operators = typeSource.getOperators(); - return getBmPlants(operators, rawGridSource.getNodes(operators), typeSource.getBmTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getBmPlants( + operators, rawGridSource.getNodes(operators), emUnits, typeSource.getBmTypes()); } /** @@ -386,14 +410,18 @@ public Set getBmPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link BmTypeInput} entities * @return a set of object- and uuid-unique {@link BmInput} entities */ public Set getBmPlants( - Map operators, Map nodes, Map types) + Map operators, + Map nodes, + Map emUnits, + Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(BmInput.class, operators, nodes, types) + buildTypedSystemParticipantEntityData(BmInput.class, operators, nodes, emUnits, types) .map(bmInputFactory::get), BmInput.class); } @@ -410,7 +438,9 @@ public Set getBmPlants( */ public Set getStorages() throws SourceException { Map operators = typeSource.getOperators(); - return getStorages(operators, rawGridSource.getNodes(operators), typeSource.getStorageTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getStorages( + operators, rawGridSource.getNodes(operators), emUnits, typeSource.getStorageTypes()); } /** @@ -430,16 +460,18 @@ public Set getStorages() throws SourceException { * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} that should be * used for the returning instances * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link StorageTypeInput} entities * @return a set of object- and uuid-unique {@link StorageInput} entities */ public Set getStorages( Map operators, Map nodes, + Map emUnits, Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(StorageInput.class, operators, nodes, types) + buildTypedSystemParticipantEntityData(StorageInput.class, operators, nodes, emUnits, types) .map(storageInputFactory::get), StorageInput.class); } @@ -455,7 +487,9 @@ public Set getStorages( */ public Set getWecPlants() throws SourceException { Map operators = typeSource.getOperators(); - return getWecPlants(operators, rawGridSource.getNodes(operators), typeSource.getWecTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getWecPlants( + operators, rawGridSource.getNodes(operators), emUnits, typeSource.getWecTypes()); } /** @@ -474,14 +508,18 @@ public Set getWecPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link WecTypeInput} entities * @return a set of object- and uuid-unique {@link WecInput} entities */ public Set getWecPlants( - Map operators, Map nodes, Map types) + Map operators, + Map nodes, + Map emUnits, + Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(WecInput.class, operators, nodes, types) + buildTypedSystemParticipantEntityData(WecInput.class, operators, nodes, emUnits, types) .map(wecInputFactory::get), WecInput.class); } @@ -497,7 +535,8 @@ public Set getWecPlants( */ public Set getEvs() throws SourceException { Map operators = typeSource.getOperators(); - return getEvs(operators, rawGridSource.getNodes(operators), typeSource.getEvTypes()); + Map emUnits = energyManagementSource.getEmUnits(operators); + return getEvs(operators, rawGridSource.getNodes(operators), emUnits, typeSource.getEvTypes()); } /** @@ -516,24 +555,30 @@ public Set getEvs() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link EvTypeInput} entities * @return a set of object- and uuid-unique {@link EvInput} entities */ public Set getEvs( - Map operators, Map nodes, Map types) + Map operators, + Map nodes, + Map emUnits, + Map types) throws SourceException { return unpackSet( - buildTypedSystemParticipantEntityData(EvInput.class, operators, nodes, types) + buildTypedSystemParticipantEntityData(EvInput.class, operators, nodes, emUnits, types) .map(evInputFactory::get), EvInput.class); } public Set getChpPlants() throws SourceException { Map operators = typeSource.getOperators(); + Map emUnits = energyManagementSource.getEmUnits(operators); Map thermalBuses = thermalSource.getThermalBuses(operators); return getChpPlants( operators, rawGridSource.getNodes(operators), + emUnits, typeSource.getChpTypes(), thermalBuses, thermalSource.getThermalStorages(operators, thermalBuses)); @@ -551,6 +596,7 @@ public Set getChpPlants() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link ChpTypeInput} entities * @param thermalBuses a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities * @param thermalStorages a map of UUID to object- and uuid-unique {@link ThermalStorageInput} @@ -560,13 +606,15 @@ public Set getChpPlants() throws SourceException { public Set getChpPlants( Map operators, Map nodes, + Map emUnits, Map types, Map thermalBuses, Map thermalStorages) throws SourceException { return unpackSet( chpEntityStream( - buildTypedSystemParticipantEntityData(ChpInput.class, operators, nodes, types), + buildTypedSystemParticipantEntityData( + ChpInput.class, operators, nodes, emUnits, types), thermalStorages, thermalBuses) .map(chpInputFactory::get), @@ -575,9 +623,11 @@ public Set getChpPlants( public Set getHeatPumps() throws SourceException { Map operators = typeSource.getOperators(); + Map emUnits = energyManagementSource.getEmUnits(operators); return getHeatPumps( operators, rawGridSource.getNodes(operators), + emUnits, typeSource.getHpTypes(), thermalSource.getThermalBuses()); } @@ -594,6 +644,7 @@ public Set getHeatPumps() throws SourceException { * * @param operators a map of UUID to object- and uuid-unique {@link OperatorInput} entities * @param nodes a map of UUID to object- and uuid-unique {@link NodeInput} entities + * @param emUnits a map of UUID to object- and uuid-unique {@link EmInput} entities * @param types a map of UUID to object- and uuid-unique {@link HpTypeInput} entities * @param thermalBuses a map of UUID to object- and uuid-unique {@link ThermalBusInput} entities * @return a set of object- and uuid-unique {@link HpInput} entities @@ -601,12 +652,14 @@ public Set getHeatPumps() throws SourceException { public Set getHeatPumps( Map operators, Map nodes, + Map emUnits, Map types, Map thermalBuses) throws SourceException { return unpackSet( hpEntityStream( - buildTypedSystemParticipantEntityData(HpInput.class, operators, nodes, types), + buildTypedSystemParticipantEntityData( + HpInput.class, operators, nodes, emUnits, types), thermalBuses) .map(hpInputFactory::get), HpInput.class); @@ -676,17 +729,19 @@ private static Stream> hpEntityStream( Class entityClass, Map operators, Map nodes, + Map emUnits, Map types) { return typedSystemParticipantEntityStream( - buildNodeAssetEntityData(entityClass, operators, nodes), types); + buildSystemParticipantEntityData(entityClass, operators, nodes, emUnits), types); } /** - * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of - * {@link SystemParticipantTypeInput} based on the provided collection of types and the fields to - * values mapping that inside the already provided {@link NodeAssetInputEntityData} instance. + * Enriches a given stream of {@link SystemParticipantEntityData} {@link Try} objects with a type + * of {@link SystemParticipantTypeInput} based on the provided collection of types and the fields + * to values mapping that inside the already provided {@link SystemParticipantEntityData} + * instance. * - * @param systemParticipantEntityDataStream the data stream of {@link NodeAssetInputEntityData} + * @param systemParticipantEntityDataStream the data stream of {@link SystemParticipantEntityData} * {@link Try} objects * @param types the types that should be used for enrichment and to build {@link * SystemParticipantTypedEntityData} from @@ -697,7 +752,7 @@ private static Stream> hpEntityStream( private static Stream, SourceException>> typedSystemParticipantEntityStream( - Stream> + Stream> systemParticipantEntityDataStream, Map types) { return systemParticipantEntityDataStream @@ -712,4 +767,43 @@ private static Stream> hpEntityStream( types, SystemParticipantTypedEntityData::new))); } + + private Stream> + buildSystemParticipantEntityData( + Class entityClass, + Map operators, + Map nodes, + Map emUnits) { + return systemParticipantEntityStream( + buildNodeAssetEntityData(entityClass, operators, nodes), emUnits); + } + + /** + * Enriches a given stream of {@link NodeAssetInputEntityData} {@link Try} objects with a type of + * {@link EmInput} based on the provided collection of EMs and the fields to values mapping that + * inside the already provided {@link NodeAssetInputEntityData} instance. + * + * @param nodeAssetEntityDataStream the data stream of {@link NodeAssetInputEntityData} {@link + * Try} objects + * @param emUnits the energy management units that should be used for enrichment and to build + * {@link SystemParticipantEntityData} from + * @return a stream of tries of {@link SystemParticipantEntityData} instances + */ + private static Stream> + systemParticipantEntityStream( + Stream> nodeAssetEntityDataStream, + Map emUnits) { + return nodeAssetEntityDataStream + .parallel() + .map( + nodeAssetInputEntityDataTry -> + nodeAssetInputEntityDataTry.flatMap( + nodeAssetInputEntityData -> + optionallyEnrichEntityData( + nodeAssetInputEntityData, + SystemParticipantInputEntityFactory.EM, + emUnits, + null, + SystemParticipantEntityData::new))); + } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 6815c3826..1ea0f0afd 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -51,9 +51,9 @@ public static JointGridContainer read( TypeSource typeSource = new TypeSource(dataSource); RawGridSource rawGridSource = new RawGridSource(typeSource, dataSource); ThermalSource thermalSource = new ThermalSource(typeSource, dataSource); - SystemParticipantSource systemParticipantSource = - new SystemParticipantSource(typeSource, thermalSource, rawGridSource, dataSource); EnergyManagementSource emSource = new EnergyManagementSource(typeSource, dataSource); + SystemParticipantSource systemParticipantSource = + new SystemParticipantSource(typeSource, thermalSource, rawGridSource, emSource, dataSource); GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* Loading basic inputs that are used multiple times */ @@ -71,8 +71,6 @@ public static JointGridContainer read( Try.of( () -> systemParticipantSource.getSystemParticipants(operators, nodes), SourceException.class); - Try emUnits = - Try.of(() -> emSource.getEmUnits(operators), SourceException.class); Try graphicElements = Try.of(() -> graphicSource.getGraphicElements(nodes, lines), SourceException.class); @@ -89,7 +87,6 @@ public static JointGridContainer read( gridName, rawGridElements.getOrThrow(), systemParticipants.getOrThrow(), - emUnits.getOrThrow(), graphicElements.getOrThrow()); } } diff --git a/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java b/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java deleted file mode 100644 index 61ad82ddf..000000000 --- a/src/main/java/edu/ie3/datamodel/models/ControlStrategy.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models; - -import edu.ie3.datamodel.exceptions.ParsingException; -import java.io.Serializable; -import java.util.Arrays; - -public interface ControlStrategy extends Serializable { - String getKey(); - - static ControlStrategy parse(String key) throws ParsingException { - if (key == null || key.isEmpty()) - return ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY; - - String filterKey = key.toLowerCase().replace("-", "_"); - return Arrays.stream(EmControlStrategy.values()) - .filter(profile -> profile.getKey().equals(filterKey)) - .findFirst() - .orElseThrow( - () -> new ParsingException("Cannot parse \"" + key + "\" to a valid control strategy")); - } - - enum DefaultControlStrategies implements ControlStrategy { - NO_CONTROL_STRATEGY; - - @Override - public String getKey() { - return "No control strategy assigned"; - } - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java b/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java deleted file mode 100644 index ffb216a35..000000000 --- a/src/main/java/edu/ie3/datamodel/models/EmControlStrategy.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models; - -import java.util.Arrays; -import java.util.Locale; -import java.util.stream.Collectors; - -public enum EmControlStrategy implements ControlStrategy { - SELF_OPTIMIZATION("self_optimization"); - - private final String key; - - EmControlStrategy(String key) { - this.key = key.toLowerCase(Locale.ROOT); - } - - public static EmControlStrategy get(String key) { - return Arrays.stream(EmControlStrategy.values()) - .filter(controlStrategy -> controlStrategy.key.equalsIgnoreCase(key)) - .findFirst() - .orElseThrow( - () -> - new IllegalArgumentException( - "No predefined energy management control strategy '" - + key - + "' found. Please provide one of the following keys: " - + Arrays.stream(EmControlStrategy.values()) - .map(EmControlStrategy::getKey) - .collect(Collectors.joining(", ")))); - } - - @Override - public String getKey() { - return key; - } - - @Override - public String toString() { - return "EmControlStrategy{" + "key='" + key + '\'' + '}'; - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/input/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java new file mode 100644 index 000000000..1376caa1c --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/input/EmInput.java @@ -0,0 +1,139 @@ +/* + * © 2022. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models.input; + +import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.UniqueEntity; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +public class EmInput extends AssetInput { + + /** Reference to the control strategy to be used for this model */ + private final String controlStrategy; + + /** + * Optional UUID of the parent {@link EmInput} that is controlling this em unit. If null, this em + * unit is not em-controlled. + */ + private final EmInput parentEm; + + /** + * Constructor for an operated energy management system + * + * @param uuid of the input entity + * @param id of the asset + * @param operator of the asset + * @param operationTime time for which the entity is operated + * @param emControlStrategy the control strategy + * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. + */ + public EmInput( + UUID uuid, + String id, + OperatorInput operator, + OperationTime operationTime, + String emControlStrategy, + EmInput parentEm) { + super(uuid, id, operator, operationTime); + this.controlStrategy = emControlStrategy; + this.parentEm = parentEm; + } + + /** + * Constructor for an operated energy management system + * + * @param uuid of the input entity + * @param id of the asset + * @param emControlStrategy the control strategy + * @param parentEm The {@link EmInput} controlling this em unit. Null, if not applicable. + */ + public EmInput(UUID uuid, String id, String emControlStrategy, EmInput parentEm) { + super(uuid, id); + this.controlStrategy = emControlStrategy; + this.parentEm = parentEm; + } + + public String getControlStrategy() { + return controlStrategy; + } + + public Optional getParentEm() { + return Optional.ofNullable(parentEm); + } + + @Override + public EmInputCopyBuilder copy() { + return new EmInputCopyBuilder(this); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EmInput emInput)) return false; + if (!super.equals(o)) return false; + return Objects.equals(controlStrategy, emInput.controlStrategy) + && Objects.equals(parentEm, emInput.parentEm); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), controlStrategy, parentEm); + } + + @Override + public String toString() { + return "EmInput{" + + "uuid=" + + getUuid() + + ", id='" + + getId() + + ", operator=" + + getOperator().getUuid() + + ", operationTime=" + + getOperationTime() + + ", controlStrategy=" + + getControlStrategy() + + ", parentEm=" + + getParentEm().map(UniqueEntity::getUuid).map(UUID::toString).orElse("") + + '}'; + } + + public static class EmInputCopyBuilder extends AssetInputCopyBuilder { + + private String controlStrategy; + + private EmInput parentEm; + + protected EmInputCopyBuilder(EmInput entity) { + super(entity); + this.controlStrategy = entity.getControlStrategy(); + this.parentEm = entity.parentEm; + } + + public EmInputCopyBuilder controlStrategy(String controlStrategy) { + this.controlStrategy = controlStrategy; + return this; + } + + public EmInputCopyBuilder parentEm(EmInput parentEm) { + this.parentEm = parentEm; + return thisInstance(); + } + + @Override + public EmInput build() { + return new EmInput( + getUuid(), getId(), getOperator(), getOperationTime(), controlStrategy, parentEm); + } + + @Override + protected EmInputCopyBuilder thisInstance() { + return this; + } + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java b/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java deleted file mode 100644 index 4142a745d..000000000 --- a/src/main/java/edu/ie3/datamodel/models/input/container/EnergyManagementUnits.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models.input.container; - -import edu.ie3.datamodel.models.input.system.EmInput; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** Represents the accumulation of energy management units */ -public class EnergyManagementUnits implements InputContainer { - - protected final Map emUnits; - - public EnergyManagementUnits(Set emUnits) { - this.emUnits = - emUnits.stream().collect(Collectors.toMap(EmInput::getUuid, Function.identity())); - } - - /** - * Combine different already existing containers - * - * @param emUnits already existing containers - */ - public EnergyManagementUnits(Collection emUnits) { - this.emUnits = - emUnits.stream() - .flatMap(units -> units.emUnits.entrySet().stream()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - public Set getEmUnits() { - return new HashSet<>(emUnits.values()); - } - - @Override - public List allEntitiesAsList() { - return emUnits.values().stream().toList(); - } - - // TODO useful once #957 is implemented - public Map getEmUnitsMap() { - return emUnits; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof EnergyManagementUnits that)) return false; - return Objects.equals(emUnits, that.emUnits); - } - - @Override - public int hashCode() { - return Objects.hash(emUnits); - } - - @Override - public EnergyManagementUnitsCopyBuilder copy() { - return new EnergyManagementUnitsCopyBuilder(this); - } - - /** - * A builder pattern based approach to create copies of {@link EnergyManagementUnits} containers - * with altered field values. For detailed field descriptions refer to java docs of {@link - * EnergyManagementUnits} - */ - public static class EnergyManagementUnitsCopyBuilder - implements InputContainerCopyBuilder { - protected Set emUnits; - - /** - * Constructor for {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} - * - * @param energyManagementUnits instance of {@link EnergyManagementUnits} - */ - protected EnergyManagementUnitsCopyBuilder(EnergyManagementUnits energyManagementUnits) { - this.emUnits = energyManagementUnits.getEmUnits(); - } - - /** - * Method to alter the {@link EmInput}s - * - * @param emUnits set of altered {@link EmInput}s - * @return this instance of {@link EnergyManagementUnits.EnergyManagementUnitsCopyBuilder} - */ - public EnergyManagementUnits.EnergyManagementUnitsCopyBuilder emUnits(Set emUnits) { - this.emUnits = emUnits; - return this; - } - - @Override - public EnergyManagementUnits build() { - return new EnergyManagementUnits(emUnits); - } - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java index 12f5b7c9d..3c076cfff 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java +++ b/src/main/java/edu/ie3/datamodel/models/input/container/GridContainer.java @@ -15,8 +15,6 @@ public abstract class GridContainer implements InputContainer { protected final RawGridElements rawGrid; /** Accumulated system participant elements */ protected final SystemParticipants systemParticipants; - /** Accumulated energy management units */ - protected final EnergyManagementUnits emUnits; /** Accumulated graphic data entities (node graphics, line graphics) */ protected final GraphicElements graphics; @@ -24,13 +22,11 @@ protected GridContainer( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, - EnergyManagementUnits emUnits, GraphicElements graphics) { this.gridName = gridName; this.rawGrid = rawGrid; this.systemParticipants = systemParticipants; - this.emUnits = emUnits; this.graphics = graphics; } @@ -39,7 +35,6 @@ public List allEntitiesAsList() { List allEntities = new LinkedList<>(); allEntities.addAll(rawGrid.allEntitiesAsList()); allEntities.addAll(systemParticipants.allEntitiesAsList()); - allEntities.addAll(emUnits.allEntitiesAsList()); allEntities.addAll(graphics.allEntitiesAsList()); return Collections.unmodifiableList(allEntities); } @@ -60,10 +55,6 @@ public SystemParticipants getSystemParticipants() { return systemParticipants; } - public EnergyManagementUnits getEmUnits() { - return emUnits; - } - public GraphicElements getGraphics() { return graphics; } @@ -75,13 +66,12 @@ public boolean equals(Object o) { return gridName.equals(that.gridName) && rawGrid.equals(that.rawGrid) && systemParticipants.equals(that.systemParticipants) - && emUnits.equals(that.emUnits) && graphics.equals(that.graphics); } @Override public int hashCode() { - return Objects.hash(gridName, rawGrid, systemParticipants, emUnits, graphics); + return Objects.hash(gridName, rawGrid, systemParticipants, graphics); } @Override @@ -101,7 +91,6 @@ protected abstract static class GridContainerCopyBuilder feedInTariff) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; this.marketReaction = marketReaction; this.costControlled = costControlled; @@ -70,6 +73,7 @@ public BmInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of BM * @param marketReaction Is this asset market oriented? * @param costControlled Does this plant increase the output power if the revenues exceed the @@ -81,11 +85,12 @@ public BmInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, BmTypeInput type, boolean marketReaction, boolean costControlled, ComparableQuantity feedInTariff) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.type = type; this.marketReaction = marketReaction; this.costControlled = costControlled; @@ -144,8 +149,9 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' - + "type=" + + "', em=" + + getEm() + + ", type=" + type.getUuid() + ", marketReaction=" + marketReaction @@ -208,6 +214,7 @@ public BmInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), type, marketReaction, costControlled, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java index 422817ecb..1478c949b 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.io.extractor.HasThermalStorage; import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -41,6 +42,7 @@ public class ChpInput extends SystemParticipantInput * @param thermalBus The thermal bus, this model is connected to (normally equal to the thermal * bus of the provided thermal storage!) * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of CHP * @param thermalStorage Thermal storage model * @param marketReaction Is this asset market oriented? @@ -53,10 +55,11 @@ public ChpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ChpTypeInput type, ThermalStorageInput thermalStorage, boolean marketReaction) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.thermalBus = thermalBus; this.type = type; this.thermalStorage = thermalStorage; @@ -72,6 +75,7 @@ public ChpInput( * @param thermalBus The thermal bus, this model is connected to (normally equal to the thermal * bus of the provided thermal storage!) * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of CHP * @param thermalStorage Thermal storage model * @param marketReaction Is this asset market oriented? @@ -82,10 +86,11 @@ public ChpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ChpTypeInput type, ThermalStorageInput thermalStorage, boolean marketReaction) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.thermalBus = thermalBus; this.type = type; this.thermalStorage = thermalStorage; @@ -145,7 +150,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", thermalBus=" + thermalBus.getUuid() + ", type=" @@ -190,6 +196,7 @@ public ChpInput build() { getNode(), thermalBus, getqCharacteristics(), + getEm(), type, thermalStorage, marketReaction); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java deleted file mode 100644 index f9bbbaa9f..000000000 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EmInput.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models.input.system; - -import edu.ie3.datamodel.models.ControlStrategy; -import edu.ie3.datamodel.models.EmControlStrategy; -import edu.ie3.datamodel.models.OperationTime; -import edu.ie3.datamodel.models.input.AssetInput; -import edu.ie3.datamodel.models.input.OperatorInput; -import java.util.Arrays; -import java.util.Objects; -import java.util.UUID; - -public class EmInput extends AssetInput { - - /** Reference via UUID to all SystemParticipantInputs connected to this model */ - private final UUID[] connectedAssets; - - /** Reference to the control strategy to be used for this model */ - private final ControlStrategy controlStrategy; - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param operator of the asset - * @param operationTime time for which the entity is operated - * @param connectedAssets array of all connected assets - * @param controlStrategy control strategy used for this model - */ - public EmInput( - UUID uuid, - String id, - OperatorInput operator, - OperationTime operationTime, - UUID[] connectedAssets, - ControlStrategy controlStrategy) { - super(uuid, id, operator, operationTime); - this.connectedAssets = connectedAssets; - this.controlStrategy = controlStrategy; - } - - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param operator of the asset - * @param operationTime time for which the entity is operated - * @param connectedAssets array of all connected assets - * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy - * key - */ - public EmInput( - UUID uuid, - String id, - OperatorInput operator, - OperationTime operationTime, - UUID[] connectedAssets, - String emControlStrategy) { - super(uuid, id, operator, operationTime); - this.connectedAssets = connectedAssets; - this.controlStrategy = EmControlStrategy.get(emControlStrategy); - } - - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param connectedAssets array of all connected assets - * @param controlStrategy control strategy used for this model - */ - public EmInput(UUID uuid, String id, UUID[] connectedAssets, ControlStrategy controlStrategy) { - super(uuid, id); - this.connectedAssets = connectedAssets; - this.controlStrategy = controlStrategy; - } - - /** - * Constructor for an operated energy management system - * - * @param uuid of the input entity - * @param id of the asset - * @param connectedAssets array of all connected assets - * @param emControlStrategy {@link edu.ie3.datamodel.models.EmControlStrategy} control strategy - * key - */ - public EmInput(UUID uuid, String id, UUID[] connectedAssets, String emControlStrategy) { - super(uuid, id); - this.connectedAssets = connectedAssets; - this.controlStrategy = EmControlStrategy.get(emControlStrategy); - } - - public UUID[] getConnectedAssets() { - return connectedAssets; - } - - public ControlStrategy getControlStrategy() { - return controlStrategy; - } - - @Override - public EmInputCopyBuilder copy() { - return new EmInputCopyBuilder(this); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof EmInput emInput)) return false; - if (!super.equals(o)) return false; - return Arrays.equals(connectedAssets, emInput.connectedAssets) - && controlStrategy == emInput.controlStrategy; - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), Arrays.hashCode(connectedAssets), controlStrategy); - } - - @Override - public String toString() { - return "EmInput{" - + "uuid=" - + getUuid() - + ", id='" - + getId() - + ", operator=" - + getOperator().getUuid() - + ", operationTime=" - + getOperationTime() - + ", connectedAssets=" - + Arrays.toString(connectedAssets) - + ", controlStrategy=" - + controlStrategy - + '}'; - } - - public static class EmInputCopyBuilder extends AssetInputCopyBuilder { - - private UUID[] connectedAssets; - - private ControlStrategy controlStrategy; - - protected EmInputCopyBuilder(EmInput entity) { - super(entity); - this.connectedAssets = entity.getConnectedAssets(); - this.controlStrategy = entity.getControlStrategy(); - } - - public EmInputCopyBuilder connectedAssets(UUID[] connectedAssets) { - this.connectedAssets = connectedAssets; - return this; - } - - public EmInputCopyBuilder controlStrategy(ControlStrategy controlStrategy) { - this.controlStrategy = controlStrategy; - return this; - } - - @Override - public EmInput build() { - return new EmInput( - getUuid(), getId(), getOperator(), getOperationTime(), connectedAssets, controlStrategy); - } - - @Override - protected EmInputCopyBuilder thisInstance() { - return this; - } - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java index 5f2edeae9..b4796b844 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -28,6 +29,7 @@ public class EvInput extends SystemParticipantInput implements HasType { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of EV */ public EvInput( @@ -37,8 +39,9 @@ public EvInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, EvTypeInput type) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; } @@ -49,6 +52,7 @@ public EvInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of EV */ public EvInput( @@ -56,8 +60,9 @@ public EvInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, EvTypeInput type) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.type = type; } @@ -98,7 +103,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", type=" + type.getUuid() + '}'; @@ -130,6 +136,7 @@ public EvInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), type); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java index e3f3c381f..8513edd5c 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.models.input.system; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -38,6 +39,7 @@ public class EvcsInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param chargingPoints number of charging points available at this charging station * @param cosPhiRated rated cos phi @@ -51,12 +53,13 @@ public EvcsInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ChargingPointType type, int chargingPoints, double cosPhiRated, EvcsLocationType locationType, boolean v2gSupport) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; this.chargingPoints = chargingPoints; this.cosPhiRated = cosPhiRated; @@ -71,6 +74,7 @@ public EvcsInput( * @param operationTime Time for which the entity is operated * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param cosPhiRated rated cos phi * @param locationType the location type @@ -83,6 +87,7 @@ public EvcsInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ChargingPointType type, double cosPhiRated, EvcsLocationType locationType, @@ -94,6 +99,7 @@ public EvcsInput( operationTime, node, qCharacteristics, + em, type, 1, cosPhiRated, @@ -105,6 +111,7 @@ public EvcsInput( * @param id Human readable identifier * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param chargingPoints number of charging points available at this charging station * @param cosPhiRated rated cos phi @@ -116,12 +123,13 @@ public EvcsInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ChargingPointType type, int chargingPoints, double cosPhiRated, EvcsLocationType locationType, boolean v2gSupport) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.type = type; this.chargingPoints = chargingPoints; this.cosPhiRated = cosPhiRated; @@ -134,6 +142,7 @@ public EvcsInput( * @param id Human readable identifier * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type type of the charging points available to this charging station * @param cosPhiRated rated cos phi * @param locationType the location type @@ -144,11 +153,12 @@ public EvcsInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ChargingPointType type, double cosPhiRated, EvcsLocationType locationType, boolean v2gSupport) { - this(uuid, id, node, qCharacteristics, type, 1, cosPhiRated, locationType, v2gSupport); + this(uuid, id, node, qCharacteristics, em, type, 1, cosPhiRated, locationType, v2gSupport); } public ChargingPointType getType() { @@ -208,6 +218,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() + + "', em=" + + getEm() + ", type=" + type + ", chargingPoints=" @@ -280,6 +292,7 @@ public EvcsInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), type, chargingPoints, cosPhiRated, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java index 16ba19dc7..b765ca695 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -31,6 +32,7 @@ public class FixedFeedInInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param sRated Rated apparent power * @param cosPhiRated Power factor */ @@ -41,9 +43,10 @@ public FixedFeedInInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.sRated = sRated.to(StandardUnits.S_RATED); this.cosPhiRated = cosPhiRated; } @@ -55,6 +58,7 @@ public FixedFeedInInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param sRated Rated apparent power * @param cosPhiRated Power factor */ @@ -63,9 +67,10 @@ public FixedFeedInInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.sRated = sRated.to(StandardUnits.S_RATED); this.cosPhiRated = cosPhiRated; } @@ -110,7 +115,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", sRated=" + sRated + ", cosphiRated=" @@ -147,6 +153,7 @@ public FixedFeedInInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), sRated, cosPhiRated); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java index ef5bf7fea..89771ae58 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.io.extractor.HasThermalBus; import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -33,6 +34,7 @@ public class HpInput extends SystemParticipantInput implements HasType, HasTherm * @param node the asset is connected to * @param thermalBus The thermal bus, this model is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of HP */ public HpInput( @@ -43,8 +45,9 @@ public HpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, + EmInput em, HpTypeInput type) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.thermalBus = thermalBus; this.type = type; } @@ -57,6 +60,7 @@ public HpInput( * @param node the asset is connected to * @param thermalBus The thermal bus, this model is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of HP */ public HpInput( @@ -65,8 +69,9 @@ public HpInput( NodeInput node, ThermalBusInput thermalBus, ReactivePowerCharacteristic qCharacteristics, + EmInput em, HpTypeInput type) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.thermalBus = thermalBus; this.type = type; } @@ -113,7 +118,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", type=" + type.getUuid() + ", thermalBus=" @@ -150,6 +156,7 @@ public HpInput build() { getNode(), thermalBus, getqCharacteristics(), + getEm(), type); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java index 9f320d851..196952d65 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.models.*; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -47,6 +48,7 @@ public class LoadInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfile Load profile to use for this model * @param dsm True, if demand side management is activated for this load * @param eConsAnnual Annually consumed energy (typically in kWh) @@ -60,12 +62,13 @@ public LoadInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, LoadProfile loadProfile, boolean dsm, ComparableQuantity eConsAnnual, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.loadProfile = loadProfile; this.dsm = dsm; this.eConsAnnual = eConsAnnual.to(StandardUnits.ENERGY_IN); @@ -82,6 +85,7 @@ public LoadInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfileKey Load profile key corresponding to {@link * edu.ie3.datamodel.models.profile.BdewStandardLoadProfile} or {@link * edu.ie3.datamodel.models.profile.NbwTemperatureDependantLoadProfile} @@ -97,6 +101,7 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, String loadProfileKey, boolean dsm, ComparableQuantity eConsAnnual, @@ -111,6 +116,7 @@ public LoadInput( operationTime, node, qCharacteristics, + em, LoadProfile.parse(loadProfileKey), dsm, eConsAnnual, @@ -125,6 +131,7 @@ public LoadInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfile Standard load profile to use for this model * @param dsm True, if demand side management is activated for this load * @param eConsAnnual Annually consumed energy (typically in kWh) @@ -136,12 +143,13 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, LoadProfile loadProfile, boolean dsm, ComparableQuantity eConsAnnual, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.loadProfile = loadProfile; this.dsm = dsm; this.eConsAnnual = eConsAnnual.to(StandardUnits.ENERGY_IN); @@ -156,6 +164,7 @@ public LoadInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param loadProfileKey load profile key corresponding to {@link * edu.ie3.datamodel.models.profile.BdewStandardLoadProfile} or {@link * edu.ie3.datamodel.models.profile.NbwTemperatureDependantLoadProfile} @@ -169,6 +178,7 @@ public LoadInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, String loadProfileKey, boolean dsm, ComparableQuantity eConsAnnual, @@ -180,6 +190,7 @@ public LoadInput( id, node, qCharacteristics, + em, LoadProfile.parse(loadProfileKey), dsm, eConsAnnual, @@ -243,7 +254,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", dsm=" + dsm + ", eConsAnnual=" @@ -314,6 +326,7 @@ public LoadInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), loadProfile, dsm, eConsAnnual, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java index 49a68253f..2117ef313 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.models.OperationTime; import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -48,6 +49,7 @@ public class PvInput extends SystemParticipantInput { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param albedo Albedo value (typically a value between 0 and 1) * @param azimuth Inclination in a compass direction (typically °: South 0◦; West 90◦; East -90◦) * @param etaConv Efficiency of converter (typically in %) @@ -65,6 +67,7 @@ public PvInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, double albedo, ComparableQuantity azimuth, ComparableQuantity etaConv, @@ -74,7 +77,7 @@ public PvInput( boolean marketReaction, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.albedo = albedo; this.azimuth = azimuth.to(StandardUnits.AZIMUTH); this.etaConv = etaConv.to(StandardUnits.EFFICIENCY); @@ -93,6 +96,7 @@ public PvInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param albedo Albedo value (typically a value between 0 and 1) * @param azimuth Inclination in a compass direction (typically °: South 0◦; West 90◦; East -90◦) * @param etaConv Efficiency of converter (typically in %) @@ -108,6 +112,7 @@ public PvInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, double albedo, ComparableQuantity azimuth, ComparableQuantity etaConv, @@ -117,7 +122,7 @@ public PvInput( boolean marketReaction, ComparableQuantity sRated, double cosPhiRated) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.albedo = albedo; this.azimuth = azimuth.to(StandardUnits.AZIMUTH); this.etaConv = etaConv.to(StandardUnits.EFFICIENCY); @@ -215,7 +220,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", albedo=" + albedo + ", azimuth=" @@ -324,6 +330,7 @@ public PvInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), albedo, azimuth, etaConv, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java index 26726cb03..ed37c1448 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -28,6 +29,7 @@ public class StorageInput extends SystemParticipantInput implements HasType { * @param operationTime time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic for integrated inverter + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of storage */ public StorageInput( @@ -37,8 +39,9 @@ public StorageInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, StorageTypeInput type) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; } @@ -49,6 +52,7 @@ public StorageInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of storage */ public StorageInput( @@ -56,8 +60,9 @@ public StorageInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, StorageTypeInput type) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.type = type; } @@ -98,7 +103,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", type=" + type.getUuid() + '}'; @@ -130,6 +136,7 @@ public StorageInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), type); } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java index 9fa4a00a6..eea7df273 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java @@ -7,7 +7,9 @@ import edu.ie3.datamodel.io.extractor.HasNodes; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.AssetInput; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -22,6 +24,12 @@ public abstract class SystemParticipantInput extends AssetInput implements HasNo /** Description of a reactive power characteristic. For details see further documentation */ private final ReactivePowerCharacteristic qCharacteristics; + /** + * Optional {@link EmInput} that is controlling this system participant. If null, this system + * participant is not em-controlled. + */ + private final EmInput em; + /** * Constructor for an operated system participant * @@ -31,6 +39,7 @@ public abstract class SystemParticipantInput extends AssetInput implements HasNo * @param operationTime Time for which the entity is operated * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. */ protected SystemParticipantInput( UUID uuid, @@ -38,10 +47,12 @@ protected SystemParticipantInput( OperatorInput operator, OperationTime operationTime, NodeInput node, - ReactivePowerCharacteristic qCharacteristics) { + ReactivePowerCharacteristic qCharacteristics, + EmInput em) { super(uuid, id, operator, operationTime); this.node = node; this.qCharacteristics = qCharacteristics; + this.em = em; } /** @@ -51,20 +62,30 @@ protected SystemParticipantInput( * @param id of the asset * @param node that the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. */ protected SystemParticipantInput( - UUID uuid, String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics) { + UUID uuid, + String id, + NodeInput node, + ReactivePowerCharacteristic qCharacteristics, + EmInput em) { super(uuid, id); this.node = node; this.qCharacteristics = qCharacteristics; + this.em = em; + } + + public NodeInput getNode() { + return node; } public ReactivePowerCharacteristic getqCharacteristics() { return qCharacteristics; } - public NodeInput getNode() { - return node; + public Optional getEm() { + return Optional.ofNullable(em); } @Override @@ -81,12 +102,13 @@ public boolean equals(Object o) { if (!(o instanceof SystemParticipantInput that)) return false; if (!super.equals(o)) return false; return Objects.equals(node, that.node) - && Objects.equals(qCharacteristics, that.qCharacteristics); + && Objects.equals(qCharacteristics, that.qCharacteristics) + && Objects.equals(em, that.em); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), node, qCharacteristics); + return Objects.hash(super.hashCode(), node, qCharacteristics, em); } @Override @@ -104,7 +126,8 @@ public String toString() { + node.getUuid() + ", qCharacteristics='" + qCharacteristics - + '\'' + + "', em=" + + getEm().map(UniqueEntity::getUuid).map(UUID::toString).orElse("") + '}'; } @@ -121,11 +144,13 @@ public abstract static class SystemParticipantInputCopyBuilder< private NodeInput node; private ReactivePowerCharacteristic qCharacteristics; + private EmInput em; protected SystemParticipantInputCopyBuilder(SystemParticipantInput entity) { super(entity); this.node = entity.getNode(); this.qCharacteristics = entity.getqCharacteristics(); + this.em = entity.getEm().orElse(null); } public B node(NodeInput node) { @@ -138,6 +163,11 @@ public B qCharacteristics(ReactivePowerCharacteristic qCharacteristics) { return thisInstance(); } + public B em(EmInput em) { + this.em = em; + return thisInstance(); + } + protected NodeInput getNode() { return node; } @@ -146,6 +176,11 @@ protected ReactivePowerCharacteristic getqCharacteristics() { return qCharacteristics; } + /** @return The {@link EmInput} controlling this system participant. CAN BE NULL. */ + public EmInput getEm() { + return em; + } + @Override public abstract SystemParticipantInput build(); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java index d5c5122d5..05d170e59 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java @@ -7,6 +7,7 @@ import edu.ie3.datamodel.io.extractor.HasType; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.input.EmInput; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic; @@ -31,6 +32,7 @@ public class WecInput extends SystemParticipantInput implements HasType { * @param operationTime Time for which the entity is operated * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of this WEC * @param marketReaction Is this asset market oriented? */ @@ -41,9 +43,10 @@ public WecInput( OperationTime operationTime, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, WecTypeInput type, boolean marketReaction) { - super(uuid, id, operator, operationTime, node, qCharacteristics); + super(uuid, id, operator, operationTime, node, qCharacteristics, em); this.type = type; this.marketReaction = marketReaction; } @@ -55,6 +58,7 @@ public WecInput( * @param id of the asset * @param node the asset is connected to * @param qCharacteristics Description of a reactive power characteristic + * @param em The {@link EmInput} controlling this system participant. Null, if not applicable. * @param type of this WEC * @param marketReaction Is this asset market oriented? */ @@ -63,9 +67,10 @@ public WecInput( String id, NodeInput node, ReactivePowerCharacteristic qCharacteristics, + EmInput em, WecTypeInput type, boolean marketReaction) { - super(uuid, id, node, qCharacteristics); + super(uuid, id, node, qCharacteristics, em); this.type = type; this.marketReaction = marketReaction; } @@ -112,7 +117,8 @@ public String toString() { + getNode().getUuid() + ", qCharacteristics='" + getqCharacteristics() - + '\'' + + "', em=" + + getEm() + ", type=" + type.getUuid() + ", marketReaction=" @@ -148,6 +154,7 @@ public WecInput build() { getOperationTime(), getNode(), getqCharacteristics(), + getEm(), type, marketReaction); } diff --git a/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java b/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java index d27667b8f..0935b4b5b 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/system/EmResult.java @@ -5,12 +5,13 @@ */ package edu.ie3.datamodel.models.result.system; +import edu.ie3.datamodel.models.input.EmInput; import java.time.ZonedDateTime; import java.util.UUID; import javax.measure.quantity.Power; import tech.units.indriya.ComparableQuantity; -/** Represents calculation results of an {@link edu.ie3.datamodel.models.input.system.EmInput} */ +/** Represents calculation results of an {@link EmInput} */ public class EmResult extends SystemParticipantResult { /** diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java index a482ce658..4778fabea 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerNodeUpdateUtil.java @@ -77,7 +77,6 @@ public static JointGridContainer updateGridWithNodes( grid.getGridName(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), - grid.getEmUnits(), updatedEntities.graphicElements()); } @@ -113,7 +112,6 @@ public static SubGridContainer updateGridWithNodes( grid.getSubnet(), updatedEntities.rawGridElements(), updatedEntities.systemParticipants(), - grid.getEmUnits(), updatedEntities.graphicElements()); } diff --git a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java index eb8d431ff..5033221a2 100644 --- a/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/ContainerUtils.java @@ -501,7 +501,6 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( String gridName, RawGridElements rawGrid, SystemParticipants systemParticipants, - EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { /* Collect the different sub nets. Through the validation of lines, it is ensured, that no galvanically connected @@ -510,8 +509,7 @@ public static SubGridTopologyGraph buildSubGridTopologyGraph( /* Build the single sub grid models */ HashMap subgrids = - buildSubGridContainers( - gridName, subnetNumbers, rawGrid, systemParticipants, energyManagementUnits, graphics); + buildSubGridContainers(gridName, subnetNumbers, rawGrid, systemParticipants, graphics); /* Build the graph structure denoting the topology of the grid */ return buildSubGridTopologyGraph(subgrids, rawGrid); @@ -542,7 +540,6 @@ private static HashMap buildSubGridContainers( SortedSet subnetNumbers, RawGridElements rawGrid, SystemParticipants systemParticipants, - EnergyManagementUnits energyManagementUnits, GraphicElements graphics) throws InvalidGridException { HashMap subGrids = new HashMap<>(subnetNumbers.size()); @@ -555,12 +552,7 @@ private static HashMap buildSubGridContainers( subGrids.put( subnetNumber, new SubGridContainer( - gridName, - subnetNumber, - rawGridElements, - systemParticipantElements, - energyManagementUnits, - graphicElements)); + gridName, subnetNumber, rawGridElements, systemParticipantElements, graphicElements)); } return subGrids; } @@ -812,9 +804,6 @@ public static JointGridContainer combineToJointGrid( GraphicElements graphicElements = new GraphicElements( subGridContainers.stream().map(GridContainer::getGraphics).collect(Collectors.toSet())); - EnergyManagementUnits energyManagementUnits = - new EnergyManagementUnits( - subGridContainers.stream().map(GridContainer::getEmUnits).collect(Collectors.toSet())); Map subGridMapping = subGridContainers.stream() @@ -823,12 +812,7 @@ public static JointGridContainer combineToJointGrid( SubGridTopologyGraph subGridTopologyGraph = buildSubGridTopologyGraph(subGridMapping, rawGrid); return new JointGridContainer( - gridName, - rawGrid, - systemParticipants, - energyManagementUnits, - graphicElements, - subGridTopologyGraph); + gridName, rawGrid, systemParticipants, graphicElements, subGridTopologyGraph); } /** @@ -1001,7 +985,6 @@ public static SubGridContainer withTrafoNodeAsSlack(final SubGridContainer subGr subGridContainer.getRawGrid().getSwitches(), subGridContainer.getRawGrid().getMeasurementUnits()), subGridContainer.getSystemParticipants(), - subGridContainer.getEmUnits(), new GraphicElements(newNodeGraphics, subGridContainer.getGraphics().getLineGraphics())); } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy index 20d14f658..c380d2418 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/extractor/ExtractorTest.groovy @@ -145,7 +145,7 @@ class ExtractorTest extends Specification { given: def sampleFixedFeedInput = new FixedFeedInInput(UUID.fromString("717af017-cc69-406f-b452-e022d7fb516a"), "test_fixedFeedInInput", OperatorInput.NO_OPERATOR_ASSIGNED, - sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, + sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.em.orElse(null), sptd.fixedFeedInInput.sRated,sptd.fixedFeedInInput.cosPhiRated) expect: Extractor.extractElements(sampleFixedFeedInput) as Set == [ diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy index 48b7a5410..bd9e10266 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/BmInputFactoryTest.groovy @@ -9,6 +9,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.BmInput @@ -48,11 +49,12 @@ class BmInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = BmInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(BmTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -72,6 +74,7 @@ class BmInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert !marketReaction assert costControlled diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy index eba32b0f9..aedb04fce 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/ChpInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.ChpInput @@ -47,13 +48,14 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = ChpInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(ChpTypeInput) def thermalBusInput = Mock(ThermalBusInput) def thermalStorageInput = Mock(ThermalStorageInput) when: Try input = inputFactory.get( - new ChpInputEntityData(parameter, operatorInput, nodeInput, typeInput, thermalBusInput, thermalStorageInput)) + new ChpInputEntityData(parameter, operatorInput, nodeInput, emUnit, typeInput, thermalBusInput, thermalStorageInput)) then: input.success @@ -73,6 +75,7 @@ class ChpInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert marketReaction } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy index 707a71ccd..673185c12 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EmInputFactoryTest.groovy @@ -6,16 +6,13 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.AssetInputEntityData -import edu.ie3.datamodel.models.ControlStrategy -import edu.ie3.datamodel.models.EmControlStrategy +import edu.ie3.datamodel.io.factory.input.EmAssetInputEntityData +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.OperatorInput -import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.utils.Try import spock.lang.Specification import java.time.ZonedDateTime -import javax.measure.quantity.Dimensionless class EmInputFactoryTest extends Specification { @@ -28,7 +25,7 @@ class EmInputFactoryTest extends Specification { inputFactory.supportedClasses == expectedClasses } - def "A EmInputFactory should parse a valid EmInput correctly"() { + def "A EmInputFactory should parse a valid EmInput with parent EM correctly"() { given: def inputFactory = new EmInputFactory() Map parameter = [ @@ -36,15 +33,15 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914 a17aa6f0-e663-4186-ac34-a7b68573938b", - "controlstrategy" : "self_optimization" + "controlstrategy" : "no_control" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) + def parentEmUnit = Mock(EmInput) when: Try input = inputFactory.get( - new AssetInputEntityData(parameter, inputClass, operatorInput)) + new EmAssetInputEntityData(parameter, inputClass, operatorInput, parentEmUnit)) then: input.success @@ -57,15 +54,12 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert connectedAssets == [ - UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914"), - UUID.fromString("a17aa6f0-e663-4186-ac34-a7b68573938b") - ] as UUID[] - assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION + assert controlStrategy == parameter["controlstrategy"] + assert parentEm == Optional.of(parentEmUnit) } } - def "A EmInputFactory should parse a valid EmInput with zero connected assets correctly"() { + def "A EmInputFactory should parse a valid EmInput without parent EM correctly"() { given: def inputFactory = new EmInputFactory() Map parameter = [ @@ -73,15 +67,14 @@ class EmInputFactoryTest extends Specification { "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", "operatesuntil" : "2019-12-31T23:59:00+01:00[Europe/Berlin]", "id" : "TestID", - "connectedassets" : "", - "controlstrategy" : "self_optimization" + "controlstrategy" : "no_control" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new AssetInputEntityData(parameter, inputClass, operatorInput)) + new EmAssetInputEntityData(parameter, inputClass, operatorInput, null)) then: input.success @@ -94,40 +87,28 @@ class EmInputFactoryTest extends Specification { assert operationTime.endDate.get() == ZonedDateTime.parse(parameter["operatesuntil"]) assert operator == operatorInput assert id == parameter["id"] - assert connectedAssets == [] as UUID[] - assert controlStrategy == EmControlStrategy.SELF_OPTIMIZATION + assert controlStrategy == parameter["controlstrategy"] + assert parentEm == Optional.empty() } } - def "A EmInputFactory should use a default control strategy if value cannot be parsed"() { + def "A EmInputFactory should fail when passing an invalid UUID"() { given: def inputFactory = new EmInputFactory() Map parameter = [ - "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", + "uuid" : "- broken -", "id" : "TestID", - "connectedassets" : "4e840ea0-fb72-422e-942f-4111312e9914", - "controlstrategy" : " -- invalid --" + "controlstrategy" : "no_control" ] def inputClass = EmInput def operatorInput = Mock(OperatorInput) when: Try input = inputFactory.get( - new AssetInputEntityData(parameter, inputClass, operatorInput)) + new EmAssetInputEntityData(parameter, inputClass, operatorInput, null)) then: - input.success - input.data.get().getClass() == inputClass - input.data.get().with { - assert uuid == UUID.fromString(parameter["uuid"]) - assert operationTime.startDate.empty - assert operationTime.endDate.empty - assert operator == operatorInput - assert id == parameter["id"] - assert connectedAssets == [ - UUID.fromString("4e840ea0-fb72-422e-942f-4111312e9914") - ] as UUID[] - assert controlStrategy == ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY - } + input.failure + input.exception.get().cause.message == "Exception while trying to parse UUID of field \"uuid\" with value \"- broken -\"" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy index 34a68ea5c..b9c492de7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EvInput @@ -44,11 +45,12 @@ class EvInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(EvTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -68,6 +70,7 @@ class EvInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy index 10d2be4f1..7f59dedd2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/EvcsInputFactoryTest.groovy @@ -6,7 +6,7 @@ package edu.ie3.datamodel.io.factory.input.participant import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.EvcsInput @@ -55,10 +55,11 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success @@ -78,6 +79,7 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PowerSystemUnits.PU), Quantities.getQuantity(1d, PowerSystemUnits.PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == ChargingPointTypeUtils.HouseholdSocket assert chargingPoints == Integer.parseInt(parameter["chargingpoints"]) assert cosPhiRated == Double.parseDouble(parameter["cosphirated"]) @@ -104,10 +106,11 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.failure @@ -132,10 +135,11 @@ class EvcsInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = EvcsInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index ff5ef36a1..e209d1f08 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -8,8 +8,8 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.FixedFeedInInput @@ -47,9 +47,10 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe def inputClass = FixedFeedInInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: - Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + Try input = inputFactory.get(new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success @@ -68,6 +69,7 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert sRated == getQuant(parameter["srated"], StandardUnits.S_RATED) assert cosPhiRated == Double.parseDouble(parameter["cosphirated"]) } @@ -84,9 +86,10 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe ] def inputClass = FixedFeedInInput def nodeInput = Mock(NodeInput) + def emUnit = Mock(EmInput) when: - Try input = inputFactory.get(new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) + Try input = inputFactory.get(new SystemParticipantEntityData(parameter, inputClass, nodeInput, emUnit)) then: input.failure @@ -99,6 +102,10 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe "0: [cosphirated, id, qcharacteristics, srated, uuid]\n" + "1: [cosphirated, id, operatesfrom, qcharacteristics, srated, uuid]\n" + "2: [cosphirated, id, operatesuntil, qcharacteristics, srated, uuid]\n" + - "3: [cosphirated, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" + "3: [cosphirated, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" + + "4: [cosphirated, em, id, qcharacteristics, srated, uuid]\n" + + "5: [cosphirated, em, id, operatesfrom, qcharacteristics, srated, uuid]\n" + + "6: [cosphirated, em, id, operatesuntil, qcharacteristics, srated, uuid]\n" + + "7: [cosphirated, em, id, operatesfrom, operatesuntil, qcharacteristics, srated, uuid]\n" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy index a24587257..550a088fc 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/HpInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.HpInput @@ -45,12 +46,13 @@ class HpInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = HpInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(HpTypeInput) def thermalBusInput = Mock(ThermalBusInput) when: Try input = inputFactory.get( - new HpInputEntityData(parameter, operatorInput, nodeInput, typeInput, thermalBusInput)) + new HpInputEntityData(parameter, operatorInput, nodeInput, emUnit, typeInput, thermalBusInput)) then: input.success @@ -70,6 +72,7 @@ class HpInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert thermalBus == thermalBusInput } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy index 910d59195..c0bc33bfa 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/LoadInputFactoryTest.groovy @@ -8,9 +8,9 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.LoadInput @@ -38,6 +38,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { given: "a system participant input type factory and model data" def inputClass = LoadInput def nodeInput = Mock(NodeInput) + def emUnit = Mock(EmInput) when: def inputFactory = new LoadInputFactory() @@ -52,7 +53,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { "cosphirated" : "5" ] Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, nodeInput, emUnit)) then: input.success @@ -69,6 +70,7 @@ class LoadInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert loadProfile == profile assert dsm assert eConsAnnual == getQuant(parameter["econsannual"], StandardUnits.ENERGY_IN) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy index a3a6d42ae..8ea8a4cf8 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/PvInputFactoryTest.groovy @@ -8,8 +8,8 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.PvInput @@ -54,10 +54,11 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = PvInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) when: Try input = inputFactory.get( - new NodeAssetInputEntityData(parameter, inputClass, operatorInput, nodeInput)) + new SystemParticipantEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit)) then: input.success @@ -77,6 +78,7 @@ class PvInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert albedo == Double.parseDouble(parameter["albedo"]) assert azimuth == getQuant(parameter["azimuth"], StandardUnits.AZIMUTH) assert etaConv == getQuant(parameter["etaconv"], StandardUnits.EFFICIENCY) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy index 453e294f2..d20685662 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/StorageInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.StorageInput @@ -44,11 +45,12 @@ class StorageInputFactoryTest extends Specification implements FactoryTestHelper def inputClass = StorageInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(StorageTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -68,6 +70,7 @@ class StorageInputFactoryTest extends Specification implements FactoryTestHelper new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy index e97d47a09..d258837ec 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/WecInputFactoryTest.groovy @@ -8,6 +8,7 @@ package edu.ie3.datamodel.io.factory.input.participant import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.WecInput @@ -45,11 +46,12 @@ class WecInputFactoryTest extends Specification implements FactoryTestHelper { def inputClass = WecInput def nodeInput = Mock(NodeInput) def operatorInput = Mock(OperatorInput) + def emUnit = Mock(EmInput) def typeInput = Mock(WecTypeInput) when: Try input = inputFactory.get( - new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, typeInput)) + new SystemParticipantTypedEntityData(parameter, inputClass, operatorInput, nodeInput, emUnit, typeInput)) then: input.success @@ -68,6 +70,7 @@ class WecInputFactoryTest extends Specification implements FactoryTestHelper { new CharacteristicPoint(Quantities.getQuantity(0d, PU), Quantities.getQuantity(1d, PU)) ] as TreeSet) } + assert em == Optional.of(emUnit) assert type == typeInput assert marketReaction } diff --git a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy index f3e89647b..f34873c24 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/naming/EntityPersistenceNamingStrategyTest.groovy @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.naming import edu.ie3.datamodel.io.source.TimeSeriesMappingSource +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -20,7 +21,6 @@ import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.models.input.system.BmInput import edu.ie3.datamodel.models.input.system.ChpInput -import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvInput import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.FixedFeedInInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy index 5fffb0fa1..296be7a8c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -11,6 +11,7 @@ import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey import edu.ie3.datamodel.io.source.TimeSeriesMappingSource import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.MeasurementUnitInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index ac2c24ab9..0f25a83ba 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -9,6 +9,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.RandomLoadParameters @@ -143,9 +144,10 @@ class InputEntityProcessorTest extends Specification { def processingResult = processor.handleEntity(validInput) then: "make sure that the result is as expected " - processingResult.forEach { k, v -> + processingResult.forEach { + k, v -> if (k != "nodeInternal") // the internal 3w node is always randomly generated, hence we can skip to test on this - assert (v == expectedResult.get(k)) + assert (v == expectedResult.get(k)) } where: @@ -159,7 +161,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.fixedFeedInInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.fixedFeedInInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "sRated" : SystemParticipantTestData.fixedFeedInInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString() + "sRated" : SystemParticipantTestData.fixedFeedInInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString(), + "em" : SystemParticipantTestData.fixedFeedInInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] PvInput | SystemParticipantTestData.pvInput || [ "uuid" : SystemParticipantTestData.pvInput.uuid.toString(), @@ -177,7 +180,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.pvInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.pvInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "sRated" : SystemParticipantTestData.pvInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString() + "sRated" : SystemParticipantTestData.pvInput.sRated.to(StandardUnits.S_RATED).getValue().doubleValue().toString(), + "em" : SystemParticipantTestData.pvInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] WecInput | SystemParticipantTestData.wecInput || [ "uuid" : SystemParticipantTestData.wecInput.uuid.toString(), @@ -188,7 +192,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.wecInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.wecInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiPSerialized, - "type" : SystemParticipantTestData.wecInput.type.uuid.toString() + "type" : SystemParticipantTestData.wecInput.type.uuid.toString(), + "em" : SystemParticipantTestData.wecInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] ChpInput | SystemParticipantTestData.chpInput || [ "uuid" : SystemParticipantTestData.chpInput.uuid.toString(), @@ -202,6 +207,7 @@ class InputEntityProcessorTest extends Specification { "thermalBus" : SystemParticipantTestData.chpInput.thermalBus.uuid.toString(), "thermalStorage" : SystemParticipantTestData.chpInput.thermalStorage.uuid.toString(), "type" : SystemParticipantTestData.chpInput.type.uuid.toString(), + "em" : SystemParticipantTestData.chpInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] BmInput | SystemParticipantTestData.bmInput || [ "uuid" : SystemParticipantTestData.bmInput.uuid.toString(), @@ -214,7 +220,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.bmInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.bmInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.qVSerialized, - "type" : SystemParticipantTestData.bmInput.type.uuid.toString() + "type" : SystemParticipantTestData.bmInput.type.uuid.toString(), + "em" : SystemParticipantTestData.bmInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] EvInput | SystemParticipantTestData.evInput || [ "uuid" : SystemParticipantTestData.evInput.uuid.toString(), @@ -224,7 +231,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.evInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.evInput.operator.getUuid().toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "type" : SystemParticipantTestData.evInput.type.getUuid().toString() + "type" : SystemParticipantTestData.evInput.type.getUuid().toString(), + "em" : SystemParticipantTestData.evInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] LoadInput | SystemParticipantTestData.loadInput || [ @@ -239,7 +247,8 @@ class InputEntityProcessorTest extends Specification { "operator" : SystemParticipantTestData.loadInput.operator.uuid.toString(), "qCharacteristics" : SystemParticipantTestData.cosPhiFixedSerialized, "sRated" : SystemParticipantTestData.loadInput.sRated.getValue().doubleValue().toString(), - "loadProfile" : SystemParticipantTestData.loadInput.loadProfile.key + "loadProfile" : SystemParticipantTestData.loadInput.loadProfile.key, + "em" : SystemParticipantTestData.loadInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] StorageInput | SystemParticipantTestData.storageInput || [ "uuid" : SystemParticipantTestData.storageInput.uuid.toString(), @@ -249,7 +258,8 @@ class InputEntityProcessorTest extends Specification { "operatesFrom" : SystemParticipantTestData.storageInput.operationTime.startDate.orElse(ZonedDateTime.now()).toString(), "operator" : SystemParticipantTestData.storageInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, - "type" : SystemParticipantTestData.storageInput.type.uuid.toString() + "type" : SystemParticipantTestData.storageInput.type.uuid.toString(), + "em" : SystemParticipantTestData.storageInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] HpInput | SystemParticipantTestData.hpInput || [ "uuid" : SystemParticipantTestData.hpInput.uuid.toString(), @@ -260,7 +270,8 @@ class InputEntityProcessorTest extends Specification { "operator" : SystemParticipantTestData.hpInput.operator.uuid.toString(), "qCharacteristics": SystemParticipantTestData.cosPhiFixedSerialized, "thermalBus" : SystemParticipantTestData.hpInput.thermalBus.uuid.toString(), - "type" : SystemParticipantTestData.hpInput.type.uuid.toString() + "type" : SystemParticipantTestData.hpInput.type.uuid.toString(), + "em" : SystemParticipantTestData.hpInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] EvcsInput | SystemParticipantTestData.evcsInput || [ "uuid" : SystemParticipantTestData.evcsInput.uuid.toString(), @@ -274,7 +285,8 @@ class InputEntityProcessorTest extends Specification { "cosPhiRated" : SystemParticipantTestData.evcsInput.cosPhiRated.toString(), "chargingPoints" : SystemParticipantTestData.evcsInput.chargingPoints.toString(), "locationType" : SystemParticipantTestData.evcsInput.locationType.name(), - "v2gSupport" : SystemParticipantTestData.evcsInput.v2gSupport.toString() + "v2gSupport" : SystemParticipantTestData.evcsInput.v2gSupport.toString(), + "em" : SystemParticipantTestData.evcsInput.em.map((UniqueEntity::getUuid).andThen(UUID::toString)).orElse("") ] } @@ -354,18 +366,18 @@ class InputEntityProcessorTest extends Specification { given: InputEntityProcessor processor = new InputEntityProcessor(RandomLoadParameters) RandomLoadParameters parameters = new RandomLoadParameters( - UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), - 4, - 1.2, - 2.3, - 3.4, - 4.5, - 5.6, - 6.7, - 7.8, - 8.9, - 9.10 - ) + UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), + 4, + 1.2, + 2.3, + 3.4, + 4.5, + 5.6, + 6.7, + 7.8, + 8.9, + 9.10 + ) Map expected = [ "uuid" : "a5b0f432-27b5-4b3e-b87a-61867b9edd79", "quarterHour": "4", @@ -617,14 +629,14 @@ class InputEntityProcessorTest extends Specification { given: InputEntityProcessor processor = new InputEntityProcessor(NodeInput) def nodeWithOutOperator = new NodeInput( - UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), "node_d", OperatorInput.NO_OPERATOR_ASSIGNED, - OperationTime.notLimited() - , - Quantities.getQuantity(1d, PU), - false, - null, - GermanVoltageLevelUtils.MV_20KV, - 4) + UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), "node_d", OperatorInput.NO_OPERATOR_ASSIGNED, + OperationTime.notLimited() + , + Quantities.getQuantity(1d, PU), + false, + null, + GermanVoltageLevelUtils.MV_20KV, + 4) Map expected = [ "geoPosition" : "", diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 6c98e7b53..21c527359 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -17,6 +17,7 @@ import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.LineInput @@ -25,7 +26,6 @@ import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput -import edu.ie3.datamodel.models.input.system.EmInput import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.LoadInput import edu.ie3.datamodel.models.input.system.PvInput @@ -45,7 +45,6 @@ import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.EnergyPriceValue import edu.ie3.datamodel.models.value.Value -import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SampleJointGrid import edu.ie3.test.common.SystemParticipantTestData @@ -171,7 +170,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { ThermalUnitInputTestData.thermalHouseInput, SystemParticipantTestData.evcsInput, SystemParticipantTestData.loadInput, - EnergyManagementTestData.emInput + SystemParticipantTestData.emInput ]) csvFileSink.shutdown() @@ -252,6 +251,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { OperationTime.notLimited(), Mock(NodeInput), new CosPhiFixed("cosPhiFixed:{(0.0,0.95)}"), + Mock(EmInput), 0.2, Quantities.getQuantity(-8.926613807678223, DEGREE_GEOM), Quantities.getQuantity(95d, PERCENT), diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy new file mode 100644 index 000000000..288c6be0a --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EnergyManagementSourceTest.groovy @@ -0,0 +1,284 @@ +/* + * © 2024. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.io.source + +import static edu.ie3.test.helper.EntityMap.map + +import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.exceptions.SourceException +import edu.ie3.datamodel.io.factory.input.AssetInputEntityData +import edu.ie3.datamodel.models.input.EmInput +import edu.ie3.datamodel.utils.Try +import spock.lang.Specification + +import java.util.stream.Stream + +class EnergyManagementSourceTest extends Specification { + + def "An EnergyManagementSource should construct hierarchical EmInputs with two branches as expected"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-0", + "id": "root", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "child 1", + "parentem" : "0-0-0-0-0", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-11", + "id": "child 1-1", + "parentem" : "0-0-0-0-1", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "child 2", + "parentem" : "0-0-0-0-0", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-21", + "id": "child 2-1", + "parentem" : "0-0-0-0-2", + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException)) + + expect: + def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) + + def expectedRootEm = new EmInput( + UUID.fromString("0-0-0-0-0"), + "root", + "", + null + ) + def expectedEm1 = new EmInput( + UUID.fromString("0-0-0-0-1"), + "child 1", + "", + expectedRootEm + ) + def expectedEm11 = new EmInput( + UUID.fromString("0-0-0-0-11"), + "child 1-1", + "", + expectedEm1 + ) + def expectedEm2 = new EmInput( + UUID.fromString("0-0-0-0-2"), + "child 2", + "", + expectedRootEm + ) + def expectedEm21 = new EmInput( + UUID.fromString("0-0-0-0-21"), + "child 2-1", + "", + expectedEm2 + ) + + emUnits == map([expectedRootEm, expectedEm1, expectedEm11, expectedEm2, expectedEm21]) + } + + def "An EnergyManagementSource should construct flat EmInputs without hierarchy as expected"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "", + "controlstrategy" : "strat_b"], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-3", + "id": "em 3", + "parentem" : "", + "controlstrategy" : "other"], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException)) + + expect: + def emUnits = EnergyManagementSource.createEmInputs(assetEntityDataStream) + + def expectedEm1 = new EmInput( + UUID.fromString("0-0-0-0-1"), + "em 1", + "", + null + ) + def expectedEm2 = new EmInput( + UUID.fromString("0-0-0-0-2"), + "em 2", + "strat_b", + null + ) + def expectedEm3 = new EmInput( + UUID.fromString("0-0-0-0-3"), + "em 3", + "other", + null + ) + + emUnits == map([expectedEm1, expectedEm2, expectedEm3]) + } + + def "An EnergyManagementSource should fail if any entity data already failed before"() { + given: + def assetEntityDataStream = Stream.of( + new Try.Success(new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + )), + new Try.Success(new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "", + "controlstrategy" : ""], + EmInput + )), + new Try.Failure(new SourceException("test failure abc")) + ) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.cause.message.contains("test failure abc") + } + + def "An EnergyManagementSource should fail if a parent EM UUID is malformed"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "not-a-uuid", + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.cause.message.contains("Exception while trying to parse UUID of field \"parentem\" with value \"not-a-uuid\"") + } + + def "An EnergyManagementSource should fail if the factory fails for one EM"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", // id is missing + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.cause.message.contains("An error occurred when creating instance of EmInput") + exc.cause.cause.class == FactoryException + } + + def "An EnergyManagementSource should fail if a parent em is not provided"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "", + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "1-2-3-4-5", // does not exist + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.message.contains("were assigned a parent EM that does not exist.") + } + + def "An EnergyManagementSource should fail if no parent ems are provided"() { + given: + def assetEntityDataStream = Stream.of( + new AssetInputEntityData( + ["uuid": "0-0-0-0-1", + "id": "em 1", + "parentem" : "1-2-3-4-5", // does not exist + "controlstrategy" : ""], + EmInput + ), + new AssetInputEntityData( + ["uuid": "0-0-0-0-2", + "id": "em 2", + "parentem" : "1-2-3-4-5", // does not exist + "controlstrategy" : ""], + EmInput + ), + ).map(data -> Try.of(() -> data, SourceException)) + + when: + EnergyManagementSource.createEmInputs(assetEntityDataStream) + + then: + def exc = thrown(SourceException) + exc.message.contains("were assigned a parent EM that does not exist.") + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 8e6fc4f4d..076bd98a2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -15,6 +15,7 @@ import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData import edu.ie3.datamodel.io.source.csv.CsvDataSource import edu.ie3.datamodel.models.input.AssetInput +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.system.ChpInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput @@ -76,7 +77,7 @@ class EntitySourceTest extends Specification { "t_bus" : sptd.thermalBus.uuid.toString(), "t_storage" : sptd.thermalStorage.uuid.toString() ] - def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, sptd.chpTypeInput) + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, null, sptd.chpTypeInput) Map busMap = map([sptd.thermalBus]) Map storageMap = map([sptd.thermalStorage]) @@ -94,7 +95,7 @@ class EntitySourceTest extends Specification { "t_bus" : sptd.thermalBus.uuid.toString(), "t_storage" : "8851813b-3a7d-4fee-874b-4df9d724e4b4" ] - def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, sptd.chpTypeInput) + def entityData = new SystemParticipantTypedEntityData(parameter, ChpInput, sptd.participantNode, null, sptd.chpTypeInput) Map busMap = map([sptd.thermalBus]) Map storageMap = map([sptd.thermalStorage]) @@ -110,34 +111,34 @@ class EntitySourceTest extends Specification { def "An EntitySource should find a linked entity, if it was provided"() { given: Map parameter = [ - "linked_entity" : sptd.chpTypeInput.uuid.toString(), + "linked_entity" : sptd.emInput.uuid.toString(), ] def entityData = new EntityData(parameter, AssetInput) - Map entityMap = map([sptd.chpTypeInput]) + Map entityMap = map([sptd.emInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) then: - result == new Try.Success(sptd.chpTypeInput) + result == new Try.Success(sptd.emInput) } def "An EntitySource trying to find a linked entity should fail, if no matching linked entity was provided"() { given: Map parameter = [ - "linked_entity" : "5ebd8f7e-dedb-4017-bb86-6373c4b60000", + "linked_entity" : sptd.parentEm.uuid.toString(), ] def entityData = new EntityData(parameter, AssetInput) - Map entityMap = map([sptd.chpTypeInput]) + Map entityMap = map([sptd.emInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) then: result.isFailure() - result.getException().get().message == "Linked linked_entity with UUID 5ebd8f7e-dedb-4017-bb86-6373c4b60000 was not found for entity EntityData{fieldsToAttributes={linked_entity=5ebd8f7e-dedb-4017-bb86-6373c4b60000}, targetClass=class edu.ie3.datamodel.models.input.AssetInput}" + result.getException().get().message == "Linked linked_entity with UUID 897bfc17-8e54-43d0-8d98-740786fd94dd was not found for entity EntityData{fieldsToAttributes={linked_entity=897bfc17-8e54-43d0-8d98-740786fd94dd}, targetClass=class edu.ie3.datamodel.models.input.AssetInput}" } def "An EntitySource trying to find a linked entity should fail, if corresponding UUID is malformed"() { @@ -147,7 +148,7 @@ class EntitySourceTest extends Specification { ] def entityData = new EntityData(parameter, AssetInput) - Map entityMap = map([sptd.chpTypeInput]) + Map entityMap = map([sptd.emInput]) when: def result = dummyEntitySource.getLinkedEntity(entityData, "linked_entity", entityMap) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy index 402b657be..57e7a5566 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/SystemParticipantSourceTest.groovy @@ -10,6 +10,7 @@ import static edu.ie3.test.helper.EntityMap.map import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData import edu.ie3.datamodel.io.factory.input.participant.ChpInputEntityData import edu.ie3.datamodel.io.factory.input.participant.HpInputEntityData +import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantEntityData import edu.ie3.datamodel.io.factory.input.participant.SystemParticipantTypedEntityData import edu.ie3.datamodel.models.input.system.ChpInput import edu.ie3.datamodel.models.input.system.HpInput @@ -23,9 +24,33 @@ import java.util.stream.Stream class SystemParticipantSourceTest extends Specification { + def "A SystemParticipantSource should build system participant entity from valid and invalid input data as expected"() { + given: + def nodeAssetInputEntityData = Stream.of(new Try.Success<>(new NodeAssetInputEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node))) + + when: + def sysPartEntityDataStream = SystemParticipantSource.systemParticipantEntityStream(nodeAssetInputEntityData, map(emUnits)) + + then: + def element = sysPartEntityDataStream.findFirst().get() + element.success == resultIsPresent + element.data.ifPresent({ + typedEntityData -> + assert (typedEntityData == resultData) + }) + + where: + emUnits | fieldsToAttributes || resultIsPresent || resultData + [] | ["em": "977157f4-25e5-4c72-bf34-440edc778792"] || false || null + [SystemParticipantTestData.emInput] | ["bla": "foo"] || true || new SystemParticipantEntityData(["bla": "foo"], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null) + [SystemParticipantTestData.emInput] | [:] || true || new SystemParticipantEntityData([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null) + [SystemParticipantTestData.emInput] | ["em": "977157f4-25e5-4c72-bf34-440edc778793"] || false || null + [SystemParticipantTestData.emInput] | ["em": "977157f4-25e5-4c72-bf34-440edc778792"] || true || new SystemParticipantEntityData([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput) + } + def "A SystemParticipantSource should build typed entity from valid and invalid input data as expected"() { given: - def systemParticipantEntityData = Stream.of(new Try.Success<>(new NodeAssetInputEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node))) + def systemParticipantEntityData = Stream.of(new Try.Success<>(new SystemParticipantEntityData(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null))) when: def typedEntityDataStream = SystemParticipantSource.typedSystemParticipantEntityStream(systemParticipantEntityData, map(types)) @@ -44,12 +69,12 @@ class SystemParticipantSourceTest extends Specification { [SystemParticipantTestData.chpTypeInput] | ["bla": "foo"] || false || null [SystemParticipantTestData.chpTypeInput] | [:] || false || null [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb9"] || false || null - [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || true || new SystemParticipantTypedEntityData<>([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.chpTypeInput) + [SystemParticipantTestData.chpTypeInput] | ["type": "5ebd8f7e-dedb-4017-bb86-6373c4b68eb8"] || true || new SystemParticipantTypedEntityData<>([:], ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, null, SystemParticipantTestData.chpTypeInput) } def "A SystemParticipantSource should build hp input entity from valid and invalid input data as expected"() { given: - def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.hpTypeInput))) + def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, HpInput, SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.hpTypeInput))) when: def hpInputEntityDataOpt = SystemParticipantSource.hpEntityStream(sysPartTypedEntityData, map(thermalBuses)) @@ -68,12 +93,12 @@ class SystemParticipantSourceTest extends Specification { [SystemParticipantTestData.hpInput.thermalBus] | ["bla": "foo"] || false || null [SystemParticipantTestData.hpInput.thermalBus] | [:] || false || null [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384f"] || false || null - [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.hpTypeInput, SystemParticipantTestData.hpInput.thermalBus) + [SystemParticipantTestData.hpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e"] || true || new HpInputEntityData([:], SystemParticipantTestData.hpInput.operator, SystemParticipantTestData.hpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.hpTypeInput, SystemParticipantTestData.hpInput.thermalBus) } def "A SystemParticipantSource should build chp input entity from valid and invalid input data as expected"(List thermalStorages, List thermalBuses, Map fieldsToAttributes, boolean resultIsPresent, ChpInputEntityData resultData) { given: - def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.chpTypeInput))) + def sysPartTypedEntityData = Stream.of(new Try.Success<>(new SystemParticipantTypedEntityData<>(fieldsToAttributes, ChpInput, SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.chpTypeInput))) when: def hpInputEntityDataOpt = SystemParticipantSource.chpEntityStream(sysPartTypedEntityData, map(thermalStorages), map(thermalBuses)) @@ -91,6 +116,6 @@ class SystemParticipantSourceTest extends Specification { [] | [] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || false | null [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["bla": "foo"] || false | null [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | [:] || false | null - [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.chpTypeInput, SystemParticipantTestData.chpInput.thermalBus, SystemParticipantTestData.chpInput.thermalStorage) + [SystemParticipantTestData.chpInput.thermalStorage] | [SystemParticipantTestData.chpInput.thermalBus] | ["thermalBus": "0d95d7f2-49fb-4d49-8636-383a5220384e", "thermalStorage": "8851813b-3a7d-4fee-874b-4df9d724e4b3"] || true | new ChpInputEntityData([:], SystemParticipantTestData.chpInput.operator, SystemParticipantTestData.chpInput.node, SystemParticipantTestData.emInput, SystemParticipantTestData.chpTypeInput, SystemParticipantTestData.chpInput.thermalBus, SystemParticipantTestData.chpInput.thermalStorage) } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy index 15e528a93..7f5cb7124 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvEnergyManagementSourceTest.groovy @@ -12,7 +12,7 @@ import edu.ie3.datamodel.io.source.EnergyManagementSource import edu.ie3.datamodel.io.source.TypeSource import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.utils.Try -import edu.ie3.test.common.EnergyManagementTestData +import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification class CsvEnergyManagementSourceTest extends Specification implements CsvTestDataMeta { @@ -23,13 +23,13 @@ class CsvEnergyManagementSourceTest extends Specification implements CsvTestData Mock(TypeSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - Map operatorMap = map([EnergyManagementTestData.emInput.operator]) + Map operatorMap = map([SystemParticipantTestData.emInput.operator]) expect: def emUnits = Try.of(() -> csvEnergyManagementSource.getEmUnits(operatorMap), SourceException) emUnits.success - emUnits.data.get().emUnits.size() == 1 - emUnits.data.get().emUnits == [EnergyManagementTestData.emInput] as Set + emUnits.data.get().size() == 2 + emUnits.data.get() == map([SystemParticipantTestData.emInput, SystemParticipantTestData.parentEm]) } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index cfb0cfb4b..8d1bd118d 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -10,6 +10,7 @@ import static edu.ie3.test.helper.EntityMap.map import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.exceptions.SystemParticipantsException import edu.ie3.datamodel.io.source.* +import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.* import edu.ie3.datamodel.utils.Try @@ -23,10 +24,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat def typeSource = new TypeSource(new CsvDataSource(csvSep, typeFolderPath, fileNamingStrategy)) def thermalSource = new ThermalSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def rawGridSource = new RawGridSource(typeSource, new CsvDataSource(csvSep, gridDefaultFolderPath, fileNamingStrategy)) + def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( typeSource, thermalSource, rawGridSource, + energyManagementSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) when: @@ -59,10 +62,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat getNodes() >> [:] getNodes(_) >> [:] } as RawGridSource + def energyManagementSource = new EnergyManagementSource(typeSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def csvSystemParticipantSource = new SystemParticipantSource( typeSource, thermalSource, rawGridSource, + energyManagementSource, new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) when: @@ -86,11 +91,13 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def nodeMap = map([sptd.hpInput.node]) + def emUnitsMap = map([sptd.emInput]) expect: - def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, map(types), map(thermalBuses)), SourceException) + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, emUnitsMap, map(types), map(thermalBuses)), SourceException) if (heatPumps.success) { heatPumps.data.get().size() == resultingSize @@ -103,7 +110,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types | thermalBuses || resultingSize | resultingSet [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [sptd.hpInput] [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ - new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) + new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.emInput, sptd.hpInput.type) ] [] | [] | [] | [] || 0 | [] [sptd.hpInput.node] | [] | [] | [] || 0 | [] @@ -117,11 +124,13 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) def nodeMap = map([sptd.hpInput.node]) + def emUnitsMap = map([sptd.emInput]) expect: - def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, emUnitsMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) if (chpUnits.success) { chpUnits.data.get().size() == resultingSize @@ -134,7 +143,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet [sptd.chpInput.operator] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [sptd.chpInput] [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ - new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) + new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.emInput, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) ] [] | [] | [] | [] || 0 || [] [] | [] | [] | [] || 0 || [] @@ -148,10 +157,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -164,7 +175,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.evInput.node] | [sptd.evInput.operator] | [sptd.evInput.type] || 1 || [sptd.evInput] [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ - new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) + new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.emInput, sptd.evInput.type) ] [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] [sptd.evInput.node] | [] | [] || 0 || [] @@ -177,10 +188,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -193,7 +206,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.wecInput.node] | [sptd.wecInput.operator] | [sptd.wecInput.type] || 1 || [sptd.wecInput] [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ - new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) + new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.emInput, sptd.wecInput.type, sptd.wecInput.marketReaction) ] [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] [sptd.wecInput.node] | [] | [] || 0 || [] @@ -206,10 +219,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -222,7 +237,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.storageInput.node] | [sptd.storageInput.operator] | [sptd.storageInput.type] || 1 || [sptd.storageInput] [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ - new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) + new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.emInput, sptd.storageInput.type) ] [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] [sptd.storageInput.node] | [] | [] || 0 || [] @@ -235,10 +250,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), emUnitsMap, map(types)), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -251,7 +268,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [sptd.bmInput.operator] | [sptd.bmInput.type] || 1 || [sptd.bmInput] [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ - new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) + new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.emInput, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) ] [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] [sptd.bmInput.node] | [] | [] || 0 || [] @@ -264,10 +281,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -280,7 +299,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.evcsInput.node] | [sptd.evcsInput.operator] || 1 || [sptd.evcsInput] [sptd.evcsInput.node] | [] || 1 || [ - new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) + new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.emInput, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) ] [] | [sptd.evcsInput.operator] || 0 || [] [] | [] || 0 || [] @@ -292,10 +311,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -308,7 +329,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.loadInput.node] | [sptd.loadInput.operator] || 1 || [sptd.loadInput] [sptd.loadInput.node] | [] || 1 || [ - new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) + new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.emInput, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) ] [] | [sptd.loadInput.operator] || 0 || [] [] | [] || 0 || [] @@ -320,10 +341,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -336,7 +359,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.pvInput.node] | [sptd.pvInput.operator] || 1 || [sptd.pvInput] [sptd.pvInput.node] | [] || 1 || [ - new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) + new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.emInput, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) ] [] | [sptd.pvInput.operator] || 0 || [] [] | [] || 0 || [] @@ -348,10 +371,12 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), + Mock(EnergyManagementSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def emUnitsMap = map([sptd.emInput]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes), emUnitsMap), SourceException) if (sysParts.success) { sysParts.data.get().size() == resultingSize @@ -364,7 +389,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat nodes | operators || resultingSize || resultingSet [sptd.fixedFeedInInput.node] | [sptd.fixedFeedInInput.operator] || 1 || [sptd.fixedFeedInInput] [sptd.fixedFeedInInput.node] | [] || 1 || [ - new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) + new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.emInput, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) ] [] | [sptd.fixedFeedInInput.operator] || 0 || [] [] | [] || 0 || [] diff --git a/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy deleted file mode 100644 index ea13b2f35..000000000 --- a/src/test/groovy/edu/ie3/datamodel/models/EmControlStrategyTest.groovy +++ /dev/null @@ -1,45 +0,0 @@ -/* - * © 2022. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.datamodel.models - -import edu.ie3.datamodel.exceptions.FactoryException -import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData -import edu.ie3.datamodel.io.factory.input.participant.FixedFeedInInputFactory -import edu.ie3.datamodel.models.input.NodeInput -import edu.ie3.datamodel.models.input.system.FixedFeedInInput -import spock.lang.Specification - -import java.util.stream.Collectors - -class EmControlStrategyTest extends Specification { - - def "An em control strategy should be gotten by their key"() { - given: - EmControlStrategy actual = EmControlStrategy.get(key) - - expect: - actual == expected - - where: - key || expected - EmControlStrategy.SELF_OPTIMIZATION.getKey() || EmControlStrategy.SELF_OPTIMIZATION - } - - def "An em control strategy should throw an exception when calling get on unkown key"() { - given: - String unknownKey = "nobody_knows_me" - - when: - EmControlStrategy _ = EmControlStrategy.get(unknownKey) - - then: - IllegalArgumentException ex = thrown() - ex.message == "No predefined energy management control strategy '" + - unknownKey + - "' found. Please provide one of the following keys: " + - Arrays.stream(EmControlStrategy.values()).map(EmControlStrategy::getKey).collect(Collectors.joining(", ")) - } -} diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy deleted file mode 100644 index 7bb2e6902..000000000 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/EnergyManagementUnitsTest.groovy +++ /dev/null @@ -1,29 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.datamodel.models.input.container - -import edu.ie3.test.common.EnergyManagementTestData -import spock.lang.Specification - -class EnergyManagementUnitsTest extends Specification { - - def "An EnergyManagementUnits' copy method should work as expected"() { - given: - def energyManagementUnits = new EnergyManagementUnits( - Collections.singleton(EnergyManagementTestData.emInput) - ) - - def modifiedEmInput = EnergyManagementTestData.emInput.copy().id("modified").build() - - when: - def modifiedEnergyManagementUnits = energyManagementUnits.copy() - .emUnits(Set.of(modifiedEmInput)) - .build() - - then: - modifiedEnergyManagementUnits.emUnits.first() == modifiedEmInput - } -} diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy index 21bc87957..5b8147f20 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/container/JointGridContainerTest.groovy @@ -5,10 +5,8 @@ */ package edu.ie3.datamodel.models.input.container -import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants -import edu.ie3.test.common.EnergyManagementTestData import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification @@ -31,7 +29,7 @@ class JointGridContainerTest extends Specification { def "A single subgrid can be used to build a JointGridContainer"() { when: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) then: noExceptionThrown() @@ -40,10 +38,9 @@ class JointGridContainerTest extends Specification { def "A JointGridContainer's copy method should work as expected"() { given: - def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, emptyEnergyManagementUnits, GRAPHIC_ELEMENTS) + def jointGridContainer = new JointGridContainer(GRID_NAME, RAW_GRID, emptySystemParticipants, GRAPHIC_ELEMENTS) def rawGrid = new RawGridElements(List.of(GridTestData.lineAtoB, GridTestData.transformerAtoBtoC)) def systemParticipants = new SystemParticipants(List.of(SystemParticipantTestData.bmInput)) - def emUnits = new EnergyManagementUnits(Set.of(EnergyManagementTestData.emInput)) def graphics = new GraphicElements(Set.of(GridTestData.nodeGraphicD), Set.of(GridTestData.lineGraphicCtoD)) when: @@ -51,7 +48,6 @@ class JointGridContainerTest extends Specification { .gridName("new grid name") .rawGrid(rawGrid) .systemParticipants(systemParticipants) - .emUnits(emUnits) .graphics(graphics) .build() @@ -59,7 +55,6 @@ class JointGridContainerTest extends Specification { modifiedJointGridContainer.gridName == "new grid name" modifiedJointGridContainer.rawGrid == rawGrid modifiedJointGridContainer.systemParticipants == systemParticipants - modifiedJointGridContainer.emUnits == emUnits modifiedJointGridContainer.graphics == graphics } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy index 877a35be1..6088e7218 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/BmInputTest.groovy @@ -33,6 +33,7 @@ class BmInputTest extends Specification { assert qCharacteristics == bmInput.qCharacteristics assert feedInTariff == Quantities.getQuantity(15, EURO_PER_MEGAWATTHOUR) assert type == SystemParticipantTestData.bmTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy index 69dcb4f92..b21f73dfe 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/ChpInputTest.groovy @@ -29,6 +29,7 @@ class ChpInputTest extends Specification { assert thermalStorage == SystemParticipantTestData.thermalStorage assert marketReaction assert type == SystemParticipantTestData.chpTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy index 755699e22..3c1c6f706 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EmInputTest.groovy @@ -5,10 +5,8 @@ */ package edu.ie3.datamodel.models.input.system -import static edu.ie3.datamodel.models.ControlStrategy.DefaultControlStrategies.NO_CONTROL_STRATEGY - -import edu.ie3.datamodel.models.ControlStrategy -import edu.ie3.test.common.EnergyManagementTestData +import edu.ie3.datamodel.models.input.EmInput +import edu.ie3.test.common.SystemParticipantTestData import spock.lang.Specification class EmInputTest extends Specification { @@ -18,67 +16,68 @@ class EmInputTest extends Specification { def emInput = new EmInput( UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), "test_emInput", - EnergyManagementTestData.connectedAssets, - EnergyManagementTestData.emControlStrategy + SystemParticipantTestData.emControlStrategy, + SystemParticipantTestData.parentEm ) then: emInput.with { assert uuid == UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792") assert id == "test_emInput" - assert connectedAssets == EnergyManagementTestData.connectedAssets - assert controlStrategy.key == EnergyManagementTestData.emControlStrategy + assert controlStrategy == SystemParticipantTestData.emControlStrategy } } def "EmInputs are comparable"() { given: - def emInputA = EnergyManagementTestData.emInput + def emInputA = SystemParticipantTestData.emInput expect: (emInputA == emInputB) == isEqual where: - emInputB || isEqual - EnergyManagementTestData.emInput || true - EnergyManagementTestData.emInput.copy().build() || true - EnergyManagementTestData.emInput.copy().id("otherId").build() || false + emInputB || isEqual + SystemParticipantTestData.emInput || true + SystemParticipantTestData.emInput.copy().build() || true + SystemParticipantTestData.emInput.copy().id("otherId").build() || false } def "The EmInput to String method work as expected"() { given: - def emInputToString = EnergyManagementTestData.emInput.toString() + def emInputToString = SystemParticipantTestData.emInput.toString() expect: emInputToString == "EmInput{" + "uuid=" + - EnergyManagementTestData.emInput.uuid + + SystemParticipantTestData.emInput.uuid + ", id='" + - EnergyManagementTestData.emInput.id + + SystemParticipantTestData.emInput.id + ", operator=" + - EnergyManagementTestData.emInput.operator.uuid + + SystemParticipantTestData.emInput.operator.uuid + ", operationTime=" + - EnergyManagementTestData.emInput.operationTime + - ", connectedAssets=" + - Arrays.toString(EnergyManagementTestData.emInput.connectedAssets) + + SystemParticipantTestData.emInput.operationTime + ", controlStrategy=" + - EnergyManagementTestData.emInput.controlStrategy + + SystemParticipantTestData.emInput.controlStrategy + + ", parentEm=" + + SystemParticipantTestData.parentEm.uuid + '}' } def "A EmInput copy method should work as expected"() { given: - def emInput = EnergyManagementTestData.emInput - def newConnectedAssets = [ - UUID.randomUUID(), - UUID.randomUUID() - ] as UUID[] - + def emInput = SystemParticipantTestData.emInput + def newStrat = "new_strat" + def givenParentEm = new EmInput( + UUID.fromString("cfc0639b-65bc-47e5-a8e5-82703de3c650"), + "testParent", + "controlStrat", + null + ) when: - def alteredUnit = emInput.copy().connectedAssets(newConnectedAssets).controlStrategy(ControlStrategy.parse("")).build() + def alteredUnit = emInput.copy().controlStrategy(newStrat).parentEm(givenParentEm).build() then: alteredUnit.with { @@ -86,8 +85,8 @@ class EmInputTest extends Specification { assert operationTime == emInput.operationTime assert operator == emInput.operator assert id == emInput.id - assert connectedAssets == newConnectedAssets - assert controlStrategy == NO_CONTROL_STRATEGY + assert controlStrategy == newStrat + assert parentEm == Optional.of(givenParentEm) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy index f31375f45..507384dcb 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvInputTest.groovy @@ -26,6 +26,7 @@ class EvInputTest extends Specification { assert id == ev.id assert qCharacteristics == ev.qCharacteristics assert type == SystemParticipantTestData.evTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy index 65dd93c14..eadd65ea7 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/EvcsInputTest.groovy @@ -36,6 +36,7 @@ class EvcsInputTest extends Specification { assert chargingPoints == 1 assert locationType == EvcsLocationType.CHARGING_HUB_HIGHWAY assert v2gSupport + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy index 500da895b..5c29f2544 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/FixedFeedInInputTest.groovy @@ -29,6 +29,7 @@ class FixedFeedInInputTest extends Specification { assert qCharacteristics == ffIn.qCharacteristics assert sRated == Quantities.getQuantity(10d, PowerSystemUnits.VOLTAMPERE) assert cosPhiRated == 0.8d + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy index 9e40de6d6..98a15d0df 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/HpInputTest.groovy @@ -28,6 +28,7 @@ class HpInputTest extends Specification { assert qCharacteristics == hpInput.qCharacteristics assert thermalBus == SystemParticipantTestData.thermalBus assert type == SystemParticipantTestData.hpTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy index a1d04cc30..166406e36 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/LoadInputTest.groovy @@ -41,6 +41,7 @@ class LoadInputTest extends Specification { assert eConsAnnual == Quantities.getQuantity(6000, KILOWATTHOUR) assert sRated == Quantities.getQuantity(0d, KILOVOLTAMPERE) assert cosPhiRated == 0.8d + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy index ea9a0262d..5506582e8 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/PvInputTest.groovy @@ -40,6 +40,7 @@ class PvInputTest extends Specification { assert elevationAngle == Quantities.getQuantity(50, DEGREE_GEOM) assert kG == 10 assert kT == 5 + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy index 0bea4865f..da2e9d233 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/StorageInputTest.groovy @@ -26,6 +26,7 @@ class StorageInputTest extends Specification { assert id == storageInput.id assert qCharacteristics == storageInput.qCharacteristics assert type == SystemParticipantTestData.storageTypeInput + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy index 9d8b823af..135adc2fb 100644 --- a/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/models/input/system/WecInputTest.groovy @@ -27,6 +27,7 @@ class WecInputTest extends Specification { assert qCharacteristics == wec.qCharacteristics assert type == SystemParticipantTestData.wecType assert marketReaction + assert em == Optional.of(SystemParticipantTestData.emInput) } } } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy index 72461b659..c07ff0d54 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilsTest.groovy @@ -294,7 +294,6 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics HashMap expectedSubGrids = ComplexTopology.expectedSubGrids @@ -305,7 +304,6 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGrid, systemParticipants, - emUnits, graphics) then: @@ -325,7 +323,6 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGridInput= ComplexTopology.grid.rawGrid SystemParticipants systemParticipantsInput = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphicsInput = ComplexTopology.grid.graphics HashMap unmodifiedSubGrids = ComplexTopology.expectedSubGrids @@ -335,7 +332,6 @@ class ContainerUtilsTest extends Specification { subNetNumbers, rawGridInput, systemParticipantsInput, - emUnits, graphicsInput) when: @@ -390,14 +386,12 @@ class ContainerUtilsTest extends Specification { Set subNetNumbers = ContainerUtils.determineSubnetNumbers(ComplexTopology.grid.rawGrid.nodes) RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticipants = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics Map subgrids = ContainerUtils.buildSubGridContainers( gridName, subNetNumbers, rawGrid, systemParticipants, - emUnits, graphics) SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -415,7 +409,6 @@ class ContainerUtilsTest extends Specification { String gridName = ComplexTopology.gridName RawGridElements rawGrid = ComplexTopology.grid.rawGrid SystemParticipants systemParticpants = ComplexTopology.grid.systemParticipants - EnergyManagementUnits emUnits = ComplexTopology.grid.emUnits GraphicElements graphics = ComplexTopology.grid.graphics SubGridTopologyGraph expectedSubGridTopology = ComplexTopology.expectedSubGridTopology @@ -424,7 +417,6 @@ class ContainerUtilsTest extends Specification { gridName, rawGrid, systemParticpants, - emUnits, graphics) then: diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy index 9aee7acf6..e8f27b4df 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/InvalidSystemParticipantInput.groovy @@ -13,7 +13,7 @@ import java.time.ZonedDateTime class InvalidSystemParticipantInput extends SystemParticipantInput { InvalidSystemParticipantInput(NodeInput node) { - super(UUID.randomUUID(), "invalid_system_participant", node, CosPhiFixed.CONSTANT_CHARACTERISTIC) + super(UUID.randomUUID(), "invalid_system_participant", node, CosPhiFixed.CONSTANT_CHARACTERISTIC, null) } @Override diff --git a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy index 172675589..1c56b3838 100644 --- a/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy +++ b/src/test/groovy/edu/ie3/test/common/ComplexTopology.groovy @@ -5,7 +5,6 @@ */ package edu.ie3.test.common -import static edu.ie3.test.common.EnergyManagementTestData.emptyEnergyManagementUnits import static edu.ie3.test.common.SystemParticipantTestData.emptySystemParticipants import edu.ie3.datamodel.graph.SubGridGate @@ -46,7 +45,6 @@ class ComplexTopology extends GridTestData { gridName, rawGrid, emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set)) @@ -67,7 +65,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -84,7 +81,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -101,7 +97,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -118,7 +113,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -138,7 +132,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) @@ -158,7 +151,6 @@ class ComplexTopology extends GridTestData { [] as Set, [] as Set), emptySystemParticipants, - emptyEnergyManagementUnits, new GraphicElements( [] as Set, [] as Set) diff --git a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy b/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy deleted file mode 100644 index 4d8714c6b..000000000 --- a/src/test/groovy/edu/ie3/test/common/EnergyManagementTestData.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * © 2023. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.test.common - -import edu.ie3.datamodel.models.input.container.EnergyManagementUnits -import edu.ie3.datamodel.models.input.system.EmInput - -class EnergyManagementTestData { - - public static final UUID[] connectedAssets = new UUID[]{ - SystemParticipantTestData.loadInput.uuid, - SystemParticipantTestData.pvInput.uuid - } - public static final String emControlStrategy = "self_optimization" - - public static final emInput = new EmInput( - UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), - "test_emInput", - SystemParticipantTestData.operator, - SystemParticipantTestData.operationTime, - connectedAssets, - emControlStrategy - ) - - public static EnergyManagementUnits emptyEnergyManagementUnits = - new EnergyManagementUnits([] as List) -} diff --git a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy index 44243df05..ea7ea00ec 100644 --- a/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy +++ b/src/test/groovy/edu/ie3/test/common/SampleJointGrid.groovy @@ -15,7 +15,6 @@ import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput -import edu.ie3.datamodel.models.input.container.EnergyManagementUnits import edu.ie3.datamodel.models.input.container.GraphicElements import edu.ie3.datamodel.models.input.container.JointGridContainer import edu.ie3.datamodel.models.input.container.RawGridElements @@ -48,7 +47,6 @@ class SampleJointGrid extends SystemParticipantTestData { "sampleGrid", rawGridElements, systemParticipants(rawGridElements), - new EnergyManagementUnits(Collections.emptySet()), new GraphicElements(Collections.emptySet())) } @@ -72,6 +70,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, albedo, azimuth, etaConv, @@ -91,6 +90,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, standardLoadProfile, false, eConsAnnual, @@ -105,6 +105,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, standardLoadProfile, false, eConsAnnual, @@ -120,6 +121,7 @@ class SampleJointGrid extends SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, storageTypeInput) return new SystemParticipants( diff --git a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy index bd0f2bf43..dbcc06e33 100644 --- a/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/SystemParticipantTestData.groovy @@ -8,6 +8,7 @@ package edu.ie3.test.common import static edu.ie3.datamodel.models.StandardUnits.* import edu.ie3.datamodel.models.OperationTime +import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.container.SystemParticipants @@ -55,6 +56,25 @@ class SystemParticipantTestData { private static final ComparableQuantity opex = Quantities.getQuantity(50d, ENERGY_PRICE) static final ComparableQuantity etaConv = Quantities.getQuantity(98d, EFFICIENCY) + // EmInput + public static final String emControlStrategy = "self_optimization" + public static final EmInput parentEm = new EmInput( + UUID.fromString("897bfc17-8e54-43d0-8d98-740786fd94dd"), + "test_parentEmInput", + SystemParticipantTestData.operator, + SystemParticipantTestData.operationTime, + emControlStrategy, + null + ) + + public static final EmInput emInput = new EmInput( + UUID.fromString("977157f4-25e5-4c72-bf34-440edc778792"), + "test_emInput", + SystemParticipantTestData.operator, + SystemParticipantTestData.operationTime, + emControlStrategy, + parentEm + ) // FixedFeedInput public static final FixedFeedInInput fixedFeedInInput = new FixedFeedInInput( @@ -64,6 +84,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, sRated, cosPhiRated ) @@ -81,6 +102,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, albedo, azimuth, etaConv, @@ -117,6 +139,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiP, + emInput, wecType, false ) @@ -172,6 +195,7 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, + emInput, chpTypeInput, thermalStorage, false @@ -198,6 +222,7 @@ class SystemParticipantTestData { operationTime, participantNode, qV, + emInput, bmTypeInput, false, false, @@ -223,6 +248,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, evTypeInput ) @@ -236,6 +262,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, standardLoadProfile, false, eConsAnnual, @@ -272,6 +299,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, storageTypeInput ) @@ -294,6 +322,7 @@ class SystemParticipantTestData { participantNode, thermalBus, cosPhiFixed, + emInput, hpTypeInput ) @@ -306,6 +335,7 @@ class SystemParticipantTestData { operationTime, participantNode, cosPhiFixed, + emInput, ChargingPointTypeUtils.HouseholdSocket, 4, cosPhiRated, diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv index 5cc111444..e1bd3d5fa 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_participants/em_input.csv @@ -1,2 +1,3 @@ -uuid,connected_assets,control_strategy,id,operates_from,operates_until,operator -977157f4-25e5-4c72-bf34-440edc778792,eaf77f7e-9001-479f-94ca-7fb657766f5f d56f15b7-8293-4b98-b5bd-58f6273ce229,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510 +uuid,control_strategy,id,operates_from,operates_until,operator,parent_em +977157f4-25e5-4c72-bf34-440edc778792,self_optimization,test_emInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510,897bfc17-8e54-43d0-8d98-740786fd94dd +897bfc17-8e54-43d0-8d98-740786fd94dd,self_optimization,test_parentEmInput,2020-03-24T15:11:31Z[UTC],2020-03-25T15:11:31Z[UTC],8f9682df-0744-4b58-a122-f0dc730f6510, \ No newline at end of file From f84505ab20650d79cabdaee8c7b61c77ef7132d9 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 10:25:53 +0100 Subject: [PATCH 083/228] Adapted changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b33ad187..966eb4c5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) - Adding JavaDoc to `EntitySource.safeMapGet` [#828](https://github.com/ie3-institute/PowerSystemDataModel/issues/828) - Abstracting some methods in `ValidationUtils` [#852](https://github.com/ie3-institute/PowerSystemDataModel/issues/852) -- `EmInput` should not be connected to the grid [#955](https://github.com/ie3-institute/PowerSystemDataModel/issues/955) +- Changes to Energy Management inputs: + - `EmInput` should not be connected to the grid [#955](https://github.com/ie3-institute/PowerSystemDataModel/issues/955) + - System participants now reference the em entity [#957](https://github.com/ie3-institute/PowerSystemDataModel/issues/957) - Refactored and abstracted `EntitySource`s and `EntityData` creation [#969](https://github.com/ie3-institute/PowerSystemDataModel/issues/969) ## [4.1.0] - 2023-11-02 From 259ea5cc5b8d6a3ca5b1b206ef4f9e225e31d706 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 13:37:51 +0100 Subject: [PATCH 084/228] Converted attribute tables to list-tables Added em page Added em attribute to participants --- .../models/input/participant/bm.rst | 156 ++++++---- .../models/input/participant/chp.rst | 166 +++++++---- .../input/participant/cylindricalstorage.rst | 75 +++-- .../models/input/participant/em.rst | 46 +++ .../models/input/participant/ev.rst | 127 ++++++--- .../models/input/participant/evcs.rst | 266 ++++++++++++------ .../models/input/participant/fixedfeedin.rst | 69 +++-- .../models/input/participant/hp.rst | 131 ++++++--- .../models/input/participant/load.rst | 88 ++++-- .../models/input/participant/pv.rst | 113 +++++--- .../models/input/participant/storage.rst | 177 ++++++++---- .../models/input/participant/thermalbus.rst | 45 ++- .../models/input/participant/thermalhouse.rst | 69 +++-- .../models/input/participant/wec.rst | 155 ++++++---- docs/readthedocs/models/models.md | 1 + 15 files changed, 1136 insertions(+), 548 deletions(-) create mode 100644 docs/readthedocs/models/input/participant/em.rst diff --git a/docs/readthedocs/models/input/participant/bm.rst b/docs/readthedocs/models/input/participant/bm.rst index 5314251e4..964a6e108 100644 --- a/docs/readthedocs/models/input/participant/bm.rst +++ b/docs/readthedocs/models/input/participant/bm.rst @@ -4,61 +4,107 @@ Biomass plant ------------- Model of a biomass power plant. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+---------------------+---------+------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+============================================================+ -| uuid | -- | | -+---------------------+---------+------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+------------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+---------------------+---------+------------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+---------------------+---------+------------------------------------------------------------+ -| activePowerGradient | % / h | Maximum permissible rate of change of power | -+---------------------+---------+------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+---------------------+---------+------------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| costControlled | -- | | Whether to adapt output based on the difference | -| | | | between production costs and fixed feed in tariff or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| feedInTariff | € / MWh | Fixed feed in tariff | -+------------------+---------+--------------------------------------------------------------------------------------+ + +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - activePowerGradient + - % / h + - Maximum permissible rate of change of power + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - etaConv + - % + - Efficiency of the assets inverter + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - type + - -- + - + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + + * - costControlled + - -- + - | Whether to adapt output based on the difference + | between production costs and fixed feed in tariff or not + + * - feedInTariff + - € / MWh + - Fixed feed in tariff + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/chp.rst b/docs/readthedocs/models/input/participant/chp.rst index 14cd2fd46..81de6a2ff 100644 --- a/docs/readthedocs/models/input/participant/chp.rst +++ b/docs/readthedocs/models/input/participant/chp.rst @@ -4,64 +4,114 @@ Combined Heat and Power Plant ----------------------------- Combined heat and power plant. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+-------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+=========+=========================================================+ -| uuid | -- | | -+-------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+---------+---------------------------------------------------------+ -| etaEl | % | Efficiency of the electrical inverter | -+-------------+---------+---------------------------------------------------------+ -| etaThermal | % | Thermal efficiency of the system | -+-------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+---------+---------------------------------------------------------+ -| pThermal | kW | Rated thermal power (at rated electrical power) | -+-------------+---------+---------------------------------------------------------+ -| pOwn | kW | Needed self-consumption | -+-------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalStorage | -- | Reference to thermal storage | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ + +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - etaEl + - % + - Efficiency of the electrical inverter + + * - etaThermal + - % + - Thermal efficiency of the system + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - pThermal + - kW + - Rated thermal power (at rated electrical power) + + * - pOwn + - kW + - Needed self-consumption + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - thermalBus + - -- + - Connection point to the thermal system + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - type + - -- + - + + * - thermalStorage + - -- + - Reference to thermal storage + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/cylindricalstorage.rst b/docs/readthedocs/models/input/participant/cylindricalstorage.rst index feaed6c3d..2b34a1843 100644 --- a/docs/readthedocs/models/input/participant/cylindricalstorage.rst +++ b/docs/readthedocs/models/input/participant/cylindricalstorage.rst @@ -4,31 +4,56 @@ Cylindrical Thermal Storage -------------------------------- Model of a cylindrical thermal storage using a fluent to store thermal energy. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------------+----------------------------+----------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+============================+==============================================+ -| uuid | -- | | -+---------------------+----------------------------+----------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+----------------------------+----------------------------------------------+ -| operator | -- | | -+---------------------+----------------------------+----------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------------+----------------------------+----------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+---------------------+----------------------------+----------------------------------------------+ -| storageVolumeLvl | m³ | Overall available storage volume | -+---------------------+----------------------------+----------------------------------------------+ -| storageVolumeLvlMin | m³ | Minimum permissible storage volume | -+---------------------+----------------------------+----------------------------------------------+ -| inletTemp | °C | Temperature of the inlet | -+---------------------+----------------------------+----------------------------------------------+ -| returnTemp | °C | Temperature of the outlet | -+---------------------+----------------------------+----------------------------------------------+ -| c | kWh / (K :math:`\cdot` m³) | Specific heat capacity of the storage medium | -+---------------------+----------------------------+----------------------------------------------+ + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - thermalBus + - -- + - Connection point to the thermal system + + * - storageVolumeLvl + - m³ + - Overall available storage volume + + * - storageVolumeLvlMin + - m³ + - Minimum permissible storage volume + + * - inletTemp + - °C + - Temperature of the inlet + + * - returnTemp + - °C + - Temperature of the outlet + + * - c + - kWh / (K :math:`\cdot` m³) + - Specific heat capacity of the storage medium + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/em.rst b/docs/readthedocs/models/input/participant/em.rst new file mode 100644 index 000000000..3bc7b97ab --- /dev/null +++ b/docs/readthedocs/models/input/participant/em.rst @@ -0,0 +1,46 @@ +.. _em_model: + +Energy Management Unit +---------------------- +A model of an Energy Management Unit that controls the power of connected system participants. Participants are connected to an EM each via their `em` field. + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - controlStrategy + - -- + - String representation (e.g. name) of a control strategy + + * - parentEm + - -- + - | Reference to a superior Energy Management Unit that is controlling this EM. + | Field can be empty or missing, if this EM itself is not controlled. + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/ev.rst b/docs/readthedocs/models/input/participant/ev.rst index cd98d6d86..d41e7d7dc 100644 --- a/docs/readthedocs/models/input/participant/ev.rst +++ b/docs/readthedocs/models/input/participant/ev.rst @@ -4,50 +4,89 @@ Electric Vehicle ----------------------------- Model of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging system`. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" -+-------------+----------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+==========+=========================================================+ -| uuid | -- | | -+-------------+----------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+----------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+----------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+----------+---------------------------------------------------------+ -| eStorage | kWh | Available battery capacity | -+-------------+----------+---------------------------------------------------------+ -| eCons | kWh / km | Energy consumption per driven kilometre | -+-------------+----------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+----------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+----------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+---------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+=================================+ -| uuid | -- | | -+------------------+---------+---------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+---------------------------------+ -| operator | -- | | -+------------------+---------+---------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+---------------------------------+ -| node | -- | | -+------------------+---------+---------------------------------+ -| type | -- | | -+------------------+---------+---------------------------------+ + +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - eStorage + - kWh + - Available battery capacity + + * - eCons + - kWh / km + - Energy consumption per driven kilometre + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - type + - -- + - + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/evcs.rst b/docs/readthedocs/models/input/participant/evcs.rst index 251003c20..6913a040e 100644 --- a/docs/readthedocs/models/input/participant/evcs.rst +++ b/docs/readthedocs/models/input/participant/evcs.rst @@ -5,38 +5,63 @@ Electric Vehicle Charging Station Model of a charging station for electric vehicles. This model only covers the basic characteristics of a charging station and has some limitations outlined below. -Model Definition -^^^^^^^^^^^^^^^^ -Entity Model -"""""""""""" +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - type + - -- + - :ref:`Charging point type` (valid for all installed points) + + * - chargingPoints + - -- + - no of installed charging points @ the specific station + + * - cosPhiRated + - -- + - Rated power factor + + * - locationType + - -- + - :ref:`Charging station location types` + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + + -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | :ref:`Charging point type` (valid for all installed points) | -+------------------+---------+--------------------------------------------------------------------------------------+ -| chargingPoints | -- | no of installed charging points @ the specific station | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosPhiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ -| locationType | -- | :ref:`Charging station location types` | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Type Model -"""""""""""" In contrast to other models, electric vehicle charging station types are not configured via separate type file or table, but 'inline' of a charging station entry. This is justified by the fact, that the station type (in contrast to e.g. the type of a wind energy converter) only consists of a few, more or less standardized parameters, that are (most of the @@ -46,17 +71,31 @@ available standard types and how to use custom types. The actual model definition for charging point types looks as follows: -+------------------------+---------+--------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+========================+=========+================================================================================+ -| id | -- | Human readable identifier | -+------------------------+---------+--------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------------+---------+--------------------------------------------------------------------------------+ -| electricCurrentType | -- | Electric current type | -+------------------------+---------+--------------------------------------------------------------------------------+ -|synonymousIds | -- | Set of alternative human readable identifiers | -+------------------------+---------+--------------------------------------------------------------------------------+ +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - id + - -- + - Human readable identifier + + * - sRated + - kVA + - Rated apparent power + + * - electricCurrentType + - -- + - Electric current type + + * - synonymousIds + - -- + - Set of alternative human readable identifiers + .. _evcs_point_types: @@ -68,33 +107,76 @@ To simplify the application of electric vehicle charging stations, some common s They can either by used code wise or directly from database or file input by referencing their id or one of their synonymous ids. All standard types can be found in :code:`edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils`. -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| id | synonymous ids | sRated in kVA | electric current type | -+===============================+===============================================+===============+=======================+ -| HouseholdSocket | household, hhs, schuko-simple | 2.3 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| BlueHouseholdSocket | bluehousehold, bhs, schuko-camping | 3.6 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| Cee16ASocket | cee16 | 11 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| Cee32ASocket | cee32 | 22 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| Cee63ASocket | cee63 | 43 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationType1 | cst1, stationtype1, cstype1 | 7.2 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationType2 | cst2, stationtype2, cstype2 | 43 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationCcsComboType1 | csccs1, csccscombo1 | 11 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationCcsComboType2 | csccs2, csccscombo2 | 50 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| TeslaSuperChargerV1 | tesla1, teslav1, supercharger1, supercharger | 135 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| TeslaSuperChargerV2 | tesla2, teslav2, supercharger2 | 150 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| TeslaSuperChargerV3 | tesla3, teslav3, supercharger3 | 250 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ +.. list-table:: + :widths: auto + :header-rows: 1 + + + * - id + - synonymous ids + - sRated in kVA + - electric current type + + * - HouseholdSocket + - household, hhs, schuko-simple + - 2.3 + - AC + + * - BlueHouseholdSocket + - bluehousehold, bhs, schuko-camping + - 3.6 + - AC + + * - Cee16ASocket + - cee16 + - 11 + - AC + + * - Cee32ASocket + - cee32 + - 22 + - AC + + * - Cee63ASocket + - cee63 + - 43 + - AC + + * - ChargingStationType1 + - cst1, stationtype1, cstype1 + - 7.2 + - AC + + * - ChargingStationType2 + - cst2, stationtype2, cstype2 + - 43 + - AC + + * - ChargingStationCcsComboType1 + - csccs1, csccscombo1 + - 11 + - DC + + * - ChargingStationCcsComboType2 + - csccs2, csccscombo2 + - 50 + - DC + + * - TeslaSuperChargerV1 + - tesla1, teslav1, supercharger1, supercharger + - 135 + - DC + + * - TeslaSuperChargerV2 + - tesla2, teslav2, supercharger2 + - 150 + - DC + + * - TeslaSuperChargerV3 + - tesla3, teslav3, supercharger3 + - 250 + - DC + Custom Types @@ -127,21 +209,39 @@ Location types Evcs location types describe the type of charging location of a charging station. Parsing of these types is case-insensitive and underscores and minuses are ignored, that means "charginghubtown" is parsed as type :code:`CHARGING_HUB_TOWN`. -+-------------------------------+-------------------+----------------------------------+ -| type name | public/private | description | -+===============================+===================+==================================+ -| HOME | private | Charging at home | -+-------------------------------+-------------------+----------------------------------+ -| WORK | private | Charging at work | -+-------------------------------+-------------------+----------------------------------+ -| CUSTOMER_PARKING | public | Charging at store parking lots | -+-------------------------------+-------------------+----------------------------------+ -| STREET | public | Charging at street side | -+-------------------------------+-------------------+----------------------------------+ -| CHARGING_HUB_TOWN | public | Charging at hub in town | -+-------------------------------+-------------------+----------------------------------+ -| CHARGING_HUB_HIGHWAY | public | Charging at hub out of town | -+-------------------------------+-------------------+----------------------------------+ +.. list-table:: + :widths: auto + :header-rows: 1 + + + * - type name + - public/private + - description + + * - HOME + - private + - Charging at home + + * - WORK + - private + - Charging at work + + * - CUSTOMER_PARKING + - public + - Charging at store parking lots + + * - STREET + - public + - Charging at street side + + * - CHARGING_HUB_TOWN + - public + - Charging at hub in town + + * - CHARGING_HUB_HIGHWAY + - public + - Charging at hub out of town + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.rst b/docs/readthedocs/models/input/participant/fixedfeedin.rst index f317d5534..0c31549a4 100644 --- a/docs/readthedocs/models/input/participant/fixedfeedin.rst +++ b/docs/readthedocs/models/input/participant/fixedfeedin.rst @@ -5,28 +5,53 @@ Fixed Feed In Facility Model of a facility, that provides constant power feed in, as no further information about the actual behaviour of the model can be derived. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/hp.rst b/docs/readthedocs/models/input/participant/hp.rst index e28cc3c52..e3db3fe1a 100644 --- a/docs/readthedocs/models/input/participant/hp.rst +++ b/docs/readthedocs/models/input/participant/hp.rst @@ -7,50 +7,93 @@ Model of a heat pump. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Type Model -"""""""""" - -+-------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+=========+=========================================================+ -| uuid | -- | | -+-------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+---------+---------------------------------------------------------+ -| pThermal | kW | Rated thermal power (at rated electrical power) | -+-------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - pThermal + - kW + - Rated thermal power (at rated electrical power) + + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - thermalBus + - -- + - Connection point to the thermal system + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - type + - -- + - + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats diff --git a/docs/readthedocs/models/input/participant/load.rst b/docs/readthedocs/models/input/participant/load.rst index f2aa5aa23..55dc9e9f8 100644 --- a/docs/readthedocs/models/input/participant/load.rst +++ b/docs/readthedocs/models/input/participant/load.rst @@ -4,34 +4,66 @@ Load ---- Model of (mainly) domestic loads. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+======================================================================================+ -| uuid | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| loadProfile | -- | :ref:`Load profile` as model behaviour | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| dsm | -- | Whether the load is able to follow demand side management signals | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| eConsAnnual | kWh | Annual energy consumption | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+--------------------------------------------------------------------------------------+ + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - loadProfile + - -- + - :ref:`Load profile` as model behaviour + + * - dsm + - -- + - Whether the load is able to follow demand side management signals + + * - eConsAnnual + - kWh + - Annual energy consumption + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/pv.rst b/docs/readthedocs/models/input/participant/pv.rst index 3308f9c6b..199b6b24e 100644 --- a/docs/readthedocs/models/input/participant/pv.rst +++ b/docs/readthedocs/models/input/participant/pv.rst @@ -4,41 +4,84 @@ Photovoltaic Power Plant ------------------------ Detailed model of a photovoltaic power plant. -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| albedo | -- | `Albedo `_ of the plant's surrounding | -+------------------+---------+--------------------------------------------------------------------------------------+ -| azimuth | ° | | Inclination in a compass direction | -| | | | South = 0°, West = 90°, East = -90° | -+------------------+---------+--------------------------------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+------------------+---------+--------------------------------------------------------------------------------------+ -| elevationAngle | ° | Tilted inclination from horizontal [0°, 90°] | -+------------------+---------+--------------------------------------------------------------------------------------+ -| kG | -- | Generator correction factor merging technical influences | -+------------------+---------+--------------------------------------------------------------------------------------+ -| kT | -- | Temperature correction factor merging thermal influences | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - albedo + - -- + - `Albedo `_ of the plant's surrounding + + * - azimuth + - ° + - | Inclination in a compass direction + | South = 0°, West = 90°, East = -90° + + * - etaConv + - % + - Efficiency of the assets inverter + + * - elevationAngle + - ° + - Tilted inclination from horizontal [0°, 90°] + + * - kG + - -- + - Generator correction factor merging technical influences + + * - kT + - -- + - Temperature correction factor merging thermal influences + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/storage.rst b/docs/readthedocs/models/input/participant/storage.rst index 19d768a30..d16cd12c8 100644 --- a/docs/readthedocs/models/input/participant/storage.rst +++ b/docs/readthedocs/models/input/participant/storage.rst @@ -4,68 +4,121 @@ Electrical Energy Storage ------------------------- Model of an ideal electrical battery energy storage. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+---------------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+=========================================================+ -| uuid | -- | | -+---------------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+---------------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+---------------------+---------+---------------------------------------------------------+ -| eStorage | kWh | Battery capacity | -+---------------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+---------------------------------------------------------+ -| pMax | kW | | Maximum permissible active power | -| | | | infeed or consumption | -+---------------------+---------+---------------------------------------------------------+ -| activePowerGradient | % / h | Maximum permissible rate of change of power | -+---------------------+---------+---------------------------------------------------------+ -| eta | % | Efficiency of the electrical inverter | -+---------------------+---------+---------------------------------------------------------+ -| dod | % | | Maximum permissible depth of discharge. 80 % dod | -| | | | is equivalent to a state of charge of 20 %. | -+---------------------+---------+---------------------------------------------------------+ -| lifeTime | h | Permissible hours of full use | -+---------------------+---------+---------------------------------------------------------+ -| lifeCycle | -- | Permissible amount of full cycles | -+---------------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| behaviour | -- | | Foreseen operation strategy of the storage. | -| | | | Eligible input: *"market"*, *"grid"*, *"self"* | -+------------------+---------+--------------------------------------------------------------------------------------+ + +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - eStorage + - kWh + - Battery capacity + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - pMax + - kW + - | Maximum permissible active power + | infeed or consumption + + * - activePowerGradient + - % / h + - Maximum permissible rate of change of power + + * - eta + - % + - Efficiency of the electrical inverter + + * - dod + - % + - | Maximum permissible depth of discharge. 80 % dod + | is equivalent to a state of charge of 20 %. + + * - lifeTime + - h + - Permissible hours of full use + + * - lifeCycle + - -- + - Permissible amount of full cycles + + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - type + - -- + - + + * - behaviour + - -- + - | Foreseen operation strategy of the storage. + | Eligible input: *"market"*, *"grid"*, *"self"* + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats diff --git a/docs/readthedocs/models/input/participant/thermalbus.rst b/docs/readthedocs/models/input/participant/thermalbus.rst index 8b0a6300e..86353f5d8 100644 --- a/docs/readthedocs/models/input/participant/thermalbus.rst +++ b/docs/readthedocs/models/input/participant/thermalbus.rst @@ -4,21 +4,36 @@ Thermal Bus ----------- A coupling point to thermal system - equivalent to :ref:`electrical node `. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+------+----------------------------------------+ -| Attribute | Unit | Remarks | -+===============+======+========================================+ -| uuid | -- | | -+---------------+------+----------------------------------------+ -| id | -- | Human readable identifier | -+---------------+------+----------------------------------------+ -| operator | -- | | -+---------------+------+----------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------+------+----------------------------------------+ -| bus | -- | Connection point to the thermal system | -+---------------+------+----------------------------------------+ + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - bus + - -- + - Connection point to the thermal system + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/thermalhouse.rst b/docs/readthedocs/models/input/participant/thermalhouse.rst index c5ff9b947..397b4a537 100644 --- a/docs/readthedocs/models/input/participant/thermalhouse.rst +++ b/docs/readthedocs/models/input/participant/thermalhouse.rst @@ -5,29 +5,52 @@ Thermal House Model Model for the thermal behaviour of a building. This reflects a simple shoe box with transmission losses -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+-----------------------+---------+---------------------------------+ -| Attribute | Unit | Remarks | -+=======================+=========+=================================+ -| uuid | -- | | -+-----------------------+---------+---------------------------------+ -| id | -- | Human readable identifier | -+-----------------------+---------+---------------------------------+ -| operator | -- | | -+-----------------------+---------+---------------------------------+ -| operationTime | -- | Timely restriction of operation | -+-----------------------+---------+---------------------------------+ -| ethLosses | kW / K | Thermal losses | -+-----------------------+---------+---------------------------------+ -| ethCapa | kWh / K | Thermal capacity | -+-----------------------+---------+---------------------------------+ -| targetTemperature | °C | Desired target temperature | -+-----------------------+---------+---------------------------------+ -| upperTemperatureLimit | °C | Upper temperature boundary | -+-----------------------+---------+---------------------------------+ -| lowerTemperatureLimit | °C | Lower temperature boundary | -+-----------------------+---------+---------------------------------+ + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - ethLosses + - kW / K + - Thermal losses + + * - ethCapa + - kWh / K + - Thermal capacity + + * - targetTemperature + - °C + - Desired target temperature + + * - upperTemperatureLimit + - °C + - Upper temperature boundary + + * - lowerTemperatureLimit + - °C + - Lower temperature boundary + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/input/participant/wec.rst b/docs/readthedocs/models/input/participant/wec.rst index d0769d92e..6a0b40cd7 100644 --- a/docs/readthedocs/models/input/participant/wec.rst +++ b/docs/readthedocs/models/input/participant/wec.rst @@ -4,60 +4,107 @@ Wind Energy Converter --------------------- Model of a wind energy converter. -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+------------------+---------+----------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================+ -| uuid | -- | | -+------------------+---------+----------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+----------------------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+------------------+---------+----------------------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+------------------+---------+----------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+----------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+----------------------------------------------------------------------+ -| cpCharacteristic | -- | Wind velocity dependent :ref:`Betz factors`. | -+------------------+---------+----------------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+------------------+---------+----------------------------------------------------------------------+ -| rotorArea | m² | Area the rotor covers | -+------------------+---------+----------------------------------------------------------------------+ -| hubHeight | m | Height of the rotor hub | -+------------------+---------+----------------------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ + +.. list-table:: Type Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - sRated + - kVA + - Rated apparent power + + * - cosphiRated + - -- + - Rated power factor + + * - cpCharacteristic + - -- + - Wind velocity dependent :ref:`Betz factors`. + + * - etaConv + - % + - Efficiency of the assets inverter + + * - rotorArea + - m² + - Area the rotor covers + + * - hubHeight + - m + - Height of the rotor hub + + + +.. list-table:: Entity Model + :widths: auto + :header-rows: 1 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow + + * - type + - -- + - + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + + * - em + - -- + - | UUID reference to an :ref:`Energy Management Unit` that is controlling + | this system participant. Field can be empty or missing, if this participant + | is not controlled. + Caveats ^^^^^^^ diff --git a/docs/readthedocs/models/models.md b/docs/readthedocs/models/models.md index c0e70ab78..b6043f8e1 100644 --- a/docs/readthedocs/models/models.md +++ b/docs/readthedocs/models/models.md @@ -135,6 +135,7 @@ input/participant/wec input/participant/thermalbus input/participant/thermalhouse input/participant/cylindricalstorage +input/participant/em ``` ### Additional Data From 3cc295c738929bd059ef16344c9ed5a2524573ac Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 13:44:16 +0100 Subject: [PATCH 085/228] Removed unused import --- .../edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index 6dfbbe157..d4a1b5255 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -7,7 +7,6 @@ import static edu.ie3.datamodel.io.source.sql.SqlDataSource.createBaseQueryString; -import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.factory.SimpleFactoryData; import edu.ie3.datamodel.io.factory.timeseries.SqlIdCoordinateFactory; From 1bdc06fce33c939991b9cbfa0814022b9f345262 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 14:47:57 +0100 Subject: [PATCH 086/228] Adapted to changes in dev --- .../edu/ie3/datamodel/io/source/EnergyManagementSource.java | 5 +++++ .../edu/ie3/datamodel/io/source/SystemParticipantSource.java | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index 51e120b1f..b0770517d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -26,6 +26,11 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { this.emInputFactory = new EmInputFactory(); } + @Override + public void validate() { + validate(EmInput.class, emInputFactory); + } + /** * Returns a unique set of {@link EmInput} instances. * diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index 64776bbe5..a29a45b1c 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -87,7 +87,6 @@ public void validate() { validate(StorageInput.class, storageInputFactory); validate(WecInput.class, wecInputFactory); validate(EvcsInput.class, evcsInputFactory); - validate(EmInput.class, emInputFactory); } /** From e50da82b4251fde7ae27106eebb9690f8dc2c0fd Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 15:09:18 +0100 Subject: [PATCH 087/228] Headline check is now obsolete --- .../edu/ie3/datamodel/io/source/csv/CsvDataSource.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index ea39eac0a..24264e058 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -305,13 +305,6 @@ protected Stream> buildStreamWithFieldsToAttributesMap( try (BufferedReader reader = bufferedReader) { final String[] headline = parseCsvRow(reader.readLine(), csvSep); - // sanity check for headline - if (!Arrays.asList(headline).contains("uuid")) { - throw new SourceException( - "The first line does not contain a field named 'uuid'. Is the headline valid?\nProvided headline: " - + String.join(", ", headline)); - } - // by default try-with-resources closes the reader directly when we leave this method (which // is wanted to avoid a lock on the file), but this causes a closing of the stream as well. // As we still want to consume the data at other places, we start a new stream instead of @@ -324,9 +317,6 @@ protected Stream> buildStreamWithFieldsToAttributesMap( } catch (IOException e) { log.warn( "Cannot read file to build entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); - } catch (SourceException e) { - log.error( - "Cannot read file to build entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); } return Stream.empty(); From d210341cb5ab303af48c1ab97af31a94ae28f65a Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 15:22:59 +0100 Subject: [PATCH 088/228] Removing unnecessary parameters --- .../edu/ie3/datamodel/io/connectors/CouchbaseConnector.java | 2 +- .../java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java | 2 +- .../datamodel/io/source/couchbase/CouchbaseWeatherSource.java | 2 +- .../ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java index 2f15783ab..ffeaf86fb 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CouchbaseConnector.java @@ -62,7 +62,7 @@ public CouchbaseConnector( /** Returns the option for a set of found fields. */ @SuppressWarnings("unchecked") - public Optional> getSourceFields(Class entityClass) { + public Optional> getSourceFields() { String query = "SELECT ARRAY_DISTINCT(ARRAY_AGG(v)) AS column FROM " + bucketName diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java index 079d36922..f96fb621a 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/InfluxDbConnector.java @@ -110,7 +110,7 @@ public InfluxDbConnector(String url, String databaseName) { } /** Returns the option for fields found in the source. */ - public Optional> getSourceFields(Class entityClass) { + public Optional> getSourceFields() { QueryResult tagKeys = session.query(new Query("SHOW TAG KEYS ON " + databaseName)); Map>> tagResults = parseQueryResult(tagKeys); diff --git a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java index 257acc678..2c90d04f8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java @@ -101,7 +101,7 @@ public CouchbaseWeatherSource( @Override public Optional> getSourceFields(Class entityClass) { - return connector.getSourceFields(entityClass); + return connector.getSourceFields(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java index 464e26f32..4822038f8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java @@ -57,7 +57,7 @@ public InfluxDbWeatherSource( @Override public Optional> getSourceFields(Class entityClass) { - return connector.getSourceFields(entityClass); + return connector.getSourceFields(); } @Override From 82249ef2b3583c342a22a2c64e1b1cf792cfd17e Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 15:30:53 +0100 Subject: [PATCH 089/228] Better JavaDoc --- src/main/java/edu/ie3/datamodel/io/factory/Factory.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index e3c4fc67e..46fe5c9df 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -111,7 +111,8 @@ private void isSupportedClass(Class desiredClass) { /** * Method to find and return additional fields that were found in a source. This method will - * return the additional fields that were found in the valid set with the least additional fields. + * return the minimal additional fields among all field sets, meaning that the set of actual + * fields is compared to the field set with the least additional fields. * * @param actualFields found in the source * @param validFieldSets that contains at least all fields found in the source From cf15f4d5fde1d6de29d742f44d48745ef8f3b468 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 15:31:04 +0100 Subject: [PATCH 090/228] Additional test case --- .../datamodel/io/factory/FactoryTest.groovy | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy index e7dc42212..b4706008b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy @@ -44,6 +44,27 @@ class FactoryTest extends Specification { ["uuid", "value_1", "value_3"] as Set, ["id", "time", "value_1"] as Set ] | ["id", "time", "value_2"] + [ + "uuid", + "id", + "time", + "value_1" + ] | [ + [ + "uuid", + "id", + "time", + "value_1", + "value_2" + ] as Set, + [ + "uuid", + "id", + "time", + "value_1", + "value_3" + ] as Set + ] | [] } def "A Factory should allow additional fields"() { From 18429bc36e2daabfa66961bff069f9e5dc4a3c38 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 15:34:48 +0100 Subject: [PATCH 091/228] Renaming method, since "additional fields" already exist with a different meaning --- .../edu/ie3/datamodel/io/factory/Factory.java | 16 ++++++++-------- .../ie3/datamodel/io/factory/FactoryTest.groovy | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index 46fe5c9df..8b67974ae 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -110,15 +110,15 @@ private void isSupportedClass(Class desiredClass) { protected abstract List> getFields(Class entityClass); /** - * Method to find and return additional fields that were found in a source. This method will - * return the minimal additional fields among all field sets, meaning that the set of actual - * fields is compared to the field set with the least additional fields. + * Method to find and return additional fields that were found in a source and are not used by the + * data model. This method will return the minimal unused fields among all field sets, meaning + * that the set of actual fields is compared to the field set with the least unused fields. * * @param actualFields found in the source * @param validFieldSets that contains at least all fields found in the source - * @return a set of additional fields + * @return a set of unused fields */ - protected Set getAdditionalFields( + protected Set getUnusedFields( Set actualFields, List> validFieldSets) { // checking for additional fields // and returning the set with the least additional fields @@ -172,13 +172,13 @@ public Try validate( + "' are possible (NOT case-sensitive!):\n" + possibleOptions)); } else { - Set additionalFields = getAdditionalFields(harmonizedFoundFields, validFieldSets); + Set unused = getUnusedFields(harmonizedFoundFields, validFieldSets); - if (!additionalFields.isEmpty()) { + if (!unused.isEmpty()) { log.debug( "The following additional fields were found for entity class of '{}': {}", entityClass.getSimpleName(), - additionalFields); + unused); } return Success.empty(); diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy index b4706008b..cfb943f9a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy @@ -15,12 +15,12 @@ class FactoryTest extends Specification { private DummyFactory factory = new DummyFactory(String) - def "A Factory can return additional fields correctly"() { + def "A Factory can return unused fields correctly"() { when: - def additional = factory.getAdditionalFields(actualFields as Set, validFieldSets) + def unused = factory.getUnusedFields(actualFields as Set, validFieldSets) then: - additional == expected as Set + unused == expected as Set where: actualFields | validFieldSets | expected From 84695c89ef7d3816433e9f0eb6c90475e5aa9c99 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 4 Jan 2024 15:42:09 +0100 Subject: [PATCH 092/228] found fields -> actual fields Making newSet and expandSet static --- .../edu/ie3/datamodel/io/factory/Factory.java | 20 +++++++++---------- .../datamodel/io/source/SourceValidator.java | 4 ++-- .../datamodel/io/factory/FactoryTest.groovy | 6 +++--- .../input/AssetInputEntityFactoryTest.groovy | 4 ++-- .../FixedFeedInInputFactoryTest.groovy | 4 ++-- .../FlexOptionsResultFactoryTest.groovy | 4 ++-- .../result/NodeResultFactoryTest.groovy | 4 ++-- .../SystemParticipantResultFactoryTest.groovy | 4 ++-- .../CosmoIdCoordinateFactoryTest.groovy | 6 ++---- .../IconIdCoordinateFactoryTest.groovy | 4 ++-- ...stemParticipantTypeInputFactoryTest.groovy | 4 ++-- 11 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index 8b67974ae..a19fd0813 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -134,10 +134,10 @@ protected Set getUnusedFields( } /** - * Method for validating the found fields. The found fields needs to fully contain at least one of - * the sets returned by {@link #getFields(Class)}. If the found fields don't contain all necessary - * fields, an {@link FactoryException} with a detail message is thrown. If the found fields - * contain more fields than necessary, these fields are ignored. + * Method for validating the actual fields. The actual fields need to fully contain at least one + * of the sets returned by {@link #getFields(Class)}. If the actual fields don't contain all + * necessary fields, an {@link FactoryException} with a detail message is thrown. If the actual + * fields contain more fields than necessary, these fields are ignored. * * @param actualFields that were found * @param entityClass of the build data @@ -146,14 +146,14 @@ protected Set getUnusedFields( public Try validate( Set actualFields, Class entityClass) { List> fieldSets = getFields(entityClass); - Set harmonizedFoundFields = toCamelCase(actualFields); + Set harmonizedActualFields = toCamelCase(actualFields); - // comparing the found fields to a list of possible fields (allows additional fields) + // comparing the actual fields to a list of possible fields (allows additional fields) // if not all fields were found in a set, this set is filtered out // all other fields are saved as a list // allows snake, camel and mixed cases List> validFieldSets = - fieldSets.stream().filter(harmonizedFoundFields::containsAll).toList(); + fieldSets.stream().filter(harmonizedActualFields::containsAll).toList(); if (validFieldSets.isEmpty()) { // build the exception string with extensive debug information @@ -172,7 +172,7 @@ public Try validate( + "' are possible (NOT case-sensitive!):\n" + possibleOptions)); } else { - Set unused = getUnusedFields(harmonizedFoundFields, validFieldSets); + Set unused = getUnusedFields(harmonizedActualFields, validFieldSets); if (!unused.isEmpty()) { log.debug( @@ -208,7 +208,7 @@ protected static StringBuilder getFieldsString(List> fieldSets) { * @param attributes attribute names * @return new set exactly containing attribute names */ - protected TreeSet newSet(String... attributes) { + protected static TreeSet newSet(String... attributes) { TreeSet set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); set.addAll(Arrays.asList(attributes)); return set; @@ -223,7 +223,7 @@ protected TreeSet newSet(String... attributes) { * @param more attribute names to expand given set with * @return new set exactly containing given attribute set plus additional attributes */ - protected TreeSet expandSet(Set attributeSet, String... more) { + protected static TreeSet expandSet(Set attributeSet, String... more) { TreeSet newSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); newSet.addAll(attributeSet); newSet.addAll(Arrays.asList(more)); diff --git a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java index 4c932c7c5..650fdf2b8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java @@ -15,9 +15,9 @@ public interface SourceValidator { /** * Method for validating a data source. * - * @param foundFields fields that were found in the source data + * @param actualFields fields that were found in the source data * @param entityClass that should be buildable from the source data * @return either an exception wrapped by a {@link Failure} or an empty success */ - Try validate(Set foundFields, Class entityClass); + Try validate(Set actualFields, Class entityClass); } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy index cfb943f9a..38cb82ac7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy @@ -69,13 +69,13 @@ class FactoryTest extends Specification { def "A Factory should allow additional fields"() { given: - def foundFields = factory.newSet("uuid", "id", "time", "value_1", "value_2", "value_3") + def actualFields = DummyFactory.newSet("uuid", "id", "time", "value_1", "value_2", "value_3") when: - Try input = Try.ofVoid(() -> factory.validate(foundFields, String), FactoryException) + def result = Try.ofVoid(() -> factory.validate(actualFields, String), FactoryException) then: - input.success + result.success } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy index b2255e6bc..b460b909a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/AssetInputEntityFactoryTest.groovy @@ -277,10 +277,10 @@ class AssetInputEntityFactoryTest extends Specification implements FactoryTestHe def "An AssetInputFactory should throw an exception on invalid or incomplete fields"() { given: def inputFactory = new TestAssetInputFactory() - def foundFields = inputFactory.newSet("uuid", "operates_from", "operates_until") + def actualFields = TestAssetInputFactory.newSet("uuid", "operates_from", "operates_until") when: - Try input = inputFactory.validate(foundFields, TestAssetInput) + Try input = inputFactory.validate(actualFields, TestAssetInput) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy index 0447a0333..9a3701d58 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy @@ -76,10 +76,10 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe def "A FixedFeedInInputFactory should throw an exception on invalid or incomplete data fields"() { given: def inputFactory = new FixedFeedInInputFactory() - def foundFields = inputFactory.newSet("uuid", "id", "s_rated", "cosphi_rated") + def actualFields = FixedFeedInInputFactory.newSet("uuid", "id", "s_rated", "cosphi_rated") when: - Try input = inputFactory.validate(foundFields, FixedFeedInInput) + Try input = inputFactory.validate(actualFields, FixedFeedInInput) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy index 62d414823..a4ff4b386 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/FlexOptionsResultFactoryTest.groovy @@ -53,10 +53,10 @@ class FlexOptionsResultFactoryTest extends Specification implements FactoryTestH def "A FlexOptionsResultFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def resultFactory = new FlexOptionsResultFactory() - def foundFields = resultFactory.newSet("time", "input_model", "p_ref", "p_min") + def actualFields = FlexOptionsResultFactory.newSet("time", "input_model", "p_ref", "p_min") when: - Try input = resultFactory.validate(foundFields, FlexOptionsResult) + Try input = resultFactory.validate(actualFields, FlexOptionsResult) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy index 400126349..ef97cfece 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/NodeResultFactoryTest.groovy @@ -51,10 +51,10 @@ class NodeResultFactoryTest extends Specification implements FactoryTestHelper { def "A NodeResultFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def resultFactory = new NodeResultFactory() - def foundFields = resultFactory.newSet("time", "input_model", "v_mag") + def actualFields = NodeResultFactory.newSet("time", "input_model", "v_mag") when: - Try input = resultFactory.validate(foundFields, NodeResult) + Try input = resultFactory.validate(actualFields, NodeResult) then: input.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy index 416e03eb0..c6c38c189 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/result/SystemParticipantResultFactoryTest.groovy @@ -127,10 +127,10 @@ class SystemParticipantResultFactoryTest extends Specification implements Factor def "A SystemParticipantResultFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def resultFactory = new SystemParticipantResultFactory() - def foundFields = resultFactory.newSet("time", "input_model", "q") + def actualFields = SystemParticipantResultFactory.newSet("time", "input_model", "q") when: - Try result = resultFactory.validate(foundFields, WecResult) + Try result = resultFactory.validate(actualFields, WecResult) then: result.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy index 1f0b9deaa..8b871b983 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/CosmoIdCoordinateFactoryTest.groovy @@ -5,9 +5,7 @@ */ package edu.ie3.datamodel.io.factory.timeseries -import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.SimpleFactoryData -import edu.ie3.datamodel.utils.Try import edu.ie3.util.geo.GeoUtils import org.apache.commons.lang3.tuple.Pair import org.locationtech.jts.geom.Point @@ -43,10 +41,10 @@ class CosmoIdCoordinateFactoryTest extends Specification { def "A COSMO id to coordinate factory refuses to build from invalid data"() { given: - def foundFields = factory.newSet("tid", "id", "latrot", "longrot") + def actualFields = CosmoIdCoordinateFactory.newSet("tid", "id", "latrot", "longrot") when: - def actual = factory.validate(foundFields, Pair) + def actual = factory.validate(actualFields, Pair) then: actual.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index e5e5e0b34..0fe4ee9c5 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -41,10 +41,10 @@ class IconIdCoordinateFactoryTest extends Specification { def "A COSMO id to coordinate factory refuses to build from invalid data"() { given: - def foundFields = factory.newSet("id", "latitude", "coordinatetype") + def actualFields = IconIdCoordinateFactory.newSet("id", "latitude", "coordinatetype") when: - def actual = factory.validate(foundFields, Pair) + def actual = factory.validate(actualFields, Pair) then: actual.failure diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy index 0e5ba8071..77520cf32 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactoryTest.groovy @@ -280,10 +280,10 @@ class SystemParticipantTypeInputFactoryTest extends Specification implements Fac def "A SystemParticipantTypeInputFactory should throw an exception on invalid or incomplete data"() { given: "a system participant factory and model data" def typeInputFactory = new SystemParticipantTypeInputFactory() - def foundFields = typeInputFactory.newSet("uuid", "id", "capex", "opex", "srated", "cosPhiRated", "estorage", "pmin", "pmax", "eta", "dod", "lifetime",) + def actualFields = SystemParticipantTypeInputFactory.newSet("uuid", "id", "capex", "opex", "srated", "cosPhiRated", "estorage", "pmin", "pmax", "eta", "dod", "lifetime",) when: - def input = typeInputFactory.validate(foundFields, StorageTypeInput) + def input = typeInputFactory.validate(actualFields, StorageTypeInput) then: input.failure From 721bbad8129a1eeb2f2b37c3a54672b5ed0273e3 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 5 Jan 2024 14:07:26 +0100 Subject: [PATCH 093/228] Refactoring validation handling Making column name retrieval throw exception on read failure + test --- .../exceptions/FailedValidationException.java | 4 ++ .../exceptions/ValidationException.java | 4 ++ .../io/connectors/CsvFileConnector.java | 26 ++++----- .../edu/ie3/datamodel/io/factory/Factory.java | 6 +- .../ie3/datamodel/io/source/DataSource.java | 4 +- .../io/source/EnergyManagementSource.java | 5 +- .../ie3/datamodel/io/source/EntitySource.java | 23 ++++++-- .../datamodel/io/source/GraphicSource.java | 13 ++++- .../io/source/IdCoordinateSource.java | 3 +- .../datamodel/io/source/RawGridSource.java | 23 ++++---- .../io/source/ResultEntitySource.java | 58 ++++++++++++------- .../datamodel/io/source/SourceValidator.java | 4 +- .../io/source/SystemParticipantSource.java | 31 +++++----- .../datamodel/io/source/ThermalSource.java | 17 +++--- .../ie3/datamodel/io/source/TypeSource.java | 41 ++++++++----- .../datamodel/io/source/WeatherSource.java | 2 +- .../couchbase/CouchbaseWeatherSource.java | 22 +++++-- .../io/source/csv/CsvDataSource.java | 24 +++++--- .../io/source/csv/CsvIdCoordinateSource.java | 20 +++---- .../csv/CsvJointGridContainerSource.java | 13 +++-- .../csv/CsvTimeSeriesMappingSource.java | 13 ++++- .../io/source/csv/CsvWeatherSource.java | 6 +- .../influxdb/InfluxDbWeatherSource.java | 17 +++++- .../io/source/sql/SqlDataSource.java | 24 ++------ .../io/source/sql/SqlIdCoordinateSource.java | 18 +++++- .../sql/SqlTimeSeriesMappingSource.java | 13 ++++- .../io/source/sql/SqlTimeSeriesSource.java | 22 +++++-- .../io/source/sql/SqlWeatherSource.java | 17 +++++- .../io/source/EntitySourceTest.groovy | 3 +- .../io/source/csv/CsvDataSourceTest.groovy | 50 +++++++++++++++- 30 files changed, 358 insertions(+), 168 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/exceptions/FailedValidationException.java b/src/main/java/edu/ie3/datamodel/exceptions/FailedValidationException.java index 0fc60cd13..b1cc6386b 100644 --- a/src/main/java/edu/ie3/datamodel/exceptions/FailedValidationException.java +++ b/src/main/java/edu/ie3/datamodel/exceptions/FailedValidationException.java @@ -13,6 +13,10 @@ public FailedValidationException(String message, Throwable throwable) { super(message, throwable); } + public FailedValidationException(Throwable throwable) { + super(throwable); + } + public FailedValidationException(String message) { super(message); } diff --git a/src/main/java/edu/ie3/datamodel/exceptions/ValidationException.java b/src/main/java/edu/ie3/datamodel/exceptions/ValidationException.java index e74d70696..22eaa2ad0 100644 --- a/src/main/java/edu/ie3/datamodel/exceptions/ValidationException.java +++ b/src/main/java/edu/ie3/datamodel/exceptions/ValidationException.java @@ -10,6 +10,10 @@ protected ValidationException(String s) { super(s); } + protected ValidationException(Throwable throwable) { + super(throwable); + } + protected ValidationException(String s, Throwable throwable) { super(s, throwable); } diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index 71147a7db..30fd3bdea 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -168,28 +168,22 @@ public synchronized void closeEntityWriter(Class clz */ public BufferedReader initReader(Class clz) throws FileNotFoundException, ConnectorException { - try { - Path filePath = - fileNamingStrategy - .getFilePath(clz) - .orElseThrow( - () -> - new ConnectorException( - "Cannot find a naming strategy for class '" - + clz.getSimpleName() - + "'.")); - return initReader(filePath); - } catch (ConnectorException e) { - throw new ConnectorException( - "Cannot initialize reader for entity '" + clz.getSimpleName() + "'.", e); - } + Path filePath = + fileNamingStrategy + .getFilePath(clz) + .orElseThrow( + () -> + new ConnectorException( + "Cannot find a naming strategy for class '" + clz.getSimpleName() + "'.")); + return initReader(filePath); } /** * Initializes a file reader for the given file name. Use {@link * CsvFileConnector#initReader(Class)} for files that actually correspond to concrete entities. * - * @param filePath sub directory tree starting from base folder, including file name + * @param filePath path of file starting from base folder, including file name but not file + * extension * @return the reader that contains information about the file to be read in * @throws FileNotFoundException if no file with the provided file name can be found */ diff --git a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java index a19fd0813..9daff0c2d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/Factory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/Factory.java @@ -6,6 +6,8 @@ package edu.ie3.datamodel.io.factory; import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.exceptions.FailedValidationException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.source.SourceValidator; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; @@ -143,7 +145,7 @@ protected Set getUnusedFields( * @param entityClass of the build data * @return either an exception wrapped by a {@link Failure} or an empty success */ - public Try validate( + public Try validate( Set actualFields, Class entityClass) { List> fieldSets = getFields(entityClass); Set harmonizedActualFields = toCamelCase(actualFields); @@ -162,7 +164,7 @@ public Try validate( String possibleOptions = getFieldsString(fieldSets).toString(); return Failure.of( - new FactoryException( + new FailedValidationException( "The provided fields " + providedKeysString + " are invalid for instance of '" diff --git a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java index 7fb36eb8f..effc82935 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.models.UniqueEntity; import java.util.*; import java.util.stream.Stream; @@ -18,7 +19,8 @@ public interface DataSource { * @param entityClass class of the source * @return an option for the found fields */ - Optional> getSourceFields(Class entityClass); + Optional> getSourceFields(Class entityClass) + throws SourceException; /** Creates a stream of maps that represent the rows in the database */ Stream> getSourceData(Class entityClass); diff --git a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java index b0770517d..e3cd6de8a 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EnergyManagementSource.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.source; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.factory.input.participant.EmInputFactory; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.container.EnergyManagementUnits; @@ -27,8 +28,8 @@ public EnergyManagementSource(TypeSource typeSource, DataSource dataSource) { } @Override - public void validate() { - validate(EmInput.class, emInputFactory); + public void validate() throws ValidationException { + validate(EmInput.class, emInputFactory).getOrThrow(); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index 71373bbfc..cf42a6f7e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -6,7 +6,9 @@ package edu.ie3.datamodel.io.source; import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.exceptions.FailedValidationException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.SimpleEntityData; import edu.ie3.datamodel.io.factory.input.AssetInputEntityData; @@ -39,7 +41,7 @@ public abstract class EntitySource { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - public abstract void validate(); + public abstract void validate() throws ValidationException; /** * Method for validating a single source. @@ -48,11 +50,22 @@ public abstract class EntitySource { * @param validator used to validate * @param type of the class */ - protected final void validate( + protected final Try validate( Class entityClass, SourceValidator validator) { - dataSource - .getSourceFields(entityClass) - .ifPresent(s -> validator.validate(s, entityClass).getOrThrow()); + return Try.of(() -> dataSource.getSourceFields(entityClass), SourceException.class) + .transformF( + se -> + (ValidationException) + new FailedValidationException( + "Validation for entity " + + entityClass + + " failed because of an error related to its source.", + se)) + .flatMap( + fieldsOpt -> + fieldsOpt + .map(fields -> validator.validate(fields, entityClass)) + .orElse(Try.Success.empty())); } protected String buildSkippingMessage( diff --git a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java index 4d8a577d5..8f24b3e2b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/GraphicSource.java @@ -5,8 +5,10 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.FailedValidationException; import edu.ie3.datamodel.exceptions.GraphicSourceException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputEntityData; import edu.ie3.datamodel.io.factory.input.graphics.LineGraphicInputFactory; import edu.ie3.datamodel.io.factory.input.graphics.NodeGraphicInputEntityData; @@ -51,9 +53,14 @@ public GraphicSource(TypeSource typeSource, RawGridSource rawGridSource, DataSou } @Override - public void validate() { - validate(NodeGraphicInput.class, nodeGraphicInputFactory); - validate(LineGraphicInput.class, lineGraphicInputFactory); + public void validate() throws ValidationException { + Try.scanStream( + Stream.of( + validate(NodeGraphicInput.class, nodeGraphicInputFactory), + validate(LineGraphicInput.class, lineGraphicInputFactory)), + "Validation") + .transformF(FailedValidationException::new) + .getOrThrow(); } /** Returns the graphic elements of the grid or throws a {@link SourceException} */ diff --git a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java index f9b3768db..755a33875 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.util.geo.CoordinateDistance; import edu.ie3.util.geo.GeoUtils; import java.util.*; @@ -25,7 +26,7 @@ public interface IdCoordinateSource { * @param entityClass class of the source * @return an option for the found fields */ - Optional> getSourceFields(Class entityClass); + Optional> getSourceFields(Class entityClass) throws SourceException; /** * Get the matching coordinate for the given ID diff --git a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java index a32ac1902..04f254b26 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/RawGridSource.java @@ -5,9 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.exceptions.RawGridException; -import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.*; import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.input.*; import edu.ie3.datamodel.models.input.*; @@ -63,13 +61,18 @@ public RawGridSource(TypeSource typeSource, DataSource dataSource) { } @Override - public void validate() { - validate(NodeInput.class, nodeInputFactory); - validate(LineInput.class, lineInputFactory); - validate(Transformer2WInput.class, transformer2WInputFactory); - validate(Transformer3WInput.class, transformer3WInputFactory); - validate(SwitchInput.class, switchInputFactory); - validate(MeasurementUnitInput.class, measurementUnitInputFactory); + public void validate() throws ValidationException { + Try.scanStream( + Stream.of( + validate(NodeInput.class, nodeInputFactory), + validate(LineInput.class, lineInputFactory), + validate(Transformer2WInput.class, transformer2WInputFactory), + validate(Transformer3WInput.class, transformer3WInputFactory), + validate(SwitchInput.class, switchInputFactory), + validate(MeasurementUnitInput.class, measurementUnitInputFactory)), + "Validation") + .transformF(FailedValidationException::new) + .getOrThrow(); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java index b77feb5cc..ca54c0d49 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ResultEntitySource.java @@ -5,6 +5,8 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.FailedValidationException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.factory.SimpleEntityFactory; import edu.ie3.datamodel.io.factory.result.*; import edu.ie3.datamodel.models.result.NodeResult; @@ -16,10 +18,13 @@ import edu.ie3.datamodel.models.result.system.*; import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult; import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult; +import edu.ie3.datamodel.utils.Try; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link ResultEntity} container @@ -62,29 +67,38 @@ public ResultEntitySource(DataSource dataSource, String dtfPattern) { } @Override - public void validate() { - List.of( - LoadResult.class, - FixedFeedInResult.class, - BmResult.class, - PvResult.class, - ChpResult.class, - WecResult.class, - StorageResult.class, - EvcsResult.class, - EvResult.class, - HpResult.class, - EmResult.class) - .forEach(c -> validate(c, systemParticipantResultFactory)); + public void validate() throws ValidationException { + List> participantResults = + new ArrayList<>( + Stream.of( + LoadResult.class, + FixedFeedInResult.class, + BmResult.class, + PvResult.class, + ChpResult.class, + WecResult.class, + StorageResult.class, + EvcsResult.class, + EvResult.class, + HpResult.class, + EmResult.class) + .map(c -> validate(c, systemParticipantResultFactory)) + .toList()); - validate(ThermalHouseResult.class, thermalResultFactory); - validate(CylindricalStorageResult.class, thermalResultFactory); - validate(SwitchResult.class, switchResultFactory); - validate(NodeResult.class, nodeResultFactory); - validate(LineResult.class, connectorResultFactory); - validate(Transformer2WResult.class, connectorResultFactory); - validate(Transformer3WResult.class, connectorResultFactory); - validate(FlexOptionsResult.class, flexOptionsResultFactory); + participantResults.addAll( + List.of( + validate(ThermalHouseResult.class, thermalResultFactory), + validate(CylindricalStorageResult.class, thermalResultFactory), + validate(SwitchResult.class, switchResultFactory), + validate(NodeResult.class, nodeResultFactory), + validate(LineResult.class, connectorResultFactory), + validate(Transformer2WResult.class, connectorResultFactory), + validate(Transformer3WResult.class, connectorResultFactory), + validate(FlexOptionsResult.class, flexOptionsResultFactory))); + + Try.scanCollection(participantResults, Void.class) + .transformF(FailedValidationException::new) + .getOrThrow(); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java index 650fdf2b8..e1c43c89f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SourceValidator.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.Failure; import java.util.Set; @@ -19,5 +19,5 @@ public interface SourceValidator { * @param entityClass that should be buildable from the source data * @return either an exception wrapped by a {@link Failure} or an empty success */ - Try validate(Set actualFields, Class entityClass); + Try validate(Set actualFields, Class entityClass); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java index a29a45b1c..e7d69ac3d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/SystemParticipantSource.java @@ -5,9 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.exceptions.SourceException; -import edu.ie3.datamodel.exceptions.SystemParticipantsException; +import edu.ie3.datamodel.exceptions.*; import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData; import edu.ie3.datamodel.io.factory.input.participant.*; @@ -76,17 +74,22 @@ public SystemParticipantSource( } @Override - public void validate() { - validate(BmInput.class, bmInputFactory); - validate(ChpInput.class, chpInputFactory); - validate(EvInput.class, evInputFactory); - validate(FixedFeedInInput.class, fixedFeedInInputFactory); - validate(HpInput.class, hpInputFactory); - validate(LoadInput.class, loadInputFactory); - validate(PvInput.class, pvInputFactory); - validate(StorageInput.class, storageInputFactory); - validate(WecInput.class, wecInputFactory); - validate(EvcsInput.class, evcsInputFactory); + public void validate() throws ValidationException { + Try.scanStream( + Stream.of( + validate(BmInput.class, bmInputFactory), + validate(ChpInput.class, chpInputFactory), + validate(EvInput.class, evInputFactory), + validate(FixedFeedInInput.class, fixedFeedInInputFactory), + validate(HpInput.class, hpInputFactory), + validate(LoadInput.class, loadInputFactory), + validate(PvInput.class, pvInputFactory), + validate(StorageInput.class, storageInputFactory), + validate(WecInput.class, wecInputFactory), + validate(EvcsInput.class, evcsInputFactory)), + "Validation") + .transformF(FailedValidationException::new) + .getOrThrow(); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java index 385629564..c8e9cd77b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/ThermalSource.java @@ -5,9 +5,7 @@ */ package edu.ie3.datamodel.io.source; -import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.exceptions.FailureException; -import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.*; import edu.ie3.datamodel.io.factory.input.*; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; @@ -47,10 +45,15 @@ public ThermalSource(TypeSource typeSource, DataSource dataSource) { } @Override - public void validate() { - validate(ThermalBusInput.class, thermalBusInputFactory); - validate(CylindricalStorageInput.class, cylindricalStorageInputFactory); - validate(ThermalHouseInput.class, thermalHouseInputFactory); + public void validate() throws ValidationException { + Try.scanStream( + Stream.of( + validate(ThermalBusInput.class, thermalBusInputFactory), + validate(CylindricalStorageInput.class, cylindricalStorageInputFactory), + validate(ThermalHouseInput.class, thermalHouseInputFactory)), + "Validation") + .transformF(FailedValidationException::new) + .getOrThrow(); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java index b8420c364..e0c8b2d96 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TypeSource.java @@ -5,7 +5,9 @@ */ package edu.ie3.datamodel.io.source; +import edu.ie3.datamodel.exceptions.FailedValidationException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.factory.input.OperatorInputFactory; import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory; import edu.ie3.datamodel.io.factory.typeinput.SystemParticipantTypeInputFactory; @@ -17,8 +19,10 @@ import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.utils.Try; +import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.stream.Stream; /** * Interface that provides the capability to build entities of type {@link @@ -47,20 +51,29 @@ public TypeSource(DataSource dataSource) { } @Override - public void validate() { - validate(OperatorInput.class, operatorInputFactory); - validate(LineTypeInput.class, lineTypeInputFactory); - validate(Transformer2WTypeInput.class, transformer2WTypeInputFactory); - validate(Transformer3WTypeInput.class, transformer3WTypeInputFactory); - - List.of( - EvTypeInput.class, - HpTypeInput.class, - BmTypeInput.class, - WecTypeInput.class, - ChpTypeInput.class, - StorageTypeInput.class) - .forEach(c -> validate(c, systemParticipantTypeInputFactory)); + public void validate() throws ValidationException { + List> participantResults = + new ArrayList<>( + Stream.of( + EvTypeInput.class, + HpTypeInput.class, + BmTypeInput.class, + WecTypeInput.class, + ChpTypeInput.class, + StorageTypeInput.class) + .map(c -> validate(c, systemParticipantTypeInputFactory)) + .toList()); + + participantResults.addAll( + List.of( + validate(OperatorInput.class, operatorInputFactory), + validate(LineTypeInput.class, lineTypeInputFactory), + validate(Transformer2WTypeInput.class, transformer2WTypeInputFactory), + validate(Transformer3WTypeInput.class, transformer3WTypeInputFactory))); + + Try.scanCollection(participantResults, Void.class) + .transformF(FailedValidationException::new) + .getOrThrow(); } /** diff --git a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java index bb579a90c..990c43db7 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java @@ -47,7 +47,7 @@ protected WeatherSource( * @return an option for fields found in the source */ public abstract Optional> getSourceFields( - Class entityClass); + Class entityClass) throws SourceException; // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- diff --git a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java index 2c90d04f8..5f48a9666 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSource.java @@ -10,6 +10,7 @@ import com.couchbase.client.java.json.JsonObject; import com.couchbase.client.java.kv.GetResult; import com.couchbase.client.java.query.QueryResult; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.CouchbaseConnector; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory; @@ -18,6 +19,7 @@ import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries; import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.WeatherValue; +import edu.ie3.datamodel.utils.Try; import edu.ie3.util.interval.ClosedInterval; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; @@ -59,7 +61,8 @@ public CouchbaseWeatherSource( IdCoordinateSource coordinateSource, String coordinateIdColumnName, TimeBasedWeatherValueFactory weatherFactory, - String timeStampPattern) { + String timeStampPattern) + throws SourceException { this( connector, coordinateSource, @@ -88,15 +91,26 @@ public CouchbaseWeatherSource( String coordinateIdColumnName, String keyPrefix, TimeBasedWeatherValueFactory weatherFactory, - String timeStampPattern) { + String timeStampPattern) + throws SourceException { super(idCoordinateSource, weatherFactory); this.connector = connector; this.coordinateIdColumnName = coordinateIdColumnName; this.keyPrefix = keyPrefix; this.timeStampPattern = timeStampPattern; - getSourceFields(WeatherValue.class) - .ifPresent(s -> weatherFactory.validate(s, WeatherValue.class).getOrThrow()); + // validating + Try.of(() -> getSourceFields(WeatherValue.class), SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + weatherFactory + .validate(fields, WeatherValue.class) + .transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index 24264e058..ebe351eda 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -59,19 +59,29 @@ public CsvDataSource(String csvSep, Path folderPath, FileNamingStrategy fileNami } @Override - public Optional> getSourceFields(Class entityClass) { - try (BufferedReader reader = connector.initReader(entityClass)) { + public Optional> getSourceFields(Class entityClass) + throws SourceException { + return getSourceFields(() -> connector.initReader(entityClass)); + } + + public Optional> getSourceFields(ReaderSupplier readerSupplier) + throws SourceException { + try (BufferedReader reader = readerSupplier.get()) { return Optional.of( Arrays.stream(parseCsvRow(reader.readLine(), csvSep)).collect(Collectors.toSet())); - } catch (ConnectorException | IOException e) { - log.warn( - "The source for the entity '{}' couldn't be read and therefore not be validated! Cause: {}", - entityClass, - e.getMessage()); + } catch (FileNotFoundException e) { + // A file not existing can be acceptable in many cases, and is handled elsewhere. + log.debug("The source for the given entity couldn't be found! Cause: {}", e.getMessage()); return Optional.empty(); + } catch (ConnectorException | IOException e) { + throw new SourceException("Error while trying to read source", e); } } + public interface ReaderSupplier { + BufferedReader get() throws FileNotFoundException, ConnectorException; + } + @Override public Stream> getSourceData(Class entityClass) { return buildStreamWithFieldsToAttributesMap(entityClass, connector); diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index 05db85a0a..69609e641 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.source.csv; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.factory.SimpleFactoryData; import edu.ie3.datamodel.io.factory.timeseries.IdCoordinateFactory; import edu.ie3.datamodel.io.source.IdCoordinateSource; @@ -87,18 +88,8 @@ private Map invert(Map map) { } @Override - public Optional> getSourceFields(Class entityClass) { - try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { - return Optional.of( - Arrays.stream(dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep)) - .collect(Collectors.toSet())); - } catch (IOException e) { - log.warn( - "The source for the entity '{}' couldn't be read and therefore not be validated!", - entityClass, - e); - return Optional.empty(); - } + public Optional> getSourceFields(Class entityClass) throws SourceException { + return dataSource.getSourceFields(dataSource.connector::initIdCoordinateReader); } @Override @@ -173,7 +164,8 @@ public int getCoordinateCount() { * * @return Stream with mappings from field identifiers to attributes */ - protected Stream> buildStreamWithFieldsToAttributesMap() { + protected Stream> buildStreamWithFieldsToAttributesMap() + throws SourceException { try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); @@ -203,6 +195,8 @@ protected Stream> buildStreamWithFieldsToAttributesMap() { .parallelStream(); } catch (IOException e) { log.error("Cannot read the file for coordinate id to coordinate mapping.", e); + } catch (ValidationException ve) { + throw new SourceException("Creating stream failed due to failed validation", ve); } return Stream.empty(); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java index 013c3a9aa..0eba675f5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvJointGridContainerSource.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.exceptions.FileException; import edu.ie3.datamodel.exceptions.InvalidGridException; import edu.ie3.datamodel.exceptions.SourceException; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.naming.DefaultDirectoryHierarchy; import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; import edu.ie3.datamodel.io.naming.FileNamingStrategy; @@ -51,10 +52,14 @@ public static JointGridContainer read( GraphicSource graphicSource = new GraphicSource(typeSource, rawGridSource, dataSource); /* validating sources */ - typeSource.validate(); - rawGridSource.validate(); - systemParticipantSource.validate(); - graphicSource.validate(); + try { + typeSource.validate(); + rawGridSource.validate(); + systemParticipantSource.validate(); + graphicSource.validate(); + } catch (ValidationException ve) { + throw new SourceException("Could not read source because validation failed", ve); + } /* Loading models */ Try rawGridElements = diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index 7d4244428..ee165ea2d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -8,6 +8,7 @@ import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; +import edu.ie3.datamodel.utils.Try; import java.nio.file.Path; import java.util.Map; import java.util.Optional; @@ -24,7 +25,17 @@ public CsvTimeSeriesMappingSource( this.dataSource = new CsvDataSource(csvSep, gridFolderPath, fileNamingStrategy); // validating - getSourceFields().ifPresent(s -> mappingFactory.validate(s, MappingEntry.class).getOrThrow()); + Try.of(this::getSourceFields, SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + mappingFactory + .validate(fields, MappingEntry.class) + .transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index a246ce024..d3b98c7ee 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source.csv; +import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; @@ -175,13 +176,16 @@ private Map> readWeatherTimeSeries( log.error("Cannot read file {}. File not found!", data.getFullFilePath()); } catch (IOException e) { log.error("Cannot read file {}. Exception: {}", data.getFullFilePath(), e); + } catch (ValidationException ve) { + log.error("Validation failed for file {}. Exception: {}", data.getFullFilePath(), ve); } } return weatherTimeSeries; } private Stream> buildStreamWithFieldsToAttributesMap( - Class entityClass, BufferedReader bufferedReader) { + Class entityClass, BufferedReader bufferedReader) + throws ValidationException { try (BufferedReader reader = bufferedReader) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); diff --git a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java index 4822038f8..c35227155 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/influxdb/InfluxDbWeatherSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source.influxdb; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.InfluxDbConnector; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueData; import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory; @@ -47,12 +48,22 @@ public class InfluxDbWeatherSource extends WeatherSource { public InfluxDbWeatherSource( InfluxDbConnector connector, IdCoordinateSource idCoordinateSource, - TimeBasedWeatherValueFactory weatherValueFactory) { + TimeBasedWeatherValueFactory weatherValueFactory) + throws SourceException { super(idCoordinateSource, weatherValueFactory); this.connector = connector; - getSourceFields(WeatherValue.class) - .ifPresent(s -> weatherValueFactory.validate(s, WeatherValue.class).getOrThrow()); + Try.of(() -> getSourceFields(WeatherValue.class), SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + weatherFactory + .validate(fields, WeatherValue.class) + .transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java index fd5ed3e18..237b09a36 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlDataSource.java @@ -110,25 +110,8 @@ protected List getDbTables(String schemaPattern, String tableNamePattern @Override public Optional> getSourceFields(Class entityClass) { - try { - String tableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); - ResultSet rs = - connector.getConnection().getMetaData().getColumns(null, null, tableName, null); - Set columnNames = new HashSet<>(); - - while (rs.next()) { - String name = rs.getString("COLUMN_NAME"); - columnNames.add(StringUtils.snakeCaseToCamelCase(name)); - } - - return Optional.of(columnNames); - } catch (NoSuchElementException | SQLException e) { - log.warn( - "The source for the entity '{}' couldn't be read and therefore not be validated! Cause: {}", - entityClass, - e.getMessage()); - return Optional.empty(); - } + String tableName = databaseNamingStrategy.getEntityName(entityClass).orElseThrow(); + return getSourceFields(tableName); } /** @@ -149,8 +132,9 @@ public Optional> getSourceFields(String tableName) { } return Optional.of(columnNames); - } catch (NoSuchElementException | SQLException e) { + } catch (SQLException e) { log.warn("The table '{}' couldn't be read and therefore not be validated!", tableName, e); + // FIXME only return empty if table not found. Throw exception if error occurred return Optional.empty(); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index d4a1b5255..8ec23b01f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -7,12 +7,14 @@ import static edu.ie3.datamodel.io.source.sql.SqlDataSource.createBaseQueryString; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.SqlConnector; import edu.ie3.datamodel.io.factory.SimpleFactoryData; import edu.ie3.datamodel.io.factory.timeseries.SqlIdCoordinateFactory; import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.source.IdCoordinateSource; import edu.ie3.datamodel.models.value.CoordinateValue; +import edu.ie3.datamodel.utils.Try; import edu.ie3.util.geo.CoordinateDistance; import edu.ie3.util.geo.GeoUtils; import java.sql.Array; @@ -46,7 +48,8 @@ public class SqlIdCoordinateSource implements IdCoordinateSource { private final SqlIdCoordinateFactory factory; public SqlIdCoordinateSource( - SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) { + SqlIdCoordinateFactory factory, String coordinateTableName, SqlDataSource dataSource) + throws SourceException { this.factory = factory; this.dataSource = dataSource; this.coordinateTableName = coordinateTableName; @@ -56,7 +59,15 @@ public SqlIdCoordinateSource( dataSource.getDbColumnName(factory.getCoordinateField(), coordinateTableName); // validating table - getSourceFields(Pair.class).ifPresent(s -> factory.validate(s, Pair.class).getOrThrow()); + Try.of(() -> getSourceFields(Pair.class), SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + factory.validate(fields, Pair.class).transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); // setup queries this.basicQuery = createBaseQueryString(dataSource.schemaName, coordinateTableName); @@ -81,7 +92,8 @@ public SqlIdCoordinateSource( SqlConnector connector, String schemaName, String coordinateTableName, - SqlIdCoordinateFactory factory) { + SqlIdCoordinateFactory factory) + throws SourceException { this( factory, coordinateTableName, diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java index b5f817058..6b37bd173 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesMappingSource.java @@ -12,6 +12,7 @@ import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy; import edu.ie3.datamodel.io.naming.EntityPersistenceNamingStrategy; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; +import edu.ie3.datamodel.utils.Try; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -37,7 +38,17 @@ public SqlTimeSeriesMappingSource( entityPersistenceNamingStrategy.getEntityName(MappingEntry.class).orElseThrow(); this.queryFull = createBaseQueryString(schemaName, tableName); - getSourceFields().ifPresent(s -> mappingFactory.validate(s, MappingEntry.class).getOrThrow()); + Try.of(this::getSourceFields, SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + mappingFactory + .validate(fields, MappingEntry.class) + .transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java index 8cbffccc5..f3c029aba 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java @@ -18,6 +18,7 @@ import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.Value; import edu.ie3.datamodel.utils.TimeSeriesUtils; +import edu.ie3.datamodel.utils.Try; import edu.ie3.util.interval.ClosedInterval; import java.sql.Timestamp; import java.time.ZonedDateTime; @@ -50,7 +51,8 @@ public SqlTimeSeriesSource( SqlDataSource sqlDataSource, UUID timeSeriesUuid, Class valueClass, - TimeBasedSimpleValueFactory factory) { + TimeBasedSimpleValueFactory factory) + throws SourceException { super(valueClass, factory); this.dataSource = sqlDataSource; @@ -63,9 +65,15 @@ public SqlTimeSeriesSource( final String tableName = sqlDataSource.databaseNamingStrategy.getTimeSeriesEntityName(columnScheme); - dataSource - .getSourceFields(tableName) - .ifPresent(s -> factory.validate(s, valueClass).getOrThrow()); + Try.of(() -> dataSource.getSourceFields(tableName), SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + factory.validate(fields, valueClass).transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); String dbTimeColumnName = sqlDataSource.getDbColumnName(factory.getTimeFieldString(), tableName); @@ -92,7 +100,8 @@ public SqlTimeSeriesSource( DatabaseNamingStrategy namingStrategy, UUID timeSeriesUuid, Class valueClass, - TimeBasedSimpleValueFactory factory) { + TimeBasedSimpleValueFactory factory) + throws SourceException { this( new SqlDataSource(connector, schemaName, namingStrategy), timeSeriesUuid, @@ -134,7 +143,8 @@ private static SqlTimeSeriesSource create( DatabaseNamingStrategy namingStrategy, UUID timeSeriesUuid, Class valClass, - String timePattern) { + String timePattern) + throws SourceException { TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass, timePattern); return new SqlTimeSeriesSource<>( diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java index 6e69d808a..37ac91c2e 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlWeatherSource.java @@ -16,6 +16,7 @@ import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries; import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.WeatherValue; +import edu.ie3.datamodel.utils.Try; import edu.ie3.util.interval.ClosedInterval; import java.sql.*; import java.time.ZonedDateTime; @@ -55,14 +56,24 @@ public SqlWeatherSource( IdCoordinateSource idCoordinateSource, String schemaName, String weatherTableName, - TimeBasedWeatherValueFactory weatherFactory) { + TimeBasedWeatherValueFactory weatherFactory) + throws SourceException { super(idCoordinateSource, weatherFactory); this.factoryCoordinateFieldName = weatherFactory.getCoordinateIdFieldString(); this.dataSource = new SqlDataSource(connector, schemaName, new DatabaseNamingStrategy()); this.tableName = weatherTableName; - getSourceFields(WeatherValue.class) - .ifPresent(s -> weatherFactory.validate(s, WeatherValue.class).getOrThrow()); + Try.of(() -> getSourceFields(WeatherValue.class), SourceException.class) + .flatMap( + fieldsOpt -> + fieldsOpt + .map( + fields -> + weatherFactory + .validate(fields, WeatherValue.class) + .transformF(SourceException::new)) + .orElse(Try.Success.empty())) + .getOrThrow(); String dbTimeColumnName = dataSource.getDbColumnName(weatherFactory.getTimeFieldString(), weatherTableName); diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 507d9fb0e..879d3b29f 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -6,6 +6,7 @@ package edu.ie3.datamodel.io.source import edu.ie3.datamodel.exceptions.FactoryException +import edu.ie3.datamodel.exceptions.ValidationException import edu.ie3.datamodel.io.factory.input.ThermalBusInputFactory import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.csv.CsvDataSource @@ -26,7 +27,7 @@ class EntitySourceTest extends Specification { } @Override - void validate() { + void validate() throws ValidationException { } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy index d79c0e9d5..21dccdaa2 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy @@ -5,9 +5,11 @@ */ package edu.ie3.datamodel.io.source.csv +import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput +import edu.ie3.datamodel.models.input.system.LoadInput import edu.ie3.test.common.SystemParticipantTestData as sptd import spock.lang.Shared import spock.lang.Specification @@ -18,7 +20,7 @@ import java.util.concurrent.atomic.LongAdder import java.util.function.Function import java.util.stream.Collectors -class CsvDataSourceTest extends Specification { +class CsvDataSourceTest extends Specification implements CsvTestDataMeta { @Shared Function, String> uuidExtractor = { fieldToValues -> fieldToValues.get("uuid") } @@ -71,6 +73,52 @@ class CsvDataSourceTest extends Specification { dummyCsvSource.connector.entityWriters.isEmpty() } + def "A CsvDataSource should return column names from a valid CSV file as expected"() { + given: + DummyCsvSource source = new DummyCsvSource(csvSep, participantsFolderPath, fileNamingStrategy) + + expect: + source.getSourceFields(LoadInput).get() == [ + "operates_from", + "node", + "s_rated", + "cos_phi_rated", + "load_profile", + "id", + "operates_until", + "uuid", + "q_characteristics", + "e_cons_annual", + "operator", + "dsm" + ] as Set + } + + def "A CsvDataSource should return an empty result when retrieving column names for a non-existing CSV file"() { + given: + def path = Path.of("this/path/does-not-exist") + + expect: + dummyCsvSource.getSourceFields(() -> dummyCsvSource.connector.initReader(path)).isEmpty() + } + + def "A CsvDataSource should throw an exception when retrieving column names for a non-readable CSV file"() { + given: + DummyCsvSource source = new DummyCsvSource(csvSep, participantsFolderPath, fileNamingStrategy) + def readerSupplier = () -> { + def reader = source.connector.initReader(LoadInput) + reader.close() // We simulate the file being unreadable by just closing the reader before passing it over + return reader + } + + when: + source.getSourceFields(readerSupplier) + + then: + def exc = thrown(SourceException) + exc.message.startsWith("Error while trying to read source") + } + def "A CsvDataSource should build a valid fields to attributes map with valid data as expected"() { given: def validHeadline = [ From 80104d087b669a2d37c003502b225242619939df Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 5 Jan 2024 14:09:58 +0100 Subject: [PATCH 094/228] Rolling back changes that will be fixed with #981 --- .../edu/ie3/datamodel/io/source/EntitySource.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index cf42a6f7e..391aaf4a8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -335,6 +335,13 @@ protected Stream simpleEntityDataStre .map(fieldsToAttributes -> new SimpleEntityData(fieldsToAttributes, entityClass)); } + protected Stream> assetInputEntityStream( + Class entityClass, + EntityFactory factory, + Collection operators) { + return assetInputEntityDataStream(entityClass, operators).map(factory::get); + } + /** * Returns a stream of {@link Try} entities that can be build by using {@link * NodeAssetInputEntityData} and their corresponding factory. @@ -372,9 +379,7 @@ public Set> buildAssetInputEntit Class entityClass, EntityFactory factory, Collection operators) { - return assetInputEntityDataStream(entityClass, operators) - .map(factory::get) - .collect(Collectors.toSet()); + return assetInputEntityStream(entityClass, factory, operators).collect(Collectors.toSet()); } @SuppressWarnings("unchecked") From e1d5e5195b2c9ba27b65340559dab13b8fee0508 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 5 Jan 2024 14:25:22 +0100 Subject: [PATCH 095/228] Removing unused methods from Try again --- .../java/edu/ie3/datamodel/utils/Try.java | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index c3b348b0f..62b59f20a 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -10,7 +10,6 @@ import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.TryException; import java.util.*; -import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -193,20 +192,6 @@ public static Try, FailureException> scanStre // functional methods - /** - * Method to consume the contained data. - * - * @param consumer operation to compute - */ - public abstract void ifSuccess(Consumer consumer); - - /** - * Method to consume the exception - * - * @param consumer operation to compute - */ - public abstract void ifFailure(Consumer consumer); - /** * Method to transform the data if this object is a {@link Success}. * @@ -300,16 +285,6 @@ public Optional getException() { return Optional.empty(); } - @Override - public void ifSuccess(Consumer consumer) { - consumer.accept(data); - } - - @Override - public void ifFailure(Consumer consumer) { - // does nothing - } - @SuppressWarnings("unchecked") @Override public Try flatMap(Function> mapper) { @@ -395,16 +370,6 @@ public Optional getException() { return exception != null ? Optional.of(exception) : Optional.empty(); } - @Override - public void ifSuccess(Consumer consumer) { - // does nothing - } - - @Override - public void ifFailure(Consumer consumer) { - consumer.accept(exception); - } - @SuppressWarnings("unchecked") @Override public Try flatMap(Function> mapper) { From 13f034b61934e74ba60ac908f23bdc64a8962c3c Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 5 Jan 2024 14:27:55 +0100 Subject: [PATCH 096/228] Fixing codacy issues --- src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy | 2 +- .../io/factory/timeseries/IconIdCoordinateFactoryTest.groovy | 2 -- .../groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy index 38cb82ac7..33f657aed 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy @@ -12,7 +12,7 @@ import spock.lang.Specification class FactoryTest extends Specification { @Shared - private DummyFactory factory = new DummyFactory(String) + private final DummyFactory factory = new DummyFactory(String) def "A Factory can return unused fields correctly"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy index 0fe4ee9c5..922c82869 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconIdCoordinateFactoryTest.groovy @@ -5,9 +5,7 @@ */ package edu.ie3.datamodel.io.factory.timeseries -import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.io.factory.SimpleFactoryData -import edu.ie3.datamodel.utils.Try import edu.ie3.util.geo.GeoUtils import org.apache.commons.lang3.tuple.Pair import org.locationtech.jts.geom.Point diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy index 879d3b29f..75b1257aa 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/EntitySourceTest.groovy @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source -import edu.ie3.datamodel.exceptions.FactoryException import edu.ie3.datamodel.exceptions.ValidationException import edu.ie3.datamodel.io.factory.input.ThermalBusInputFactory import edu.ie3.datamodel.io.naming.FileNamingStrategy From 440a4267385db09e7403cbea7c0b131b16cf0d52 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 5 Jan 2024 14:36:21 +0100 Subject: [PATCH 097/228] Adapting documentation to changed spelling of cosPhiRated --- docs/readthedocs/models/input/participant/bm.rst | 2 +- docs/readthedocs/models/input/participant/chp.rst | 2 +- docs/readthedocs/models/input/participant/ev.rst | 2 +- docs/readthedocs/models/input/participant/fixedfeedin.rst | 2 +- docs/readthedocs/models/input/participant/hp.rst | 2 +- docs/readthedocs/models/input/participant/load.rst | 2 +- docs/readthedocs/models/input/participant/pv.rst | 2 +- docs/readthedocs/models/input/participant/storage.rst | 2 +- docs/readthedocs/models/input/participant/wec.rst | 2 +- docs/uml/main/input/SystemDatamodelConcept.puml | 4 ++-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/readthedocs/models/input/participant/bm.rst b/docs/readthedocs/models/input/participant/bm.rst index 5314251e4..1e81804e5 100644 --- a/docs/readthedocs/models/input/participant/bm.rst +++ b/docs/readthedocs/models/input/participant/bm.rst @@ -26,7 +26,7 @@ Type Model +---------------------+---------+------------------------------------------------------------+ | sRated | kVA | Rated apparent power | +---------------------+---------+------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +---------------------+---------+------------------------------------------------------------+ | etaConv | % | Efficiency of the assets inverter | +---------------------+---------+------------------------------------------------------------+ diff --git a/docs/readthedocs/models/input/participant/chp.rst b/docs/readthedocs/models/input/participant/chp.rst index 14cd2fd46..f933b9423 100644 --- a/docs/readthedocs/models/input/participant/chp.rst +++ b/docs/readthedocs/models/input/participant/chp.rst @@ -28,7 +28,7 @@ Type Model +-------------+---------+---------------------------------------------------------+ | sRated | kVA | Rated apparent power | +-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +-------------+---------+---------------------------------------------------------+ | pThermal | kW | Rated thermal power (at rated electrical power) | +-------------+---------+---------------------------------------------------------+ diff --git a/docs/readthedocs/models/input/participant/ev.rst b/docs/readthedocs/models/input/participant/ev.rst index cd98d6d86..2d06c5501 100644 --- a/docs/readthedocs/models/input/participant/ev.rst +++ b/docs/readthedocs/models/input/participant/ev.rst @@ -27,7 +27,7 @@ Type Model +-------------+----------+---------------------------------------------------------+ | sRated | kVA | Rated apparent power | +-------------+----------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +-------------+----------+---------------------------------------------------------+ Entity Model diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.rst b/docs/readthedocs/models/input/participant/fixedfeedin.rst index f317d5534..d20fc6624 100644 --- a/docs/readthedocs/models/input/participant/fixedfeedin.rst +++ b/docs/readthedocs/models/input/participant/fixedfeedin.rst @@ -25,7 +25,7 @@ Attributes, Units and Remarks +------------------+---------+--------------------------------------------------------------------------------------+ | sRated | kVA | Rated apparent power | +------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +------------------+---------+--------------------------------------------------------------------------------------+ Caveats diff --git a/docs/readthedocs/models/input/participant/hp.rst b/docs/readthedocs/models/input/participant/hp.rst index e28cc3c52..21a73551c 100644 --- a/docs/readthedocs/models/input/participant/hp.rst +++ b/docs/readthedocs/models/input/participant/hp.rst @@ -24,7 +24,7 @@ Type Model +-------------+---------+---------------------------------------------------------+ | sRated | kVA | Rated apparent power | +-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +-------------+---------+---------------------------------------------------------+ | pThermal | kW | Rated thermal power (at rated electrical power) | +-------------+---------+---------------------------------------------------------+ diff --git a/docs/readthedocs/models/input/participant/load.rst b/docs/readthedocs/models/input/participant/load.rst index f2aa5aa23..802a20d9b 100644 --- a/docs/readthedocs/models/input/participant/load.rst +++ b/docs/readthedocs/models/input/participant/load.rst @@ -30,7 +30,7 @@ Attributes, Units and Remarks +---------------------+---------+--------------------------------------------------------------------------------------+ | sRated | kVA | Rated apparent power | +---------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +---------------------+---------+--------------------------------------------------------------------------------------+ Caveats diff --git a/docs/readthedocs/models/input/participant/pv.rst b/docs/readthedocs/models/input/participant/pv.rst index 3308f9c6b..b548a3634 100644 --- a/docs/readthedocs/models/input/participant/pv.rst +++ b/docs/readthedocs/models/input/participant/pv.rst @@ -37,7 +37,7 @@ Detailed model of a photovoltaic power plant. +------------------+---------+--------------------------------------------------------------------------------------+ | sRated | kVA | Rated apparent power | +------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +------------------+---------+--------------------------------------------------------------------------------------+ Caveats diff --git a/docs/readthedocs/models/input/participant/storage.rst b/docs/readthedocs/models/input/participant/storage.rst index 19d768a30..30b6e4dde 100644 --- a/docs/readthedocs/models/input/participant/storage.rst +++ b/docs/readthedocs/models/input/participant/storage.rst @@ -26,7 +26,7 @@ Type Model +---------------------+---------+---------------------------------------------------------+ | sRated | kVA | Rated apparent power | +---------------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +---------------------+---------+---------------------------------------------------------+ | pMax | kW | | Maximum permissible active power | | | | | infeed or consumption | diff --git a/docs/readthedocs/models/input/participant/wec.rst b/docs/readthedocs/models/input/participant/wec.rst index d0769d92e..2c3346842 100644 --- a/docs/readthedocs/models/input/participant/wec.rst +++ b/docs/readthedocs/models/input/participant/wec.rst @@ -24,7 +24,7 @@ Type Model +------------------+---------+----------------------------------------------------------------------+ | sRated | kVA | Rated apparent power | +------------------+---------+----------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | +| cosPhiRated | -- | Rated power factor | +------------------+---------+----------------------------------------------------------------------+ | cpCharacteristic | -- | Wind velocity dependent :ref:`Betz factors`. | +------------------+---------+----------------------------------------------------------------------+ diff --git a/docs/uml/main/input/SystemDatamodelConcept.puml b/docs/uml/main/input/SystemDatamodelConcept.puml index 5e666732f..d588e1256 100644 --- a/docs/uml/main/input/SystemDatamodelConcept.puml +++ b/docs/uml/main/input/SystemDatamodelConcept.puml @@ -119,7 +119,7 @@ package models { - capex: ComparableQuantity [€] - opex: ComparableQuantity [€/MWh] - sRated: ComparableQuantity [kVA] - - cosphiRated: Double + - cosPhiRated: Double } SystemParticipantTypeInput --|> AssetTypeInput @@ -206,7 +206,7 @@ package models { class FixedFeedInInput { - sRated: ComparableQuantity [kVA] - - cosphiRated: double + - cosPhiRated: double } FixedFeedInInput --|> SystemParticipantInput From ff37f38a40543161a76eaea69d74a159703ea3cd Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:53:50 +0100 Subject: [PATCH 098/228] pp/#965 fix hyperlink in line documentation (#980) Fixing hyperlinks Co-authored-by: Sebastian Peter --- CHANGELOG.md | 1 + docs/readthedocs/models/input/grid/line.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 823d76cf2..84483adc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) +- Fixed hyperlink in line documentation [#965](https://github.com/ie3-institute/PowerSystemDataModel/issues/965) ### Changed - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index a7d23fe29..365fb65fe 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -18,7 +18,7 @@ Representation of an AC line. | vRated | kV | Rated voltage | -A list with some standard line types can be found here: `Standard Line Types`_ +A list with some standard line types can be found here: [Standard Line Types](#standard-line-types) ### Entity Model @@ -42,9 +42,9 @@ A list with some standard line types can be found here: `Standard Line Types`_ ## Standard Line Types Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found -`here `_. This file can be used directly +[here](https://github.com/ie3-institute/PowerSystemDataModel/tree/dev/input/StandardAssetTypes). This file can be used directly for any simulation with ``simona``. -The lines which source is ``simBench`` are from `here `_. +The lines which source is ``simBench`` are from [here](https://simbench.de/en/download/datasets/). ### Overhead Lines From 917fb8b9d233b379e6aa080bd300163d0409ea3b Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:06:58 +0100 Subject: [PATCH 099/228] Update linegraphic.rst --- .../models/input/grid/linegraphic.rst | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/docs/readthedocs/models/input/grid/linegraphic.rst b/docs/readthedocs/models/input/grid/linegraphic.rst index f187ed05a..fea67300d 100644 --- a/docs/readthedocs/models/input/grid/linegraphic.rst +++ b/docs/readthedocs/models/input/grid/linegraphic.rst @@ -6,18 +6,32 @@ Schematic drawing information for a line model. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+--------------+------+-----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==============+======+===========================================================+ -| uuid | -- | | -+--------------+------+-----------------------------------------------------------+ -| graphicLayer | -- | | Human readable identifier of the graphic layer to draw | -| | | | this element on | -+--------------+------+-----------------------------------------------------------+ -| path | -- | Line string of coordinates describing the drawing | -+--------------+------+-----------------------------------------------------------+ -| line | -- | Reference to the physical line model | -+--------------+------+-----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - graphicLayer + - -- + - | Human readable identifier of the graphic layer to draw + | this element on + + * - path + - -- + - Line string of coordinates describing the drawing + + * - line + - -- + - Reference to the physical line model + Caveats ^^^^^^^ From 9b55991c1364b3b02f78ed16cb6db520f00a8b35 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:16:10 +0100 Subject: [PATCH 100/228] Update measurementunit.rst --- .../models/input/grid/measurementunit.rst | 66 +++++++++++++------ 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/docs/readthedocs/models/input/grid/measurementunit.rst b/docs/readthedocs/models/input/grid/measurementunit.rst index 56cada24f..1f0e8bc4a 100644 --- a/docs/readthedocs/models/input/grid/measurementunit.rst +++ b/docs/readthedocs/models/input/grid/measurementunit.rst @@ -8,27 +8,51 @@ The measured information are indicated by boolean fields. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+------+----------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+======+==============================================+ -| uuid | -- | | -+---------------+------+----------------------------------------------+ -| id | -- | Human readable identifier | -+---------------+------+----------------------------------------------+ -| operator | -- | | -+---------------+------+----------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------+------+----------------------------------------------+ -| node | -- | | -+---------------+------+----------------------------------------------+ -| vMag | -- | Voltage magnitude measurements are available | -+---------------+------+----------------------------------------------+ -| vAng | -- | Voltage angle measurements are available | -+---------------+------+----------------------------------------------+ -| p | -- | Active power measurements are available | -+---------------+------+----------------------------------------------+ -| q | -- | Reactive power measurements are available | -+---------------+------+----------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - vMag + - -- + - Voltage magnitude measurements are available + + * - vAng + - -- + - Voltage angle measurements are available + + * - p + - -- + - Active power measurements are available + + * - q + - -- + - Reactive power measurements are available + Caveats ^^^^^^^ From e8748a9dca0e155330da1fb691116e9c8fb0b526 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:17:03 +0100 Subject: [PATCH 101/228] Update node.rst --- docs/readthedocs/models/input/grid/node.rst | 68 ++++++++++++++------- 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/docs/readthedocs/models/input/grid/node.rst b/docs/readthedocs/models/input/grid/node.rst index eedd8f42b..531dbd4e4 100644 --- a/docs/readthedocs/models/input/grid/node.rst +++ b/docs/readthedocs/models/input/grid/node.rst @@ -6,28 +6,52 @@ Representation of an electrical node, with no further distinction into bus bar, Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+------+--------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+======+====================================================================+ -| uuid | -- | | -+---------------+------+--------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------+------+--------------------------------------------------------------------+ -| operator | -- | | -+---------------+------+--------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------+------+--------------------------------------------------------------------+ -| vTarget | p.u. | Target voltage magnitude to be used by voltage regulation entities | -+---------------+------+--------------------------------------------------------------------+ -| slack | -- | | Boolean indicator, if this nodes serves as a slack node in power | -| | | | flow calculation | -+---------------+------+--------------------------------------------------------------------+ -| geoPosition | -- | Geographical location | -+---------------+------+--------------------------------------------------------------------+ -| voltLvl | -- | Information of the voltage level (id and nominal voltage) | -+---------------+------+--------------------------------------------------------------------+ -| subnet | -- | Sub grid number | -+---------------+------+--------------------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - vTarget + - p.u. + - Target voltage magnitude to be used by voltage regulation entities + + * - slack + - -- + - | Boolean indicator, if this nodes serves as a slack node in power + | flow calculation + + * - geoPosition + - -- + - Geographical location + + * - voltLvl + - -- + - Information of the voltage level (id and nominal voltage) + + * - subnet + - -- + - Sub grid number + Caveats ^^^^^^^ From 8a2de3361b783770da7b74d603d388bfda3f6bd6 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:18:18 +0100 Subject: [PATCH 102/228] Update nodegraphic.rst --- .../models/input/grid/nodegraphic.rst | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/docs/readthedocs/models/input/grid/nodegraphic.rst b/docs/readthedocs/models/input/grid/nodegraphic.rst index afdbb1c9a..6f0a6858d 100644 --- a/docs/readthedocs/models/input/grid/nodegraphic.rst +++ b/docs/readthedocs/models/input/grid/nodegraphic.rst @@ -6,20 +6,36 @@ Schematic drawing information for a node model. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+--------------+------+----------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==============+======+======================================================================+ -| uuid | -- | | -+--------------+------+----------------------------------------------------------------------+ -| graphicLayer | -- | | Human readable identifier of the graphic layer to draw | -| | | | this element on | -+--------------+------+----------------------------------------------------------------------+ -| path | -- | Line string of coordinates describing the drawing, e.g. for bus bars | -+--------------+------+----------------------------------------------------------------------+ -| point | -- | Alternative to line string, only drawing a point coordinate | -+--------------+------+----------------------------------------------------------------------+ -| node | -- | Reference to the physical node model | -+--------------+------+----------------------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - graphicLayer + - -- + - | Human readable identifier of the graphic layer to draw + | this element on + + * - path + - -- + - Line string of coordinates describing the drawing, e.g. for bus bars + + * - point + - -- + - Alternative to line string, only drawing a point coordinate + + * - node + - -- + - Reference to the physical node model + Caveats ^^^^^^^ From 31738dd254b0b7622e9ccf202bc1f8988d30f9b4 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:18:47 +0100 Subject: [PATCH 103/228] Update switch.rst --- docs/readthedocs/models/input/grid/switch.rst | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/docs/readthedocs/models/input/grid/switch.rst b/docs/readthedocs/models/input/grid/switch.rst index c41346886..8b1378917 100644 --- a/docs/readthedocs/models/input/grid/switch.rst +++ b/docs/readthedocs/models/input/grid/switch.rst @@ -1,31 +1 @@ -.. _switch_model: -Switch ------- -Model of an ideal switch connecting two node models of the same voltage level - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+------+---------------------------------+ -| Attribute | Unit | Remarks | -+===============+======+=================================+ -| uuid | -- | | -+---------------+------+---------------------------------+ -| id | -- | Human readable identifier | -+---------------+------+---------------------------------+ -| operator | -- | | -+---------------+------+---------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------+------+---------------------------------+ -| nodeA | -- | | -+---------------+------+---------------------------------+ -| nodeB | -- | | -+---------------+------+---------------------------------+ -| closed | -- | true, if the switch is closed | -+---------------+------+---------------------------------+ - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! From 031a7bb24798019b2ac14c8ebe3a56c28a542d79 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:19:18 +0100 Subject: [PATCH 104/228] Update switch.rst --- docs/readthedocs/models/input/grid/switch.rst | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/docs/readthedocs/models/input/grid/switch.rst b/docs/readthedocs/models/input/grid/switch.rst index 8b1378917..c3ee6565a 100644 --- a/docs/readthedocs/models/input/grid/switch.rst +++ b/docs/readthedocs/models/input/grid/switch.rst @@ -1 +1,52 @@ +.. _switch_model: + +Switch +------ +Model of an ideal switch connecting two node models of the same voltage level + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - nodeA + - -- + - + + * - nodeB + - -- + - + + * - closed + - -- + - true, if the switch is closed + + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! From 01aea42f4bd767bb090e2fec7a54f5853d566b5d Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:20:28 +0100 Subject: [PATCH 105/228] Update transformer3w.rst --- .../models/input/grid/transformer3w.rst | 222 ++++++++++++------ 1 file changed, 149 insertions(+), 73 deletions(-) diff --git a/docs/readthedocs/models/input/grid/transformer3w.rst b/docs/readthedocs/models/input/grid/transformer3w.rst index 1e62a7463..925f6cb5c 100644 --- a/docs/readthedocs/models/input/grid/transformer3w.rst +++ b/docs/readthedocs/models/input/grid/transformer3w.rst @@ -21,86 +21,162 @@ Type Model """""""""" All impedances and admittances are given with respect to the higher voltage side. -+-----------+------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===========+======+=========================================================+ -| uuid | | | -+-----------+------+---------------------------------------------------------+ -| id | | Human readable identifier | -+-----------+------+---------------------------------------------------------+ -| rScA | Ω | Short circuit resistance in branch A | -+-----------+------+---------------------------------------------------------+ -| rScB | Ω | Short circuit resistance in branch B | -+-----------+------+---------------------------------------------------------+ -| rScC | Ω | Short circuit resistance in branch C | -+-----------+------+---------------------------------------------------------+ -| xScA | Ω | Short circuit reactance in branch A | -+-----------+------+---------------------------------------------------------+ -| xScB | Ω | Short circuit reactance in branch B | -+-----------+------+---------------------------------------------------------+ -| xScC | Ω | Short circuit reactance in branch C | -+-----------+------+---------------------------------------------------------+ -| gM | nS | No load conductance | -+-----------+------+---------------------------------------------------------+ -| bM | nS | No load susceptance | -+-----------+------+---------------------------------------------------------+ -| sRatedA | kVA | Rated apparent power of branch A | -+-----------+------+---------------------------------------------------------+ -| sRatedB | kVA | Rated apparent power of branch B | -+-----------+------+---------------------------------------------------------+ -| sRatedC | kVA | Rated apparent power of branch C | -+-----------+------+---------------------------------------------------------+ -| vRatedA | kV | Rated voltage at higher node A | -+-----------+------+---------------------------------------------------------+ -| vRatedB | kV | Rated voltage at higher node B | -+-----------+------+---------------------------------------------------------+ -| vRatedC | kV | Rated voltage at higher node C | -+-----------+------+---------------------------------------------------------+ -| dV | % | Voltage magnitude increase per tap position | -+-----------+------+---------------------------------------------------------+ -| dPhi | ° | Voltage angle increase per tap position | -+-----------+------+---------------------------------------------------------+ -| tapNeutr | | Neutral tap position | -+-----------+------+---------------------------------------------------------+ -| tapMin | | Minimum tap position | -+-----------+------+---------------------------------------------------------+ -| tapMax | | Maximum tap position | -+-----------+------+---------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - + - + + * - id + - + - Human readable identifier + + * - rScA + - Ω + - Short circuit resistance in branch A + + * - rScB + - Ω + - Short circuit resistance in branch B + + * - rScC + - Ω + - Short circuit resistance in branch C + + * - xScA + - Ω + - Short circuit reactance in branch A + + * - xScB + - Ω + - Short circuit reactance in branch B + + * - xScC + - Ω + - Short circuit reactance in branch C + + * - gM + - nS + - No load conductance + + * - bM + - nS + - No load susceptance + + * - sRatedA + - kVA + - Rated apparent power of branch A + + * - sRatedB + - kVA + - Rated apparent power of branch B + + * - sRatedC + - kVA + - Rated apparent power of branch C + + * - vRatedA + - kV + - Rated voltage at higher node A + + * - vRatedB + - kV + - Rated voltage at higher node B + + * - vRatedC + - kV + - Rated voltage at higher node C + + * - dV + - % + - Voltage magnitude increase per tap position + + * - dPhi + - ° + - Voltage angle increase per tap position + + * - tapNeutr + - + - Neutral tap position + + * - tapMin + - + - Minimum tap position + + * - tapMax + - + - Maximum tap position + Entity Model """""""""""" -+-----------------+------+------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=================+======+============================================================+ -| uuid | -- | | -+-----------------+------+------------------------------------------------------------+ -| id | -- | Human readable identifier | -+-----------------+------+------------------------------------------------------------+ -| operator | -- | | -+-----------------+------+------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+-----------------+------+------------------------------------------------------------+ -| nodeA | -- | Higher voltage node | -+-----------------+------+------------------------------------------------------------+ -| nodeB | -- | Intermediate voltage node | -+-----------------+------+------------------------------------------------------------+ -| nodeC | -- | Lowest voltage node | -+-----------------+------+------------------------------------------------------------+ -| parallelDevices | -- | | overall amount of parallel transformers to automatically | -| | | | construct (e.g. parallelDevices = 2 will build a | -| | | | total of two transformers using the specified parameters)| -+-----------------+------+------------------------------------------------------------+ -| type | -- | | -+-----------------+------+------------------------------------------------------------+ -| tapPos | -- | Current position of the tap changer | -+-----------------+------+------------------------------------------------------------+ -| autoTap | -- | true, if there is a tap regulation apparent and active | -+-----------------+------+------------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - nodeA + - -- + - Higher voltage node + + * - nodeB + - -- + - Intermediate voltage node + + * - nodeC + - -- + - Lowest voltage node + + * - parallelDevices + - -- + - | overall amount of parallel transformers to automatically + | construct (e.g. parallelDevices = 2 will build a + | total of two transformers using the specified parameters) + + * - type + - -- + - + + * - tapPos + - -- + - Current position of the tap changer + + * - autoTap + - -- + - true, if there is a tap regulation apparent and active + Caveats ^^^^^^^ Nothing - at least not known. If you found something, please contact us! -.. [Gremmel1999] Gremmel, H., Ed., Schaltanlagen. Cornelsen Verlag, 1999, Vol. 10, isbn: 3-464-48235-9. \ No newline at end of file +.. [Gremmel1999] Gremmel, H., Ed., Schaltanlagen. Cornelsen Verlag, 1999, Vol. 10, isbn: 3-464-48235-9. From 050a16cf532fae53e75da2218a724c3b7e7b7c35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 08:28:43 +0000 Subject: [PATCH 106/228] Bump com.couchbase.client:java-client from 3.5.1 to 3.5.2 (#982) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 30cc3e69e..05cc7a2cf 100644 --- a/build.gradle +++ b/build.gradle @@ -90,7 +90,7 @@ dependencies { // Databases implementation 'org.influxdb:influxdb-java:2.24' - implementation 'com.couchbase.client:java-client:3.5.1' + implementation 'com.couchbase.client:java-client:3.5.2' runtimeOnly 'org.postgresql:postgresql:42.7.1' // postgresql jdbc driver required during runtime implementation 'commons-io:commons-io:2.15.1' // I/O functionalities From cefbcca32311c3a3821deaf27ff3a135e08a5b71 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 8 Jan 2024 13:30:34 +0100 Subject: [PATCH 107/228] Fixing `CsvSystemParticipantSourceTest` --- .../io/source/csv/CsvRawGridSourceTest.groovy | 9 +- .../csv/CsvSystemParticipantSourceTest.groovy | 282 ++++++++++++++---- 2 files changed, 219 insertions(+), 72 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy index 5049b4bb7..039333f66 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy @@ -171,9 +171,7 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "everything is fine" actualSet.size() == expectedSet.size() - actualSet.every { - it.success - } + Try.scanCollection(actualSet, List).success actualSet.stream().map { it.data.get() }.toList().containsAll(expectedSet) } @@ -371,9 +369,8 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "everything is fine" actualSet.size() == expectedSet.size() - actualSet.every { - it.success - } + Try.scanCollection(actualSet, List).success + actualSet.stream().map { it.data.get() }.toList().containsAll(expectedSet) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index 4881b9212..47d16e306 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -197,12 +197,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(nodes as Set, operators as Set, types as Set, thermalBuses as Set), SourceException) - if (heatPumps.success) { - heatPumps.data.get().size() == resultingSize - heatPumps.data.get() == resultingSet as Set - } else { - heatPumps.exception.get().class == SourceException - } + heatPumps.success + heatPumps.data.get().size() == resultingSize + heatPumps.data.get() == resultingSet as Set where: nodes | operators | types | thermalBuses || resultingSize || resultingSet @@ -210,12 +207,31 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 || [ new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from an invalid heat pump input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(nodes as Set, operators as Set, types as Set, thermalBuses as Set), SourceException) + + heatPumps.failure + heatPumps.exception.get().class == SourceException + + where: + nodes | operators | types | thermalBuses || resultingSize || resultingSet [] | [] | [] | [] || 0 || [] [sptd.hpInput.node] | [] | [] | [] || 0 || [] [sptd.hpInput.node] | [sptd.hpInput.operator] | [] | [] || 0 || [] [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 || [] } + def "A SystemParticipantSource with csv input should return data from a valid chp input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( @@ -227,12 +243,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(nodes as Set, operators as Set, types as Set, thermalBuses as Set, thermalStorages as Set), SourceException) - if (chpUnits.success) { - chpUnits.data.get().size() == resultingSize - chpUnits.data.get() == resultingSet as Set - } else { - chpUnits.exception.get().class == SourceException - } + chpUnits.success + chpUnits.data.get().size() == resultingSize + chpUnits.data.get() == resultingSet as Set where: nodes | operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet @@ -244,6 +257,25 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat ] as List || 1 || [ new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from a invalid chp input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(nodes as Set, operators as Set, types as Set, thermalBuses as Set, thermalStorages as Set), SourceException) + + chpUnits.failure + chpUnits.exception.get().class == SourceException + + + where: + nodes | operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet [] | [] | [] | [] | [] as List || 0 || [] [sptd.chpInput.node] | [] | [] | [] | [] as List || 0 || [] [sptd.chpInput.node] | [sptd.chpInput.operator] | [] | [] | [] as List || 0 || [] @@ -261,12 +293,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(nodes as Set, operators as Set, types as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators | types || resultingSize || resultingSet @@ -274,6 +303,25 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid ev input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(nodes as Set, operators as Set, types as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + + where: + nodes | operators | types || resultingSize || resultingSet [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] [sptd.evInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -290,12 +338,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(nodes as Set, operators as Set, types as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators | types || resultingSize || resultingSet @@ -303,6 +348,24 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid wec input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(nodes as Set, operators as Set, types as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + where: + nodes | operators | types || resultingSize || resultingSet [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] [sptd.wecInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -319,12 +382,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(nodes as Set, operators as Set, types as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators | types || resultingSize || resultingSet @@ -332,6 +392,24 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid storage input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(nodes as Set, operators as Set, types as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + where: + nodes | operators | types || resultingSize || resultingSet [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] [sptd.storageInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -348,12 +426,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(nodes as Set, operators as Set, types as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators | types || resultingSize || resultingSet @@ -361,6 +436,24 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid bm input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(nodes as Set, operators as Set, types as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + where: + nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] [sptd.bmInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -377,12 +470,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getEvCS(nodes as Set, operators as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators || resultingSize || resultingSet @@ -390,6 +480,24 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.evcsInput.node] | [] || 1 || [ new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid ev charging station input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvCS(nodes as Set, operators as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + where: + nodes | operators || resultingSize || resultingSet []| [sptd.evcsInput.operator]|| 0 || [] []| []|| 0 || [] } @@ -405,12 +513,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(nodes as Set, operators as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators || resultingSize || resultingSet @@ -418,6 +523,25 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.loadInput.node] | [] || 1 || [ new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid load input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(nodes as Set, operators as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + + where: + nodes | operators || resultingSize || resultingSet [] | [sptd.loadInput.operator] || 0 || [] [] | [] || 0 || [] } @@ -433,12 +557,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(nodes as Set, operators as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators || resultingSize || resultingSet @@ -446,6 +567,24 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat [sptd.pvInput.node] | [] || 1 || [ new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) ] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid pv input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(nodes as Set, operators as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + where: + nodes | operators || resultingSize || resultingSet [] | [sptd.pvInput.operator] || 0 || [] [] | [] || 0 || [] } @@ -461,24 +600,35 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat expect: def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(nodes as Set, operators as Set), SourceException) - if (sysParts.success) { - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - } else { - sysParts.exception.get().class == SourceException - } + sysParts.success + sysParts.data.get().size() == resultingSize + sysParts.data.get() == resultingSet as Set where: nodes | operators || resultingSize || resultingSet - [sptd.fixedFeedInInput.node] | [ - sptd.fixedFeedInInput.operator - ] as List || 1 || [sptd.fixedFeedInInput] + [sptd.fixedFeedInInput.node] | [sptd.fixedFeedInInput.operator] as List || 1 || [sptd.fixedFeedInInput] [sptd.fixedFeedInInput.node] | [] as List || 1 || [ new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) ] - [] | [ - sptd.fixedFeedInInput.operator - ] as List || 0 || [] + } + + def "A SystemParticipantSource with csv input should throw an exception from invalid fixedFeedIn input file as expected"() { + given: + def csvSystemParticipantSource = new SystemParticipantSource( + Mock(TypeSource), + Mock(ThermalSource), + Mock(RawGridSource), + new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + + expect: + def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(nodes as Set, operators as Set), SourceException) + + sysParts.failure + sysParts.exception.get().class == SourceException + + where: + nodes | operators || resultingSize || resultingSet + [] | [sptd.fixedFeedInInput.operator] as List || 0 || [] [] | [] as List || 0 || [] } } From 370ef591b7e0b42c3d2dd5f97b2b219efd9fde13 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 8 Jan 2024 13:34:03 +0100 Subject: [PATCH 108/228] Adding info to `CHANGELOG`. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e98c95091..c0c208d4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) - Fixed hyperlink in line documentation [#965](https://github.com/ie3-institute/PowerSystemDataModel/issues/965) +- Fixed some tests no failing when they should [#958](https://github.com/ie3-institute/PowerSystemDataModel/issues/958) ### Changed - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) From 998609f3f1627ab0a6f9b4b41a874bccbe6c252d Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:39:36 +0100 Subject: [PATCH 109/228] Update connector.rst --- .../models/result/grid/connector.rst | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/docs/readthedocs/models/result/grid/connector.rst b/docs/readthedocs/models/result/grid/connector.rst index c3749eef6..1d1ab9af8 100644 --- a/docs/readthedocs/models/result/grid/connector.rst +++ b/docs/readthedocs/models/result/grid/connector.rst @@ -7,24 +7,45 @@ Representation of all kinds of connectors. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| iAMag | ampere | A stands for sending node | -+---------------+----------------+----------------------------------------------------------+ -| iAAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| iBMag | ampere | B stands for receiving node | -+---------------+----------------+----------------------------------------------------------+ -| iBAng | degree | | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + Caveats ^^^^^^^ Groups all available connectors i.e. lines, switches and transformers + From 8bae6b507cc453b735c4bf1dcaf96dc03f06da8c Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:40:22 +0100 Subject: [PATCH 110/228] Update line.rst --- docs/readthedocs/models/result/grid/line.rst | 54 ++++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/docs/readthedocs/models/result/grid/line.rst b/docs/readthedocs/models/result/grid/line.rst index bea516141..aba108b38 100644 --- a/docs/readthedocs/models/result/grid/line.rst +++ b/docs/readthedocs/models/result/grid/line.rst @@ -7,23 +7,43 @@ Representation of an AC line. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| iAMag | ampere | A stands for sending node | -+---------------+----------------+----------------------------------------------------------+ -| iAAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| iBMag | ampere | B stands for receiving node | -+---------------+----------------+----------------------------------------------------------+ -| iBAng | degree | | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + Caveats ^^^^^^^ From 8ffe9b6f7e3c5713ce2c7eb7f2f95ce78125e16a Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:43:10 +0100 Subject: [PATCH 111/228] Update node.rst --- docs/readthedocs/models/result/grid/node.rst | 42 ++++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/docs/readthedocs/models/result/grid/node.rst b/docs/readthedocs/models/result/grid/node.rst index 26129af2f..4e2edc4a0 100644 --- a/docs/readthedocs/models/result/grid/node.rst +++ b/docs/readthedocs/models/result/grid/node.rst @@ -7,19 +7,35 @@ Representation of an electrical node, with no further distinction into bus bar, Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| vMag | p.u. | | -+---------------+----------------+----------------------------------------------------------+ -| vAng | degree | | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - vMag + - p.u. + - + + * - vAng + - degree + - + Caveats ^^^^^^^ From baff45b7ead3dedcc3a39cf88125eb2267663c28 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:43:50 +0100 Subject: [PATCH 112/228] Update switch.rst --- .../readthedocs/models/result/grid/switch.rst | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/readthedocs/models/result/grid/switch.rst b/docs/readthedocs/models/result/grid/switch.rst index aa11cda90..bb6a2b1e7 100644 --- a/docs/readthedocs/models/result/grid/switch.rst +++ b/docs/readthedocs/models/result/grid/switch.rst @@ -7,17 +7,31 @@ Representation of electrical switches. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| closed | boolean | status of the switching device | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - closed + - boolean + - status of the switching device + Caveats ^^^^^^^ From 6eb25e9cc7e6fc65b90b93be84dfffb4681ca600 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:45:28 +0100 Subject: [PATCH 113/228] Update transformer.rst --- .../models/result/grid/transformer.rst | 60 +++++++++++++------ 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/docs/readthedocs/models/result/grid/transformer.rst b/docs/readthedocs/models/result/grid/transformer.rst index 5246368bf..635c5d4a5 100644 --- a/docs/readthedocs/models/result/grid/transformer.rst +++ b/docs/readthedocs/models/result/grid/transformer.rst @@ -7,25 +7,47 @@ Representation of transformers. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| iAMag | ampere | A stands for sending node | -+---------------+----------------+----------------------------------------------------------+ -| iAAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| iBMag | ampere | B stands for receiving node | -+---------------+----------------+----------------------------------------------------------+ -| iBAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| tapPos | -- | | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + + * - tapPos + - -- + - + Caveats ^^^^^^^ From 0438e547ff2bc73bbad28cb31def951516e5d657 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:45:57 +0100 Subject: [PATCH 114/228] Update transformer2w.rst --- .../models/result/grid/transformer2w.rst | 60 +++++++++++++------ 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/docs/readthedocs/models/result/grid/transformer2w.rst b/docs/readthedocs/models/result/grid/transformer2w.rst index 772a5efc6..a4be89a9a 100644 --- a/docs/readthedocs/models/result/grid/transformer2w.rst +++ b/docs/readthedocs/models/result/grid/transformer2w.rst @@ -7,25 +7,47 @@ Representation of two winding transformers. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| iAMag | ampere | A stands for sending node | -+---------------+----------------+----------------------------------------------------------+ -| iAAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| iBMag | ampere | B stands for receiving node | -+---------------+----------------+----------------------------------------------------------+ -| iBAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| tapPos | -- | | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + + * - tapPos + - -- + - + Caveats ^^^^^^^ From 9e124ae42b87be3a60165b8a306e81438cbbe6c4 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:46:34 +0100 Subject: [PATCH 115/228] Update transformer3w.rst --- .../models/result/grid/transformer3w.rst | 72 +++++++++++++------ 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/docs/readthedocs/models/result/grid/transformer3w.rst b/docs/readthedocs/models/result/grid/transformer3w.rst index e218042a9..e9552b751 100644 --- a/docs/readthedocs/models/result/grid/transformer3w.rst +++ b/docs/readthedocs/models/result/grid/transformer3w.rst @@ -7,29 +7,55 @@ Representation of three winding transformers. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+----------------+----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+================+==========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+----------------+----------------------------------------------------------+ -| time | ZonedDateTime | date and time for the produced result | -+---------------+----------------+----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+----------------+----------------------------------------------------------+ -| iAMag | ampere | A stands for sending node | -+---------------+----------------+----------------------------------------------------------+ -| iAAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| iBMag | ampere | B stands for receiving node | -+---------------+----------------+----------------------------------------------------------+ -| iBAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| iCMag | ampere | B stands for receiving node | -+---------------+----------------+----------------------------------------------------------+ -| iCAng | degree | | -+---------------+----------------+----------------------------------------------------------+ -| tapPos | -- | | -+---------------+----------------+----------------------------------------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + + * - iCMag + - ampere + - B stands for receiving node + + * - iCAng + - degree + - + + * - tapPos + - -- + - + Caveats ^^^^^^^ From 33ea1cc25601691b9cad934e3e516b6ef6e13f67 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:47:21 +0100 Subject: [PATCH 116/228] Update operator.rst --- docs/readthedocs/models/input/operator.rst | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/docs/readthedocs/models/input/operator.rst b/docs/readthedocs/models/input/operator.rst index 64d067a8d..2a272d32b 100644 --- a/docs/readthedocs/models/input/operator.rst +++ b/docs/readthedocs/models/input/operator.rst @@ -7,13 +7,23 @@ having control over one or more physical entitites. Attributes, Units and Remarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+-----------+------+---------------------------+ -| Attribute | Unit | Remarks | -+===========+======+===========================+ -| uuid | -- | | -+-----------+------+---------------------------+ -| id | -- | Human readable identifier | -+-----------+------+---------------------------+ +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + .. _operator_example: From e0a9cdda293c6bbd5432638787fa52bf6b810c43 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:59:07 +0100 Subject: [PATCH 117/228] Add files via upload --- .../models/result/participantresult/bm.rst | 43 +++++++++++++++++ .../models/result/participantresult/chp.rst | 47 +++++++++++++++++++ .../participantresult/cylindricalstorage.rst | 47 +++++++++++++++++++ .../models/result/participantresult/ev.rst | 47 +++++++++++++++++++ .../models/result/participantresult/evcs.rst | 43 +++++++++++++++++ .../result/participantresult/fixedfeedin.rst | 44 +++++++++++++++++ .../models/result/participantresult/hp.rst | 47 +++++++++++++++++++ .../models/result/participantresult/load.rst | 43 +++++++++++++++++ .../models/result/participantresult/pv.rst | 43 +++++++++++++++++ .../result/participantresult/storage.rst | 47 +++++++++++++++++++ .../result/participantresult/thermalhouse.rst | 44 +++++++++++++++++ .../models/result/participantresult/wec.rst | 43 +++++++++++++++++ 12 files changed, 538 insertions(+) create mode 100644 docs/readthedocs/models/result/participantresult/bm.rst create mode 100644 docs/readthedocs/models/result/participantresult/chp.rst create mode 100644 docs/readthedocs/models/result/participantresult/cylindricalstorage.rst create mode 100644 docs/readthedocs/models/result/participantresult/ev.rst create mode 100644 docs/readthedocs/models/result/participantresult/evcs.rst create mode 100644 docs/readthedocs/models/result/participantresult/fixedfeedin.rst create mode 100644 docs/readthedocs/models/result/participantresult/hp.rst create mode 100644 docs/readthedocs/models/result/participantresult/load.rst create mode 100644 docs/readthedocs/models/result/participantresult/pv.rst create mode 100644 docs/readthedocs/models/result/participantresult/storage.rst create mode 100644 docs/readthedocs/models/result/participantresult/thermalhouse.rst create mode 100644 docs/readthedocs/models/result/participantresult/wec.rst diff --git a/docs/readthedocs/models/result/participantresult/bm.rst b/docs/readthedocs/models/result/participantresult/bm.rst new file mode 100644 index 000000000..75b6b78b3 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/bm.rst @@ -0,0 +1,43 @@ +.. _bm_result: + +Biomass plant +------------- +Result of a biomass power plant. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/chp.rst b/docs/readthedocs/models/result/participantresult/chp.rst new file mode 100644 index 000000000..1a54fa6d8 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/chp.rst @@ -0,0 +1,47 @@ +.. _chp_result: + +Combined Heat and Power Plant +----------------------------- +Result of a combined heat and power plant. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - qDot + - MW + - Thermal power + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/cylindricalstorage.rst b/docs/readthedocs/models/result/participantresult/cylindricalstorage.rst new file mode 100644 index 000000000..bba4d321f --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/cylindricalstorage.rst @@ -0,0 +1,47 @@ +.. _cylindricalstorage_result: + +Cylindrical Thermal Storage +--------------------------- +Result of a cylindrical thermal storage using a fluent to store thermal energy. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - energy + - MWh + - + + * - qDot + - MW + - heat demand of the sink + + * - fillLevel + - -- + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/ev.rst b/docs/readthedocs/models/result/participantresult/ev.rst new file mode 100644 index 000000000..71c771c50 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/ev.rst @@ -0,0 +1,47 @@ +.. _ev_result: + +Electric Vehicle +---------------- +Result of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging station`. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - soc + - % + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/evcs.rst b/docs/readthedocs/models/result/participantresult/evcs.rst new file mode 100644 index 000000000..d4313287a --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/evcs.rst @@ -0,0 +1,43 @@ +.. _evcs_result: + +Electric Vehicle Charging Station +--------------------------------- +This model is currently only a dummy implementation of an electric vehicle charging station. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participantresult/fixedfeedin.rst b/docs/readthedocs/models/result/participantresult/fixedfeedin.rst new file mode 100644 index 000000000..edb3e9975 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/fixedfeedin.rst @@ -0,0 +1,44 @@ +.. _fixed_feed_in_result: + +Fixed Feed In Facility +---------------------- +Result of a facility, that provides constant power feed in, as no further information about the actual behaviour of the +model can be derived. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/hp.rst b/docs/readthedocs/models/result/participantresult/hp.rst new file mode 100644 index 000000000..a8ee1591b --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/hp.rst @@ -0,0 +1,47 @@ +.. _hp_result: + +Heat Pump +--------- +Result of a heat pump. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - qDot + - MW + - Thermal power + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participantresult/load.rst b/docs/readthedocs/models/result/participantresult/load.rst new file mode 100644 index 000000000..8ee6fbdcd --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/load.rst @@ -0,0 +1,43 @@ +.. _load_result: + +Load +---- +Result of (mainly) domestic loads. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participantresult/pv.rst b/docs/readthedocs/models/result/participantresult/pv.rst new file mode 100644 index 000000000..b4ad76b61 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/pv.rst @@ -0,0 +1,43 @@ +.. _pv_result: + +Photovoltaic Power Plant +------------------------ +Result of a photovoltaic power plant. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/storage.rst b/docs/readthedocs/models/result/participantresult/storage.rst new file mode 100644 index 000000000..b4947c3b4 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/storage.rst @@ -0,0 +1,47 @@ +.. _storage_result: + +Electrical Energy Storage +------------------------- +Result of an electrochemical storage + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - soc + - -- + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/thermalhouse.rst b/docs/readthedocs/models/result/participantresult/thermalhouse.rst new file mode 100644 index 000000000..c90215f63 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/thermalhouse.rst @@ -0,0 +1,44 @@ +.. _thermal_house_result: + +Thermal House +------------- +Model for the thermal behaviour of a building. +This reflects a simple shoe box with transmission losses + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - qDot + - MW + - thermal heat demand of the sink + + * - indoorTemperature + - °C + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/wec.rst b/docs/readthedocs/models/result/participantresult/wec.rst new file mode 100644 index 000000000..429b45ea1 --- /dev/null +++ b/docs/readthedocs/models/result/participantresult/wec.rst @@ -0,0 +1,43 @@ +.. _wec_result: + +Wind Energy Converter +--------------------- +Result of a wind turbine. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file From 3da4a1a2a04329a85899b627b7b1304cd6c63ee6 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:01:21 +0100 Subject: [PATCH 118/228] Delete docs/readthedocs/models/result/participant directory --- .../models/result/participant/bm.rst | 27 ----------------- .../models/result/participant/chp.rst | 29 ------------------ .../result/participant/cylindricalstorage.rst | 29 ------------------ .../models/result/participant/em.rst | 29 ------------------ .../models/result/participant/ev.rst | 29 ------------------ .../models/result/participant/evcs.rst | 27 ----------------- .../models/result/participant/fixedfeedin.rst | 28 ----------------- .../models/result/participant/flexoption.rst | 30 ------------------- .../models/result/participant/hp.rst | 29 ------------------ .../models/result/participant/load.rst | 27 ----------------- .../models/result/participant/pv.rst | 27 ----------------- .../models/result/participant/storage.rst | 29 ------------------ .../result/participant/systemparticipant.rst | 28 ----------------- .../result/participant/thermalhouse.rst | 28 ----------------- .../models/result/participant/thermalsink.rst | 25 ---------------- .../result/participant/thermalstorage.rst | 27 ----------------- .../models/result/participant/thermalunit.rst | 25 ---------------- .../models/result/participant/wec.rst | 27 ----------------- 18 files changed, 500 deletions(-) delete mode 100644 docs/readthedocs/models/result/participant/bm.rst delete mode 100644 docs/readthedocs/models/result/participant/chp.rst delete mode 100644 docs/readthedocs/models/result/participant/cylindricalstorage.rst delete mode 100644 docs/readthedocs/models/result/participant/em.rst delete mode 100644 docs/readthedocs/models/result/participant/ev.rst delete mode 100644 docs/readthedocs/models/result/participant/evcs.rst delete mode 100644 docs/readthedocs/models/result/participant/fixedfeedin.rst delete mode 100644 docs/readthedocs/models/result/participant/flexoption.rst delete mode 100644 docs/readthedocs/models/result/participant/hp.rst delete mode 100644 docs/readthedocs/models/result/participant/load.rst delete mode 100644 docs/readthedocs/models/result/participant/pv.rst delete mode 100644 docs/readthedocs/models/result/participant/storage.rst delete mode 100644 docs/readthedocs/models/result/participant/systemparticipant.rst delete mode 100644 docs/readthedocs/models/result/participant/thermalhouse.rst delete mode 100644 docs/readthedocs/models/result/participant/thermalsink.rst delete mode 100644 docs/readthedocs/models/result/participant/thermalstorage.rst delete mode 100644 docs/readthedocs/models/result/participant/thermalunit.rst delete mode 100644 docs/readthedocs/models/result/participant/wec.rst diff --git a/docs/readthedocs/models/result/participant/bm.rst b/docs/readthedocs/models/result/participant/bm.rst deleted file mode 100644 index 7460fda46..000000000 --- a/docs/readthedocs/models/result/participant/bm.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _bm_result: - -Biomass plant -------------- -Result of a biomass power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/chp.rst b/docs/readthedocs/models/result/participant/chp.rst deleted file mode 100644 index 2c4f76898..000000000 --- a/docs/readthedocs/models/result/participant/chp.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _chp_result: - -Combined Heat and Power Plant ------------------------------ -Result of a combined heat and power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ -| qDot | MW | Thermal power | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/cylindricalstorage.rst b/docs/readthedocs/models/result/participant/cylindricalstorage.rst deleted file mode 100644 index 4b4dff95a..000000000 --- a/docs/readthedocs/models/result/participant/cylindricalstorage.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _cylindricalstorage_result: - -Cylindrical Thermal Storage ---------------------------- -Result of a cylindrical thermal storage using a fluent to store thermal energy. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+-----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+===========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+-----------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+-----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+-----------------------------------------------------------+ -| energy | MWh | | -+---------------+---------+-----------------------------------------------------------+ -| qDot | MW | heat demand of the sink | -+---------------+---------+-----------------------------------------------------------+ -| fillLevel | -- | | -+---------------+---------+-----------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/em.rst b/docs/readthedocs/models/result/participant/em.rst deleted file mode 100644 index 90f47b1cb..000000000 --- a/docs/readthedocs/models/result/participant/em.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _em_result: - -Energy Management ------------------ -Result of an energy management entity. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+----------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+============================================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+----------------------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+----------------------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+----------------------------------------------------------------------------+ -| p | MW | active power output | -+---------------+---------+----------------------------------------------------------------------------+ -| q | MW | reactive power output | -+---------------+---------+----------------------------------------------------------------------------+ - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - diff --git a/docs/readthedocs/models/result/participant/ev.rst b/docs/readthedocs/models/result/participant/ev.rst deleted file mode 100644 index f164588d1..000000000 --- a/docs/readthedocs/models/result/participant/ev.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _ev_result: - -Electric Vehicle ----------------- -Result of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging station`. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ -| soc | % | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/evcs.rst b/docs/readthedocs/models/result/participant/evcs.rst deleted file mode 100644 index 6e5a22136..000000000 --- a/docs/readthedocs/models/result/participant/evcs.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _evcs_result: - -Electric Vehicle Charging Station ---------------------------------- -This model is currently only a dummy implementation of an electric vehicle charging station. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/fixedfeedin.rst b/docs/readthedocs/models/result/participant/fixedfeedin.rst deleted file mode 100644 index baabec0e0..000000000 --- a/docs/readthedocs/models/result/participant/fixedfeedin.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. _fixed_feed_in_result: - -Fixed Feed In Facility ----------------------- -Result of a facility, that provides constant power feed in, as no further information about the actual behaviour of the -model can be derived. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/flexoption.rst b/docs/readthedocs/models/result/participant/flexoption.rst deleted file mode 100644 index e2abe9547..000000000 --- a/docs/readthedocs/models/result/participant/flexoption.rst +++ /dev/null @@ -1,30 +0,0 @@ -.. _flexoption_result: - -Flexibility Option ------------------- -Result of a flexibility option. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+----------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+============================================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+----------------------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+----------------------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+----------------------------------------------------------------------------+ -| pRef | MW | active power that was suggested for regular usage by the system participant| -+---------------+---------+----------------------------------------------------------------------------+ -| pMin | MW | active minimal power that was determined by the system participant | -+---------------+---------+----------------------------------------------------------------------------+ -| pMax | MW | active maximum power that was determined by the system participant | -+---------------+---------+----------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - diff --git a/docs/readthedocs/models/result/participant/hp.rst b/docs/readthedocs/models/result/participant/hp.rst deleted file mode 100644 index 5c51b59c4..000000000 --- a/docs/readthedocs/models/result/participant/hp.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _hp_result: - -Heat Pump ---------- -Result of a heat pump. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ -| qDot | MW | Thermal power | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/load.rst b/docs/readthedocs/models/result/participant/load.rst deleted file mode 100644 index 62b275d70..000000000 --- a/docs/readthedocs/models/result/participant/load.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _load_result: - -Load ----- -Result of (mainly) domestic loads. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/pv.rst b/docs/readthedocs/models/result/participant/pv.rst deleted file mode 100644 index e7e3b8d75..000000000 --- a/docs/readthedocs/models/result/participant/pv.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _pv_result: - -Photovoltaic Power Plant ------------------------- -Result of a photovoltaic power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/storage.rst b/docs/readthedocs/models/result/participant/storage.rst deleted file mode 100644 index 486535f83..000000000 --- a/docs/readthedocs/models/result/participant/storage.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _storage_result: - -Electrical Energy Storage -------------------------- -Result of an electrochemical storage - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ -| soc | -- | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/systemparticipant.rst b/docs/readthedocs/models/result/participant/systemparticipant.rst deleted file mode 100644 index 3393ba87b..000000000 --- a/docs/readthedocs/models/result/participant/systemparticipant.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. _system_participant_result: - -System Participant ------------------- -Groups together all system participants such as PV, Storage etc. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalhouse.rst b/docs/readthedocs/models/result/participant/thermalhouse.rst deleted file mode 100644 index 194302251..000000000 --- a/docs/readthedocs/models/result/participant/thermalhouse.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. _thermal_house_result: - -Thermal House -------------- -Model for the thermal behaviour of a building. -This reflects a simple shoe box with transmission losses - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+-------------------+---------+-----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===================+=========+===========================================================+ -| uuid | -- | uuid for the result entity | -+-------------------+---------+-----------------------------------------------------------+ -| time | -- | date and time for the produced result | -+-------------------+---------+-----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+-------------------+---------+-----------------------------------------------------------+ -| qDot | MW | thermal heat demand of the sink | -+-------------------+---------+-----------------------------------------------------------+ -| indoorTemperature | °C | | -+-------------------+---------+-----------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalsink.rst b/docs/readthedocs/models/result/participant/thermalsink.rst deleted file mode 100644 index f761eea14..000000000 --- a/docs/readthedocs/models/result/participant/thermalsink.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. _thermal_sink_result: - -Thermal Sink ------------- -Result of a thermal sink. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+-----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+===========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+-----------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+-----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+-----------------------------------------------------------+ -| qDot | MW | thermal heat demand | -+---------------+---------+-----------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalstorage.rst b/docs/readthedocs/models/result/participant/thermalstorage.rst deleted file mode 100644 index b64a285a2..000000000 --- a/docs/readthedocs/models/result/participant/thermalstorage.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _thermal_storage_result: - -Thermal Storage ---------------- -Result of a thermal storage. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+-----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+===========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+-----------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+-----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+-----------------------------------------------------------+ -| energy | MWh | | -+---------------+---------+-----------------------------------------------------------+ -| qDot | MW | heat flowing in | -+---------------+---------+-----------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalunit.rst b/docs/readthedocs/models/result/participant/thermalunit.rst deleted file mode 100644 index 0d33cdd9d..000000000 --- a/docs/readthedocs/models/result/participant/thermalunit.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. _thermal_unit_result: - -Thermal Unit ------------- -Result of a thermal unit. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+-----------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+===========================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+-----------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+-----------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+-----------------------------------------------------------+ -| qDot | MW | thermal power exchanged | -+---------------+---------+-----------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/wec.rst b/docs/readthedocs/models/result/participant/wec.rst deleted file mode 100644 index 9e56a9b85..000000000 --- a/docs/readthedocs/models/result/participant/wec.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _wec_result: - -Wind Energy Converter ---------------------- -Result of a wind turbine. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------+---------+--------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+===============+=========+==============================================================+ -| uuid | -- | uuid for the result entity | -+---------------+---------+--------------------------------------------------------------+ -| time | -- | date and time for the produced result | -+---------------+---------+--------------------------------------------------------------+ -| inputModel | -- | uuid for the associated input model | -+---------------+---------+--------------------------------------------------------------+ -| p | MW | | -+---------------+---------+--------------------------------------------------------------+ -| q | MVAr | | -+---------------+---------+--------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file From 0f69d3228fcebfe5a4ea688dc2987bd94d6016fa Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:01:54 +0100 Subject: [PATCH 119/228] Delete docs/readthedocs/models/result/participantresult directory --- .../models/result/participantresult/bm.rst | 43 ----------------- .../models/result/participantresult/chp.rst | 47 ------------------- .../participantresult/cylindricalstorage.rst | 47 ------------------- .../models/result/participantresult/ev.rst | 47 ------------------- .../models/result/participantresult/evcs.rst | 43 ----------------- .../result/participantresult/fixedfeedin.rst | 44 ----------------- .../models/result/participantresult/hp.rst | 47 ------------------- .../models/result/participantresult/load.rst | 43 ----------------- .../models/result/participantresult/pv.rst | 43 ----------------- .../result/participantresult/storage.rst | 47 ------------------- .../result/participantresult/thermalhouse.rst | 44 ----------------- .../models/result/participantresult/wec.rst | 43 ----------------- 12 files changed, 538 deletions(-) delete mode 100644 docs/readthedocs/models/result/participantresult/bm.rst delete mode 100644 docs/readthedocs/models/result/participantresult/chp.rst delete mode 100644 docs/readthedocs/models/result/participantresult/cylindricalstorage.rst delete mode 100644 docs/readthedocs/models/result/participantresult/ev.rst delete mode 100644 docs/readthedocs/models/result/participantresult/evcs.rst delete mode 100644 docs/readthedocs/models/result/participantresult/fixedfeedin.rst delete mode 100644 docs/readthedocs/models/result/participantresult/hp.rst delete mode 100644 docs/readthedocs/models/result/participantresult/load.rst delete mode 100644 docs/readthedocs/models/result/participantresult/pv.rst delete mode 100644 docs/readthedocs/models/result/participantresult/storage.rst delete mode 100644 docs/readthedocs/models/result/participantresult/thermalhouse.rst delete mode 100644 docs/readthedocs/models/result/participantresult/wec.rst diff --git a/docs/readthedocs/models/result/participantresult/bm.rst b/docs/readthedocs/models/result/participantresult/bm.rst deleted file mode 100644 index 75b6b78b3..000000000 --- a/docs/readthedocs/models/result/participantresult/bm.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _bm_result: - -Biomass plant -------------- -Result of a biomass power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/chp.rst b/docs/readthedocs/models/result/participantresult/chp.rst deleted file mode 100644 index 1a54fa6d8..000000000 --- a/docs/readthedocs/models/result/participantresult/chp.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _chp_result: - -Combined Heat and Power Plant ------------------------------ -Result of a combined heat and power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - qDot - - MW - - Thermal power - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/cylindricalstorage.rst b/docs/readthedocs/models/result/participantresult/cylindricalstorage.rst deleted file mode 100644 index bba4d321f..000000000 --- a/docs/readthedocs/models/result/participantresult/cylindricalstorage.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _cylindricalstorage_result: - -Cylindrical Thermal Storage ---------------------------- -Result of a cylindrical thermal storage using a fluent to store thermal energy. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - energy - - MWh - - - - * - qDot - - MW - - heat demand of the sink - - * - fillLevel - - -- - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/ev.rst b/docs/readthedocs/models/result/participantresult/ev.rst deleted file mode 100644 index 71c771c50..000000000 --- a/docs/readthedocs/models/result/participantresult/ev.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _ev_result: - -Electric Vehicle ----------------- -Result of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging station`. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - soc - - % - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/evcs.rst b/docs/readthedocs/models/result/participantresult/evcs.rst deleted file mode 100644 index d4313287a..000000000 --- a/docs/readthedocs/models/result/participantresult/evcs.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _evcs_result: - -Electric Vehicle Charging Station ---------------------------------- -This model is currently only a dummy implementation of an electric vehicle charging station. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participantresult/fixedfeedin.rst b/docs/readthedocs/models/result/participantresult/fixedfeedin.rst deleted file mode 100644 index edb3e9975..000000000 --- a/docs/readthedocs/models/result/participantresult/fixedfeedin.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _fixed_feed_in_result: - -Fixed Feed In Facility ----------------------- -Result of a facility, that provides constant power feed in, as no further information about the actual behaviour of the -model can be derived. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/hp.rst b/docs/readthedocs/models/result/participantresult/hp.rst deleted file mode 100644 index a8ee1591b..000000000 --- a/docs/readthedocs/models/result/participantresult/hp.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _hp_result: - -Heat Pump ---------- -Result of a heat pump. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - qDot - - MW - - Thermal power - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participantresult/load.rst b/docs/readthedocs/models/result/participantresult/load.rst deleted file mode 100644 index 8ee6fbdcd..000000000 --- a/docs/readthedocs/models/result/participantresult/load.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _load_result: - -Load ----- -Result of (mainly) domestic loads. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participantresult/pv.rst b/docs/readthedocs/models/result/participantresult/pv.rst deleted file mode 100644 index b4ad76b61..000000000 --- a/docs/readthedocs/models/result/participantresult/pv.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _pv_result: - -Photovoltaic Power Plant ------------------------- -Result of a photovoltaic power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/storage.rst b/docs/readthedocs/models/result/participantresult/storage.rst deleted file mode 100644 index b4947c3b4..000000000 --- a/docs/readthedocs/models/result/participantresult/storage.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _storage_result: - -Electrical Energy Storage -------------------------- -Result of an electrochemical storage - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - soc - - -- - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/thermalhouse.rst b/docs/readthedocs/models/result/participantresult/thermalhouse.rst deleted file mode 100644 index c90215f63..000000000 --- a/docs/readthedocs/models/result/participantresult/thermalhouse.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _thermal_house_result: - -Thermal House -------------- -Model for the thermal behaviour of a building. -This reflects a simple shoe box with transmission losses - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - qDot - - MW - - thermal heat demand of the sink - - * - indoorTemperature - - °C - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participantresult/wec.rst b/docs/readthedocs/models/result/participantresult/wec.rst deleted file mode 100644 index 429b45ea1..000000000 --- a/docs/readthedocs/models/result/participantresult/wec.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _wec_result: - -Wind Energy Converter ---------------------- -Result of a wind turbine. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file From 744c6e80628b519839ba4f5ad1a3d5b5a346bf64 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:02:23 +0100 Subject: [PATCH 120/228] Add files via upload --- .../models/result/participant/bm.rst | 43 +++++++++++++++++ .../models/result/participant/chp.rst | 47 +++++++++++++++++++ .../result/participant/cylindricalstorage.rst | 47 +++++++++++++++++++ .../models/result/participant/ev.rst | 47 +++++++++++++++++++ .../models/result/participant/evcs.rst | 43 +++++++++++++++++ .../models/result/participant/fixedfeedin.rst | 44 +++++++++++++++++ .../models/result/participant/hp.rst | 47 +++++++++++++++++++ .../models/result/participant/load.rst | 43 +++++++++++++++++ .../models/result/participant/pv.rst | 43 +++++++++++++++++ .../models/result/participant/storage.rst | 47 +++++++++++++++++++ .../result/participant/thermalhouse.rst | 44 +++++++++++++++++ .../models/result/participant/wec.rst | 43 +++++++++++++++++ 12 files changed, 538 insertions(+) create mode 100644 docs/readthedocs/models/result/participant/bm.rst create mode 100644 docs/readthedocs/models/result/participant/chp.rst create mode 100644 docs/readthedocs/models/result/participant/cylindricalstorage.rst create mode 100644 docs/readthedocs/models/result/participant/ev.rst create mode 100644 docs/readthedocs/models/result/participant/evcs.rst create mode 100644 docs/readthedocs/models/result/participant/fixedfeedin.rst create mode 100644 docs/readthedocs/models/result/participant/hp.rst create mode 100644 docs/readthedocs/models/result/participant/load.rst create mode 100644 docs/readthedocs/models/result/participant/pv.rst create mode 100644 docs/readthedocs/models/result/participant/storage.rst create mode 100644 docs/readthedocs/models/result/participant/thermalhouse.rst create mode 100644 docs/readthedocs/models/result/participant/wec.rst diff --git a/docs/readthedocs/models/result/participant/bm.rst b/docs/readthedocs/models/result/participant/bm.rst new file mode 100644 index 000000000..75b6b78b3 --- /dev/null +++ b/docs/readthedocs/models/result/participant/bm.rst @@ -0,0 +1,43 @@ +.. _bm_result: + +Biomass plant +------------- +Result of a biomass power plant. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/chp.rst b/docs/readthedocs/models/result/participant/chp.rst new file mode 100644 index 000000000..1a54fa6d8 --- /dev/null +++ b/docs/readthedocs/models/result/participant/chp.rst @@ -0,0 +1,47 @@ +.. _chp_result: + +Combined Heat and Power Plant +----------------------------- +Result of a combined heat and power plant. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - qDot + - MW + - Thermal power + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/cylindricalstorage.rst b/docs/readthedocs/models/result/participant/cylindricalstorage.rst new file mode 100644 index 000000000..bba4d321f --- /dev/null +++ b/docs/readthedocs/models/result/participant/cylindricalstorage.rst @@ -0,0 +1,47 @@ +.. _cylindricalstorage_result: + +Cylindrical Thermal Storage +--------------------------- +Result of a cylindrical thermal storage using a fluent to store thermal energy. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - energy + - MWh + - + + * - qDot + - MW + - heat demand of the sink + + * - fillLevel + - -- + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/ev.rst b/docs/readthedocs/models/result/participant/ev.rst new file mode 100644 index 000000000..71c771c50 --- /dev/null +++ b/docs/readthedocs/models/result/participant/ev.rst @@ -0,0 +1,47 @@ +.. _ev_result: + +Electric Vehicle +---------------- +Result of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging station`. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - soc + - % + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/evcs.rst b/docs/readthedocs/models/result/participant/evcs.rst new file mode 100644 index 000000000..d4313287a --- /dev/null +++ b/docs/readthedocs/models/result/participant/evcs.rst @@ -0,0 +1,43 @@ +.. _evcs_result: + +Electric Vehicle Charging Station +--------------------------------- +This model is currently only a dummy implementation of an electric vehicle charging station. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/fixedfeedin.rst b/docs/readthedocs/models/result/participant/fixedfeedin.rst new file mode 100644 index 000000000..edb3e9975 --- /dev/null +++ b/docs/readthedocs/models/result/participant/fixedfeedin.rst @@ -0,0 +1,44 @@ +.. _fixed_feed_in_result: + +Fixed Feed In Facility +---------------------- +Result of a facility, that provides constant power feed in, as no further information about the actual behaviour of the +model can be derived. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/hp.rst b/docs/readthedocs/models/result/participant/hp.rst new file mode 100644 index 000000000..a8ee1591b --- /dev/null +++ b/docs/readthedocs/models/result/participant/hp.rst @@ -0,0 +1,47 @@ +.. _hp_result: + +Heat Pump +--------- +Result of a heat pump. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - qDot + - MW + - Thermal power + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/load.rst b/docs/readthedocs/models/result/participant/load.rst new file mode 100644 index 000000000..8ee6fbdcd --- /dev/null +++ b/docs/readthedocs/models/result/participant/load.rst @@ -0,0 +1,43 @@ +.. _load_result: + +Load +---- +Result of (mainly) domestic loads. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/pv.rst b/docs/readthedocs/models/result/participant/pv.rst new file mode 100644 index 000000000..b4ad76b61 --- /dev/null +++ b/docs/readthedocs/models/result/participant/pv.rst @@ -0,0 +1,43 @@ +.. _pv_result: + +Photovoltaic Power Plant +------------------------ +Result of a photovoltaic power plant. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/storage.rst b/docs/readthedocs/models/result/participant/storage.rst new file mode 100644 index 000000000..b4947c3b4 --- /dev/null +++ b/docs/readthedocs/models/result/participant/storage.rst @@ -0,0 +1,47 @@ +.. _storage_result: + +Electrical Energy Storage +------------------------- +Result of an electrochemical storage + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - soc + - -- + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalhouse.rst b/docs/readthedocs/models/result/participant/thermalhouse.rst new file mode 100644 index 000000000..c90215f63 --- /dev/null +++ b/docs/readthedocs/models/result/participant/thermalhouse.rst @@ -0,0 +1,44 @@ +.. _thermal_house_result: + +Thermal House +------------- +Model for the thermal behaviour of a building. +This reflects a simple shoe box with transmission losses + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - qDot + - MW + - thermal heat demand of the sink + + * - indoorTemperature + - °C + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/wec.rst b/docs/readthedocs/models/result/participant/wec.rst new file mode 100644 index 000000000..429b45ea1 --- /dev/null +++ b/docs/readthedocs/models/result/participant/wec.rst @@ -0,0 +1,43 @@ +.. _wec_result: + +Wind Energy Converter +--------------------- +Result of a wind turbine. + +Attributes, Units and Remarks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +Caveats +^^^^^^^ +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file From 68e41c9be3e4710d330f271bb7404fbf3b53876c Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:48:18 +0100 Subject: [PATCH 121/228] Delete docs directory --- docs/readthedocs/Makefile | 20 -- .../_static/css/theme_override.css | 13 - docs/readthedocs/_static/figures/cosPhiP.png | Bin 64478 -> 0 bytes docs/readthedocs/_static/figures/cosPhiP.tex | 182 ------------ .../_static/figures/ecdTransformer3w.png | Bin 30876 -> 0 bytes .../_static/figures/ecdTransformer3w.tex | 193 ------------- docs/readthedocs/_static/figures/qv.png | Bin 80063 -> 0 bytes docs/readthedocs/_static/figures/qv.tex | 187 ------------- .../figures/transformerWithSwitchGear.png | Bin 19186 -> 0 bytes .../figures/transformerWithSwitchGear.tex | 184 ------------ .../uml/CharacteristicDatamodelConcept.png | Bin 206145 -> 0 bytes .../figures/uml/ConnectorDatamodelConcept.png | Bin 155721 -> 0 bytes .../figures/uml/DataSinkClassDiagram.png | Bin 39304 -> 0 bytes .../figures/uml/DataSourceClassDiagram.png | Bin 274353 -> 0 bytes .../uml/DataSourceClassDiagram_draft.png | Bin 119258 -> 0 bytes .../uml/DefaultInputDirectoryHierarchy.png | Bin 56218 -> 0 bytes .../uml/DefaultInputFolderStructure.png | Bin 54794 -> 0 bytes .../uml/DefaultResultDirectoryHierarchy.png | Bin 22796 -> 0 bytes .../figures/uml/EntitySourceClassDiagram.png | Bin 263496 -> 0 bytes .../uml/FunctionalDataSourceClassDiagram.png | Bin 26563 -> 0 bytes .../figures/uml/GraphicDatamodelConcept.png | Bin 106426 -> 0 bytes .../figures/uml/InputDataDeployment.png | Bin 210868 -> 0 bytes .../figures/uml/InputDatamodelConcept.png | Bin 200291 -> 0 bytes .../figures/uml/ModelContainerConcept.png | Bin 86668 -> 0 bytes .../figures/uml/OutputDatamodelConcept.png | Bin 133626 -> 0 bytes .../figures/uml/SystemDatamodelConcept.png | Bin 164407 -> 0 bytes .../_static/figures/uml/TestDataHierarchy.png | Bin 9192 -> 0 bytes .../figures/uml/ThermalDatamodelConcept.png | Bin 152046 -> 0 bytes .../uml/TimeSeriesDatamodelConcept.png | Bin 203293 -> 0 bytes .../uml/TimeSeriesSourceClassDiagram.png | Bin 131098 -> 0 bytes .../WeatherCoordinateSourceClassDiagram.png | Bin 108069 -> 0 bytes docs/readthedocs/conf.py | 73 ----- docs/readthedocs/gettingstarted.rst | 50 ---- docs/readthedocs/index.rst | 35 --- docs/readthedocs/io/ValidationUtils.md | 80 ------ docs/readthedocs/io/basiciousage.md | 40 --- docs/readthedocs/io/csvfiles.md | 212 -------------- docs/readthedocs/io/influxdb.rst | 33 --- docs/readthedocs/io/sql.md | 8 - docs/readthedocs/make.bat | 35 --- .../additionaldata/idcoordinatesource.md | 92 ------ .../models/input/additionaldata/timeseries.md | 30 -- .../models/input/grid/gridcontainer.md | 92 ------ docs/readthedocs/models/input/grid/line.md | 102 ------- .../models/input/grid/linegraphic.rst | 39 --- .../models/input/grid/measurementunit.rst | 60 ---- docs/readthedocs/models/input/grid/node.rst | 60 ---- .../models/input/grid/nodegraphic.rst | 43 --- docs/readthedocs/models/input/grid/switch.rst | 52 ---- .../models/input/grid/transformer2w.md | 77 ----- .../models/input/grid/transformer3w.rst | 182 ------------ docs/readthedocs/models/input/operator.rst | 43 --- .../models/input/participant/bm.rst | 66 ----- .../models/input/participant/chp.rst | 69 ----- .../input/participant/cylindricalstorage.rst | 36 --- .../models/input/participant/ev.rst | 55 ---- .../models/input/participant/evcs.rst | 149 ---------- .../models/input/participant/fixedfeedin.rst | 34 --- .../models/input/participant/general.rst | 42 --- .../models/input/participant/hp.rst | 59 ---- .../models/input/participant/load.rst | 60 ---- .../models/input/participant/pv.rst | 46 --- .../models/input/participant/storage.rst | 74 ----- .../models/input/participant/thermalbus.rst | 26 -- .../models/input/participant/thermalhouse.rst | 35 --- .../models/input/participant/wec.rst | 72 ----- docs/readthedocs/models/models.md | 193 ------------- .../models/result/grid/connector.rst | 51 ---- docs/readthedocs/models/result/grid/line.rst | 51 ---- docs/readthedocs/models/result/grid/node.rst | 43 --- .../readthedocs/models/result/grid/switch.rst | 39 --- .../models/result/grid/transformer.rst | 54 ---- .../models/result/grid/transformer2w.rst | 54 ---- .../models/result/grid/transformer3w.rst | 63 ----- .../models/result/participant/bm.rst | 43 --- .../models/result/participant/chp.rst | 47 ---- .../result/participant/cylindricalstorage.rst | 47 ---- .../models/result/participant/ev.rst | 47 ---- .../models/result/participant/evcs.rst | 43 --- .../models/result/participant/fixedfeedin.rst | 44 --- .../models/result/participant/hp.rst | 47 ---- .../models/result/participant/load.rst | 43 --- .../models/result/participant/pv.rst | 43 --- .../models/result/participant/storage.rst | 47 ---- .../result/participant/thermalhouse.rst | 44 --- .../models/result/participant/wec.rst | 43 --- docs/readthedocs/requirements.txt | 6 - docs/test/complexTopology.drawio | 1 - docs/test/complexTopology.pdf | Bin 26417 -> 0 bytes docs/uml/main/DataSinkClassDiagram.puml | 44 --- docs/uml/main/DataSourceClassDiagram.puml | 181 ------------ .../main/DataSourceClassDiagram_draft.puml | 123 -------- docs/uml/main/EntitySourceClassDiagram.puml | 157 ----------- .../FunctionalDataSourceClassDiagram.puml | 26 -- docs/uml/main/InputDataDeployment.puml | 108 -------- docs/uml/main/OutputDatamodelConcept.puml | 141 ---------- docs/uml/main/TimeSeriesDatamodelConcept.puml | 150 ---------- .../main/TimeSeriesSourceClassDiagram.puml | 73 ----- .../WeatherCoordinateSourceClassDiagram.puml | 67 ----- .../input/CharacteristicDatamodelConcept.puml | 97 ------- .../main/input/ConnectorDatamodelConcept.puml | 196 ------------- .../input/DefaultInputDirectoryHierarchy.puml | 30 -- .../DefaultResultDirectoryHierarchy.puml | 17 -- .../main/input/GraphicDatamodelConcept.puml | 102 ------- .../uml/main/input/InputDatamodelConcept.puml | 172 ------------ .../uml/main/input/ModelContainerConcept.puml | 80 ------ .../main/input/SystemDatamodelConcept.puml | 262 ------------------ .../main/input/ThermalDatamodelConcept.puml | 128 --------- docs/uml/test/TestDataHierarchy.puml | 10 - 109 files changed, 6297 deletions(-) delete mode 100644 docs/readthedocs/Makefile delete mode 100644 docs/readthedocs/_static/css/theme_override.css delete mode 100644 docs/readthedocs/_static/figures/cosPhiP.png delete mode 100644 docs/readthedocs/_static/figures/cosPhiP.tex delete mode 100644 docs/readthedocs/_static/figures/ecdTransformer3w.png delete mode 100644 docs/readthedocs/_static/figures/ecdTransformer3w.tex delete mode 100644 docs/readthedocs/_static/figures/qv.png delete mode 100644 docs/readthedocs/_static/figures/qv.tex delete mode 100644 docs/readthedocs/_static/figures/transformerWithSwitchGear.png delete mode 100644 docs/readthedocs/_static/figures/transformerWithSwitchGear.tex delete mode 100644 docs/readthedocs/_static/figures/uml/CharacteristicDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/ConnectorDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/DataSinkClassDiagram.png delete mode 100644 docs/readthedocs/_static/figures/uml/DataSourceClassDiagram.png delete mode 100644 docs/readthedocs/_static/figures/uml/DataSourceClassDiagram_draft.png delete mode 100644 docs/readthedocs/_static/figures/uml/DefaultInputDirectoryHierarchy.png delete mode 100644 docs/readthedocs/_static/figures/uml/DefaultInputFolderStructure.png delete mode 100644 docs/readthedocs/_static/figures/uml/DefaultResultDirectoryHierarchy.png delete mode 100644 docs/readthedocs/_static/figures/uml/EntitySourceClassDiagram.png delete mode 100644 docs/readthedocs/_static/figures/uml/FunctionalDataSourceClassDiagram.png delete mode 100644 docs/readthedocs/_static/figures/uml/GraphicDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/InputDataDeployment.png delete mode 100644 docs/readthedocs/_static/figures/uml/InputDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/ModelContainerConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/OutputDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/SystemDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/TestDataHierarchy.png delete mode 100644 docs/readthedocs/_static/figures/uml/ThermalDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/TimeSeriesDatamodelConcept.png delete mode 100644 docs/readthedocs/_static/figures/uml/TimeSeriesSourceClassDiagram.png delete mode 100644 docs/readthedocs/_static/figures/uml/WeatherCoordinateSourceClassDiagram.png delete mode 100644 docs/readthedocs/conf.py delete mode 100644 docs/readthedocs/gettingstarted.rst delete mode 100644 docs/readthedocs/index.rst delete mode 100644 docs/readthedocs/io/ValidationUtils.md delete mode 100644 docs/readthedocs/io/basiciousage.md delete mode 100644 docs/readthedocs/io/csvfiles.md delete mode 100644 docs/readthedocs/io/influxdb.rst delete mode 100644 docs/readthedocs/io/sql.md delete mode 100644 docs/readthedocs/make.bat delete mode 100644 docs/readthedocs/models/input/additionaldata/idcoordinatesource.md delete mode 100644 docs/readthedocs/models/input/additionaldata/timeseries.md delete mode 100644 docs/readthedocs/models/input/grid/gridcontainer.md delete mode 100644 docs/readthedocs/models/input/grid/line.md delete mode 100644 docs/readthedocs/models/input/grid/linegraphic.rst delete mode 100644 docs/readthedocs/models/input/grid/measurementunit.rst delete mode 100644 docs/readthedocs/models/input/grid/node.rst delete mode 100644 docs/readthedocs/models/input/grid/nodegraphic.rst delete mode 100644 docs/readthedocs/models/input/grid/switch.rst delete mode 100644 docs/readthedocs/models/input/grid/transformer2w.md delete mode 100644 docs/readthedocs/models/input/grid/transformer3w.rst delete mode 100644 docs/readthedocs/models/input/operator.rst delete mode 100644 docs/readthedocs/models/input/participant/bm.rst delete mode 100644 docs/readthedocs/models/input/participant/chp.rst delete mode 100644 docs/readthedocs/models/input/participant/cylindricalstorage.rst delete mode 100644 docs/readthedocs/models/input/participant/ev.rst delete mode 100644 docs/readthedocs/models/input/participant/evcs.rst delete mode 100644 docs/readthedocs/models/input/participant/fixedfeedin.rst delete mode 100644 docs/readthedocs/models/input/participant/general.rst delete mode 100644 docs/readthedocs/models/input/participant/hp.rst delete mode 100644 docs/readthedocs/models/input/participant/load.rst delete mode 100644 docs/readthedocs/models/input/participant/pv.rst delete mode 100644 docs/readthedocs/models/input/participant/storage.rst delete mode 100644 docs/readthedocs/models/input/participant/thermalbus.rst delete mode 100644 docs/readthedocs/models/input/participant/thermalhouse.rst delete mode 100644 docs/readthedocs/models/input/participant/wec.rst delete mode 100644 docs/readthedocs/models/models.md delete mode 100644 docs/readthedocs/models/result/grid/connector.rst delete mode 100644 docs/readthedocs/models/result/grid/line.rst delete mode 100644 docs/readthedocs/models/result/grid/node.rst delete mode 100644 docs/readthedocs/models/result/grid/switch.rst delete mode 100644 docs/readthedocs/models/result/grid/transformer.rst delete mode 100644 docs/readthedocs/models/result/grid/transformer2w.rst delete mode 100644 docs/readthedocs/models/result/grid/transformer3w.rst delete mode 100644 docs/readthedocs/models/result/participant/bm.rst delete mode 100644 docs/readthedocs/models/result/participant/chp.rst delete mode 100644 docs/readthedocs/models/result/participant/cylindricalstorage.rst delete mode 100644 docs/readthedocs/models/result/participant/ev.rst delete mode 100644 docs/readthedocs/models/result/participant/evcs.rst delete mode 100644 docs/readthedocs/models/result/participant/fixedfeedin.rst delete mode 100644 docs/readthedocs/models/result/participant/hp.rst delete mode 100644 docs/readthedocs/models/result/participant/load.rst delete mode 100644 docs/readthedocs/models/result/participant/pv.rst delete mode 100644 docs/readthedocs/models/result/participant/storage.rst delete mode 100644 docs/readthedocs/models/result/participant/thermalhouse.rst delete mode 100644 docs/readthedocs/models/result/participant/wec.rst delete mode 100644 docs/readthedocs/requirements.txt delete mode 100644 docs/test/complexTopology.drawio delete mode 100644 docs/test/complexTopology.pdf delete mode 100644 docs/uml/main/DataSinkClassDiagram.puml delete mode 100644 docs/uml/main/DataSourceClassDiagram.puml delete mode 100644 docs/uml/main/DataSourceClassDiagram_draft.puml delete mode 100644 docs/uml/main/EntitySourceClassDiagram.puml delete mode 100644 docs/uml/main/FunctionalDataSourceClassDiagram.puml delete mode 100644 docs/uml/main/InputDataDeployment.puml delete mode 100644 docs/uml/main/OutputDatamodelConcept.puml delete mode 100644 docs/uml/main/TimeSeriesDatamodelConcept.puml delete mode 100644 docs/uml/main/TimeSeriesSourceClassDiagram.puml delete mode 100644 docs/uml/main/WeatherCoordinateSourceClassDiagram.puml delete mode 100644 docs/uml/main/input/CharacteristicDatamodelConcept.puml delete mode 100644 docs/uml/main/input/ConnectorDatamodelConcept.puml delete mode 100644 docs/uml/main/input/DefaultInputDirectoryHierarchy.puml delete mode 100644 docs/uml/main/input/DefaultResultDirectoryHierarchy.puml delete mode 100644 docs/uml/main/input/GraphicDatamodelConcept.puml delete mode 100644 docs/uml/main/input/InputDatamodelConcept.puml delete mode 100644 docs/uml/main/input/ModelContainerConcept.puml delete mode 100644 docs/uml/main/input/SystemDatamodelConcept.puml delete mode 100644 docs/uml/main/input/ThermalDatamodelConcept.puml delete mode 100644 docs/uml/test/TestDataHierarchy.puml diff --git a/docs/readthedocs/Makefile b/docs/readthedocs/Makefile deleted file mode 100644 index bfd7a7e68..000000000 --- a/docs/readthedocs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= python3 -msphinx -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/readthedocs/_static/css/theme_override.css b/docs/readthedocs/_static/css/theme_override.css deleted file mode 100644 index 914a12811..000000000 --- a/docs/readthedocs/_static/css/theme_override.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Suppress spacing after multi-line entries in tables - * Inspired by this issue: https://github.com/readthedocs/sphinx_rtd_theme/issues/117 */ -.wy-table-responsive table td div.line-block { - margin-bottom: 0; - font-size: 90%; -} -.wy-table-responsive table th div.line-block { - margin-bottom: 0; - font-size: 90%; -} -.wy-table-responsive table th p { - margin-bottom: 0; -} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/cosPhiP.png b/docs/readthedocs/_static/figures/cosPhiP.png deleted file mode 100644 index cd00dc562a3e9663d77861bd5235452a73784924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64478 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 z

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 z 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] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); - } - }, - din ylabel/.style 2 args={ - yticklabel style={ - name=ylabel\ticknum, - append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastyticknum-1)} - \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); - } - }, - din zlabel/.style 2 args={ - zticklabel style={ - name=zlabel\ticknum, - append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastzticknum-1)} - \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); - } - } -} - -\usepgfplotslibrary{groupplots} -\pgfdeclarelayer{background} -\pgfdeclarelayer{foreground} -\pgfsetlayers{background,main,foreground} - -% === SIunitx === -\sisetup{ - load-configurations = abbreviations, % load units with abbreviations - range-phrase = \ldots, - list-final-separator = { \translate{und} }, - list-pair-separator = { \translate{und} }, - output-decimal-marker = {,}, - group-minimum-digits = 3, - group-separator = {.}, - exponent-product = \cdot, - per-mode = symbol-or-fraction -} -\DeclareSIUnit{\Wp}{Wp} -\DeclareSIUnit{\kWp}{kWp} -\DeclareSIUnit{\kWh}{kWh} -\DeclareSIUnit{\GWh}{GWh} -\DeclareSIUnit{\TWh}{TWh} -\DeclareSIUnit{\pu}{p.u.} -\DeclareSIUnit{\VA}{VA} -\DeclareSIUnit{\VAr}{VAr} - -% Command for printing the complex j -\newcommand{\cj}{\text{j}} - -\begin{document} - \begin{tikzpicture} - \begin{axis}[ - width = 300pt, - height = 150pt, - cycle list name = TUDefault, - xmin = -0.1, xmax = 1.1, - xtick = {0, 0.2, ..., 1.2}, - ytick = {0.95, 0.975, 1.0}, - y tick label style={ - /pgf/number format/fixed, - /pgf/number format/fixed zerofill, - /pgf/number format/precision=2}, - din xlabel={Active power $p$}{\si{\pu}}, - din ylabel={Power factor $cos \varphi$}{--} - ] - \addplot+[tuOrange, mark = *, mark options = {fill = tuOrange}] coordinates { - (0,1) - (0.9,1) - (1,0.95) - }; - \end{axis} - \end{tikzpicture} -\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/ecdTransformer3w.png b/docs/readthedocs/_static/figures/ecdTransformer3w.png deleted file mode 100644 index 746736c3db5ce96553bb46ca866aa318b3260835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30876 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 diff --git a/docs/readthedocs/_static/figures/ecdTransformer3w.tex b/docs/readthedocs/_static/figures/ecdTransformer3w.tex deleted file mode 100644 index a101df0c1..000000000 --- a/docs/readthedocs/_static/figures/ecdTransformer3w.tex +++ /dev/null @@ -1,193 +0,0 @@ -% \documentclass{article} -\documentclass[border=0mm, convert={density=300, quality=90, outext=.png}]{standalone} -% ===== Loading all packages ===== -% === input, languages, layout === -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[ngerman]{babel} -\usepackage{textcomp} -\usepackage{url} -\usepackage{printlen} -\usepackage{lmodern} % Latin Modern, bessere Fonts - -% === mathematics, numbers, units === -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{siunitx} -\usepackage{calc} % enables the calculation of distances etc. - -% === figures, plots, drawing, ... === -\usepackage[cmyk]{xcolor} -\usepackage{graphicx} -\usepackage{tikz} -\usepackage{pgfplots} -\usepackage{pgfplotstable} - -% === other stuff === -\usepackage{multirow} % Table entries reaching over more than one line -\usepackage[ - layout = inline, - final]{fixme} % comments -\usepackage{ifthen} - -% === setspace === -\linespread{1.15} - -% === tikz === -\usetikzlibrary{ - fit, - positioning, - shapes, - calc, - pgfplots.groupplots, - plotmarks, - backgrounds, - matrix, - fadings, - external, - decorations.markings, - patterns, - arrows.meta, - intersections} - -% === xcolor === -% Color set "strong" of TU Dortmund university -\definecolor{tuGreen}{cmyk}{0.57, 0, 1, 0} -\definecolor{tuOrange}{cmyk}{0, 0.55, 1, 0} -\definecolor{tuBlue}{cmyk}{1, 0, 0.36, 0} -\definecolor{tuViolette}{cmyk}{0.25, 1, 0, 0} -\definecolor{tuYellow}{cmyk}{0.05, 0.08, 1, 0} -\definecolor{tuBrown}{cmyk}{0.05, 0.69, 1, 0} - -% === pgfplots === -% Definition of cycle lists -\pgfplotscreateplotcyclelist{TUDefault}{% - {plain plot set = {none}{tuGreen}},% - {plain plot set = {none}{tuOrange}},% - {plain plot set = {none}{tuBlue}},% - {plain plot set = {none}{tuViolette}},% - {plain plot set = {none}{tuYellow}},% - {plain plot set = {none}{tuBrown}}% -} - -\pgfplotsset{ - compat = newest, - scale only axis, - width = 0.85\textwidth, - height = 0.25\textheight, - every axis legend/.append style = {nodes={right}}, - xmajorgrids, - ymajorgrids, - legend style = {font = \tiny, at = {(0.5,1.025)}, anchor = south, legend columns = 6}, - % Custom plot style (https://tex.stackexchange.com/questions/193589/pgfplots-how-can-i-define-one-cycle-list-for-all-graphs-or-the-least-amount-p/193596) - plain plot set/.style 2 args = { - #2, - mark = #1, - every mark/.append style = {fill = #2} - }, - % Axis labels according to DIN 461 (based on https://tex.stackexchange.com/questions/391332/get-the-auto-generated-tick-distance-of-a-pgfplot-din-461/391430#391430) - % Argument 1: Axis description - % Argument 2: Axis unit - din xlabel/.style 2 args={ - xticklabel style={ - name=xlabel\ticknum, - append after command=\pgfextra{\xdef\lastxticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastxticknum-1)} - \path (xlabel\lastxticknum.base) -- (xlabel\pgfmathresult.base) node (xAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east] (xAxDescr) at ($(xlabel\lastxticknum.base) + (-5mm,-3mm)$) {#1}; - \draw[->] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); - } - }, - din ylabel/.style 2 args={ - yticklabel style={ - name=ylabel\ticknum, - append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastyticknum-1)} - \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); - } - }, - din zlabel/.style 2 args={ - zticklabel style={ - name=zlabel\ticknum, - append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastzticknum-1)} - \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); - } - } -} - -\usepgfplotslibrary{groupplots} -\pgfdeclarelayer{background} -\pgfdeclarelayer{foreground} -\pgfsetlayers{background,main,foreground} - -% === SIunitx === -\sisetup{ - load-configurations = abbreviations, % load units with abbreviations - range-phrase = \ldots, - list-final-separator = { \translate{und} }, - list-pair-separator = { \translate{und} }, - output-decimal-marker = {,}, - group-minimum-digits = 3, - group-separator = {.}, - exponent-product = \cdot, - per-mode = symbol-or-fraction -} -\DeclareSIUnit{\Wp}{Wp} -\DeclareSIUnit{\kWp}{kWp} -\DeclareSIUnit{\kWh}{kWh} -\DeclareSIUnit{\GWh}{GWh} -\DeclareSIUnit{\TWh}{TWh} -\DeclareSIUnit{\pu}{p.u.} -\DeclareSIUnit{\VA}{VA} -\DeclareSIUnit{\VAr}{VAr} - -% Command for printing the complex j -\newcommand{\cj}{\text{j}} - -\begin{document} - \begin{tikzpicture} - % === Anschlüsse === - \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_a_+) at (0,0){}; - \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_a_-) at (0,-15mm){}; - \node[circle, draw = black, fill = black, inner sep = 0, minimum height = 0.75mm] (port_h_+) at (30mm,0){}; - \node[circle, draw = black, fill = black, inner sep = 0, minimum height = 0.75mm] (port_h_-) at (30mm,-15mm){}; - \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_c_+) at (60mm,0){}; - \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_c_-) at (60mm,-15mm){}; - \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_b_+) at (75mm,15mm){}; - \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_b_-) at (75mm,-15mm){}; - \coordinate (port_b2_+) at ($(port_h_+) + (0,15mm)$); - - % === Bauteile === - % Passive Elemente - \node[rectangle, draw = black, inner sep = 0, minimum height = 3.5mm, minimum width = 10mm, label={90:\texttt{rScA, xScA}}] (yka) at ($(port_a_+)!0.6!(port_h_+)$){}; - \node[rectangle, draw = black, inner sep = 0, minimum width = 3.5mm, minimum height = 10mm, label={[label distance = 1.5mm, anchor = east]180:\texttt{gM, bM}}] (yh) at ($(port_h_+)!0.5!(port_h_-)$){}; - \node[rectangle, draw = black, inner sep = 0, minimum height = 3.5mm, minimum width = 10mm, label={90:\texttt{rScB, xScB}}] (ykb) at ($(port_b2_+)!0.5!(port_b_+)$){}; - \node[rectangle, draw = black, inner sep = 0, minimum height = 3.5mm, minimum width = 10mm, label={90:\texttt{rScC, xScC}}] (ykc) at ($(port_h_+)!0.4!(port_c_+)$){}; - - % Verbindungen - \draw (port_a_+.east) -- (yka.west) (yka.east) -- (port_h_+.west); - \draw (port_h_+.south) -- (yh.north) (yh.south) -- (port_h_-.north); - \draw (port_h_+.east) -- (ykc.west) (ykc.east) -- (port_c_+.west); - \draw (port_h_+.east) -| (port_b2_+) |- (ykb.west) (ykb.east) -- (port_b_+.west); - \draw (port_a_-.east) -- (port_h_-) -- (port_c_-.west) (port_c_-.east) -- (port_b_-.west); - - % Erde - \draw (port_h_-) -- ++(0,-2.5mm) ++(-2mm,0) -- ++(4mm,0) ++(-0.5mm,-1mm) -- ++(-3mm,0) ++(0.5mm,-1mm) -- ++(2mm,0); - - % Spannungs- und Strompfeile - \node[anchor = east, inner sep = 2mm] at (port_a_+.west) {\texttt{nodeA}}; - \node[anchor = west, inner sep = 2mm] at (port_b_+.east) {\texttt{nodeB}}; - \node[anchor = west, inner sep = 2mm] at (port_c_+.east) {\texttt{nodeC}}; - \end{tikzpicture} -\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/qv.png b/docs/readthedocs/_static/figures/qv.png deleted file mode 100644 index 2cac0e0e952953591a23fdb7598ae6c25825087a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80063 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%0DZkFu?y4lUNyOB zxs<5Ab-}M2LB;`#Dt7%YRn9hSAe<2BJ4xhsI9k0T9}L|~i_kVr90lj%Z);`_6B!xh zL-1PoE4mN9=LDeyHDkz1nw*I!?ZwNgA{|vvVQ>%68#-<^;uX@#-)>{GIKgf`2P>@eF9%4= z`aS4_Ri%otT=T_9F?wYq5}bzKR3qqh6II?CE{4!;9_NO=KPASpV-EZtw9$7a@i zCIv*??f^^sm8oy1#-4G={Q*@M11O(0Nd`M`*9dZxoR9<%#g?m15qq%1UwT`k#81vJG0%wYVBhU3yr2PM%h5-6LjB zH}klE^BPSbr7vzajRv6PX!6Vc2fsA%X5s}b48^TlMi*Nv9MW=QY3jmslwTaLD-kEy zCu->q)5d`k+-mw|u4pNt_+5<1X`&82j{~3xY+3c>>_ziOU}p16c*DHj(ID_N^?uOZ zlio0VW@50Cvm6iX@@DC2am3 z;PV;ev^Eaodh0HmVOO|EOP%EN=VmY`Nr3`;U$*5CK3!Ez5T0hP^>*!|(h4aGZizR{w}bkA`7Ok*FHwQ{^z&7@q-^JA{?TW)Z`~_ki=JI1N&ETR{lW z*+WiinI#=5zpY!(69DLKETX$>l$s<3YIm2xVOgtU0 zO9`Zjj~8X$WXyfAV+@mwDbh^RN>NTxPOVO|NjV5{Mvd8K)p5Vi{q&eGDj^wiQ{-Clze`{b7y z%bhbyNK+02g`MjLzH87RG-7IdkO4N-R5keaeD^T7NqI;p|8IQR&$?fPXt0TtbA$U& zVmV4$T1C*BlqQPnf|Uh+v+j%J381oDQpzXTP-M{(#Ql2wx?NtR-0%i?_qmU6J@|&i z4+KCHLr=!9`gYagDYV^^TxEg$wRcU#r(+H;)%S_G2|Sa(Ai6*q5rB`v@53W�m_J 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] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); - } - }, - din ylabel/.style 2 args={ - yticklabel style={ - name=ylabel\ticknum, - append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastyticknum-1)} - \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); - } - }, - din zlabel/.style 2 args={ - zticklabel style={ - name=zlabel\ticknum, - append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastzticknum-1)} - \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); - } - } -} - -\usepgfplotslibrary{groupplots} -\pgfdeclarelayer{background} -\pgfdeclarelayer{foreground} -\pgfsetlayers{background,main,foreground} - -% === SIunitx === -\sisetup{ - load-configurations = abbreviations, % load units with abbreviations - range-phrase = \ldots, - list-final-separator = { \translate{und} }, - list-pair-separator = { \translate{und} }, - output-decimal-marker = {,}, - group-minimum-digits = 3, - group-separator = {.}, - exponent-product = \cdot, - per-mode = symbol-or-fraction -} -\DeclareSIUnit{\Wp}{Wp} -\DeclareSIUnit{\kWp}{kWp} -\DeclareSIUnit{\kWh}{kWh} -\DeclareSIUnit{\GWh}{GWh} -\DeclareSIUnit{\TWh}{TWh} -\DeclareSIUnit{\pu}{p.u.} -\DeclareSIUnit{\VA}{VA} -\DeclareSIUnit{\VAr}{VAr} - -% Command for printing the complex j -\newcommand{\cj}{\text{j}} - -\begin{document} - \begin{tikzpicture} - \begin{axis}[ - width = 300pt, - height = 150pt, - cycle list name = TUDefault, - xmin = 0.9, xmax = 1.1, - xtick = {0.9, 0.95, ..., 1.1}, - ytick = {-1, -0.5, ..., 1}, - y tick label style={ - /pgf/number format/fixed, - /pgf/number format/fixed zerofill, - /pgf/number format/precision=1}, - x tick label style={ - /pgf/number format/fixed, - /pgf/number format/fixed zerofill, - /pgf/number format/precision=2}, - din xlabel={Nodal voltage magnitude $v$}{\si{\pu}}, - din ylabel={Reactive power $q$}{\si{\pu}} - ] - \addplot+[tuOrange, mark = *, mark options = {fill = tuOrange}] coordinates { - (0.92, -1) - (0.97, 0) - (1.03, 0) - (1.08, 1) - }; - \end{axis} - \end{tikzpicture} -\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/transformerWithSwitchGear.png b/docs/readthedocs/_static/figures/transformerWithSwitchGear.png deleted file mode 100644 index 310ccf99f4d3b223570b7ac18c9f976c8b58d5c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19186 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 Xb93-%@auoac0o=?`FWAF>AU{}+M8cI diff --git a/docs/readthedocs/_static/figures/transformerWithSwitchGear.tex b/docs/readthedocs/_static/figures/transformerWithSwitchGear.tex deleted file mode 100644 index 8ca4ed98a..000000000 --- a/docs/readthedocs/_static/figures/transformerWithSwitchGear.tex +++ /dev/null @@ -1,184 +0,0 @@ -% \documentclass{article} -\documentclass[border=0mm, convert={density=300, quality=90, outext=.png}]{standalone} -% ===== Loading all packages ===== -% === input, languages, layout === -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[ngerman]{babel} -\usepackage{textcomp} -\usepackage{url} -\usepackage{printlen} -\usepackage{lmodern} % Latin Modern, bessere Fonts - -% === mathematics, numbers, units === -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{siunitx} -\usepackage{calc} % enables the calculation of distances etc. - -% === figures, plots, drawing, ... === -\usepackage[cmyk]{xcolor} -\usepackage{graphicx} -\usepackage{tikz} -\usepackage{pgfplots} -\usepackage{pgfplotstable} - -% === other stuff === -\usepackage{multirow} % Table entries reaching over more than one line -\usepackage[ - layout = inline, - final]{fixme} % comments -\usepackage{ifthen} - -% === setspace === -\linespread{1.15} - -% === tikz === -\usetikzlibrary{ - fit, - positioning, - shapes, - calc, - pgfplots.groupplots, - plotmarks, - backgrounds, - matrix, - fadings, - external, - decorations.markings, - patterns, - arrows.meta, - intersections} - -% === xcolor === -% Color set "strong" of TU Dortmund university -\definecolor{tuGreen}{cmyk}{0.57, 0, 1, 0} -\definecolor{tuOrange}{cmyk}{0, 0.55, 1, 0} -\definecolor{tuBlue}{cmyk}{1, 0, 0.36, 0} -\definecolor{tuViolette}{cmyk}{0.25, 1, 0, 0} -\definecolor{tuYellow}{cmyk}{0.05, 0.08, 1, 0} -\definecolor{tuBrown}{cmyk}{0.05, 0.69, 1, 0} - -% === pgfplots === -% Definition of cycle lists -\pgfplotscreateplotcyclelist{TUDefault}{% - {plain plot set = {none}{tuGreen}},% - {plain plot set = {none}{tuOrange}},% - {plain plot set = {none}{tuBlue}},% - {plain plot set = {none}{tuViolette}},% - {plain plot set = {none}{tuYellow}},% - {plain plot set = {none}{tuBrown}}% -} - -\pgfplotsset{ - compat = newest, - scale only axis, - width = 0.85\textwidth, - height = 0.25\textheight, - every axis legend/.append style = {nodes={right}}, - xmajorgrids, - ymajorgrids, - legend style = {font = \tiny, at = {(0.5,1.025)}, anchor = south, legend columns = 6}, - % Custom plot style (https://tex.stackexchange.com/questions/193589/pgfplots-how-can-i-define-one-cycle-list-for-all-graphs-or-the-least-amount-p/193596) - plain plot set/.style 2 args = { - #2, - mark = #1, - every mark/.append style = {fill = #2} - }, - % Axis labels according to DIN 461 (based on https://tex.stackexchange.com/questions/391332/get-the-auto-generated-tick-distance-of-a-pgfplot-din-461/391430#391430) - % Argument 1: Axis description - % Argument 2: Axis unit - din xlabel/.style 2 args={ - xticklabel style={ - name=xlabel\ticknum, - append after command=\pgfextra{\xdef\lastxticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastxticknum-1)} - \path (xlabel\lastxticknum.base) -- (xlabel\pgfmathresult.base) node (xAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east] (xAxDescr) at ($(xlabel\lastxticknum.base) + (-5mm,-3mm)$) {#1}; - \draw[->] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); - } - }, - din ylabel/.style 2 args={ - yticklabel style={ - name=ylabel\ticknum, - append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastyticknum-1)} - \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); - } - }, - din zlabel/.style 2 args={ - zticklabel style={ - name=zlabel\ticknum, - append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} - }, - after end axis/.append code={ - \pgfmathparse{int(\lastzticknum-1)} - \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; - \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; - \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); - } - } -} - -\usepgfplotslibrary{groupplots} -\pgfdeclarelayer{background} -\pgfdeclarelayer{foreground} -\pgfsetlayers{background,main,foreground} - -% === SIunitx === -\sisetup{ - load-configurations = abbreviations, % load units with abbreviations - range-phrase = \ldots, - list-final-separator = { \translate{und} }, - list-pair-separator = { \translate{und} }, - output-decimal-marker = {,}, - group-minimum-digits = 3, - group-separator = {.}, - exponent-product = \cdot, - per-mode = symbol-or-fraction -} -\DeclareSIUnit{\Wp}{Wp} -\DeclareSIUnit{\kWp}{kWp} -\DeclareSIUnit{\kWh}{kWh} -\DeclareSIUnit{\GWh}{GWh} -\DeclareSIUnit{\TWh}{TWh} -\DeclareSIUnit{\pu}{p.u.} -\DeclareSIUnit{\VA}{VA} -\DeclareSIUnit{\VAr}{VAr} - -% Command for printing the complex j -\newcommand{\cj}{\text{j}} - -\begin{document} - \begin{tikzpicture} - % === Anschlüsse === - \node[circle, draw = tuGreen, fill = tuGreen, inner sep = 0, minimum height = 1.5mm] (port_a) at (0,0){}; - \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_b) at (15mm,0){}; - \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_c) at (30mm,0){}; - \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_d) at (45mm,0){}; - \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_e) at (62.5mm,0){}; - - \draw (port_a.west) -- ++(-3mm, -1mm) -- ++(0mm, -2mm) edge[densely dotted] ++(0mm, -1.8mm); - \draw (port_a.west) -- ++(-3mm, 1mm) -- ++(0mm, 2mm) edge[densely dotted] ++(0mm, 1.8mm); - \draw (port_a.east) -- ++(4.5mm,0) -- ++(4.5mm, 1.5mm) ++(0,-1.5mm) -- (port_b.west); - \draw (port_b.east) -- ++(4.5mm,0) -- ++(4.5mm, 1.5mm) ++(0,-1.5mm) -- (port_c.west); - \draw (port_c.east) -- ++(4.5mm,0) -- ++(4.5mm, 1.5mm) ++(0,-1.5mm) -- (port_d.west); - - \node[circle, draw = black, inner sep = 0mm, minimum height = 5mm, anchor = west] (winding_a) at (50mm,0){}; - \node[circle, draw = black, inner sep = 0mm, minimum height = 5mm, anchor = west] (winding_b) at (52.5mm,0){}; - - \draw (port_d.east) -- (winding_a.west) (winding_b.east) -- (port_e.west); - - \node[tuGreen, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_a.south) {A \\ \SI{110}{\kV} \\ 1}; - \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_b.south) {B \\ \SI{110}{\kV} \\ 2}; - \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_c.south) {C \\ \SI{110}{\kV} \\ 2}; - \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_d.south) {D \\ \SI{110}{\kV} \\ 2}; - \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_e.south) {E \\ \SI{10}{\kV} \\ 2}; - \end{tikzpicture} -\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/uml/CharacteristicDatamodelConcept.png b/docs/readthedocs/_static/figures/uml/CharacteristicDatamodelConcept.png deleted file mode 100644 index ceb8fd092ac0a2fa66d6475b2e7130918f15224a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206145 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 z 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
  • _5YIbqsJi;1OCM^(0Dq9PLWndAv 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

    SAnz9P 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%0AU*u&AIA%YkfxF3RS1?F!(fBfuO_2Icg zPwig!F4-;z@#XY^nwlZn(q|5vgr$lEIM0$t{8G~s`0(nx2Konv+Z*;g8G2-T+A5-K z-3>zmcSt^9@ZC|~H?!bK=#qRPVQhSN2%xC%3int>)1u5>l%uVQlk_jH7p`y1k3`XV ztFPjKP>GCjw~GSuurz62=hk4UoE=pJbDC=cR$@4%C8v)4bUei z+ZK|$_|uNLm8aWkwai=-n&fbYDaOYiI^&3ZtA7j?8^GgDW878VW9XzxDd@yJqCrWJ zExKRCkf)ELqiy;GaX^v}G&Zc|0#AI)r|yGW!!;+1)ZwtGjHYcHC=~5ZM-R6lF(K{d z7B35zn%(X^1%1u_yBYMm?cOrq3Rkzw6${BX z;9le9(j{}JzNjls{+%sc48Bc2-@@3u-YkxY{3RW9?daPiA8-l5uNmC#Xjlr*{XipT zI{Hp&B<8p3Nc>@4A}VN{7cIP(T^|c9FM{if^06FTTLZm5e6TWI3uI*tUcSv*-(KS~ zJ^I!99EF~1a#EeWpB*D-zrH0$(UjFpX}B*`-}vO`^0KjZ2k&Kt<9OMn-L%`$s(nJG z!5Aj_7YwYuumbmk8DXN)sJJ)`LfYnUJ3GZaJn?Sy=P=FFzDOdEGsaiT3@c`Xt399N z63V|E`}zCNd7%has=HspHS4iQLLSC`Y+7Hh9qJ9CI5RzWMp=LEGO5~!HDu1wA1&!Z znBdZ_f%|2CxflHl7yOk~o^_M;r1gQF>fup>^TFU2*YVFAJzTm+CriTQafc4Id%-d* zmKibnK@=SQmRugS^}Rb;B8Gia@$g10%_YJce63txvuovw-6WIpmIRG&<-NMYNJk06 z^In8k50x^q^6}%(7N5QHe1F*%qv-SKM1~*shsPV;;geJ zxeo$W%U5?4qmqpx-fN|8R<4!p@7eIWI&O`OEP+ev2vaex=xK!|CGm>oX*t-1%6gDy z{}^C;^eC(0!3;uM)fH+Ait9fWYiadT)x}LQ_yTUVL+>%amp^B{7DDMC9Ujzp^F}!A z%l)Evm}QS2mXRYu0(>fDd=5)-FjA@{@Y%c(CC+odLF1zQ@QI;ixo{?J-_mQ0lndj0 z*mSdfv~Ru2;$=*OqxHxn*FC;39lI3zDJ6X+y1*$XC2u%#k3%3pV1`$G@LtYVe|HvvEIitHSU=t$S&{O)}o8 zd2`C8E`X(f^IboNJE?@hcW=8ecXospS300lw{N%a?cVn|$Z<$;-QDr=@z7Yr8lvs7 zUF_EoKC^SUj0o;wMgKp9y>(nw-PbSrC>=@)NN*bHkd)eVr-TRyZa`GJ5kwk9x)G!# zM39tLq#G$ElnwzY0g>j8?ejb5eb2e)-21;DTx-rT$N1JQ!HI6^Fr~X0FjEy3aN~={wox zdEdwf2@}<#jUN_Kf9ms8tfrFm6-nP3mC-X?FjKrU)7P5*P;2z`v(#I6?a>N>ul>3# z0w-~{ci`;Oyi|spKJP3pd{M6-PTgOBwXj%ru76suL8A~kfU01Bb=aWBn)&d<`MEx< zNqf6Qujc%w~n8k9l1>RT~P7kQNFo`r_$;6eqnZcVrs*7stgb&ef!b zNJIWsiuV688oGV!3)Y&8KMIe$qi{n=k=9FSe)Z$`pZbMdik8GgsC>OsXy=Y-?Yx5c z)w*TISuZvf^1^Carr%Vyu-Pv(* z7Xt8osp)Y+AsJdaDY|RFYaIIAf6}jR@wT@*J|#O?WO%Z6^&0uUkMF5=#m@21*|S>z zZ_bNVMQpslzepyy*I8aY08DJf6_quco;P z>@phQTS@`Py`f1VpWA2`3ZDl;xtMc>Hn^jpy8bTZ2e=#0&xtpG^D)Z&- z|H)ck<2=}N&2r0FSitZT?NC-PsdiA@;e0RwK7&;N*T!te7dhMz>M zfm}!vJOrwOs@Rds6<>*4xae`tOPK)xTnrdohIYOD*2) zO#zS5f2!)2rnEO?4*VrAYy}FR{vOROD)ZaNNL!ycRUn10TJH;2%o=qltapYEwKCH zjyV@spEASy=g}0}Ql{J&YubXgKYlQH%{`^0>>{9iPQlBS)1iZpf3Q9EJGq=Yj{X&W34yvU+hoLvuPiohl=~WLGZe#`btSc>az~t%3&BM-dgs4} zOXca^(f!ZDPTiB?7=d$nzNX==igzn}ET}jYVnbn_tW0cvl*;62d=S%$O>)a$S`dTo zVE2N$^>K7aNQfsPF2Y93B7!u)BA;CT}LF1+A6c-ForKvBij0`Y8ZK)+u@e&IDcdkEXd>mm`&g?-shG-QCGi}(pHZFWt zT~mQ_h3#5Q6t2oj^&WhEe}nRo)k4gxSG=u)6gzR1q{wh@!LOo4`!UF!2$iI-jKL+0 z@b4dB_gRH@453)LOYQ~pg#QQlv~$!+Nh1h11d1NZ$v)M+lcSa3&d^WE7XF4{%7}(o zfBC)XJQJ@gK7~zk&)q8b^?pH^Q;)sbxSiK05P=e?635uDB1exM0xIKgUnC^?EcySR zV0z+qW~0x2dW&GQXoi?kzgs^0LG=tMXKU6z#_pjDeDe~!3sd7d{~v>*Ax}IOYhNsSR*K14sWc7iw|HYg6 z`C@48-fQ`kg#J3j8|P#Cv&7i>pDeh`5=&5N${TYX=?Be@A6Rd2iZgQGzr=ukt=O%g zBP@|zALs8;mw2EkO>F*yO7$K8QjUBY+y77w0bdFZVoq25&StF>g?m+@v0fYQyaz*L z^YUKmncUhUDSlhs_wl41QJcPHJ7-4He&g$HhoGe0jl)&j(ljI;Fe%XZdt&0& zZa$wM9>d9r_J`wjPkP^-0BCF{r+du$&9${g02N0455t-%rQcaN<{0{m^sQMU*jCsr z&eq#vZdD3MN+KlgG+DMu_?~W5#n@gSuo_Xz__i1$!*=T=YfX7x_9Nn?@3sG= zCCzb*_xaRp;**dv2Ng zenD{d0J{b^Li0M~w80Ee33lv0TQlZ?#M zasWa+Az>#e$psouPAyKEs2a2WU$h`kPmZeK^6UdgnQy#hACEKt%o5SkzdN4%e7ULV zqvYB*At9Nu9;|ZG!ec15I`_Bq{uMx%$^``lak+l+O(&01tNpRa;3>iE`(#y4qcs;@ z883N9)$?lEhm~6=+FzTqk82j7Dy`7G;%PzoEkV7Im`>*|#={@VGm*WA!-M@sGd*V> zvH@*G!|XPt?l&s`C@P!qMavU;A@aPki`UW%vdmM61s$Pb0kS84!kke6ZM+ZK`2S^* zgMrMpGBV-b)#XKzza2&WJNRr{NgrWYJ*?T*tqbqV2*lD=0nCdV@cJvgG4JG(jQjKJ za*QJ|B4mS8okTog(($SPSx2$vRA$K}?*w_r7z!$z^iWzDtbTR;UT4mJyZ*iV;g~KgVUV_CH`?EQ1`}eEg+RTl&aLp>SKA|;UUBC6nC7gvuf>E zr%P$J8(Sa#^d0{Y+T<0JpARFva%KtSLBHAW_xeReW8+D!uWyaFm+wh5j!E+j(m0~I zfv521*z3r^GU=zcwvvp@+bu2ICaqaLtK+w5ovJ7OE6=eq-PD?l^|duD3wwphD zZBxC7F;~6_kFMlm{qwl}(tcIG>1Be)3W4XObX-2Sb7Vf;H5BzRZ=1)#MYt~IR$q3& zG{+(lL-&Y>&?5@|Ps~-J>u~iq%xC7!hYC3o1XH4$j7%nvGBH2ke$C@J z%PTh-eRnpYn8ebuB}FP8Eu!;3z20Pa;F(wa*Lq3=;CFUOh z@WvR|d1#84mMlfnWZ&8!I*z2&){>}fzUWI%Ci)0XL{O+OE@@Q_`rz-MJX?n2f+r@E z6Sv~CvV!^OuD?k?OO=SbbiU4Y%_d$hL+Z&wpM^Pmw{{^KC(ZB;e`!uZuNq4{kz#Ih zui8EI(zzO30E>mbwiHOr63@1vvh?i9ouG@BNXC6e?pXLg%yUA0(E z!IHBLh$`ymr1EofMXCL1@$J>bMF_!*+g)#0yQWkPmaS-Ucf(|d8Z z{D>m6Z04T+>3S;lR;=taIuF)pV$zRCXs-=a0bO0kpXZGZ(-_m!Aytq0*TiIwhx<6r z&I)~eof_F888v^k#O`j!$4BQU0mpmA-KaZD4S< z7?x9Qh@_}GZE@P-pfyqoWn08!{>zIL z#$)}Q=GyOr26rM{hQjH4BhJ`3eY0L|@C7gT7@2cpo0TyA=06J^3C%~E6QFP)d=vZp zf2=ngwcs##0UO=gntf>3(_ot4x?%gjGKiBrH?E6)_OzzOZ!A}-I|8(7gqaV*M-@SP8>j3``wVmrnqs-lMt1#5*y?Cpfi*I6i`dB*Y$0j^OD z`-^K#`pc=(OM*lG8!%Pq;@M1s!#$;RZQ+Bt$$MbFX&GOrGkruBWbI`&1`ed~DV@{w zodBZlJX7}S6ta7FU5*)zW~QBqY4LHE#F&Dq3`Dvr*iBZ>-(0~L24m5DDh zTeAw~ywoT>xhKtZC72dh1-ftAqnh50roP&cvB*Ur2v1mcL9Pg;4Nett!tK7fTk@S6 zxxgvU9?Z=PpmHXvcz*ceEDSp*k)_~O`1$JS9~m*y3L?at;cF3_T%><$qki?Q=M`azT3&cSPvmxd+%?G+lMieKLUtH){tK1x4_rNOwZnGj0)hO$eOT8-sft4ZZU z*XVq%7om_C7wupyj!+AHC_G4-`0gf$$J{4o{)T;)prneefDB}F(z_EPcN!fI@GXbwbLjyacnW>>Gr6o zXX%Css)-rnBuX$o~w-gtc$ zA_@QFw=pA{sX<}VS57B?DK~p={N(dLPUzm352Jjla`(aCmp`7FF*j^Ini!hlVm>^x zJ|D^Z_VmTJS)xRFb*DfRzLMz2cv=bHjkRrtGxKsegF(vEX#1l$lHdP4)&$M5Taf>& zsMl>jJDtf9iN`vhJs|_am3tsLTh7>XEE6Eh|=um?}8S}i652~ zytk2bo2b@J^TjkO3>jYWOaniHbe9>w0~bLMTuB;)?QCmiMt6A#wx3K%aiw;)cmH^t zY(;Kmi%2l*{OO9)c>l9-valHLC7rsVy6<(Xb^90?7$w1bbrhtg!x4+|%jXM=@%=pK z9M}#F7$x`I7P%(P?_Or*YpS@sX?-V}K4qfWL4gkEuUI2U)Tvx%aob`rwOO402A)IZfCTZ>RTg+ zo0j~BiIkjs?miSZ7zLL~&ksUx;YGJ-)d-$MTtBB3=yaHfh>-E|X~69>{-oS1$-!l^ ze|V*ZhDr2Lul;dSu9Lze+%Lq1N#a;sXL*Ai^y_imVe8)@(~S(5ySW7Y{uWnlO`ThT zR&cDhyh()I=(lf?Lsb84*G?m2zgQe?+Q!Z_zL-AUzA)hJ z$()sQ%5koD9(G<+R#Gy?+rH|}dBfcK)W4)VC9n0zX&aF`DG_yL2w^#Ni8At#fH?8l zecps?G=rQ;D-C`4z+a{zm?mqHkie?bMSO+K1{U4^v|=mKW*wyJtLVcQvVN>SJj&JxN)?6^c=pE zeleKoh~GCqe=a!LtUn`X(zENNIU0joesb>|^p2a~{(PFmACcmoV>Vo{nE2;q#S^A> zSt_YAISRI_JtZ9l5KvbxfvktVE%oV>tfOPuozg8~Qi=3CE(}lV5mIHN+;*j>cS&~o zHm;d&ymy~`1NZ_J&UKKgpV2y|5m&AP_+=<|45|$XDt00YkqorBF}Y*`{*39}WAJA( zK2OuTdYD9LxNl^Q%$|Kym`xFy(LWdWFHrvfG1p`%4|}b|RTjb*z>M!q!Fyt_kN5HXuL}$qH6d zpM;5?Mi!FZz--kc;sNsnM_f@%T#^gE#8FhX>NF+6xfU;o+n$!)HNc=j;D6=(Nk# zh|YMNsRsu?n;QGVCrW;`hA>Tk#KW8a`jy81G5v7V3gaF@AN%2$+_y zX=fjP6X4I5pK`4=pnW5Yvq6wnclw1qvizT-DD2yh_OPO(wWpo`s5VE2W_~UI-`IMh zC%CE)RttvLRJw~OyOJCUBXs>6z>*9l-Eq-BDod;{Php=L^<1t~kRc5-;yiAWhMwlQ zEwY)n+}>_RBvpOBoRZnvcBZbbU+_iXbb+!ZFRxHL<8Z+5&vfK6mk~r>1{|jbbS0!bWGpyJ{4iJOl~^?^J2nyP#di@rmKOir)(*a9{bxN`*8JF2k} zC|(^yB!v)#!mH2p52hMPZ<{v`OMx!xvSW+v#xKAZlyr1Y@88jW&&68XJ(I$u2#dag zef;rXK-SGTWSu9kfQ@*86A_FQJ$aE$&RI@k=^d}9K&AiM$S{ieMfF=};n#M;+=%v_ z>kJ>Hiyp6O3Zf1IX3$bSGt;?uarFH0@6Q$d(&x%&%TKmUq$q#4^(187+Iunm;m_0S zk8EZ^9B4sXi>*UL3}AbU{{CiEcFxe)*y!KaW&1L$t9IKf7RYRH(&5{0E+A1gR7e#_ z37lOr1K-bkL#s_oO2E$qk7BF&LK;021s=Y$JLXIIf*=gN7?0A-A5CZcs+b+gk%Hhw zL}Fd$4>sq(twl4b4fJ|OMF$fGdseq;ym&RvcrZ}m)?pEp`81H5skM5)8bg2>W;?Ug zgD9<=$z*w_H-l8LerB&~JjrSl{G)GxUPltv$&xs^2h`0K8f0au@$<&Kx<4)?5 zF8`l_2bSuOKTq1?A_{P5^Bk0D(lR}3LaM$y3+`j@v|T^HdYkH!=A|5R3Zv&hJ-!LlkV72C)ZXw^My zK3)$?dwtFJ^Q*(%lyPCvthz5 zq>inX*szsWVl17w(ka$OtyC&DVE3jBvYQ*dOkq$(-i8jo;ZK!^xS;6px4%;z-Xcc@ z+y!hGvT`WgPAqHgH^q)zW3awk7)91;w^#5FI9V7dklkIffUX4Z|FsE28Joog^F-7OcOKE8}yjpf>r?-7%0Fb#o$g9 zl>NN;%}M+=?>{!shg~+=El#@s{7)_5Lzs-OS%C!l{HK`v%!36DRRYy@_`7TtE;BWn z{to)@&f>w?hyPCOLmifZ*t&UAYGuA<1@+GK)6%Y&8cX<*=+jo<9P}`BQCmO~~J{ccLS#6Ekmfq#wTq=fTeqh+dppKh{9(fDT zhDv#OGd)t7$?l6b60I=zUn{s`#r}a9JBbJTi9`4&u{az7%ve&6yX{Ip9y+y(ZNltt z3Is%+jN?~ z6K3Cv7Rn)6<7!ivuP#c3N6Yrz1^`)T>|qk!i>2s(CN87P70!lAF5{X741kKQm8NU3;w&O1mxj{o9}Nie#xJ!GB!GCf6S?LqbmeZo*?2>^WsOIcF&Xhs+9Z+D*M@ zn3p0$cH=eA$CUapg6ombzQx7D&o$g8yslYu z+5L0uXX5Jw?7NIy>HyXSFEN(}i)~ur$atxkD?@MCv$5J(x&52fK2Oab6$ir;;Oz~? z`M-qF)PkD{2wM_(HfQ1w0PIZo?KiD}fXl`j9IN_$#5^FufK_!)d|t8Yt3=CtLjWL@ zA2>?+b5lBOQSxnt5c~O9e?fA0;o;*Vj?w3PekNdSsx4Oe1-~zGJ=1eV zu_tWYacBGAVZ{RGI(L4MlD;z5@l-U#e2wO@c^=##(yv;_F6})eMdGHBJPw!4yZ8~Bix|4j3}{Zk14M! zN9VtF;E$KHj{Nn}1W*Xtg81%5+ zY=IdgExsD%E}8jQt!TWMR(PHXxexA_4P3}@(8EwUW7zFZp@E8)K(hn5kL}tk6W97f zfS#%8*3D=A*!&f7qiot;?!>F7TTsYgmJN*>?_VI8H`i&^#{-Jl%=IBXg2p~~Z(9U@ zYrbn(sFm<0o(23X-28tDOAp%x()4rxO;gslBKLD9T8OwvWSF_^qBVxILg5$@bmdg1 z5F;rD!C3MYq!rBIIdy_`1k)3XLvyd`$Ps*fpB*KTJ_tbku<2X%*0hMw^S?~D@2Mg> zG@BVE<^%%2&SdL+XGFa-P!SE8K{;LdwyG=E(#3T7K9g6{q&KJw7Kw&C z(uW$1;h(EqXzYw=`mApTD4(>~LF@|if>6|oTE;fJn6qo-i*fobu)XXc#=!vm1v_9% z)!!)&*5X)b_|rV)luxn)9``H-lgfl?o<1NuJ{0+V3;R5LKU#}qCJ=BJ4-VU%)Qw^k zWW! zYmb>?7QF43+RGZoR)CW{7*Tg%b3VxcF-#kY0m7UAl^#m7>0>al)q{Yaf6riXbJILh z$@x#qDFmQ`A3`q#nXfk^kicHbmD>!qtu2bV?si@H+a{02W^mzggCd>SsL@t2Tc-o~ zoCrVJWYAc0o`^T{@P05dv^T8!2Q1^iZ6c=2s*2df{e@%G9lsJCHq#ki&xy^tMcK~b$ zU`E1Nh*6~@d`f|M)6o+Ff5F?FpX^S4V%6W}Lh>j4yZn@9eJ^WqLxh`%wx}QX~1;A2WxnbHbK0|?G z1r<5v8tEvPUw+qN-XVrb^1Dy&Knq@>PtwR3a~wg8`cMUv;*D~W+jU{D@YEG%pAUwJ z9z^uC$NpXrd-Gn|NR78^4be`RQxe>t0HWQiBpM5jyYwLT5C^RoH+;ozXH?0T3--!X zf}Mf`qhh6bvocJ`pe{VE7DS`Va#S&1ADf%x{)QO#yC}f~Hh%CEq#kaQ_tyzJu09Pk ze{D`1HUJo)T*`yC*l`gh3|p(<&}?Mr$9tdy%0NpG)P37tTmB=O+b`a^<5rS_`=9Jh z3B%LkeAdl{GXI*r^IG?7U=OyX?!6Umip8w`uY$DF$fU>?vA&pkeL-axgM8Lr0_s~o zS-UK3W_6p3i~18RIY=2m!~ypQJyWoTIyf3>`sH}d7UBJ;uz@Zv=8vHFCI6enI9tAg zO9?SM*NU(~CEB7Z;cv)8xbC)t@&nc0>MIN?kTFK#^NSj#LZ(6TPD(Tf$EBry4r#sg zIFI*iro(WMz~#IpgD-J;AJ#mwr+tfwZs zKeM9qSiXPwS1zRQXr`hNC(48dPtbY%kCj>dxZ8GI0zB0$bsv2yPF<(xq`J2h5|LCg~ek5yx zmqrBZ1V_>??AkmugOC>sFf4H;0HO$e6&{H!aw5@B(4wGoPcP}78DHx95)5%B%P_)`9c=U?&C z6Z-U;LIn6-9#!IkShpz!*cl8+tgga*-Aacj^FEm`)5nGV6j8?Z#5+%_l?r#+;)aKr z;})lWwZ-MC8{aLtCzr~cNI>xeXi0+U!O%aB;v%MKz1X{gfZ4?W1cu1qraPPM7pzUP(64+R zJM!DlaIa@xW{~5-haZF})XMDb>yz}@Fm8x*TJmhZ*dH+KvcH91p%Y*w6@18yfl6Z=d$R?w{Pm6 zYAfiOckH~s4Yo31-Vjlo9m+oPbmE}p;^Ps!EZnrrKYug8;db&Sc=eBl zv5>EeRmokHWgj6XolVQQX)xP4E}s%OI5^nQ(4b$ab&Z@ngWpRqPrBC)FY(q+X1`-| z$TAt5<_d-XX+N1whqLO+=L; z@8Zzneg|prpJ`5$dlKS6v87XESSs|$qpRbPWLBxbrsQ8dPwy!-2u|gPA=sD)%=}}3 zC^umgr~xp(FcWckPx@#ye%nUJn2T0e1p5Ldo!Ea$Y4Vil*@|Q6Wdb4cQE2>EGEtaX zb>JZ_RDcSd@1F=MEfCM|F~`FJgR<#YgBVex2x9?|F=m8(CR-!e+(nODwg^k{5WyN) zbnUP;K3CirR&|D6COQ&8@C_{;TJmpJ5$+!xc)|(TkG4V=(^}~`FdUK zO5Ig4;<~uFIFbha%DR8`$e(fDpOt83V|7s5>N$7<#11jqMe!`qNP#6*k&;@)qmL9X z3IvR_@`o)GX;h7q&<-YA%1{Xx5H#IiDA@nmd5o=lrs4QF1~e4hW6ce#IO~J{2fHu| zR*v?DS)I*AkliDShR0;18GwsvtTCgFywo);1Ouf%Kn)3r6IfC;jXJ4QdK6xV73q(I zs2?DIzbg{d`+VL0U}Ql`5Jt-(e2bWn5WOzNU)HtS^5#cR6Uv%W-fuO6j!Ugg z?w*eG<%x9i)3&#HZ}LaE#XTE%e^}N|y=Klt4OSaIjee+q*yMkJJwC#4YAWwzZu_K5 z&!6*u6iXD1=&Dwap6e6e%WLepxGb-sRG-tGR(_SxeSkE44$}wyg4SQ`1mUU#85rv> zl#KZBbAvf_gjpcJ9n}!GN5f0AkqLf{Tuk@a6z!>FXpYpMkM$mBcpd(LZsl<>_;6be zkQ)0P0H_>*?!QjPn4RG5_}9?L0vz%=n)*5GK&g9Fn&4nX?RDq$CqyNtIhf^t+fQT` z>j32;uq=*Vf~j~+joR-g?$KcUWf!Tg9Im%9H=dSZZ5V?$Y(As`!puPZWe}R?dBtpg z+>#xT>yOcq`P^H|`+x!IgT2?jG~EGp*FXpb``uX?T6+i^O8hzmXCWIF*sJu2*h&z# zeg(fthKWdtMk%;P_cjf25DKp)x1#wQi-vp4x^g$mdf)-X$h^5;Gb8dq2-{O7LAo*8 z$nK2(^`$)XmtY3BTE04n(5VXtK#6+;2r;xYbT75EeGuifE`rYUw5s?CbQ)qJ>_V{cHw z#@McSb1pTLz_~-h50CVc*F7y&)qc#S`l20ZH>=8+IT8HAcOU=)>B9MYlN8;#LB%0k zG=s@}n50(J=$CBY{Do&}el5LqRW{5|WZ@sde3){bCnEA8PaXj2EMr3)L*)ju#1ctk z4Fs~byz|V68&s*gRX4jvZbLHDiDdlotUh1#qbRLS zwVutm?h4=>R~V)ta%n<8w7B0}Oj1iAK}tT|B(m|Mn-=JSGK>B_W@JW?SLZFVPr%){ z;hj-_#InW&K|3VVtu!gwd_6TzhR4b+LVIZv0-~{Wc`JD-Z+555K;AHDm}uFCsz6c> zwkT5&1oO7;y#c{(rk=HZ0u34QyiW1|=uEYE$(aMlWv$xdohB{nF{CoO@Pkaf?OcQqTkheD|Z8Sim2^O@VMiqks_#Y{C5D4NW)l2cLqkk?tLVBTmm!?oTb++{n4P{I?4VR9NT<4zIc&yTmypDzNAVmNoTfhH=QS- zaCsWJP%T~VG*PfH!k>dG&PmGJUIefDJq_l#iq)@_0{%;})CkQR)xQHK8!yKP+5cH zi>V0cjpTCL(c&hgkIUsBx!vIEG(bCQPDMrL3PpSf)Wf{hq}$A_Ws@HZCtCPi2fp6o z67`}-{Q~3%C!f4Ft}(YvA>vs*tmGmJ`GOoEcjg->BE?l%$yCztBVqz3{Kr%8XLlGr zr+%y213JB!`7WGWJ5qLWlg}}mvmo$sP4|pZ5=#yzu8ABp?B89~!*7&=!|da4zXW!M z4w_m5g#cWTJz%9?_kKQ^_i8I#PHW%6&{}%5+7zpw_o%PNi6U_TPLa2N1~)p^mi`#) zGRwUAm0704KK~y0a>aZ&mEH5S4c965%W)!_6|1<%q?Xm#>*~0}+r_aP%qwy-tZv3C zJ6K7dz~fu(h#k}askCJr39wVwJDpjdL!GI86{x}Y0JxWiN|4FBl&}NYi6|sFJ@o22L)ckib__pf3@pQ3a_T3b03R=D_CE+aWOm<740O!2>`uKqH`D!RK%Y zrLJxP(a5p{EfJyJ%lG9{4I&%r7@(;L@B;b7mmtmeCzq%LnH2U4i>?Re(WX4bRjb!v zm4*CiCb9Un_CDIjnKn>kCLtpPw$WOv1-IMoIqO2_vl^KGQ*6IkgZsynctH-=KptCE z_ApqI;!_Nni#c9R3jykC5PzA5WZQ+z>Mpb#n?>-|#-{G;Od|DD4{j^P8a?>=#)-uB z-E|BgXtFvTX@%V^fG7LtJfZU_==Tq*G)i=hBw;iV3(B}9j6wGR_z&tZOq${*4}yeM zYam=TPRWzr%#Vwphybu_sX}w*(gj-W910v8!S<ZvU^+Fkb**2b|sdjN18tWtT$V`F`DBknGJmeR5aB>3;rnp@I1?p2%0VbTL!CL56#urzFxv!XhgGmF)G73~o>l*^k@6q->5K==Z@4T82P zpoA2YCkuHF@zjsmH1yhNUlAk2)1GmV%v-?}gSuO#jifsr;_(1^;Y;nWO9&ID*l8HH zOascV0)4aI^nxfgQ01~X_Q|s&yD|hri_d>h5ngHU-hLDI<}&01A?E{~t@R}jNc<29 zD5t;3kLXADYTysUC(L>a(~d~O>(FEN8Luhfwtm3d=DDX*PDY9=QD>u?h@IOUwn@VQL{8$TY7PoTw${ai@@=VOh+4npc85 z2dO;a`NP+k-o1nA1w+pwA_R;_5KsuKdh{T31Bs?(;|8XC@~53YSgX(~>x#I}7X|(A zJdjfs6YX_QW`IgGxfd*AFdM4m#>TBX&!i*?2LPtp1n>&TfcXn(3B9HI=VSFmON`J< zGOKbpb_InuC9c);Zr)pgrVXem<<1j>y0C*Jj+DK(ph@Wu?xtK&V@3aY84fC%P4{rn zO4tte4SgM}7l2BB1~cRKgFUiJt6qzVpFl>?O0x6~Bre!!I8zPY4=0?_mnkp9>1cRk zAFNCci}{4b#VtknstGnoXN)TH{f4ORZxktm84kRcoC2b7EqOErWafT}W$ohUj;3UH z$!&Qc@>2gW;ilm@S$(KnhxG+Bb|}o|-6Z~Jk16(ryBmm-AI27JM6J(2@xAK@x(FdL z?2|Acy}gp}tM4N|0hR%B2Hmq&45i$cUDwP}`f2>v8!CkVQJMFfxmYN=2hY8OZejMY zo8b${q91H^MDunYSu|AtzrmRy8pFCUmzqc2ubVoe7eGYPQM?B@6A+qBy1+MEm&v@CHx46t_@3SKkbiK(g99IiUfX_w9&{D5 zxP|rxIdnHSrz|+}K|7U)G1j3B^D<#2l?9v^P(ewQGb5$ie`VncaDa?Assn0gT85%z ztSXwct%7naTlmo}L5)!_angIS@qrT(It7+Ut~EVZH_P5uEDLLAsJ6!8WKzpv@KHDK$YQ9-#wFHg4WGz2Qp zDwXKL2DeMfyJsk+(+Z5mU^&%Aj=)w>(2vcZ>wM+`u91IDI!No^ox|XMPUS-((t8Sq zKvFd#`G$vMqpR1+E?*pkgVh+C=xZ2A8{gFF>@FfJ^(TU zW)sv)LA~S<@LTNqA1mi4zPYVZUF9 zZy;u365G%iqz1jvn6gvL-#dsOM_AquNq7lfa!ES1iYHdwFbTRKNSOH?z9cwqipe3= z-Ncp@hxm%r1VT%w)u>3Xsd_FBB^>fd9>f z+bo3KNYqrbti%V(ZVwOrdXY)&kb6UWAztk7KPkCQvFE~GnF%pmi%r7%Mc*njrV3&> zW`M8OEg51n<_l|A^Y5nkzE!RF_^!av=H`T=KE9Cv#=<;NhzSXaL}kZyW(W;{5*mw@ zfv3LY6&zf`4I06P9N2guTMu1DMKk``mQJ+*;5|neG1MBC`e^EXR+)Z3Jq7co0;Yz3 z>MgX+u`_fvl7Rghlc$D$Sux-56wz$uN0I7|AS&-pp|gY!nF%F8V0xi~r}|hKiCsg2 zO*g;k2(N_Vl(2?T2KfRI4ge5Bv=bU!jhF5nz&$D_#PUVCa4Rm`6*<&hTSXBF2_4jS zU!g)|^o|YI2t|4;e-1$BWy|Bkf0b~@L=n_eK3m-3o!=ldxVdanZ%1=mI0TQmskq~fY)TPUi#`mU zVRD;3jVY4p;G2OSm;*XVEW;=+ut{m%0QBRUU=PikCmQ0$In{)?!WA;W0D#_?qzPX{ z%=7!0y8^>PDu+ZGXR<9yRbvHuHGWcR_j(dRWoMN44mL86lkhsaxoZ^^Yk-Vp93-1~ z7B>%;Q7B4ot1ig(DrqGX^zw6mT+;_Xdo+T$F=3^^<~A8hD{lwzM~#Xgc4%}eX4KCY z5|1o<$ivx9IvJ=z{}6rBiQ8;__m3gKq>K!8G6h1cSy$)}YtzCnAPg|@KxGM9#DZ#j zY(E@(ppPOv`)s>;!BFY7f$qypc zZM~GbE5Uj_;sSO7=vk=nIpPquX1z|W~v%q7ayFB0UgXH&IJZR-i zR&oc?O>yJVP|pGyP#L*Z4xqA>B!O7^vigWI{npTZ&UeTPI|#*BG^^vdMrNxg~TO*S(&{(Hy{YR)6PNllSW}SN~_6DJ)6Jr zik?h~rIFSP4o-O`!;QJHp=!uL2-)zOQ5b&Yd5vIsRbc!SoOiKgt z*OhQJy&Ur9(BUIG5i7L6Z`^GMfDbi5H1YzVHoz(24!sGOaBqzaOV#2(?J;*HOK!<} zgbCC1c!2l-r^<4bgk?TlKGhK&4^qN8_CdL>jtRtp;v?_2l5PXN z0dT|DtqfGAk|zV8I{*$$pjnnaD*MYkk!VSv~4Y-AQ3lPFprw~p&~~gdu5;O zU*C&=7GW-T&v(q5<$-Vrr~AP1F{zhOG^u7dBD+jb?seSzuW#Jc=b+coM`Xl6AA(|r zloK)scnSZ@)Efe^dV6Ycqh| z4IHJ}oHlZ?G5bjz^A(^219QYVDu-*_5f%J?b|1vv@$k|`X9|s@acx2H`G!aX%|ga> zC>0+}M~F4Rh=YMl(sK2N>4SvjOWv5IIQRosTHZ3pjKU2X{L#KiEI+ti2lP*BE$0gt z7u`FT`u5HqV_3d6yD~d?I&J_nmADOuZULYa*g6eHjN2E8gO&f}_r-A8p_EqJw)pw}3;v zKG=DRKFj4A)ZOTdBlAoSQ|~Wws{`#lbY*SfGbpb?P6VHB5(9=9=!T?`YUe={t)!$83ij;I^Ws*;@62(ob(u*G_<-u6 zt!i36$kv6Exw0mgOm1wJ%VunE?s3EM9d9nBPlLJ z&VyPFhO0{@VPz%bt#nl}K>-i_Og8zY;6SXI<9e>4>H+(9ti1aWSs5>aum>k$EUY*1 z{1>9yZE0}r0ilm$hU&Ki9pH35gn!DTX#TBM1>!pejB`fcb%(LREpDY)ixnxT62MoSI&h9}zMH zTH2t4yhbXht5DBSFlxGo;0d(NUDJLF6c>i{2ze->AV9U$sE+TckSV?#1Ndn~mJMP~ zfP_G?gC+prx%%^8`PwG9I(*xgRFDXgp^`w!!YSVsj+T{S!{b*Z0(C7Aa9 zSN^>Ns8E=jnwE1ZZ+ahj+RMI}&wwvS%t1_ZLx18P#`7LDR?AgCWmi=t=5hLDYgLTC zJQ|V$gTUS~N^6;i52L3Tf?m)r9^kh%>vanZTMUugm|k)_j)#*8jpf%@E<`8k=_(P5 z$>cqJDnaw;@HCmIuN??jroC}+65#{TZxw)+wS>G zt!pg~O~Y#4v~cK}R)JwOu*Ry=37G#yAfTOrAh@rxRMOub4k%6;^;u`enAql0SeuDn zn8^2$e2~K&(Aqdolm>PL!|6+YY`muLI({@{G*GC){lQvlfy9?{)IW$_{e^+U&&>8Y z>XJPWkM&#l6kx_6<5j*OhSR34qvLOEQEfTnXCiB_4`=0Gt6!;1XQXA?LM1i9wPmtDdw?8OD-V zujy%L2T;=t!lr>-T6?%q!Syz@4}1VV2n#YpZUk-s$VZQZ*8qh+XeAHN9a}HUi6>wS z2|hGE-yMgb8LfVsLMB_nr1vQ2bvhu|vH1@xuL)xfUlK*f=>SB&NLR&3BcJkNN?g|% zL~6-h3yGdjekWLX4?t09N^t*GXbzY@1ktuChRJarzq2c?Nr=K%aju~Ulj_xun)cW| zr!l?3u?H_;-+?i0iR8ftd_YWJRqF|PR7@U1IeEfl4-a5e7iM)uuogg^V;6c(qN2ak zXUS44qMtZ+8z{TMgP)wh_4r?ICsT2EyTM|@ZRPY1C{wW% zM*_PjEyX_rbNGyHfqDAJ%D+^}5JGSf_4=~AN;7+>!w5MF3+{|VTj4vl93Bvb&yT1S z!3W%6`cHXJ#l|^il#s*UZ_ms4@vTU5XwvaTE0!esM892FMDY6#R8Ka zm4Xdg4bX^y=bqzhs1rz7lKobjZDbH4mXOt3XOId~#)z04hEVQ!{n&4Hqv1Kw;{iu0F z=D7zW7j7VtTU#IhJ&cbk38k@;Tc5@u;_+)H0bNgU(fXrEbw>6v+yrwy5Xk!&2+Rj$ zPU_4%r~3ybCl>v8eqzq*!3STuinS6DRSWm&(Fc*6-#;fYnD`8rcD}Y%5n?!@u`lJ> zs0dmKu0cBz4zY8B9}fNQ442#8(*wVg0BI0V-NzA>iw~SY$1a+iT1sBkpv5q+AmJzy zPJ{$>T)$v%fumhv6BCdvdTT?tT@9H51C8v^5oBuKLnEkkD{nNu3-REm=!B%oms${> z0j?N5Z;cZ{K}LFG&J%o_2>loZ^RwgTvzARME!)4R4-2MdRdds&OQEfb8k~5D%PI!L z#IY5i5yF}CRcx;l4T2xP^DeO*E6rGqdaEN9m9vt5ANO3`9ZQ7j1{=2R3d=$ z8*wZL8-MA>Q^ACr$aADggt(U!97^}}7X`4`K6imaJTJNqI|5P`qy|A7)782JpauX) zp|lw`@gwkG_iTy~LL={#A|FI+kSN_$Fb}5JUt{<}kpdra5x5-|&HG-D{HiT-6#adh zC5JQ?R)M#T6~Xg1Wz)&{aaD_;S9*6kFM zvQX{)r!Me;Gw={glGWjU{wXMqSIMk(=3D@5-&TzW76UJBDe)5U3uIi=A9v8=2q|nC z!0BupdIe_^H;n+eIphfvsd$*O=F=&$_C$ii3|74BJW{6BQPg;&baqFZ8rKeWQzqb=6u_XIhZr`vn~em_rk+-~ z3yq3cQr4UwflJINUeuRyf&80ON#KhCP5`tJf)L0d@Q-tbB*6z}F)6_EtnbNp8r04$ z0G?cO+|x*q2(pA!?|=VwD1@TEQ9yexCn*>OU~lu^Imrc|JAt}tie`jQgrV~CmkYqq z4t53@K*a<+2IyqxXLC|)&6pmO#(ajcK^veW3p7nZyu`GDUKw!zpo-;YwQ2IeopMFM zK-bf{T>Dc_Y@q=L5B|!SyT0Tf0%`e9Y(L;$0GOmXf?A5a^xl6Fd}-y6frtZNjQ(On zH9GjY`)he(B9&kCDWW#5fE3v*u081U7zmAFY4D#P5HJjY$1%_v6h`6(zDNi2QuH!x zQ>8;Ec5mKgrBDL$@8}Ay6zuyzi@6J5L#1T%82w_W$gmELbsh%FQWYnOzeQ$`(D1<1g3_EZ{A`*0kzjI7lPbUUZ8x8Ty)J%rzTiYFn6=z|FzDIkKkeo}@Z#xdq;OY(jg1yhGW zOgzAFvp$B>fzETyk?$$cwtBWkvVflkknV}z^t5J_F#=r|c|_&&jXekd;u?H^rWV)j zh5Z^VAl?>H_om}O7hV%vV=n3rkyaTSk(QPgNAaPph4)e(WQR!OJz!erw-%HVLcmn0aj}j{QpQGAug;`{exGBO!%D#1zP#MrY}2 zzf;{xRs2}#5%|FG#pp$7X!?1m3%5a($6;m@;A|5GB-(>ncN8F>HMj2rac6`2poN)Rk<VpC zBwI;}^|pBt1>|OR(2-_PDiNIeAd;o_7>jA#4^oZq1U<1|C``@>lt0H{gVjPPp@iPa zc-_65>tYo!gSSF^U#TsdlnGV#fC}+Cyps>D|1{IrX4Rr`7 z9>Lw?Td!{rv?%E6Ip&S4u4Q-aL-5$e_h>feT1176Sf_gZ0f@82UWQwe!6dTO5nzFj z4@T6wj$j#t@>oK~4pGSv3TcoQb1k7_zjdjrgHXipf-N*}aP*5sNUv zr%w97n(>Uf%(D$2|;xn_!~W*v`!GjPn@o-M>a==b*BFC zhL4?ERCK6GVAg(lAOb|&1zwgao!T10 z=qb_0yLXROmgIO@&fegje8WV+!#OO!;CS>WhOSqhoMz%`aGiR*!~D0``Um6BvJVkj zs8RzIa(W^(Nb2mQTH@=Z{hl zLxY8ogO*aDoTh=$I{b8$p-N`|m zwc=ig5VSNwz*#cb0VmueCg0!A1l|s)`f?-~p^F~+Q6j7+(l1;2ba(y&6BgBwY6f#R zVp&2tuCHauo-c$Cy8lo*C`X%KL-$ooizpPWV06zW$>%C%nM_WT_^ugNB;|^86dR{j znChAjA?(m^5}VYfDB3-_#a)R_zA%zyeIsChXKm_|o|0KpoU!eIm0&3whe_rTu+vv% z(a8R?UZsf}%^Obr81bj->>kY@?U%u+gva+%T}qICj()>FTPooR16Bru^wAU)ac5?u zVvdeg^vtBtpzh@{1u0~(9ib`R3WHTbJk#J9bq*VK`k2~Zo0}^w`;hU9$$WTAGR0;{ z)!^#MA9f8dLbXw@OAG>96T8hzZ1DYWVsiNC1d8?+C_j40+kuAb8)WUsuZQf(L^g(n z^oBL8=Z(gPXmMF-&zFA@u^M!8u1JH$KuJ(ZpPb4gR9o{ySeC3-0w;oPx3h8EBk!sn z2WrBP<~O8)gcRaz_9K^X>0nlM61FN~8(?1+OOF7GDwPfuC^6OZqbT-yHdI-Hs1SoM zXZh#s1eGg8IuCX8)*Oa32IsW}$~4M`B|3DBV$6>(Z)>nf$Vof!xZsOKUjPhZHg8~^ z`lD8RvKDsYn_fcOJ~ss^5bFZsR&O;v{|1#J`V-6KQM}u8$8$SMfNVdwyc$D2r_$}w z^OeAI=qlYXv(_QM*dizojqJktkQMPgBAElwqp4s4FigFF1m488|JL<_A~S7D1%b0! zxB&jS!ke}L&^fAiN~{z5;z+;UHL|qjJ>igkP^ici1Be8h``22D*b<_rVfPeo{>UG+ znx6KJyW*CUDT#UVpq^&&{|SCws+92^uj6Gm{OtDQVs10GDud;<+D~b#XU|||PE;VW zm)x*Z2l1Y9O>MiwX=J~Ey@7iu#BI6XT@L*%=mg4F1Rrz)T(a+yi>Y63=~|APtR;{8Ku5Kd^&(V>W|U?Mu!l|JB?sv=S5DkSew%DnBm|yzpmi zVzRlt-Qn}7{qYOBy7J>s`Mv~hN1mGW_TNM+!qAC`z3jt+#Bf+2$up_+WGb}@luEbZ zWma6;JXK%#%Y#i*$vNO)8_ytY6079L3O|!H-p#H>V9-O~^yYTs@)(I6nH$r1p1pr< zaFCeEhClmKBGqN1`DT2)qmun}KVi~hNsGm4R&~B7;-W@_f7z9=EveL{@VSm{W7~7n z*>#FiJ}ciCBNh<^h}Wo&A7l#pH^YuN17VOHHe@3X)(tmmDq9BDb(N_re%V0E9zQFm z%hc(Q6=3J-h2o<06FzyIor{32{RZ!zJsO!0jPX zd1Vks_xoAcdd1yZb0Bfk6VR5PLUCcOM}139fM{=9v^rqmruV{F$RKaUdDi5ZhnH>u z#4Pbb6wSIhaj}#P)vkTsF2Nx~4TYOMA}X=MxB9>@ptGgU0-Ih=DMZEn%K~){r~{{T zVd$akr1~Wvm37_OKXPbd2(YwFWgBy9I*$(zqGDp}YirQeS+vKY-I`4;}G28VLkebzmEw znU0%3%B=`7mp}FpAQfwJR;*Yvw8P{q`7i$leLHu7WhJbF-#5I>(E&oAWw#L8>R0O|{f$&DW>Eqn^1M=DtY zat+t(jvrIMc)9&rufy^qS=@bC+2vR6v?kS-I3S9mNGGU2$L0QsUh#51b4vy>L3!Lc z`>IAV$S5drqxT!qKAT|nZskw+A?{FDr$!ncj1I?uX!ygG*We*zVLNH_j^cTlH!#Y6 zYlc*U%sQ>Dtq%_mZv1+(va;`^f-vxc5>Yk&`U}u(^dc*3-J92Bl0an0 zfebYSh!)IVUZsf_JOUs!|8#NG1;l}|J5W$P=GYA1xt5|5dlSfzx4xCfzxl&eqH|g% z&D2XBrAJo1hpJ0}rJBe8i5zTCa27_Ldo$wn7CVGvICf}UrEOY=63l9$fvT^&Jn6%4 z9R-eVCI22$LwI4a90L~UenhFYG1b=WgL@5Q5bMp)SXPBvyvc71H8!q(6XCT$jT`rk zAd(Ae&F#9#ui0Xf=>T53Rz%^;g8Y)u`ASej1`G>c5e}__m(0RaxqqGK%K6vsLnuGX zZ6D=6N=zwos2&7{+mFt4F2!=EOO!edF#4M^TPC)DOI)5%;i<}2{4|l2D9b1f+Cr0) zlN%a78yFaT{P+>vXwXS?&uTlD@4@WTEGYcl2sW-{hZ49fB{(pqTq`H4`Wvn=I(b*eZ2!DCJG_@_ia zAcQAP?T}Ot#g=RBjb$o(AzI0xL5wEg11JjIyT})e9hR%E=${^5r+#aN99J%3N@J=7 z;WwGhK}|J)EAz%3a#%G&Qw%94WbL*6llup4{sj3axsl8s!a5JCuTJg^-WhBV=prJ6 zm;F&H(3THleXl_>#vldYqNqwqN3t|I(Q;?2kCE237pu&DH-z>h7lG`QRmLqt*s~+? zO4TuvAHXeugRdn_tn{HErxyl30(U2Y7JC7Y)>}H)A1UZ~Me_U|DfsgPdcD8Z0adQ9 zXL)XvL)6)7k%9$V2nsSFT=I4L`VV2foX2liAn~aHrAa*HeGXZy0uXk_4~rl$0&p_0 z4t^>=-|D+m8Oqr82V+a;27Ko>AgN)QdIkS}i#^}MoiIeI`Hi$4X084CX^m=dwaA#kwf%(pTjgkJakNqnOVjfoIG?s)i#S_eU+3&RKG0HkZwBz}_N5 zSzW)nQ9Q1c?8>6j`?U-~@7uWAIsCQy9DKAFCvOAz8dW6YcPn4OC$-3U^a22ozmS_n zz{x%V&UYpdzH&_%4btNNTRGM(835H~z$yC_3``%k_H>4B;f;X;R}$D24XA@pc2Q2+ z`?7J$3`AA4-Wl=c16EKnenYX!UoOI)S4%_uLl>PstPY^DSE2%iS~PRs zS*FlP1Gd<&`uoXfAP6jX1#2xGD%H<;^Ynu?wd4?93^C`@nYrB>PYKdKv`twFt0hDJ zfM%?@LgtG+{FUgT_`2eTNI*u1`*#rY4`|jW zs~itqy#Lnx2m)zh5z5afTl=4!?zUs6H-Bc1O^N%!-s?pJ7t8NoIvaf1z;cR>M$#*v zZkk(Bky~6W=w^Stvm>@bAD&a@Pp~OSLFBgarPO|Kcd8?yjw2}XA*;JGE+^SeI!L(5 zm7?A`_f?Lgp3g+7sI#Nmmy4bwpihQIov!T>0P<(fA>G!~wvAF&wfWNDjY5tB zx>Qm2`!m2QnDi`QOQG8Fg_YV7DV3T@2a?VAH99f}UVBlzXm*!Sf$-++pCwx&_FhUE z?R4?#+vixDttDK(SFe=!*I6!Dl~|us-8gfWH}?0V64qtZ0t(bbKdsNc@0cp@g||Xc zS|ENyjRYag6)-4MEg7(Pfmk%L?rWXs>(+dEQ@ud1RPV>O4is+ngUZ2dcwR@dPx8mh z@sOl#>kMN1(SAjF{=0X#X2e`%m98v$Q?aQ!{D$GV0=`ZKBlE*E4M?*DpkkHH#@)Z= zr|Pm$O!5EP_>QoQ=VTP}6)_cp`e)q_b8xhbIGvf z(3*c*?+yM+xWBi*Z{O6?V6C;3?XMnB?O`@XoGh@5(BiPKzSHOsxJ%1a?(wM?#p~_@ z<(vgM_Tl(XhJLd%QpS5l#ZXT3HVgU|Bws&G~hoB3=Ak_f=}C^}emJS%Bjx|Br1Fn(LK?ruC=d+_PK@GHz0N zYzRMFm|tx3AW9&NWTDhNoH*dUJ+4=8dxj&T7E^X*fCzMKF{ZhDrxYviP-}*+$~iD1 zSbuy?wAe2{vhBGV>z~cG6K+YMPHrv`hvoH=QZvtxLYJCg9rq8}sS>6k+~JCg$6t>5 z!kxK_p*X7en(9vDphU)x+@~|8-Jkkqi%aLUTHP>fmg}t2l|vGpcgES6kNWj}^V_}L zqh5Ws$D_FaS!cEV3V)J)~Z#k>%&j%O=fCy%KZNQB%uLFr@1A zx}={NS5mz4A4w-%YW!tbU!jZ4!OCjP&hLfSW&M0>CY!-q(g`2+W?qQ4Ux3j%I#KO- zGC`8C6D(OpWqrjL&Co6?_5(#wVs-`WX04Xg5pPmlTwH9d2r93T(DUW~9NwoA4*tL2 zWQdQ+GoQ>xyFl#)m7|A{6g{XQ_^%)On-p3IX9@(-d8nUU(R6ggTctA$^$lIQ{i+vM zq%X-t))ey*J?Mwu4^rikoa;k`PYw1`e9=D8cEb8jED+0t^gzS(P+t-t><5L~12u zu}a__^E(Mm#5--J_vtR#i|>h}rBHd9n7%Gt)R>LE9agnytoAwvs4Ib)1&mbu1=B;c zPC`-yy8oWthyR{k_!l}l)33w>>+0=K0`LG2IzwRr9#G=Kd}qjJ2sdN+uut?2NBKy? zo_i_&JCn7XZ}VIQ*38U)!n-nY1%=HqA(fQFP_$3oXy6|o#=7O4bvdmYvZf0zZg@Yqu!C6vL(#JvR$Z4vi*L#OgI$+;!hyN0)^7#%vYumkHMJH;UlRE7Hj26L?=^xDbXVSbgE%(nj& zR*PVPqS+yEu@lY%J`AE>Jd-1Ar${^A|=3`KzFtp$J>%nY>8zyVf z&iCOk5t=CbLqUo1&lc3_jl;`YqM8HWmscMTO|p!@`4<%hvglFrdwcZun5cL7=nfL7 z8yQXvjEq!OzUARd7jiWAJ%zr!bP*MGZTI~Abfo(P5Ov;JclplRAk_Zpoz)h~zi=Qu zu?++sB5+ay4(Le zNf*3qdqtO%i-tRH2-zjEc&q<{aDQ1;?fq40Ywzv-791i!Wh>&@MJj5f3nhXH-*MT*kAf zKjD(Nd|X4JVC7cI{KJ3hqh$gs-1u|Ff9p8pk$hbZkD#}7bgDM*rOwLPo@tT3`2x~J z?HL7kRs?fC^GCv)Hia-ujBEi$hk0TSOmx6^a-n!}RNYL55Z23=i7BH=X&Z*uJ)RsK zpUX4&jQ3-~D-g2on?r^|Qz?3O13f4CXvPFq}yt99JF64z~?jkNX!MG+EQzy=+L~ z9VC;f*CZD~iiOZ}OIH zoNq^-Ojz;g;vjiB$sLTfkF)dTCF*WP5xLcx&$^kZs5Lg-ZU7GsB>TVBZV0%g_KGFB zBNze`b!B_WQ=LZ(1vW||jr+WE(IFUMaTV|o3`+#4^HD0IB$7h6Gv%$@QReC(b>z+<1;#4`} z-$}y|#_NX_F|+GlvJb@=fE@w@VFFX#s?R(u~{uY!(pNJ`w$M_Zx$NE55^VPOzBw>QiJ zMZ0c4*em28@w?uJemYI6F;31(ClrCtw0;%U~c>8y^2bPN9cTwl!ft+OA%YV7g&4H^0Ago4XS?wz zW_EjfZyE*(&#NOFdbu$(I;tZD!F%@Jn47-2K!{c~enJ{^=UsCSl z1&eEi$n+Zl}n`o2XfQ{$VtGOekBfp&66J!jz)!_wrg(t<0KqHk^|e=RK= z4)otdNo5IUm{a_R{b;n5-F6hvO247h@Ta38_{-4JQ=y6w>F|hJBjvd5O2f86)d96q(+Yi|4$->O($cPzRqr1k5wpJ; zU)U`-8_$--RuU$RYx?4?4%u+2^=@QU2X%6BRrW$w@ zMEB85ukw-_ljO&3>$l%i=5GzcCO6irgYyQ)#-jVyK`&=xV?$N{LkWys@+y#afVoxH z9;jj9u<(-JRL%_HvA?}}TJ2iX>{ZNSt}~wq3a4k3H+|ZhEoaK=Nah5jy~E@3+oVSN zS%nt+cKVV(W<)@@h~w)N#~jG^Y8}Q>DE~+?0O8neG77}UcoQaGUgNCztW>RCo}%ff ziuwnUDVUW6L5bp#AMtq~rFjI}RBkb_mTavT$a5dEe9}Dr0kY+hK*GjS+)w?m_t(-g1W&qaH`x9u zQPXeNwRdtdzGvrMPGX7(?$9=0UPzgbis0+~7}4yJ(eBNs-|iKTiHx)sye?cU3p7sq z$jsbalT#>-k3XiBT#u#2OvD#%1H*|hk9Ntg1a~*qNwLi9wlVMCe(FUK6Km`J>Vih% zny6`J;W9q0y3$}rMYNa~mI>ud20ExQ*nTL_CxUL$DN%aEcHm8uZ}%s1Q;JnW;|0m`rSKVIVR~YS0FZA0(Wv}|MTJeKyp#Rg| z?KVluA(vfTQC)vMjDe?W!GGe(vGfyuCig0*``KI5`^_PzX$9Y>Z=(lsLguEko4puhU&HF|Wp^WPaEZWxXv-GTK#{+csdvL`8<1G$ zV()Qft$63XKT9Q-ByXx5g0dSMxAwRu5s<1CVY8SN=jwAw@31+TI?Q#Un3ZWUJM71s zLZi5**YW;ion`$=!(~Fe{LErQQ(kpf*EM?>P{etoaRRzt53HO*?1b!uwbBdEx92sg z{S&!X#knS3lr##}*ikmvW1OFlG`BpxF=R_^EKATbKCg9uZ?FwkCc1fOli#Lf(p^|~ zd*DuLE+XRd$vfLc--GShXUu(d@%PP}Ua$D#!iiwNmApFAvJKympONjdkB%AcW}ySh z9Zp-3e<}_AyF0`$pbuRS7eY9tFH_S9;zNaZjd9}Hz?FytW6?jj4`n&nEH@7L1F=0V zY8gV;4L?mKk0hnIRZF3eMCeW z^Yw}j<>F;FtRU%{m!PZuzk)7qlG}M_CDD)1#d5^;baoc!*Dt=V&a0xLX<{zhlgoV( zyFZk%PzST+48+p#NYw?nnEGY$-@(*~;)nOiAXS zfD0oL%&W7W=KyBa_Sh}~!Csz4>cuM}Z4Xa70A5>;pDQ$3#rP#c-s9{FjzfMI&|vvw z{nO8OU_h_d(DqN%LTgx<5$%;dnCkI}qcJqyuGMezh_X+~>$X-%-;?_ot)Ok=?Zv4A z-^KhYIT<&a0M>BjE^Tm313!EY`TqyN4%*g+d$ORc6pQrt~ zio{z~CE<(;<&KT7-)#9LC2#W@t7~qDuYLuVrcM%Y&Ay&Ps~!5ilV{(LWF{vq&HZbm z0z_A>bckv09%A31n}=-*uS?_2YZ=wd$rotj!T3gc+0I7! zFFAaNPjio*&x(iFkR*^CE^E`fn`nyo^Qy>r5!#RnqEmK5y{|g$>Uu>iNNv`x!zTYL zU{63+J>O@g#*d6FR;i@KK!F&K{hnYD^iwug$51|F8*|C!`%kWh?vyx|i{V$6f}2Z< ze5-^3g9hgswGDC?C-z4A$S%jWAo}CxXQx$#Je=cK4<1ib3XZ!csdZ}9%=UQVfN{6uc-v@Gx zNSL9S(p7Y51lbpdDmh_Afc9uk1|~ zV$}#ZtSMEq0h`X_a_?s=W3g6^X}R`=N)0Gb&PWA>**?rP+be3J$4jeK@kJ_JmG0-{ z)IpU_W-8RD0By9jFH;<3c!|z`3CJ;jzTTODPUR`vvERe%|84T4|92zn{rsDj`fs(? zB_;Hjho3C!bUS>2`}qtPBPsp{k9+*1WOHqcp~1;xAbjlF_Uj)tk-UwK!=kuQgNc|Z z&Wi){oRVJAA`Pdv`5Qu% zbr|h@pP)U{jVA;CX7Z##cE|9@B5N3>Na1^%PYZb*fbmLEErQV{NKkaMc#~F1d=V}# zpUsS8x=!sKtDi4+l>v1h%@laL7CO)Jbhj~Pe|YjlNF`xQz>GxKq&uUF1a%?mm-Oiz z^omSCB`vJE&K3<~N#)k3)CDoIJTJQ=|dPlQc3&8&GNyBi4V`=Z=G8iJ75v#Y~ zaZESZ>XNg*;LXv$c*FO}`e>=DyXXh0P(Sphn zSHkQSZAZQd%RH)#czfQv`xk2UokrPuFc2}fBsg$*~aaHY3rLmod^rWHp|3@QHT+pQzj2n=MS@`B&7fMsdrrG~prKX)`7dGG8%9)nlFg2~p#W9^O;F-`pzwp*v z^U;){*uXBCqvlIC;%A)h^KI{x`O0n;;~nGGBWNP@1*bap-j5$mN7A{}K_BB*&~PFr z?0h?VYHsdD$KET%o;2K-+0m9CR^7^3OP6`cSY1)!z=nw_=KZZn?Dzlw2{JIx@Y^27 zMQ-!zVy(exJ#;um{pRLW3<|2=7vKH%+aJ&@@_B5Afji1x76}|qW=g->`G7)qEtmYT zHA>|9?BjrDXfoq@xX@IgPxGe*_h@g=z*{JH_!S;uvO9i(p7i$|FbaD0a3|0XY#VHC2E^RXslzyi z0i9J-wPe2q#QuFI|H1h8ck}ZP*T*a|pWfOo894eIo7V&PT?Sg^-A)Y9_#aTmvaT^Y z$ioIz(h7pBm}vsKxT;o<1@&!7(l302g3H|5{*n5z%c4xicg~Bc>{5f3|B@~;y8xAo zGt_}snre(5YF{cbc_yk*WX!5bB5EkrX7j@S%#`~3K7ZcY0Lp25QzF)(`cq$YxelR_ zuaA0&asUPtgT$-gQ^O#ZhUIBTqy#%#1L*yLQYsEV3aO7@BMD$(tbtPYXN0u;v|_pH zYME84F-GU~Mfj(yDUMi)ymlJPyL-Tr2L4{tor~;q~6(pT=JkQ&Wb`Xt8z$Ha7Q}0-oOzm@Ezegi#grj}L&4jCe_Fw=K;g zV@)ozo~Mm)BY_w+EZ2TFZ{dmOfPmzPdySf3C&1ZJ`~Ou3oSP#5mpZ5-Cx^xlozWK5 zb?|I}&%l65jA?Ln@3+vDS=u2H+jdW0oRZV5+)OJ?ukA!dX~)g92*2Z`4@Z2Pw}OZj zvbQ%o2MnIM3S_?2*K|gE@!-Xs#ccoC>EbRb@WhZ*)rasGfCPe*NJWQtX{mMj>5(~0 z(EHY}ckZ*?RKeY}%v+M#i{q8ci(UPc4)uymv0JOzvfHaecZ>O=Z~8tC7IUL{wz_rd z<&irv$t+_7MNBU5fl*WS+V;0n`mLNcfL4(oY=gd|KG1rc!yqNQ8PXgToQ6^o8j*zfB4w)nT5ti zlDhHxcOVSfqv+Us4hdl#agdvb;8xkWjN|9mD*7USk@^L~cia z`)Ak8UohTsQ`VW8gcp}CJK>Csyb|JXNO5zrN%bE7Q>&{fXaeGaKknKS=6L^`?9&oU zi*>>WA39XHE0(j~bU=_6|5vNe=(r8kz+AO6u&KhLOw5g^zYtx1+TG#yxpUTWO@ome z(o5%JnVgs)cM(V00KK{SWsa9p?MNGmYswcq!mDiSk5vCBq1n16@{FBbOj`1289Djp zk*coE`(8cHeQbE02={Xk4{lxae}q5cY7U(I*ADM{9OK3KU`1EKd)c4Mk2IDsfFntx zM3d-`;oMW1Zy63p;!_ko{Hyg%Fn#YVN=`bj@bRBOuK41s#Hm8kE4dMbnT@ScnSK() z%lGZ6;9y}1SB0O6$qNaS$Q6&1k~KV!f%-m_;HE>V2b*CIFq!h0@~^sj+veUozqR?7 z@Sj}I?PHoWNSVoacNVn8QiOqBY_TtVN%gQUjH#^zaJajintG% zTp&)@*A~M}X0aG)@6I80*a^cX8e`8nwxEDdZ$;C@ ze;WAxRjvKIv~Va=4XsX{n&J&kI4~-4Oa2SmQ(xrkD%G% zb`M#&bM^|O$04Ia1kAYA#|a$aK|&|SH+*gxvd|ppYp@`L>vFfP+T0mau6OIX_@=6M zH`HJB0d!j(+2(kgV+Ognrf|wo-szK`j4-hlY# zacbpVqVyPGf50G3e$zW!#g{v{`pF6RR>CzMB@nXvOG>o>m>qpNf?oh)z}4ZJZahpn zi|xaz1EdKybvV61bZzJ+@s$NNP*6=9e~Uaz=bSMUf&(S_or>yuZ*%SbdQB6UjR2z{ zajuM5)YU$ZUQXw(Swe;EVSthq7Z*P~t^^nT4h}g#%c-q;zf>p7lFhJle19&G_B52_K)pO|#I)dU zuDn!|aCDSC2-=okfJ;7u_v1sobSn}K&ArS1R#l5Lk9_J|-M@zc=3_|Kk^ZEVxC9WO zUo5OtWpdaun4EQh1rN3=arKgaeGAs~EV693^Tc_gjG+U0;H3c}*-tza&uxY%)pypj z`Ies#U?t*94+PwLs5N7kH+EQApwtmV1dIJ9?#q|=Sc=cC9rBoD+_A4G-MA^Cf|5&v zqPZRCsuB_sz$NbG)8o!Ni|xN05q;@7Z&!kRDHyDvA(IGfY(V9Xia&9 z3r|7>4HlPUL85_~4#3?O?7rGtQ-IM4kK@pYJQ$U7I%?*YZi>o{iMePr8@QYkrW%sR-CNT);dOz3%*Zvu}k0!PSeIS7q@QU3khFD)f z@kR|vNETpH9S1?EIOQD5j)T`VY^30UTnS2o|58XgwOz1U;}7ZZ>-oE zM}#w9?HKm1A0~c)EO^z_gi*au*BKDtMnuH4P^3}893TH5T{Rg}Uk}%^^;oEw%=;e& zVi(a}TBIVS#*a~e+^UOyh~JBcAnN!XQW!LmVL)@16Q@n)D_hpbgM-91_5g5ghFRGb zbyVgx*g0aRG?&fKWM~v#Vhi$2+eSg{O}|!j+6GZ@pCN{3>+J&Jw1MH(=J^?Pjahf~ z^az350a!9X@sUgcdUp08OkgE#Z%ajZ37DG9@PR2Eo?I|}na(-F&;QMM`28>-e(Dw$ z?No~y%9ff`j3ybZJ0E2)375U&e)i^b>~Reqzduj{9bat;&RH39qnGwfEBWNJkA*rH zmL_*5A#51LriOiZIGgS1`@Z2jp4tfLK70A`YtCQ2>o9FwdiH;=*5J0RZx*B;{?|mh z@M8aG!k;w;k_ef+EDy8)UtW7u8CR(mfDoa@Hb^4{EXNu^Mm+DY9^z>nHtu3S4+J?l zAKOy5{>VyFZ)A5 zqCXfsZ$K|5#ijVSk>}-JrO)F77#n%f0~(bCLOx%z^iPed!4R0D%qcN{<9)3KCma3G zURPiXd^xa=r$GZ!Qo)t;`SBhZv=~64$>g$Q%#U|!b3Oc6(%a^_`s2qdP*+leJ@@A3 z_<;^l3w%X({f+tj!JXuEk^Gb%4wX&6-g+TdiZwWRAes4gB!f@=2eqQIYC6duW)JvQ z`+%4J_h|_p0mRF!4m$O1SP`e@VV7)*Uil4sfNT5>;io(o(^Y@>Vo&H>YR=t=jEO9N zwVB|&QEeR1Mro2d6}92|^Sf5!M%2r@fx{wa`?%w=CnBg&aSQ?GzBiggbQk=`uF&fy zN2bN-d2~*YF1j7a@t!2`I@8*7Fy=sPA8RyyaSh-B@A%t?RLEz0Kkz z=EjeIn7nHHf%T-N<~tnw-MvVWZMNc-JclT+8ktocBV&$(yo@(KPC75q63hjn1thbi zbEccEZxBitf_~p7fe5+q?dxxfB75D-#1x3w>1*s>|9I0Ii1Ptas!S@{s}m0re^2!UAy|GRe1H9XO{Pu`#C@K3Z2Y= zEGMB(2fdBq&FNB&xqpeisu=!jgD34ak5`)&S~b+};76&b+?6l;XYxBDzY_BCjTum5 zH~9($@H_Cfia;|B{`_IS4%`ua{ZQM8V2Q#nU!c>{_5kAlLnJn~B;`}ys%kW}hlKDx z4l$2IPr?3S{&I!#2?b1ajYE(Y#WaiZV~V<3i|2UEI{pd@QJ+Sxocj6CwBDya0C%YXj?d-LU(t(pO2*7ip6w0Ys^m9b|Y{V z7n+>#TUsopa$u3E$9olp6qc(^Skp6OS67Z8FSx5AX*9Lau_S@xcrYk zpt#=|1Gn9Z@i*cQI;FX!mVU)vuX?hYDEN1ktxewW#Q4q>&Ws2$Ws;pKgwEuXM(R9; zWBiF@tau+{aI_s}bbxufH{&!eNT%ROC41sJk!e`?&)f(Cga1F17W`!!=^N2uJY^LX z=fJ2U0VB7d{XCqSo0QZx=zwFoe!1Tbd~7gaI*iQS^mVMLU8Z{*0;(XzXm+H2FrnHm4-|A%c~ z`1u{iQ)^X+N)J<)hy2_9G8jtgaduT+1AK*;v#jx2R^jsd`TK9&7qjI`CD2(N4It$4 zcc;%&Q|o@$+w6h^bpDgbV8*t|@AJmWddUsob+H#OFfnvad54Oimwn+wS%))3G!ds+ z5c-HQA^#6uZ^4k|*0g~t9fEYH(j`cjq;yJmNl14{Nq0$0i*$!{cXxM(bT^#E-utcZ zobwZ&d(E1;YSu#&v2uU$$5t%jpU@AvjCnt|HGNIiVy7SN$wWGShJk>Xz5}WV8gWyZ z!~RgNt#2&g!2tDYW=vN6KIo^jfE4_(ArUijl+N2O<0JR&-@&+LVHG&bJGEOnwpj!A zv7_#Zh0?KZmQrdET&Q=X01-%wIhM1F#nUTK%2izwTSX6#%KAH5LhdSk$Gh`g`#%$G zUyK0}Day#u4#Q*hm5omsWM{X^$;|w%*A5YN{mOrJ^=|ewu{qZlPzYdeiWMe_!RQAd z)8~CxRGO7N9wO8R5>cnwC#6XkOb|7K+H63~u$Z+nk$|J+w5C^F4sHz2mc9TTn@oEJ zq{SQ^m4OHid|?VHoUadGQKD0UJ?HAgY&5^*aea9pnMi`>aKSZ@-1sVuCun?pJWACT zB$5ZZKq>lCazrIat0Q?{w^{-YvwsLu)6bTYf5fm6a|PCOx*Jj__woH$O7i}6QBrrD zP<%^Fg~@2gW`9mdn#!}-Fj8e=|E6k}S6Ys1G4pRJUQ&hJn4pKZbO z#_XPtxUZ4xP@zbJCQa0T{{x#V^HW!Y3M0GPcbk+<7V%h3dt~_F1%H5KuE{V7Ktuv4 ziey@?wYvtDX5U3mm-Zss7uOaq97AKV)ZV-;{3QTc1gf>!)032$xnpQZLLVfsKZ6zl zt_#&!GH2$jY~S95d~8kMO9k)a>M3(C;EjO@qVq-mb-Q`c2`-2=<^oiQeX%=E&IR@i z$|}uJd->-T#q(*D67r>E<5h+5lbX=}Ith?P1L*bMoID?EAT)3D)ib&@e*dEpK}jjL z`B5U)JqtiUOUv-*%X!!zzsD}C{0X<=ot{wyXTd4KY^8UAW!&BEey9{Mf~ zQ%~#wj8aVy;mJ!VvoWBE`28EYKDVM04AhyzL;;zhFRP3~V2Ai(Z@WZ`J6<{>kb}`W zy*Bh596wNs)C#a3CJN;bMg zdMZuHJsPxmjDrqGu;be$8Y=JaO+ZL9)>E?JPs2zU37jEqbz1_@5|hVR@cWLK>n(qW zw0Iz!t0M<`APKvQxWa(o?I9vUUv zL5o5=lLgBgMMZjM^V7?ocYt*JA?7KF{swtzUg6Jd;n?rcIuIwu^1FYHTY-a+mxrCN zw#oo=`27S38uL_iyn2+Aw=?&<1?^qjEj+;Cj?ensp_a$hp^=vtcLD}TYLQDmrVQ2q z5fV^z9&MXzKQL;+=QTF;V?y-?87~}WBa%CEHOs^JcfG$1qm|o%uZ9pnz{NeRT4Vjj zLMl=J;Gl7L*>dtPR`7l-4;v%(vmf~dEZVr=v+oWBFvgu%fNl%O*3I_iJ8dqHm6r1EyEOhw;HR`Rx!ji@GjjK_gc1PM z5UcAadma-nWv8q*>aJ%q3%UY49l>zej{xdH0TAh)W1eFM7lpL;Im2$LCEq{zXYkIG zuYJf3&#=<$lUln3pnrbxAYKd96`Ma3t7}hl^RK6;rf`^k>hOOvQH3XLYr?|dl-mf+ ziWo-GmhKvndq-#fI_3OgPdF%%+(@@w;{Ks}ehw=jc7#0UL*erQD2u7~9xM_mBEa>% z2C>cD?+j#LPG4u7HS`lIqj3#A{Q2YgmdNoyeJL|Q4fyDJ72Hmsp%=|penHKW{afdr z_}u`mEiJ7%h{>OAg&9Vam;d4QxR3nc&Q(TTxwn1Ad`3h?-syV0a%j#-LcRPy=w4dd zVGBcQr|YOWpl1k-9K`^zbMPIZ$?4s~Tt+#t$Cl(H~WIp)8j5TD`cTS(k#sXnRA`IdAt@%FL^rp@pXc=M4LC~GzFLI=m%@( zcGh94R3NPi#N#b3>%aAF#cQuuU@4(c9b7dllHjFZ6cJ9LJ3J=~k8rq;U#__rrhC}j z%b4{g_`%VBg#`;7z8lY7ux`zapk?YV+t%{7w4SKfmEIjIp0)7vQbSp_l^vg(n54w1 z`N&HD)dql!v$Jk&c3{(@`YJm^$n_Hp7@T0+#n^xvwAUR#0zjG#5SwO4`qGZ;S4OOf z(%PxCW1Wff|v(U^Q!Uchy#B`@-4)AocAF zuH-s|e42V)X)x*bX-qo&k$xvO|H|6_FBtt5MA>JcEkUqsq!{4Qp%iHag{Om@zix2^ zaksJsNXrV23tIET$&e>eLEy)a?27i`D%;ZV%~?K#Noxo<1fo+eP{9nQ^NIygNA zaan>bqKQ~yzNS=h&r3QFpzMAwlglwToJiuL#Z`gv@GfzaU;{Dokq zjOX@{A&`%?>Z>w@a;379L7_{L_rBPfuRa4qcINE;Xf8nUXeyC|f92ca@`cGG2xik9 zsiR&&0wtN}D@ObEpEsD9F<{BTXaGl`9&9_66XkV;X6Kk_zGELTM!S@9$yr3W_aM*TCc67)|OJ`|uM@L4c>{BX%DqKT-?cyTO z?RYriEMF!V0NI*Av(beAw%MQyUly&JGN@GX*NalEmoaa75u`US&7S< zXgII*`{PT?E1F%w4^7hRc*xteoqf)FZ!NyN9KLA|w2aR99-|j*z9WV51Irsy(3)me z82&v$|9sRZATrd@x56t|2y>0>j$8Ppu$(sa*hq_?cmR_WAXN`{X(I*+0EgzQ=-saw zx4TaNn^^cjneH#rxIrh%(s~$K*{Vu#4O$z&oKr$kr}|3QUY%Rz4BiC zpS)Et?_c0Jp+RS^5vbJ+YF!_d22~cp>{iX{Q-0i*q{LngC)F$?qjaC7H&i z)$F(91j%6KPyaib+@TSzKr_tq4h;~Vy>%~etL@L(*WGFj+c@WTWsmh zbpg!N5}nsSJBU3>HGZ42xlRD^Dg~XKVr&j9g6no@qgM5(V0v{Ho14?!H#u>R^3NCt zkr;|p8igE4ZU?x4IRlWX@@;d)Y1v%`FclCH%g(u5wFG8ARBRR^C;L}{osr4+ac!ts zR+c8yH@kdAtv>DPVBk8EaF9Ud2)0Qy?P(u=ybW%bkkMYnMMiImKPU#^?m3AH;_R+Q++4SEpfx3^ zMuX&VwZ(jLV*2-IgPgMjBtfE*l9TXPx3*05^~L4~f8cIxBpW@|*#&gdS&V~**wX`P zeha#CF7g^C$nBL&dHK{@v0yqhS*d6l&-S_R!FtP{vd1q5Gas_IlYUOT$)=5?TK4`;wJgN=bcFlKw zqqp66UC@^j+Q!aKv(}cvVj?f|7G%@buJrzvTHETu8cV{#U=lVER+;CM*yz>E^kFQX zvm^?i4gD~&D8>&{d1<>saj87CV(7B=bvIxZRR~r8{GoLs5UV2Be`o_kDExTV4T6&K; zl7cY#aF{mASYP-y7VXp`f{T>cq- z9)Q@s4F^$WMwZe$urmoHD6s2zxKJwvn#g$e$F}Vh9v7TRO75g5Ap92=mfEbt3@5S2 zje&eK0RLBj`nz7W0XZLtN6fSrAQA4eKT`)Jx^Ys#fj-ISxj!~UIClcL3dBq|uKTS) zU5b{EUC&=9{k_I@wUg_JxPaWr^V;bxD@r5eU$7BuKLT~}g#a`>?a9e(VSfIb$8uj> zVig62U10ehw>WJ!Xhtd1Ep1ZCVxII83GxPH~exqX7|v&Q+CkXH|urih4SKwOO1{T6%mjDp-nCWWg(9G$n%z@$9@sX!v+ z-sNUus7%W5eUQGOpl+=WB?)|oO-l(>^8J@wlJixAeC{;L`{$DLlMIEzE{EUHeo#5N z^ZLvU$D+!;c@@PY-|FIqp5$FA$Mb>Ht%H$}CRiH8E9q0pfa*GM2&6?MJQH5`ul~LK z_>~%RDDTQB-UJ{rgC%0H0V68<7krq^O&|9P)Q35te+x%*79Wzu&PLNpl)eanUE(g6 z$DIYOMTlx{OpzM14``F`rAUG}K`PQ=Z%VnNE>Z~nW5*wkn= z)GvjXjlGflJfPgR>Rf4N{4+ay41|BcM#;WC-YenozTpT*02T@N9?ynjK)MIaFtE!< zMJE-foL(t>Ql=cGAc=2)O+18IQgQ8U^{fk>+QVlBL7;LfTfRdeT2t|hjY()*I0u~P z(;YJ03c=@^^M!L*E?;?rak)MVMU9*_5g}bi8gt$CMQ4~UNM5WAhFg(*CAu^ z(NVP*q}wJEX6yku*jJpFs(Looml^`aX8}bsj8sOCYWEY5wRdnx2dLk#KwcmR66hbw z{j(Cs^lw4+HEXGgQ-_5~l){>@Q*2p-8U$__cz$v--J11-dmRR`=fK2-sy{p#Q%;z) zj?JDRvNQ%~GbE$@AptkWLYvG=60JoReh?3~TeQ_@=}G@qlAMazmfRPuG`~Nspn301 z0|jV@a3u9FltLnsAF@t{Japd2F?3khSs!tJS5~M;4k{vr*YzG)Fo}tzKm$WN!^Wbx zyEde*&N>2Z0W!V&3_e>VjeXwSx7|dLDpMvy`U~ZK; zL8x#r0c|xl^y{+sZ4ygOygK(to86MEW>cThKt^{aGEMz=6Pc-**$8@87+4*iDk%}i z2XQ5^Puz1~ke8>OU5b`XwQ3G>PE-w6nDcLJQE((3=%kTUq(57PvZ)NK$DHpTHaml>6CDSXr!Sezu+J60xv`V-QIrf2LHdP^v02A-1}u<6df%Q z=Ex8-JeD**SX)?xftd{rbuX(5lH2yr>9Xm~=c1U7M|~%!uODPkG}bjENpKyT;Dtnc za4hNgtZ*0vSJ;b3edHI%OJG|qT9DuNBPCt#$aLN>d-I#eW7o9e*Rd7P`^;XRL^5g zm2-0Ajy`zeqXR5u_C9|_frH+K2EyOdNcdPW*F#%-vao&P*xszzWq(r9ZYkIDgKo{i z_EvuWFkl=&IR+`df|3%2@OC@9w|!2!N{f*Izi^pN^#DJMj4YX7Rs2inbLRsGkoq*d z6#s47+3o2mScI%x423L^0?vCTUR@s%sVrp9wB+}tsR>J2Je{{3H~bsYIAJ(%Rdlo8 zSG;v!uo;Xjtca292>?*cawnu}U!!D-{E=LWK(P0MO?cD}euPdXn0@M9NYU|ZDuocTly?0)78j@M zBddsppgKqMgR%{)_M9{&(`uvFWxbusUO!wPVx0y{!`yzeJF72)Vsyr1_dr9j?&&A5{atV*w{7gU-$nC-W1YVP{9L6AUfZE6JNrXQ;{T3{5pZP647 zhr5iVO2+?`jHMAMNUKbjU8Tr)>E7?WE}v}NC|j@ z*k6&iQIh>y!O`3b7M9!0EQE-6PO}apMY8{$L(I3aEDP%j&Du|HY1S*n zS|M}QR&9vGDR&-_X92Gxl=D9y?Wi95Wc&Uh@QqgqxxWw zm$Rn#a9-ca>KwF?39h|1->MXAdeK=3@Jmr3VlyZfC~ux^zZHYnus2ze!=`mA`_O?& zP@)~?6)}ayx*o{%N|56g-3n*GlDyK3ob=!@kGXm4U=bPSU?|1c^$OX~|2CB9;Q2G! z$1K+U))$FrRLWPMJlRgGE^kA^uXEg=Nq(4UZZ^I;EP_S)b1$GE=z#2PT(A+(H%4Z} zNFgg=gC~lO-Q67#QE@a)Pd^ASMf;)E>?v=*-zPX-+q_;*5`7j_T>>OFEb^%|RtG zAw@kUyH46tgYk4|vmIt`b?diezberLfj;jWqkPK8<970qa`#c4-Lm7v=~dw646+ol z`#EaA0*G`)m9{jx1{4<2d;8?f%*Qk6JRXSD2Vk{zT9+<7YUuw)at;)$EhJ#B` zt#^zqbkgv3zs%I~^ggHu9PN z=-2NQb0d9x7QsfB5*|5S}!cr7{#!XdBPDTb@fLfb9?@{b@WOqU12Fc|GsTBD8$Uz?E8A>j=8I z*i(6@J^>Y5K3sz|svwu#B`T1_hU9rmjet$BKA}~(i#>SIVJ%I z-|L4m_OpV60%oB(t;Q%!XSpfuM0I?z@dE=2;w_Nf+5MmyF+0{hJl;M&-oZUeOKC3V zDV)W`93&>@L=b6d6l+pzFOKI>wzqFPJF}FPmEmz!(n^$zIXyjY3Zmx8bv5s!AjF75 zg>oK5Q&NhA?+2mWbcQGtaspe)hc7&-GZ=I8sma3~8MW5WuT~<{7g|-Qg-jK?T^E0# zpA+i!VAAyJ<|b0Sa;58)zG%0tvu{r5HzBDiO6fmOD*|ibgaV-&jhKP)Du`8q@C_dB z)op5vpTEGvQwwK!DKOTn60aeI6LPUE);W+qf#s%ng`A~g|EG)TRgo}FVqUH)$D(FX z23vz?@85@8&9TJausTfQiiYZ;w2h`Y`~3BVN`U?azlRV)h{cAVEsO3`xS#PW9L@U7 zh{w*2E_MT4;&MaD#~WjaccH;`4rYE3v9u~R?ygUiX)`%l2d(?B`BvYV&X(%Mg@k0* zQD;PIEOeI)Tx?|Wp#?*jcXTm$%-=b^_C`jBW&n-6;j04{2Dn)`xjE?^VG-V5kd6BK zf(+UVQ%&yZC^ilbLtmY=Atmw^a59GMq?NmUH0?ILM63Si%vXDqNODIE1v}Bde_DM$ zb0O^ibLJ*5Q7v##)W)!&{c3IA${1GHc|7o_6#Z!BGazK{N`kIIMLokrpws%ZzB?O= z4t9j4>v%eZdS60vscUGE_=bgQ9uM>7IJ?-L>GL@M{{6e{Eghe_4DM4n&L||dbkfvP zg)wzKE_U@V@o4q7t$Y2GJ7VyB-wSbJ0mbX}IM7BdmzN?aNHiG~b5Q~-glMzE(6CnE zl&j5enhd(Pbcv+pb~`2un!)RAW;K;R!BH`lM1Jr%-GHH_3;-7^Vh@a0we|~TlFQ31 z&pQjJsi$R(GP~`#=acW<&E<{JlP57H8<1>3BS>hjl9ydW@E=a2%-m=X5WPtWLcfEC zk!kx_qJ0ofsL|cjae9W|>M_{EF*MchJBcg(--rLj0s8uESYtI|VR5gb-K3ng2Z2b! zk`ecVi>bNGXm=sX;d^=u*({06&;Vaw%zHISNjnDxLDFh# z6o)@G8zp?7D1-A9V26IN;$aH~IBHdNMJyJoPmZ={iYrcdwy_AyMjhQ2^4ZLRX&+B_ z12ZwBj5S%{=?%eZ#zo9k`6;Ch&LP#ToQp`2MHI)G3Y{q%u9PH%mmSMTq}czhiWuWO zgF=q8?I)Uh?Bu^@-8o}M~9y(;>cw+90==L-r7Vs;ZbpM!#I@u2{$Gd_Fa zI0$4UOc4(rN{GS!_~jfjuwY5SGC{ewNDZFmn#V*4#hXM#$CT-qnAo^E`|RR+cXcJK zdAK<#SVsg!rEZu2E&VeeEjeAS*)z3%Ia@v{dOSskjC$)@SF2=5d~&t7&1uke3@!jBhDh$2X7uDq`cKZb z7NNvIrjOsC)%I)4a9C_v32FtsXB`vePJDkUUccio7$5m-svAhtMv30_oisZx!$73t z{5DmJBlb^-s6cBp43)e4LhkEZnf{JgJtx1mSH2aZt^Vydxf^xAF$sjWpI}MCfSGxG zXQw4JbX^V}Jvw4mIRMV@=F+JRB0=Ny9nLqUe8ps5*HG(r{)JbFNsGl=2Ke{|dhK)4p7xwcuh0;ACntLHL&! z-s&Tjl`MP?H21R=zd)oumcasYNf8YH7f`OcXocQ-ij?N^ds9dp0d4-0wE3!K=FZp2 zDkVdwIw1Fj*td`8#ogxQjulv8=TgOb^7zotwA!ke@eOM4xkNU|h-t}Q$OJIHV{(w^ zfBd^t?*9}FZx0dD(%)Y#i%P^*ULKpY5uAkK+W0bhS+JP<@KL@<{voi zB)*w^C;qG1vFWfk@qs&P4u$!@-kT9V-E7A+KZ)7r*1DAWBWcZ2Ce(K1=0XRCvA!Gr z_!1FP#?3tdUgxKY3JDGvlds)xPNjxu(5gU*flXthP#c_=Gj*WHpIdu*9Ip&ne~KU? zl$7OTGzw*(FCx?UtK7mr<+DxZD}A3c#n5hYtLwx5V@~N3<2x9zgG{8kyQ3POXtEk3 z*F#SLMKrAA`AY@^Tv=MBa#-dBxC(AyDr|1{bFV0`t;d6x#&C*rdYs&+(m0SjnpMkw zf}XWqPfhY?rtGblfSxbcFsoV*m?*wp0q;=_f?pt(&)69}LvIdSKd6d>_Ze&O;(5n9 z)?L{dh*KlRjxh1cXz_Tfs2`@Nf5~nK!uM9|SH@yyTvU58${kZ%qthy1|B+P>@^~+j z>$50f()uG3>-^&v^4TT%vTtzIzqU74A4Q4XeS7bl06i)vg1oc>ed4{LIU&LR+FBf3 zFW{DaQ&af@K6q}K6${Z>--PxMGHo^ASWgv>g4-JV&MJVUTo}F|fao&W6clPU3v~@G zukYkVC{*Y7OBUo<=$?_FOFVdVQpRfQ34%l0KHC$ z>ddp+0_QLUg3-| zu{knP!2dQ=X*JJyk+Lb!3Pb8gb$-FqiHT=lmfC^o_HwVAxH^|01QNMKD`Zng-^H~W zpR+tCG4V?*4Q6I0BMv)?JLbMO4%4)EtUM-pj1_SNZpLcE##nzPMW3taW@`GNd{Z-n4krT`s5sLXQ`&N!n^&FO};o_}>#QMK3E> zILBAz)ghs??MY|7>jOIEK9-|OyxPxF4fw4`R#OfE%8USztd4DNi+&SBNuv9Pi`^KP z#`VfyB2CG|f$Ck02m?;!pHk%}k6~T|->)gkf{0VkftEDo?};wzO&ahNXF)*)TABoY z^T7iNO!vFv(em<$z6E?#D|_7gC+q9u*+}x7%BE?o~)s@!RW*z0E)rl`h*~KUn z%eTWPW6&t}w6=!t5~-F~RCJz?fSY9h1;02=_r+^4T|m~S^K-O3t$f>eu+gbhU>o(u z&qc;3n9AeH{T&VF6cuJ*={JAGcsEWWsM&2x8bO6Tv7w5FFcE60($P8x$R_NNygc|D zR>Ad4j9>PBX z+w)x#I`Eo-xP5MbC^`lapbYb9)UdPouZfA25+SG>xG=C%!2%U*Yy)cfnB? z`9_W;j7!WARe@{EZD)jDU+ejF3MQuwIv*y3rdYyL>w6`g<_{{la-^hcI66k&MMdU&Rn3=u*`upV-pHUHvo@rMbj;6>a~`K1Jg|1Q<${ab&2I5yZ$-EJQ+hBKYa&bDlMieVw90h>UPT19om zB5;?ux#A=NDV#kLxD9(pCC0uR^Y72Eo9=SP)zF}6G8VkSgE(&z({_Gp+B#(SQoFe+ z$>yU+SY!j_E;A`OJ>0UQ`BO7@k7r-mDsu$BG4pI1su?5(^W<5CT3j_spZvqvfjE9g#>lIld@ zu7`zyLHFj(7A=Nq-9-0z1uo@SVPcYfvrZ~Ox~1OeLIaMhed#loFn@={xe4SqpG4bD z2}~MAxK0{Hs^|+#gI7SDD}1pPLFc}@(TfClw7JSLU;?-Ta=^WVWx!*#U2JqME2r|f zw~<_|V`#(6fql{_s=bk^2kP@rHiHaT)OsWeDNGCX>;aY-uxt?^I8}Jw0Wmyc-(S zg+Fex6$yWxlKSf#UhltBke3o`#hK}MR}ZSfdHXD?w0VD5);BYYO{l?hw7$P?YWS9w z#i?^XN>j@Y_5oEW?@1H-fiE}!6DCHorB4r0=}&Hg0K zQLfDG1#CU$<7kd7EDGwsi!tGVL7PWO;6JtKYpvbjT*7#Gc#*Yj9i{V@?1=yNxdh@P zBO}c_VgC|c&FG0SQqUgBm|fcaSTTKEyR$?!_yg1!VM5mmZpHc1ASv72& zFF-qsay-DxYym<_IDy((#w>n<2^m?TwXJOni*UP2KpR9Z-m7m&jF54*o^auRf8n;* zE$mi94!dhZ#Wtio5AhRRug4@da$VGWZ!ef7<0=_6s(t~Crrk1Z1vNl^rxIQH9XvSD zn*L0JG-ei}$t|c&&Z6%>K|;y4Nhdf+-%J%bhoTlK+HcEv2Z%vQBR<>iVqP@ z{N!P`N@aJp-j>h&3b;WW#icLC7><76_c|&RRf3@z8I%NiHv51?~i?A5P|`}pLPp3=lH5%c^vSoTo|AcOYPuhNKN-32KL z1UpBDVK%+P*$R3ZeOdQMmpf4ESratMbofLcwkHcJY~^`8+;})S8x(T3KzYD;Y_R6T z39ItA`}I#1;U7=I`~ByxSbJlEli`>fEc&xIy-l^nZZfTFeW?@DB)i-oBrsx}(YBK- z>(E_#$fAJ$MoQ)Pyp#hX2TM?PRDsorXR37gE1A@~(pNV`8z%0A{ArDDJG+}o@#nPr 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%0Amv@e7Q`GNd>U5QPO2pO55rnYp%IR!a%- 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 Ot*v$GT;`b@5B~@07Sg@| diff --git a/docs/readthedocs/_static/figures/uml/DefaultInputDirectoryHierarchy.png b/docs/readthedocs/_static/figures/uml/DefaultInputDirectoryHierarchy.png deleted file mode 100644 index 19f324809555f899251e46996853e305964b15ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56218 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 `v4Cf#)L6Y3ep| z(FDF8P<|n^n~nw~LYtp{e%Io*v#B;$fnK#`o7M77Ksni#5OGbKZAZ)zCJC-) z`r?y3BYUj@SRRhqZ{bXzsk5ivs;-mH{FY_w;_J}*^jB?YP&RMf*sylO&dN8!yV^uvDzj~S+Pyd=hoWmvXNi;^pMW%#1{J(A3m7w%D-}7_$??f3YjOrvu@oQP|tCQq((Gj zUm~oF(n3s8?SSmo`T!*6pD3!89?=waf2J0dy;e_K!^4Qp#^l`QbyMd3GFD3-<|K!;x%2gu>f(+S=j!{XP_G?bSVj| z_bq&oU?|^FD5{D;o)4*I+v3HIhneW>kt;xEvjPB$4(}n=s1ww9_gg+5#!l~_JzJ|; z4@%*ypC}pLzyJ0ZQ~9U1zB{`H5~rK~?|mEk?i?Hv?IZ6cv2%@!oUA~ekiB*+Z){U; z^=#vf*Cp4T){BM+2Vm1RjodkvPnQ+@#AlS(G{VTWb@03uo3ylhOM-;^mMAAU0+Qcv zE^?3Lh;p)i_t&Kv6-lY>msB*q1h1=EGxxZ-y8YmZ{Nn<5$Uk#xXmv67(6@@JhjhkO z+yCNubgt2{B&JnYKYDwVQ^uO$w>ABO$O(737{;DPCWdyJ-aFFR`}^D8{)iPZ7T!nG zx;?y7BVNQ_C|1}|NX04mAD7yeQkYrzzCwL8PI`Tq>4`#}e&R(7ZXSqD9j8TqE@mkT zO*UWlu?fR3MimDGBL8)*V3)d0wed>8!c37l-y-K4F2p36U_>T;I)$mh&Ny3i-Q3h%CU zT^S-VW-Pb=oNnPL0VIXU9v8hy=64FFOytLY6gyF%f^?Fakh~noc%35tA$vvNi+)i+ zjME<0GlPvg9<@AtDADyDsmgDdb>tq&8~*y$pMn)WE7*_1EYWT|_Aj{6>-oNP^xfb@ zo#94OEfdwP=N3`QLNpqQy6RP=> zBYDd6s;cCYlxnRo9GSVrKGsvedC9C+zxR@9ZxyQ!N~gBW2XMbZsm~IX)E)HvgE(Ny z?^p3+_~at1pR*I6bLlH6QwJQrhVSzQsx#VM(iHAA_W8O;fkp24qx|ttvZort0j*l5 zG4L6&t-D>V=ce=Mzdz^srr#0Y+}+|Q!?y5en~t-B@uk3&J<##1)L}>d@~eb$Wy{&L z!zQMtVJ3s`-X(ZA7#em>O*yzQ=|?S?E1Q*v zHSxwxKFXi@bm8Jf!AoSo2K_dPUPfor(@UppCsU58}IAV}i`RQ%SlrCX> z^w{nXqY=6F2D&Zx`F|3(-KOQhJUr&SY!b}CkioGQ#w^Ce!J&{~@#v@B2l^LtCWdad zs#noYv^aO}7+^hi#p?;OSGpS;hwvmw_3$L#|MN-ku91tBuj8(GNl)c!n?>9T!rAGk z>m#JNAUzP0(Ytr=LU=YeH}`u$(8J|QOxgygWq^<{izSy}h*UqTQa zZ!f;{J}1ez;z<}|%B1sZQHTAnK%leB6&`^Cuau6D8Xg0!T1up{Ak{~&TcP^KTLXeU zIgq#;7jgrN6_i}dO7!`Scu+NEgkAad1*N@&%KLTJ5+!>L9n1(n{&6n6VXJZ&1}K)D zci&=lzcnC=J@x)Xh8h)B)wH$0c-d>n^f&8M=|{ro8dwE-{BR5TIs4;ekqmfGy$3tP zC!GwTOd$|q!g}DJOg@wAu#>h2P^WFEmbId3*D=v34XRCEWlcig4v);jk`fygjaKyPo~TGCr>}W4N=i# zew�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 z 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 PIn?)S?@QQgdinnVYMs>? diff --git a/docs/readthedocs/_static/figures/uml/DefaultInputFolderStructure.png b/docs/readthedocs/_static/figures/uml/DefaultInputFolderStructure.png deleted file mode 100644 index 58edf339518290e4c9f4fe97e18d285a292828e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54794 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 diff --git a/docs/readthedocs/_static/figures/uml/DefaultResultDirectoryHierarchy.png b/docs/readthedocs/_static/figures/uml/DefaultResultDirectoryHierarchy.png deleted file mode 100644 index 4626f0115b9a4b536fcec639bd94dc6f84b7b284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22796 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 diff --git a/docs/readthedocs/_static/figures/uml/EntitySourceClassDiagram.png b/docs/readthedocs/_static/figures/uml/EntitySourceClassDiagram.png deleted file mode 100644 index 19a94ff8ecbd25026e4805f1d9075ee3dab09391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263496 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

    LDrQYZ*x~W9dvz=idpOutUR?pa?Vb?}D z6QP2(5Qb0dDOd~Q1k=Apc-vt>U3lSvvQKI<6|9PSZ6S|+;Y|pdW|O*l%gAdD_IHJZ z1@`*&KwN*KK%WM_9rjM4 zGNvm8OYVen*d1ON;-YPZmtHKjuGZQtaCBZsNx!wXfS$W$u~v!60-m|(8awS@5`q>y z@(PMtxDgh)&Zn^YKwG$)!1w;rB{_J!fXGKG&S}|#D?KF157to8Yta1Zm&^q za_Sg2N@Mu=tzI2SA-pVruP(dFGa>Ji?p?)CgC(Sgd&>bgtraXH{l)p1Qp0hvwmLTjw6`Y^GX8>I13Pq)kFQ4lVUu%v_xXZ{ z7zd=5wag0#u_CKX@#(Z0@!f%@G^EJNkvA|HhxS0RufLYLnc0oV$lK)bo>)h=I7!_L z&qO!4JZ2m(Z-pU7Vu33)PrdnxTI(Zlbf~9NRtSN1NJ~m`;Uau1@p#!zRCzH6L?=hJ zGJf*&Ab*urSX-wJof|6QY`Ee*v22E)CdR4=mTG?EAco<2qV8JecXEwVpZV5}qr1TI zacTj`>uhcu0h;S{f!dP*q;>8>m50Z2qAOO%xUW!C@?CM}(j2`UVv%FG0xE&vfB-Wj zt)cZq1kCHMG0*t`RMz>@nWavqd>FZ4A{&nuZwh~WwIK)1X(JFKC2x!TY$d7=dCmY| z)7&|LuS?m7xU=Cs=&0GyAj&0ByoWnQSrefRxCD@~1izPx&(1zkc%J>9uobtFJgP46 z?wxvO=~i3z@4rdD&zQLU8%CVfAZ4~qkDT%bB%Bg~k&a#noN0XnqnOiZwyuSPvUm0TOVfe%V8IMgdM0*}P+p zy3^#!`C6o%?w&}pM|~kSB*{3bRG{7=b^PA~_jab_{5#uwF`umNpE`nCU0JB~(4%h- z5cE2G6X^J9TWjq49lJt#))$J2<5BxUc;gr_C>TN^#?=7(ryBgh1L53^z~Gj7r| zE%q&?sdf@hPA%-7y`jhR#W8nO)5QniDmqW2@V zENrhQe17iX%``l547O8N>b{26TZPv2AFe-Xc-Ioz%3+)K@@wGt@k$T#s%`Ezuqh5Q zVu?NXf2pCK*z`l&GflWNKaLpSIv{=_6>87n{xP*J>w1IaVWO^pb|J}HLko?i(;CiQ<%S#%dOfdLf zl}}hW>c)*+&xun*1CK2Slx{S=mOGi5y)!1_*FgzNNKt>tnbs3xzmoKHDAv{PbgWQQ zXni1W{MGrHf`VsOq&}majV*TOe<=afp`)!WZ(Mp7TuJ-8cY>+0WeIf**we~~iik$k zIXL(H z84On_-!=Os emjCT*O!e1rh0z?(UYhKtj4plx}3v{f-6h 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 diff --git a/docs/readthedocs/_static/figures/uml/InputDataDeployment.png b/docs/readthedocs/_static/figures/uml/InputDataDeployment.png deleted file mode 100644 index a03505402ef320911d1c683b10a31e4ede3c8f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210868 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 r^l$V5VyqozoiRS~wWhT{I;F6)F8nM#V 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

    #H^ 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

  • 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 GWB&kUT{gP_ diff --git a/docs/readthedocs/_static/figures/uml/DataSinkClassDiagram.png b/docs/readthedocs/_static/figures/uml/DataSinkClassDiagram.png deleted file mode 100644 index c18ff4343e17924ee5bed6abe01f431fedd59333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39304 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 z 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%0AaOvx>k_+>4+W_a9R%Oo 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%0A2RFEhviC(ngtY^r}yE2=r zME=;@$EOYl+NxD6iV&Bw&_X<&>_Q_Z(mf9iZ3^Hg0j0x@v22wYcy*CmC6^$(BnuZU z`hrJ7T(u39BA%=WN3KefS`>sl`NvvG^wA(tWmNP$FC$L5N`$zZL79@l9$-G2w7U1t zNBh2#^$Mj8cS;5dC;qhsLkXJyf8f+Pp`PAuO8s+-_8-sAx|YMIsK%!YU($ ztCixaY^1nuf~us3m7cx};kVaF>m-5c2GXxJ3SKn6P54z>SMmLVHS)YkTFDTGe>JRy zq|=jQU;6Q5?@pZ@DzXM*d|rq~>_W>FVLFQK5rHQl@&c~z7TwwD{F)_rgyekLi7Ccl zOge*{YM#v{D-h4ZS z|HRXO$tSBXr(EX@@OV zP|E88%A(#m!hQ=e)Rpa17U0fdSSe4P37F%@+hYoyDf>1^OOc8ju@6X91U z@tgoOJtAU`vq0j{43BQzy2;#s%g=I>l67Ccm_}LeQZe54n^ZXi$p2mI2a&Bq;2&FG zNSVohQ+ffAr_00{63$O=DwFRZ{ad-57AvA#;0G+^NF^_pr>4&8e6n1V^J3bE_3 zm5z`vMyN?OnWzUMpI3-ZRUAoO+53V~S%RbCR~OMp`#$pWQnJR$>Qo}0gptBz3=mdp zyvD$RsboUnRSA&A4g#c>1Hg}k=P&%ffxsetdvy=Gb6^^VmypP!nT%)@3XMo}FM^;T z@&Qd1B6)L!PL)oAJ5lA7+^~H0HrWBjg_fTUyi?j7DKS}KnxA?rEQeNC3v6%Gves`i6Fq! zGEjQ0abNfeT3XD}Z#5$RhJr<8-tZNp`w}Vi_)6w8Eo6}gIf){gx-NYB@F5q&uJGPH zB#nzsdtS4(W9MiE@nbDvH5Dnr*;OX_8-8S+JEwQgbsLvfn)CPcCFi)63OlBo)2=3T z%-~-^OOH{A!^nMGU+y*Q|FcfJzIQA`&hh}!iAX)Ik)jV1?q^=54U99?h=a1xdZJGP z0hy621D)R{SuEi0uT>K5=cf#!s4*IE zc85438%2(R+Nt=Tzs;c!O05VeL>yhbFGN{fWuS z;dL+z!kyE!g1nv(E}+y}q!E9ka_WDu(DF(7TvuMFs6lW}H(bds1U19cIJz3kR3A}3q){C;)g z%C(u>K^JNNeoShrwg*WO#K)+%)J1v}#@e5C&~da{wK&+Qox+Za-&YmCd$)!9l~r`c zw0&OEMOisGBm@;IbC<@mev>AdhE1M0u?tc7iqRB*EV*A+9;h_W%JlIBwS#;)bVx|~ z-)S_EL@#*Y^nWwg;t20_Y;F*#WNv>>O?<+!Y$=u8&A)HOAV7-L~&xuS53?alA5 zi8o5tAts{rUl}7Cn({MBXCM5R+#b?+|RhOHm9Dr%$7Wpg0X~LaM_f-Tsm$`t5R- zrDfsh&N|O^?j0ugn?Vx9{{TOlh23Fnkp) zZ+ba?VY1L?)EdlB`1=6ygy@mE=B%61zF!vd`~gGkbx_2CwPyK6FmtpMx9BEjRM_1@ zNXG?Ai+h(pXWIX7)Z{yx8v6CNgx{_t9Bg$v9PS_>0^u7em}((}g1t+v^3+qGtH>PyQn?j%rBuy|?R!s9!N) zv1ne&zWo$^edX6*Ixm;}b4I|*8~Kfd?Kr5HNghepDk>}0diS;;rON#bd0vtIh`KEN zu24sna0t2c8>w)ddtB!IRwg7^9MILx_Q}XUal@-?r#(4Ub*xiueZ6rNoLKwTtzV*X z-Fr(YAsZuqh_bvZRo^??`dCDy*=1&gFbH zX~VJTd@}(EfzWVRDKwzu1mB}QQs{Gm7%ShQb{-92JDY0qbLf5Eec|E2L~pkpEsIqA z!^3L#hnzy`Yysz9fK*0Rm^eT8pq%^V>({r*rPu<~yF&P<PT%!brNj~01aPyFNzT+ zu=rbXrb9y3NI{lEkhO`&Q=LA5kAP&0;3{{)3>td2KnX0Z;p2)^tJ+%U{uPiu-i=V5vP#yRrGF_Mq@!Q>D)D!rZ86oTR$ zTohyz1dlAvzETG8jwqkVxidbAb^ta8{Kioyu%qHBt|BxE;BUvu{tgvwA0w?a1lUhI<|)D6UMjDJaL+I_;6*#z5Vb5Aw zM%tS-H}S~m$zbe@6zwn^H;7##S;`EnPH#Ju2}pu|d_2NbKRPnNeWhro#B>Xn3$!dk z^PA+UR&69JLT>^{#R5>`vt+p|VWHyL{#Zn#&o`+bI5+wE3M=JInpZV90r=a4=Wf3` z2ZX+SRBS&>2g|0j>4g(;q=COXJw&}C*BBW4VCE5@y)zkWkQv>dV={h;dxL0zJss{# z{=HR%ahiv_x{#dnGEo9VS{A(-<@hYz{k!=ro3LC^!fwQ#r=s|M)(y5X$#r(1#E=#=_19S zN#=3K4vHkSSS=Vn_k>~n7eGYqI*0Zf*`&&kiP4izmo6El>bG<2}FRV#0WVvE+Iz*y`K zqYW9Pso325bR0xy6*=*ur$G#+Q#+a-V{=bUxsVWPSp|FmABx18ehEtG<9I;Njza@{ z_@=1NZyZ!s66BANV*MueTZVIVb$JW=ge~PWWA6jN&eiH7uQ?KyxGZUi;-Sm~`Tfz`~^oy=|Lk1D(# ziO83g5c(Q?DN68LfBBJ{9y7YQmsy@|aT<6ZuWg(TpQrPZRCeZ_MKtI&zYp7Zo^411 zucZx$ZUfw6KcY17Kve_Z16>`Rq-yqde)yun9yi*uthChI9Hosu#+#yD0NL8102tYc z7#Gvi>Bq)O2bH&KVoR2J;JV_6fRZ-=0-WZocbA^JBph&P zdU&W=?!E4u>V^4<4R<$~JaPMl5`TcRD$DKB%k%j+mbyCIc+!yrbn9&gPf>7~H6Zds z8yuVuY6Ql>^EN~GNk%chuHSrjBQ-^7st(~2E zKeNpa$JAl}7Bc)gzvj8j5Cg>)27z0v3ta&6l`}9JG z271YufEY|V!^77}d6mX8DDe9#(n;1A)Y`=h8pDLAZ_Aa0Z)KX~ku%vTOBKJ$xW0(S zsdea06LtN@jT0zj@H#LK?Ra*Y&^QVf2u zi?ldEtIN*K9c@f+2f`k8^JYx-T-g>h@I%#qJ;IccV(-!8Tuwja1INne!GcL3W0|EkbX7)w*!T==D08XpU5 z33?Pin~O;A={XPky2wjnpj@VgOq6B4_nP*2GOF^WXHMMXYUnJ}a`+4eFaJ-m?;9~H zWa4`g3&})^|3Id(>#6bfkZNH80Zq(jE*;c~fQ2&*&33@a7|G#1$NFDUq^AapdL+@=_okyM_e7^M@0Lx3CdO^WtQ z2HFfEgVxX>cZ4gie%gX9pv<$w=#yO1$6#VMh^8Fc^W^>M6rc_tdw)__iIKL&Eq6dV zYS|O-0_*SZ=M#8LJecN}A!L94KAkrd&1rC_l9kcp!mh=AKBF-8`M{UWbCTb$`uZ$(lTmX|v{1=_mgdnpev8(^vW>Q1?iVl= zqhk$7D&a;<&bMqo$Rr$5*U&4MFQxsss;XYU)-LUUEu|10xob8x1d{f-_l7wJs+q zSUd);!0Pf=3M~{9NWe)X*ru@`C_mEYraWzuwqcnlEizvZ;6D1uP)P@hnla-UN3S&S zd@pd^VbnT5AbfB)i_-V8*Qs3VxaK-Xb~&8TY4m85k#;#)pFiGDY|?qYx-uUE#?S;) za3G((FAt9Xk*|Nupy?j#t7LP(xVBe5;+S8t7HNB)5VRk#!UMr%ji2KARhA)+k`#IY zkH_EYbr$ubY(st@DSJVgrAqSbI-hwba5k71J;!c7w<|(dn+Y`w`|Cx30pAXdgI?_I z>$^_UI(!u|twn+Ec^I8Yhz~V#Gc#2V9TE@{Qay461~<3AiLCz76zl$BdQe{ahC{7Bc^ z=q+_sji--{2~ z%Cc(BpbR^Oi7Y5Dx({ZYV5_5y=QbSKabnI?_*la$Xu!u7&e!Z+4nf+_!lUj#UtV#P z|7s3473S#K>Mm6Tn|U_|&dt8{AHY_t6arFh5H^hS0N$u-!<1 zLBetC@{@#n#%(%QJtBzgr#ObF4ebE$3o8LXCz8$6f?XE$vrg67eSNmpjYD$%oT@0ni~>3us@LtE5% zK(zD;(wQ5}U1iM$lWl(ht|?&vWS7f-|FkJU2DoMeG}rM-_YYw(2eHP33$Vt0tBU(O z)T-4^$h`}?3Mc5#KwTao0(Kq)@EXhd%2`qns`5MB`_daxdJ+SEtSc}{i`oB;uOgGf zGuQ^_Z(G!9f{TC{`b+!`wT{&xG^+PCx|AC~5Fj}wE+Yk8!+GdflX3tcf<4v2P2!6{ z^Go5PaF{4)U(|h!aDv>0z-Br(a91-eTJ+gR9Jlf?#0W0vm?4!Wj!RNrw-A)S$v8&x z%m%F&9GZ_R`kss{;e<+WQZVz(lj)Sk*bxuzxFwE;tXhI25F>s?Ez^KkOK-y0SU+z;qkY0(Oyf- z`^_F|EnHq`UXn#2kn=4Y6x={Q>Gep5Az3W}ZFGDJ3ZzpCY`>reORgUP#6$=JI+t*> zfx86@UR{!!-q+O7xCzP;jJCR|X2htTnWJIy?ziSHW!;~j7n_r3<`A1YH@Ya=Dl6jPY1t*VTp~$u9$i>;9urO&P`?xkR4p+U}SP%(- zTN`76uzt}#-M8(Z13ZBaK5gNTt<{!bVboR_o%x1yfUiXy zkfxzY7YQ#E4G{xLBOM*HeCzjazYpka-0wJQts4$b0j8+0Uj*~}kAQ_5@{`f1hjAZo z7c5efnJJJ2K~T~tlYG455{&$jADPF;RZA~=Nkq9nkTEgB>gz0b81u@&KcsqN5EoM&*?ZHM4+vU(aRill| zaIX>fTM~%`dBS(ul--M(pFKX!E^<(1_JZSdN?+_h<4&lM1#l~bM2xdi;|ER&h*LxI zmA4JMcv=AZKa%Ns1#jXNfbjy6uudOQdM_-KTW#|g& zFSLG!iUbXP`ewe51ttb&^llLT{g8%%0T&97zP?;|o=ADUxr^93dwtr=GglR62-)UQ z^KIp+7eoDJdqUe>?f9K77Ma8aYMg}iMJL7?$ zrCKij8&Wk)XV+%`|3O*tc)mm(4ldFdPhz|shE2L{xjE8{d#60)S9~QC4Z- z6N~;N@b7~+1{L!3kOi|!@VU66*sC@&hf zfs_~E#^TR#)?oU&^cN%UZK)rP=7-8eYN^{ZB^F7sdJY3J;2H?0z5wrlGSA-+#z z3U>eb7TqXnbhQYD1KK9UuI<5;12*V#*{|2JrO`|(4cK29PH(F>0)#b9eXPOC_~6~& zxM=TCFQ#ym+QCvNhV|9KFY$-Xoxj9nnAdMvi4A=C9V<$^zu;C97JmY+`fdLgaBcsz zhxLCDUH)}}2*N;vOWdLXR(T`>EL9-#7fPTOJVY{ryYg5^0wFXIUvR`sv%{!`0cDb2 zHXZB{Lb^xP05Br1kTz)oeMRg;!Qu9A=RO^7%{CllNSfJOHQLd>0R~cX;n~tZl{|cE z(m=S4zN1UH|F4{OO%r@K#Vb`QZX{K}YTiGiO=Ytp$^GmWCZ1We0nD;J3I| zin4A-g#t*0eyb&bZHaqhFg5o*9e^FW859&(KTr~7Po*d_(zFg;IH^0j+g-kWGXC41 zc@FuKsyQ#FKQ3RcWP0d?M+w6;b71Z3sO)+*M%qC7OR`~M+KKTY-3PO;dw7;c&~d4R ztqD6qFJvAHIG@}4J~XKHseg8DB^NfJ8juJB)Z}0xtlMs^KxbX&VTKw-`D6kuMG91L ztV0U|MQ8YQU}__weMEDicfSta!C;!x>n0xra)3X?%7gF?7oA0<)q zPVG~Z)K#e?%SPngN^Bq8c3XcI6D@!6X?m!nh#U?oXt%n0Em*GrdhXQ^q(y0@wCEWb zGSxG_PxWd~?Fz{sKKXv)pI_P$1Db}B>QAjbzU-$Qqjc>~TVwPsaii2iu#V~L;sjk2 zGl7>9Aa4Mo^rNyL0LjrKvf>znhv#^)mJn$;OvE@6i$vOTy^Khqw|{=HT<>MO`DnY` zZ(=2jwC5Rf%YolbxJ-q5z6h++x-c|8&BX1Z;D>1`+#vizKLM`-z8yOrB7s8>1tdiE ztw~-4()#w=(;ASL*ao!di1Pt%)1AQfz~D1is(-a;OI2S8EV-cNPyjH2CPZ6nE4D{s zL+RLGZTZ(I9fLx+GQohuXcZ(}6&1<2f1rP<^xt?`Rn;0?A3S2|lX>@ud8O7BV|$<- zmJq!54Z;B)Sb(GOfs;R`o(N@EbES-d5luU%&)yuq6fz1u3@VUojjLGT9gz0+(Mj?5B3K7tn{Ux>zKf&<%oDP5 z#LmR{ICj&6Qx&ToEpEMq`J1vRMM;0_C23}Z8b*}d^vy@~O~mKis$~mP#%6>@b=*my z4<9f)U_7c25s(X1GB;qdtB?n-7c7o9Dy6BUK%9?5=<{ude#(!`h_fGd?<}3dQL|`s z%Rpb$RNxJA!Jr3CAT{j0gKX{X`~}5%6~9B?4lI55eKA%TwZR2&OLTtniZ6)zdZq$~wJ={#btt!Zd=k$M?DKvZyOG<5 z$k`t(>5(<$xp$Xrx*rw>;PlBlDz^tuj%5Ap&#Yz11dwjzMPvMTaW@{rT@4l7NPXgK zB-cGlB}jfyqs2(uq2|F@jM*TtY<`oJk)g(wQm8N}lz=wW0z6o$NbrLY!az3vJY^ExIbrtxbf3RT*DB;$OK!OfSy$vUSG>$PuAV51%a)%Dqg0 z!Q?Ix2%hpOz^nf$35j+G3xkkp;WG_S_wc6^Ker^h*sS|e9gCUxf)Ia^Gkt-1w>Y)7uswC9l zp|4jW%N&2UMEL4cj4LU?JgWKw8+wPvT}|CUVHnG|XglZst;x;UFt_s0r>Z2*NN9_~ zEC)}ujQ&({AnJ8`E2S-P?jX%66uIGib{%WZW2cqJPgvG*;pEn6!hKW$&sd{A1bl z9kTu|CKW%iRU|mQ4u1gg5Vvann%nMi0r@P<<_~SU6avwpJpW0%EuPnjVGyjI{BUuP=5!5+U?2s#S=92^t@pvs3UqfZavGnw$WF`|>3bix{7P!6KU8 z=q8zvFkkZo%?$Vij5IyiyUh4GiET^F={#kFqMM*OTtMCg>cWlyi*;ektA;>U+KEVS zZ9Rf2AMBZ!2JmlJv9RD^*4Nix7$1zU25p?46?Q(xL*osip}EM541U`cp&CJ0Ip~H+AnI^ z!cBwhbXJIJx(6Oo6C#?mhS$6W%0hGxKyZ$09D4KO+#UKxBD4vfN2hVS4u-vgT?y`B zBwGEoN<5@o+a(V>IBZrhH4~Ub;H35u?b7aUlDUk%3GJ+c)W;me0{8|ZL*?CHf0AwW zYFKf`qsGMGvNfP^0-z6)>P^o^Zm8ahA;y~8SIxllBDv&zO+%w|bhHQ-FZ6Bq5NeT`>1pt* zHI~uNl5GbK6o)~z$KL|%-LqXJ8mAy%a+Jo)136RIH)v85sfD@iCMYx^qMAMf30o2Pd#+X&x3Hv#iLEC5#fwKc@6aA>xuXBNZ^%gqlx`aZ>9P$d`lOgp2$O@` zPlW1i*c~z{0DB;>7r$s6SmUGcLXZKHiWW)@Bh^Y;za1WcWw5kzP<*eW#ybFO@`#yT zCuH5p=inhTE?59_dOD$0_vrECK)c={w*oiev1B^^ zs)1lbc~PJP@Nye<^Qp;~9JNPb|FfIis)u+94!REEN8?AB`MG4Q1yd58LJaZ>XK;Lo zT#U#E<7Ym|MV8IF4othWP4DdGdU*Y4en6sKkzu}^VXmD2LB`@X4W6io>75Ct_X7A+ z15P4ZgaL|R&Ik1X$q4-Tj6hL4Ls<}ies#Sa)1jkSh;Et`SV>Y@#) zZe?fBr6fA1e6cxD?+og`4lFb*@tWRYy4h5niZHM#s9HsF^ordbeq2GdIae=K(8U%; zfTxiB6&F54Sq&KW!2$fASsSPs_i+@EE{Is2de`iem7?uobJ%7>PN zGM9O(;wFfW-)-DjMk>u)x$AFBaADj48S?`m8*NoBA7@o}?`FeE)z;Lm*8R>sK~oC~ z&fl3?fa*{Iv^GGYNVG6KI<0XCRd5QH-V-Ki%C0GreOi6(*R|xj#Pi><=fC+T88=XX zzQ%o|yAmnjwSP|ny+;_Xy%lR|L*y2me1)*%Vq97%2_GCp6CGTEvUa)-(>msvRffsm0z=h<%c{B zj#=G4>ERGZ;@+h{{=lH$tLcHQj(dm z1HJPe)&g^))^mF{w-$yyxq!`+L@^-4C&Yo(~*y>R<8We*%{MNDg-z67!TBGrbpWhxUO8jd`(+y%~GV! zgOvxwS2M!vl}z-!j$cq+@r~~?RBsLa`t>X7^JZ1U{1tc6N(Nu9GB0Pw;W_8od~><$ zWjC9J5=X)|fqN$TvzLf@ys-^ZgAwV&Dy2c+-n_}V{jKWe(2?XE&L*00##xI3dCA8Q z62f{J%>|N&?FXMoZFU}AQnd$Zl+LzC6N1htAT-q7@`EqteZq}C+LD{zT_nqCQCKGY zTm5TIDDpd>qkvZ@p?h=6LFrw|M=g#^ zsD|FIcH!JD>iElYRd$;u-@Elm>lz-!s@`5J@?5<_B#ANE*kYyswG4(wAFBlRO%*-o zXgvPpZ2Bv!%y+j(`#ubuZya@REEsv&Q#E>J0{VF|_vv#|D1bU-5UWx6lF5It#XLO1 zcqe&$A%)&7hCCc04&R_wq6{P$yE0*(A&=9%0&Uu94B=A5F~{hzq_Wk`OG`079PRdd zKFtC|r+tUhqvC-X@)BJ?73L4%s)NXj97}Bz--BtZ+_r?QQa*g@(E@=jMo2);PAc7P z>qku+l+zTCcRtT~E-kYpEma_a)?<# z@$m52%~aHem0axW?X_TkbGelBpmcG6^@ArdSxJ8U+Q(If>nv{bTW4*kHauF*jkJNE zmFmDTLAn;P({7_UMO%r5jCS`0>_^}-)(juG|Gt97w?D4X9MY3S{sJ4?N=!kcR6B88 zkSVN~pXaxX$5QVBTBoR32I3qR{T=A3uy9y;A5|l49c~`YL$;QYvE7tR-@`#IF@f>T z)DG?6vEcX}i=*72UB3}AQO!=B^=q`)`vJAv=%_q6FEIU!SHZAc1*{u-nlPx3HHgp3 z(&UOQ%eH#JIOuUNOBA%U-R7uiU>uWt(l>|qa`MS6J1aH*?b`_jc~DoeFR_*-#h^hl zE+?||`2!F8{{W&Hzvq2VpN2rf6=;EXO07Tm!G0ltXeW+9?OZfoJ z16T_nU_4?pyY!Zw`U>k8NCyqXLJ!GLJzX9&0q_TA-0(Z8#X5q#;OM(iRJ7jY?a6)n zN&o;i?58i~!QY6iusU458DU5RV>+se}G+yG>LB*h!QsB>>7uYIPDYt_tQ%9 z*CuD|^e*ZDegGfyc3SFd$0AWVsnacO#;Tgs3U>BMC{oXE0-FK~SnXylYYMxulz($+ zYPy+3-d7F1x)JTiwan)1oU*?P8rFUcKZE=*Z}nm-`d(^k1fWeMLl`gBEmvGfR%k*C zVHF`2F1?Q!Gh)&0vV;}RcTrYoqn;vCBUOGfH+}XIUPkc;%ol<2>HI||Zd6vcW@v98 zXi(AfH<-j>Be@#~m6+-52vv=ei@1LM6JW-Bg~+GiH(!FTV#5JYMv&k^riJO1?;o60 z+T4UVjqdYi5j&uC5KOIbF3@lk1smX8(xz)f6-5YvDX4QLtlykd%(^WI@yn83pR zRL2<@0V*(MHR-+Q&YeR8zUhP=U&$EX*cNMbgRDIBOFL6whk%dQX7j5KC}rX2fN3b| zH6-+%d-|Q9S2|_;E-UY>sI7j4G#HoGQ7`ZcW`ETjuvsnWqjV-G>sINFR%15FRII=B zAqLu<689+yBg_{-t^~KYX>gF?ISu3OR%E(_qf)3SNvrjXD>^luSGw9ys4!FC&WF=t z1r@RqQ3y*CrWB?T)YKPWrKsW*Pg6?17ITJgpVZS z$LeGF8dBvs_M)j$kS%)TqTgW9;~mx37$i{4ix)#k9|&&(bcNM)b?;4#wB){qrVQ$G zKhRMzK?oCxcURCfe@FKT;2JJ8wqX>RkeOqa%ieuZS-OL?XzDAmx7I{2>RA#d!a$w@ zC~0Nbd(hx&`I_6*3Jz_l2XhkCO0?A=+q?IlY|*Q~j+(*cKwvyqSklgC5ZgaxVx$ey zN;SLFRb_qUo!+aNAM_6lyo1>ez!$9iw9_%gD<{Xg4`@5!u>s!@YQP`AvJmQoZ>^1r zXNuWznO&Lj*#iFEi!$@fS4)O$Vx`0kz=lP`8i?0s)n~Zyhz#kT!T;-;U&jnpRDPmJ z2hfPhZ)M8kN4P6a1KAxFPL+JfG9^Ns8?zHoLRbIrZ2rY{sDW)=AXP8LrvS*Fnq;h1 z)HQ;q3d(z=1l>tXYWohynCd#EWLXMsea3v6|EmFu@FOdv6EasY`Mj6MI^5>*0rn_WjP5qYTQaWKuKONy*3#sj&5ix-x z3}_ckuNJ2$yar==JRs%+5uc5oWzi9^tdij48w8Jw9yzmd&kN~hVd*GpX9m0{p&!Bs z=1#P)?RkvPTIphaRiE}O!GADM^e$*|`WS2k3=xWuq?DAv8OnJN*0t$1fBNIkD4Q$P zqYW^5X$~jUhwOq>2fQ0p$OiEC9Kp}9)$FYA@!lEgX^(<3buvJ93$~g9KM@ju5sS->JPa)srZjbc zvXRgk>FM!LGFW-xXGfDCPi0)iw8TL&pcXtg)cCy4lr{O&j6f(gJjtjzRx=y0@u9^s zavu*Sn?=_G7$J@?d2_|;$n;Dwlo5=FgjR;E&Hwu1HLS>w$I-J!VBX?Pja;Pv;3#Oc zVU?D)ZXr~H$5L(y8wrtb?L$cM1sD!Zw>TtGVFM5?kYs)4E4dUnV8%BTGkmUCG!&j#y!r&C;0wODY3vP&yi(9&8JCV8BGu2Gsly;o( zZgw2fk**z~-9t|RtT0HgA+LDi=#rAuf+D|e(RjoAg!*c8{yGl}*N;kVX%pXVFV^@Y zNl|!W$N9ob?EYj9O+`*wu*HgB|FZzra&jLAM5g8EPb2bW^ckg7OuNa;eGcwDXp5Vb z7_Nwb#)q4%0w=oW5M&|1SRT;t5t;1l?9PH7cx@MvQ_a-0e`pD%Iqj?HULw~pY~dUo z6Vr)^jN2(n!s-r(rL0fO!#5XOEVxs1nqK!lbg9czFjJbSQZsjFpsjm&?@?nseP0atdSxG2p)iBI}5hYlR*f14WS6xrI^3h~KT z6rz}I0RXn;kwfCHfCe=LqBQV15jffosHm{$jZIAWdwZ{(iTzJ}a@=7Tvwo(tYlj_> zq!2qu=aF?B9Il9nnby?^UcfN`m;luW1_#K5pWn4r#vGxTb?AL-wS4HIEf4PEU8Jlu zS6wc2-M?0@rEkIA!kxGi=Yr3UrJfxdS-reE0% z_`2Zg)~#D1eIABQQ4}Nsd2in2)zt`DjJR%f35sL?!_UfZ$Wz-b#rn@zO+P_tGiG9p5M4Lt;nE^GiUo27K2RRUt+XTZYzKBzmU za4Qlm*6{EwtVJLsHtz#bSs(qMHNu@hz?T2=i(20ej(a!@cuCu=V%t`H@kvF22cKXJ zH`}(`oNsnZ7US2JV{3;qT{y2kC+0P(s#=*6*}U8Tr(aA=Pz>oHa8H5l^#wG=O{cpGCK35oNk-=L<~&5V@Jng{EsqhH z4dxYRzfQi2PAUAhd~O9&;3#^m%)Z@rjPSuTuQRO zB>90Q#%ndk>LY!eW4)k7*Byf?_H30D1MbZ}!Yit8=Kq3ozYq5Tu$ayzW54D@-0_If zc0ZOwp=B3PQS45Kt}55E#nmweB+NncWN!js4euk98j_1Fhb8XIZ&_Uca~EZ zxi=(G=rL%!`Z=A12Hr#jqvXICX!8sxdnl95825CQ&x}A$nymKXVHqS=gYQ-_!_}w+ zOr+FPo*0Q~wC?v+jW;I(m&Bd1iyC&iSR)jkLMbe3I|to82AUd*VUJItE6BflcvG~T zzQ%V%ePz9+AcX`jqVJxyg$g@~5bqUYyzWOt2oUY)!M4MmY>OOmbhwBLQoVSC?ELpH zHihH2$OWl|D#sT|1VZs`>5g!S@v=Z-# z2*K;x{L71Did}xqklO#UcriRsBVpOHB6@Ae6xu?hstpAVci)+i^d(Hhv2n*;PByNn-mM~!Zbf?=P}sq$ywViANQS*LWTWG=$Lum z0FnV9>vclByq^%h16IPa9sEmYC4TYfrp(CT1;ys{$B52C3;rW!@lLNoaK)XvvX zI!jaRBt6U`)3AQvVap()Jb`O~+%aol{iF|692~V)hQ3olFx8|wf$!#s4lahgOAVw##nktqfz#w6^F6DAL^*tm{KP+y)f|*h3V5p?%+$h8?88K66a2Wq83|gQnqNJ)3MwVSdx{hv$^cVV|f1 zED2Ti(M{85cJl=I`&VPs=jY)WR6OZ+0YojD)mYqTSy)5 zM&7BXrnY{hf+*sp4K4b+I<<;opWeWud((EN=rjUYhu ztoZReuN@YF)`FNW0n?#;z)aw!VaEj0ztJBRr{F*LgkJRSd<;9QR`t1ft+AANsfugT?Qt`c+K-q@sj4t3nj*cB*`}7Hhv#)LQ zd^gH65$^K3U+JsjJ|(%yl(o0{gROxNXD0=?Q}mBD(!s zohen4LuM4BszuHdiA!{Z3NL{Ins8aj1yor>JnCVP;Dj(~Y8FI05d)(BL2t$zKT| zk|POsX5#CrUYsldl0Vp_WSw)h)znt7v1w^&Y((*M{nDa5I9Gm63SlrW=a_GsZ{`t^ z+qlbq@1GE zvlOD-42JK(L-Z_AOOvA9`ab3m;|{>3#nZhkZ}Gz#>WnsMWNzJ`OpA`xBu+_AZ+goi z^U+YmOJ*BP@&4!PHme>x_6A5!JM5m2d`aM8XnuqT9`x%oanj@m>=BHepZ5TcTStg4 z40+|BpLYAk4ZBhI$-%&x`L6?!2Qw2|&uiNV+oba>WD?XZba?@-Qtb1%6C!(=hG&eU zWCl`Y#1Oz%tXQ%AM-%0|z5~V_I(}?Yk9gbCqW9h45cj#jHS4c%B#psdsxR__>PH>4 z$sN%gM0WmuYPB3PH;6lD7P2XQsQyp*$OuU*4@ch0P`?v-M6q0tG z`>>B`1^JlzjXVLVQY!;{-NO4oesX6b9;(A3v+^OG-7r5D~3`}}CC&q(J})aSU| z&o$lckkJy$WFmb_I9$KfJQ8>nkdrYZaWueBLp$s~!?A7u^(5&D_*7oYeFvNqZhJ5e zokZJ!fY^Y8jDy=As_V@Uym@$Y>-ePs5aQ1U9GauQdIr?`_DSZ3G`(_(Feko3z4DyvyN<-NNbHJ!6yC!X z6SR5xn(f7wK7rBI>v^oa{{6>y7Em1xyp)383~*$isp!uj3RKfUop|j2BcVI?`!A?Y zMomTtPl4JvcEy5%XnA2Qu03m7{5aOBxe*;=tx;X!`0*p5U*a$jdwKrsdh6kv5m6uK zW{o6eWz2nV-rC^DI#lL=HF#@buv};twmU-Gv1VvbAaWeQN8$AYP$P1dmEVa4G*kh# zP@l7<@W{F8WI-i}fw}u*!TTb9;Y9-+NPoZ26wMdZv8BW%CeF;vl$Xspv^Q{}&k_Pr z6PI)A28mqo=)_05x{hjS#AIDUM2rD1O1S`C1{kKTU$5Z1R>Cr*iD|PCS5Q8$RX(If zkVXOuSjNnJ%zw`Vm$6QCQ?JQ}O4>v=@ry4jKKM?MGkZMBFje4uT~Xa;MaC?(aV$ z16v=L-g)A!$Ru_cv5>25IPFXtvtPb=wA=LAHe7dmVR8XM(GDqyS;I7Ndf&NZzn^V~5d*|U? z10AJFj@aEt8;-W0+Of?_#2DVhCe5nzu+jDcA_Tt!Dn+-We)c5YK;K?+*3JzqOKgnKGWvR9{{`+ZD z@LJGLhpE(N-ox=ix~&IiosO~b*Hqo|SGiNKY!#xxD1pxIctrY&Q8zk7bJlA*wu`T6 zp09ZAJCcU#Q_-G1x^6?dkG=(`frN1iqlJ}Ep-5jY^NCiMGqs)L%|qRH*WMZP#k$0X zeKK5 z#9vunF~vQ78%0$EzG*6NpPR@-}EmEGh>Za$7uFUs+_%N1u#7V_&Hb7_c%0>AgoIi=e zz2E(ya|a%2jpXRghItJwEhj(>-eqX#!Xx^4Z3qG)Y!}hE5^g43Ky+}cw7%?TH7Q2m z%JNY@2^d$|B>oe)?8#$bGvESD1fm9_Y7MA49+(rg+1fgZ8D=G#&7g%VFHSg~yL>Pv zYoMc}gHCX`2A3o&HRZhw9lk$`mG~nvZ_+3Bt>4ecxq&V;wLKf$2=-@lCm zd;-cbTWh!aqvvXT7&(}_0JTai$9uK&OZ@oc)P!N^ps()+u+4k)ROZ-oGtHM4ru>RW z*Oqd&{b7a~C@`GQ&u{J=Dy^i(PJ~B92yS8bWDkLAJu4=wUtn~_tcU&Kh}oZ)DXk40 zb7{D@yM0A?e@>D~%Pm-GbQf`m?GY%5Z9Z!J;s_G;k+)%ni9M6PzdEw%GY|(S&$Cn3 z1;Y|h#pXKnJfmiD#1_)7Za-hAcfOVH2dx0q=s_AVMhIWfDtLmlo10l`9l?(t?(+B? z81)fj+o36snZ+^IsW8be?6ca#aw!fAYz=>$%et+RgPRt|-b~!0 zWoX{+!FD#hgoZZva7@E?JwEcf1~GA-u%XcB4|Y;-S8HCCt)h~uAj-*eyE%vcvcN4q z{QY7~)+=Vu=4^4r_om(5` z%;3rYX6|=4hv(@AOX=_on`dAp3@{eKegGZNO@IUs&a%(Tf+h<{IQhOw(E6CNc!t54 z9E|IXD=~|lotaGe#t*W$`VtCN875Z*=QtUN6r0tfor>?@e6^#mFHvw6)v@3o=Sq`J zCGw8W`FQu2$M4&%V$9k-d`(wFBt+e`0o7lLiH?pA7%{t2uRK*TY`@;@I=xsdbIdN; zia-0r;E+K{sg&m23zoj41PZI;;nLpCWqwZIqD4!aq56e&daEmnx)*l=A=;&smz10X zP!Juh;JrrHS26p(R*s2Su=?ZL!&fio_~#yHgybhWtCSj(6=1&3mThP58|U7>fo(GI z>^-r#{Z{%Mo6OtKA{#r3Q{!|iBxH(bevF6Aw!k~sj%uS=0z5?6A}mFnSOjSjsmX9h z0VAPomjfh#SHq2Umwa|q?qTc@fMdZ!<8SHlS#!S@eSd`c3Au)CeW@5Qx_5rosXD50 zTw243ba{J$a5PAuNqj6Q0l^RU*UlZXwF_0K+5`-FB^$H5lf8qr zn{&fUIkv`1W;AE$EIl2+L)o|WpR}8>44vQOxz-N{+$vox=D^~gvMu{W?`8QD=!_n$ zUE%4GN(bz2`unHU2x&8@mXmjPVKqg_oSnO;Fzg}dYVE%-zbrxb)=FwTMaRv>hxs65 z)gob*WI^*u=c}c&-FNtyGaU^7Ok6U-CW4=VD!f@qUzDdKiGGUKNZEHo)Pdf^D)@wC z7(ZP=l5I}RCOw2?8;CBFZBu|&#m7MpXqEgfw=LCEX=48Sg;Vm&BSJnnt85ze<`Ou4 z9p|S!bsIYX@nuVwVn}n|!!@j|K{sz|K!+R}x|W+eZ5izD$$YubH;=>ojj-c-&!Faj z?}6D_YMi4}^$1C#v#fAa(9X z4gqX0MoV95&;2NB`gz@;pr@d}_6M~a;Nhjh}@a1<>B=1o5L*CJj1~Ku@F`6CJCeete z<2reLoJhc*p#9p-+rbCKur=LCeoR|{w2HJ*Hss@{E8l5B0@#X0% zp|b^Z&ZDA5k#k)cPvoA+8NN4^U%brK^{MbaHR;p9BQ6K5+dzM(a)l=`I|vQZV;){7 z{|irh^As)C6~p*L@0_W0GfZ+w7UeA(ZSUH$nagN6I48*fv)JL`If^s|jNF7WBs6$2 z9IUM9WNxjUL4}o6BzN>jo>Q*8D#z9@q z=`Y-DJ(kzp`DX_DClI>#UXak(nq?efNe?gP`31i=h`myqbn8teJ^V@Ldn+0VYc1NR zq~v2>s#qGePdPO3-IQr3GLvDK_*deN6Mx>R!<|U5QA4@ICm!JX27+`*Y=;~Owhcf! zF4;mV)>?!4LedruNzKi=2yib+fMYp$)vEhXw%wOh`jQ~gKy3gmSq+=3IDI*glK*Qt zpx9-33fnE9!vA+Q^wC+G=G2HkC;R!urcM#fjrii{5qYc1mdCz}{&P9PI9v9`(sOW8 z4<#=M29t{_+xq|KYQzIfMA-kqN7%`Y027@()zfdw1aSSkDCpj~_Tz(Z`ukzYWci3u zD3w&Z>vp@jeV>X7Xm`-B{wz8DE$a3A^HXPHVb#*@joKI$A|RhW;;)i;ghy)eOebF+ z_s=?=3YPn|<@l#%BG1H;{V}M6k_kgZOpl?PA9B&W?&5Xmo<#?f*gnV7UP6&lLYlMW z&h&xB-y2*DJ-qr{$IWPGlR%H&VOlvAb;Lz_=JoVB|J zlcx@Ym)V331)Pih^A-zLkeh!oWm$eOu=M;Dou_|(oeA&q<9m<9r%7gpZop+eM)0}ek1F%jmqHKdYG+`%Vc3A3STCW9h!;Z2_#uC zv_{MH1nC5&+JiR$t%HvLg0y~A8qiJ(!LWjkMIt?ZYs>ln?*{^6ER-tgx=1Q}=_TtLmT+zmLu!BvA>pi08|$Q|h?>ecoH%O&5@ zzwFcwxG0$+a)1!zL3R!shrGvk@NaN-Br{A(uK^Ju$2w4&o(lc(&hnOYhpNX+OS|>E zhdo93IjwKNQyoSlFK_`30w0(fTJ5WE&r>Wv%Y-q)|AHL_9a);K#Pd%cK9zFbGO5;} zGyHifLAgg)Eu`pQue#UYCMYwU#B_daYsOtre1cg_GBfbm$iWiaFt;z@+O>Q_PGrct zh+$L2xB=ep1n~=%9V=m>qtCpphlVoAB8Er&KrMSde0YFPJ$g14o0Mb!MAnMoIe;D| zkPGFGB>&Vp$Rpt!cB z1vT^*Sy_W$m5(O-C_mr3S6+u-Qqmb}V3T=Rq&0vp45*H83~u2dW#ddriHUs$zbC2l6RsU(&V>t zzmnb1ijHJ(EUm=_^L4>%lP4{%@VBs|f}ncO zc~0FZdh_<*}KJOC@m532MoCFF4u>h=-&`m-3N2y{$46*45idb-dlFb3DgQre) zgOy&o0aP792sHtZdjEyciNWmUa6v=$$#beDA<%<)|0)lzLQ_){%8z>~NbEm=kEq7J z+T`(?TY-VF_QyJGEQ5d4A#)pWa3F?MZfU*FdFRHByFz>=E_U3&)SjDp zR6nY-ekFBfNhUf*?=2VyrH&7hQr}9f1MCO3#Q?NI#i3Paw{XPzJGT`f|ftY2dHWDNgAf z0%X&0!(?bMN3;37Z?*TDqacr$5fVIwa>Yg$PX9n0kq zP~aq@P(5wvKK=$NJ&|sNzXF>U%vmtrg`A58|G^L7aCaSGIWoTT(j8yoBaOhRrKNT6 z2Gq()kGz4-0gzVK3-dKZ=fNLh&!Y}(*;!#^BBSSn2hYp|cmKO`PYyI`|7w2ca8+Y# z#)-Y)W5D7KPSxmoyt(lM*U9xSH08z~vN{XRHi%MjX6V`3LGs%ybV)4I!DFaNLh8@k z%Z@<-O5r*rMl44PJ!o|`q~t907WX>3{ZO_9<=k>&*%D}u${HTM7A0na$Kd%< zdajCyRUUhPyYmml%ixQS4r6gy&G?A&{_q1W2x9j!o)t`_eCJU^P0hGrjRRd$ee;rO zyY<2y^0t$#vL%ngOngFaoD7N8Bu&IR}pOl}J!650L zKq47?MA*GESuUn#3kQtTU`3vM10%hmI1lB3anCiO&5=M^;a>SWEJnbr*C+>`?}Uz; z$xY-fpxi-qtM9Gy$oC&`hgp`^|52{+{w*c}gQ+Ib+zAv?xX&F-&bpbt79KwSG3ZB% zii*m}=yQ=G;3p-=$MtculwY;?zpBscWe(NDw$&e=5op1tYXJ>xf-zs8GY%kdcY3^C zuEs$ZlyDoKIe$9r!ei?Tf95)>cVWQ_oo1*b+5o4I{oiH&jIhtq$=aU&>UjFjr#-6`VtVym)`fIZtcf-)1PM=-!@<#s;Y2O{rW#9k(Z5Nd!8ZxpXL=xGhC|Q+F_AVnt zkCJ^1i8WXdBP66igRHv^mQ0O2u zqX8Ylu0%|V2DBz#iVV!>UB|!g|GWp6q55Lon-hRPC1M{>maZ6-N1Inus%k9}r){Ft!AuOTu8OSY}~NykiyOm)k1PMNDZCBMB3_ZyU0I zh(t2~*=X!X!1}je6*TcvruxnePGUxgYJbjO`AxKO5Tgdmz6%RB!OL+q1duQA244VH8%o7N|2aG9{B{TL+6Ny zAc*3})sdlwS`o9?2;iz@45;jSdZ84ugz4hma_Nc%YSHGwY~k1JtSqo=`y$K&%ZM>+ zkZpS#5*#Q(dBFW4iRJ|K$+w9?eJEcCpLE`a&E3myH~Y5*j`{W^3Nci}4{{(}g3Eg8 z(xt^)>@H%=Dz_cii37Tue8EN{>b$X0Gm}$D0tyo-X}lrin8*-q>#%twE_iBm3wkBt zh0P#6Jv=%}+pg51qx9oI*q8A9y^D=<1f5hiuO#udUTC`#`|ur3t~He?hf!&hHA)^r zhlqnbXyVXR;rw(VuC*~j1_eHx*oDjTL7Qe6z9s_k)<2QJ$#v;jp(INH-qT`D=MDWR z#P~bkt$U4F7|gXn!Z|(=QK+pwDkrCfw3{-MT|7KQp7CKFFVAb&!1tnZOjJo!PdgQI z_pZrl|NHm%V_X`$4ZDaN!4&5sdH<;AYCNTchY!slfPwuP?UWhOPH}*-hKFpDn3%D?Xy6h8R?q>b!cIeA z0jfaWE}_cq<}?Vu{!n?m;RxHwV^hc%LvTsrZdtPN`ab;)qN-XG3ASkF!68d<7wAh) zFr=F$g9?iWrG{y2#7G=H_)PZU1+7*6})gR&*6uew98A+YhH{BN{gf*U-?3X4G%Z?;KglM&lSaz_}m0CNTL0DXbt%X!aZk+n)Y*1yX&` zXj&J4%4w~7-CWsM&sVDG2>+;A#WSmr-VNhgdiK zIMiV0#B0VnE8?V7jQWx8cXVV03A)EoB*sH5gmVCf%e&EA#xRbJa{wo9tMk{0V`3~U z(mcDYQy1u-MDLDe{i~!VF4v%XEqwBrklRBI6yOkO~BYBlnRd7NCF$Vux5Y2H1N~ zVQdhg_yi?z@NfCAK8YC}ksC@Zkk2ZtMw(=+s-B(Q5TT+avA7uX>H!!kk?_L1=h4~inPryY{T)~Y__7NF4!y*GI0k2iHsWtzD9{aG!&ThDllFnC^N($(qL(|Nasnxt)c=!WFGmD>mb(U&6}S;7#BUm>sYsaKUtrO z8`BUGP8hIz6Q-~tMWJ`n*_xybLO}ZgBjH$$>=5pLUXY;ir>1*xVE258YL7cYh1G@2 zK1$-Ex)(+wpr9AzLoz#%(~%SFc`u zAJ(k7DBjcSM&pj=Uu+&of`RPJ%N=3?blW4wTJpXm{vAJw17o%zk@x9EsO z@}%Cp8MCE1k1SaiW)hv}6NJK+{kT!Jj zpsxzy&m7(_cKYQ#Kc^t*SMV$qqa<~w2f1=1pRF0l)6PhygLtasq6?)Z7UqISHTU4=>G|iaUx=I5`JZKHaY+fEPM!k2Gu$0NUQF9O z;FX*MK7o52*+-g&ti4 z1F*KTnyFl=QSFPZ@pn=#)Kx?19&C{aD{X~(3KuuxNmaZa&-sHM>EmK6PB*dn;_6QleX2rG)72M@^rvyrLkMhA$;)B>j}Pt!~`Kci$xUJR2&u z2Bm#&X!XrBcncD1Pt(&e=~1KkBLu1_eP#HAe@{4}RME^fghZ4*yA;0@rb$pKgC(fb`7&fWDqg?5Eb}ftB7U z{*I%y1e&TWrvdFfayZ5a9-#S{xTK^Ta2ecmDB?~V#g0{!l&@DnLRfr!7if%o>L(zA zBSNh$>8*A9BO4LCRSrEfE_kwJtdIVr4koTY#juP_PhdWauC)#!5fi&Rcpb@U#FWaN zkr$+ORW(2P2bJ;a?T>p>&6WG4x`#0$=hhWU3i4sLs5f%;+uFKQR=8~uu)B2u`FyZj z%()4W;y_hD8a6LK;ytt&Nn^Lqc@MlW^cog>x25(IGBA8!jhHtmi5sXg zTtvldi**6+Ng^?}^OmfG@B=m_ujU8H3m~LrT-IURhZhSlNPX7Cp)2c)ebsRzMZsq1 z)z&w@N{MfLg~q?#mC3DKArnV#LbI2W;-(MFU+i25Z!KbLj!grUP)Vp0;*oqFn~8|m z2N-H$nW<~(K|o>O6RVEr=QMXOIq_96^tkul#Ec6ZSajYfUD8a@Kw=hZVp>|Tm`6SS zgtQhI4G{Wo&?W)ZSVnMJR8&9$2MM1;a~+V?c9-wGA{5`Y{Ot+(jrkDF7e9o zCN6cbIai+N#`WuON=lORzf^1fcNX8ykaV;32vp9HZPK5h#l`dqx-M^4OG? zchT{MpZN6cuJ$Jj2R|jPj~!QDi4vQ)qu?24bV4qJ#=`y2*Ys_7%B- zg6CHufMF{=ee$gCuvup+rBN5$Rfu{N2V=n=8=+;T?QWr{(D9!zS)OPY>S%Gyn~2>5 zZ2~3}SmbY_6aH9S#><%ER84+Rl(%nFCJjjcvAT-Cy{&ziiYTXVgXVGO#{`Sz^(^lN z1$jBgFEP8iQ|7e1&sePu)lJbh3+XtCE(PpD^0B92Z9RZ+_64hY>H)M`nj9}UrboY{ zVt_C+W0!=)B|y&$&nY`~&73hPAVOE4}63gpY%Q5NrHy0Mb zvK-x81Oj&X8Knv5T3a!j61q&>cANuUxK;s!op#-hD16=5A0c@Jhga5hdOs^mA1+cOXj9wLt-x#h% z=ofGxBY5%$)E@v}@3#E`uwh4W*>SH4pzHj%G^cLqRiJfHvj+zUgJ+Y8c#hN(3_m!= zV(f7KfE~JLpw@63aeK?^psypsl4WGxAlexf-J|6)th~IKeY7Y9nmSbbBQl8XJwnvL zBidOk#KZI*)nUlu$KaVvPZZmM9TW&(>FAn@3#R+~DO=DH8}&C_l$QUBd>J3+hrV$w z+->woz?^$4{#Px>@vpZK15oq>YGHsPL6MQW&y!Z-LO9g|Scc70JC(QR zoT#4 zeIN}bwhW#^1>NTw>jqx`8I?D8i-tb%=XK163paZZ4-VqO3Y5IB?un9 z0yzFF3GhpkA112DZ7%Y+ms(`$gAW6+PG}UwK<-Xq^g2w8_^XS*8a3I>6zgj-Mc?pk zf-oaEN$V)uEbz#u&mC}hTIRKa1PP02T;5zQr4rH2;l~34%Y@&wc!l*kVl8u#EOxG+ z@Hk6cxGK0a(yXx*3TL|c2uIcWXc6LxK~tjzD`9a%{HG<+Wk^O8IQ@~6K%*E?(EeKB z?$vNWYV9~N#pHZ^8TfgSFMP;|r$4a`a0V*PB}wrG`62$WzeEVx|HOo+~ zo86MS5D#%Pq8~!S3Hrbb#dn|FhtPM?6GGs0TEYp{m%ZB-a6BA5w;XM4zD6l<1U6Oy z+{`^lb+vO}XcSFLF><>hv$^{C( zK^;O4bT^n^hmaA%n@RFV((pocZ9kW)wb7n99M8|fvH$tx4Ko>vNdeYYg`Bd6w`aV)g#izd8;xIzGwUU!RarZ<^%J3<^u)wB0mb6X2wMyJV;GVMSYK)QiCB><-?OZtvSfk z9@g+}qMLl;CGG)w9HeES5W>U&OrQ+2bVaFxvv}RQbto};TElIR)Z3jj2Q(f35)r}v zw-G|0c@Ht^XFzON1>70csFz%s=e-PQBXboGy_!?+3X*}CpjcO));#cHd>N?xB#}m( z6%`e6$|9@i#gnDc75F34fmImi-ilm6KE3ChY4DJZ0F5Ljx*HM59u36wE=V{j<~(3- zqGeHj&fWA{>|_&u05O1ca&=5?FAh_SN%WFf9y#Kem4LIlW*A6MN#Bvfhd(`Y^bTHQ zO0k~{mhEheR}>b$7mVDpQm5+_uVVcZb{iyLK>LJG8`q6z<0i#5cRlNNpeTydxNZ~? zfa`0sG9`At$jI>LJ?V63uDrRVXj{He27dFUm02fD@9Dwjcqsdj4L!1=Zk4cx>v#Zkwk&yek5%6vP(Yy$j!+?4ZCgaN;}-?9w9^~G@%^=pumwv z`sTw!sTlGj-RC%u)HL!2CEaHBGhz0Xm5t3q)03Dv8*7RHTlh9ZgKgWMm-S(^{IAK5 z6v^ZR6nMZnJjF;zwG2@`>)=4MYqhuQsYk5Lg}ae>0FNos4KhPbN=n)FOKveV2RMd* zw6w4=u!G+&G*1tl{l<;bo#I;VrUS+Xmd|T1gkh1JQkG*S$}Wp6n!YZ9$;DAt2`v2Js7L zv5t&3MN|HMp+=KUXe7Xl@7uDLM*wtoa9Zofk0!RZ$`!7WE|)GzBqLk*ZOs$sq{(jS z=V@uTgX!t%<))=q7+=(Ta$1aI_#-ge?!mz*7%WkJpc=^xMRq>scrbi-vcSqU)ImFk z^dYwE2+f06M4o0Hbe6?X&Rw+T(V1|>7hAufpTLHAZi04bjC#^ z^JhQcmA!dZUCxwwQcQCESz6j|HnwXrPCq_{goY;BBCuRqz4`(;e0zI=H7J-c9eXIn z4N3`=8gi`o+&D4usUF(Z&DigdwE48ZW}7oH)dLo8OIMhoa7y8<0@8pavXnV+p&(2w zc0KhHcXW4m&q~H=gnAYFx0D`qoZwUBT%m?aQE?5+y3PGq#wn=35gNbi``N#zr(9ag zW9;(B2TyrV#1`C0@fUG1ye)K5zWtjw`TtqpA|A(gWh;Ra&&uuAW4j$jO1E3%+8~{y zATMO{|IWO|`3S5Q`DxtPu;*R_51&S-bd!J%e&NYfDYkx)rm;^ajKOr^Wgwpq%Fmx( z2=heP-1{V?TS4-H+s6dn4%b<3X^d zEK@&e(Ei%^dBZ^Y&)Gg;?~fmkcz_VwBxH2CW|}ehZ94vrNic z^T#tjq^HNo;l1LUo%`IcC`VDM#dX`5}{;aKg_2cE6`SeD9 z{i2DZTSi{fU+$u?FXI(+~$k_f7mm-iluY%a-9S?i>toNJs-Tx5=7nO^Sc zxFHdy)ATqtv2W;uY}5>Cd}94b*$HC3v|Pg>pHto3>;e%p?U_y{zgr)#_u(=vEA*3< z$a5X7csd_sZn5VkA4wi}1c@~F1?o@)8eQA6!ovnbWHZsc$*P1xXn_aN>CXerA_F<94{l(FNj| zz{Dp77G;UikHF%4o3V~iz65P@!=;3JCR5`C4ke81i#Dw>L*oc46S2MshihwWJbHDl zZhR0lPNkGc^~FGNuqhQidM#}qK&^ag}+M9V3;I;02%@}KMp;&>`_^XRu`X@O8ZkD`NzUkWa znQ3lldZ{KeaeDqN0BnaCG@=OZpdft{nnA7*$r^d`80Dbsv-HzCExJ(0Jww87@;!Zh z+u%rS_>KnauLY~x^x&Srkm}YLh46?b9NsBVnb_}2NlI!ixG2mO_!&hfVM-ls&~K=# z^W83z_2kL@FgVDU^Hy-*K4>^=vQ9Vn=$^U7yNgmSY4XoTjG$3>J4U0#ai#wh|us;*|G^C{^00$%|3ngmO3fUlC z7cLs*AnJ0Z%la~uC`XZgWMmio{yywTaE|-?XJFdaHajOLv%33l-^wEDN1MaCr>CdJ z9?2U@3C4EXpDRqP)zqNyEOcvaXt<{q9rDd8fbPb62H2>|IySZ2a)?-y|T&TdE#VKc1_=|z&qnc)|R zB??Km-8so**l>N`W`>1n{)_RnvK4K*hGdb`>DgDDnKF159=mIJyyTrC)>e6LU3)|1 zgM?UjujML9i4=vY&2C2{xRjNBLuNNkYfEQrzkt6UJ@CPOE?X%fIUVyTNe8IPDha7X z+7?uZ-$V-MX9vNZ@X0RuafgQzBUVU7P77t@Nsh=}tao|tRhOpPpFjWAfe8nO#U}%P zkjZNq#V1g=3wHGPfBN|Ga0O-qe^q%+E?qyOlp#N7OoZy+&oP+%WdjawgDJd!SK&uFA?=LNT_AsM* z;6aSRA(f+$(lw^ch}X^DUALmmRO=uo_vnv&D;46DFQW;&TcT-NTzW|zXI#Pa=kR-+ z($F}fLCmT~E@HfYNXR6_%Gc`5SJcf@JLyggzU3RXi@6%#6ob_(CA zqAB&_U|}JOzEexi-b2wv{8+RZR)3!w@j_W3wQP9U1I+oiU>Hiz;NUz&h1EwjH5+ku zh}H|}VHue2z9XcShXRW=OkQta3xSIB$YdoZmbJC%J&HaB#rP-O4Y0^P!Jr>QYaq=g zCTwA+Lhd+LT4Zq{X*kbUaVqzO(3ATR2@ed$#yVoCu z)+{Wn1r`8Y!lzH4{=ayJ4WA@C#d^Kd)A{6?G-f}q8B&_hPjtI;JuAB5-)qsczP`S! zI#B;2t5!%ydoPu9U9p_s9lB!Km~rCiW;jAtG->Q7fx({)sBcFe0TjM*?V2kBD{!}w zJbpZd+5{4p)mn7g`cR)l-Hfr>dnAmmbbG7dkuW^#)_5(Ur2d*@O=0axR`t{7 zEV%)x7`oK*+}Q!aVW|G0Isniqmk}F#WoDzH#paD0k<_Vhg@~-BQ5FZjCtWWjEZh!1 z10o9|gsio#t$EKlfC50d$CjF^n=d3J6#N#gh~~+Y(ljhhPFTI<#^XqH*UtM1D-8E= za#{e)G|9)`!Q4xaj9?bAp6}nM-)z>elBrAE%B~myY+vcj8ScqCM0Fes*_DJh0+b)u zFYY!-0IRBws}m}8z}ajsAc(EkdQrK1{py1&gZsabdy6*>CHbE;+D*e^|ExfQ23c)^ zRAWDaxZmc@DRsI0NuRrL)6OPsNgNAX_Z-9X!8}J)yY~+PBZ^ZNPg3~d{`J?Vr*^-N z_>9<{vv=h$b#EP8=cni{e&N*3kQBP~Y*H3<#gT|=3TZdpgf zv#*=WGbSf}I0j#~(!QvSd^Oh9=2X_`ySZGmq6%x`T%cLgqn`W`0sCYKQ6NQzKWc-9 zMgyWaz{lPB3?Kut^dsExOAu9MF#Wb|goY5}f;$d5AWflko^3;VmP3Bcv5unqH< zVjL~}t0UBLJ1RJ6@(7TUakB1eH16qIeU9Rcv2U~c-9SDJJ}t$ ziQF-N1NeV8Buq?QxHsLmc-Et$mz$IvhW|=Qat*jmW9sgm$G2+C4suMh=~S%Jtmk80 zIDu@4J>t;l|K!VqV%qZldC%9&20pIdcQ4hQ%WZ($C~l+EEq$81)YcgT??d-_&unu; z*?RTmSu7(oA!zi@JvwboR40vs_JUNHV{U0ltwHj@=HDbfJ5o#FT+#F|V7NkN38A>) zCjIcz%C7q1t3}_R`1WEFgWh;czZ>P!Gh0Qm6>VyG=yRv<>1})Mr9=O_57K^_pW@qg z=^ih+o2`(y%4(apc_>vR(UKl%ttkKS2yv1|tKc3l+K!VlYxe9j|9UC+Zt3CVlIWLL zH`Z*Vy5uzCJMZ#+r-N~S^O}8SXISG{-pI1wEqw1!)ck&KBdq8~F+Bt(8jsXwGz-L# z3o51;P-^z{n5pBgZLg@{78suPz4Hd%)0368wZA~vVY?w7lfPXFz%?8v(B)jcdI;ev z_>VQkaz6L>pVHS?#(=yt4M$aSKGoDf(fxT~K(P-31Eglk3+^7d!b>q--`Kbx)9WCj zLG%e;amG~AY~MkmEU{{aN+I)f-7er1JwrI`3CggGMUJ>e&!!V0`_P)-JmGP%4&7sS zCC{xwrn`}mlJ;GtY3(fnv(g(sU_>qgj1ahlju5!g_07ZHPTNfxBKsLbhF1nxJ@leC z8If(otf;ax?v3xqM_eSDs^IjUWNs0D5iPn@cCBtn44|QJ9Jp2T-FqMGq1jBTQaOF* z3}%7Iq4lICUe0Ab_di}v&Ad&7o5#gGeTkM(Gf@V1d=3vKq9kxwO-VJ~>e(c%J%5R+ zP1$X<(f@^)%RsXGa3g4h+9-qvF@=vl&U!v)V`Dj2Hvk;08EeUS3^{ptnA8ZoyZh@iPbpN zJO-X&HL+#*YPGS5Ki&ouTH=RcU({J28C_ z(Meqm{>b(BcJmq9v zXT*ow6n5QI&I7YA#=U)yak@wB2*}D3a0{SA_X`s5O~(vVHA?xC4wFpiNE;=)>9`;> z&Dfv(+Fz7Fmrd2bV35q%uV2U&MzofwNGZ&Rx9S>t&;5o21&-(N2)?JgehKAiNB)7b zsk*D=Ln96AT_H?J(PycL$UZ?qfA7fo+4gx_xL--13W$ig5~;b&Ei1mQM87G}s=qZx zb#TvCu{J8ibE&^I9rqBuw1W$W^kVly282H;T~6&78ZT9~H5lR(w7crly1E5Y*mLIu zdFfmB_CO8R#PX)Oi!zDTBgWVp|BwU_7L=Zw@uI8x{abDnbKnob(3208SFc|OwUesQ z*NBPbvzm5XT~Z!3Sh$3l=dhKk^yK5c8~1EkJHx{J1R%A$9VCuMwA;3Ao0ytu@OYe; zmnD$w@MpnJ_mvy1>LxlmAQUo3jzFp}wQpb0TfkFVo$*D3%Xn8~5e7`THgIYcx@;gW zz7}G5E!u8iar_vj8w{il?KkmoU|UC&xc3PU8~;Tl_Slnk#XrZdqS3o+*CY|Gq<@qG zn<7VH*ORAD*U(B`DvDI@`QE-wu7S@(sf9@BJ}l1;ia(x(6Q!J! z)T8g?c_w^pD~4Ov@d^tGiHeC)()tY3pUf)QS3Ve!*jCih(p$bxfCVAp2;`3E$KV{u z8h<8pcCW9HB^^TTU6sAiQ!gP3>-A5qk6ICJJDCR|z1xBR&bp>>jpb~%zH9ya_cj>` zC4CM0m!{*|nYd;TY5zzYIzhuov3|qp-8%C%&qlu&B`)SXS1Ju#FJKZGI-oCFCvbp{SC`;t@1`Rwy9NWovdKYx6^45qlF=b8WSb!haOe^AmTLXkF53!h+%EP6i?l z_YlzFH(G{(({b=3STs>D9jV?&l`y039G7k`j%OH`F6BdIF-H3dIA>{DnI-CLUS8i@ zw@&8CStHb5Of1aG1&DfoZkF398RW|Q20sXN2jG*!(sA3@0huED^pL%oy@AS-)Q8k7wqM$FBrHj=#ee0y z>dg*0M5WV1@NMs6a&t$~rp#2@K3)?t>p6da{8b^ZGbdY7Q(aSa+0aYo`KZ)cDYnuE z=KCU0oP&QPkEZ$;|v2#6Yy#HE?-ww>3-x=df5l7aX;5PkOyPkBB1aV}3h-ww3gSq`##NfFa;P)q z%JC>VlZDeBG9~j1`2YijN}l)MPz4#&bj{nFvi;^A)HK8`s@SwnpgRwPvJPGWp&}iA z(&?1Y(k(=F8To+R!%-6WjZ>-hcPAqiMa4=C#{iBE7w*jLEX?O7{9C^58XGljR+)SD zQPEYu|KnN5{A1Ze)mDd&jSC5IXpYhoXQ9MWqTP{$1O^j<+PEZli7zvl+WGac=3)A-m+jA+*L&={+X*Emwf@U^3AZ=wQ^#=fd`x#k96W74W{q zx&v2H{OAV%Is7w8IDT^9%7dbde1M)TwZ%&jua4#7#eY@dRcZwj`D%W)p|%+b+XfSz zL?1NWxa;Ctt3E4>pK`#jh&Z^j0dzK+8#@$k$euBk0(3JLXl@2q&dqfPZC~Rr7&s6k zbnv=B^LcZV4iJjrC`@nz6b7D`M2aAClZZGl&I8IBZ+Qf{XO}tsf!kMYxUnApRuEdN z`U~L5ads|H3uTyi{o+L=FL*)}&b5tm-n7P6^Jdvly4%{?o^*%z2X{j3XjwBl9zY1C zrAM>1h#=y0-1zyG*4nX2i5;o;U@0|o&X@75IDS9ltjqX7$7I$@ncMwg?SAN z&mB6kg%FOE?gh}k#tcw!;-T^sEp_HXP7FrR%gd|jx#?TNAvKB=@HV6@W%^KA`JnsOEsCs*(kl#4l!|T6P!o5XM~uS6Z2ZJ#CsWt4!FDDF z2E~fEW824(C6IS?9fK$wxGJl$s+M11wTQ@f`TIev1ou=XGuZX0?7Oh-#6V_&2ouwL zZeThgS3{gH*1s6*qX~>;KGS>t_T|NAf{>F4kZXEAOApviAbuvPwin$RSOOAhBlz1& zgjI!whGIKQEMEX#QRsElP-3P4c`?b6g&DXwff}N10C>^MJM?sQ6)WPe zgoTA2Kd9N&Da~-XZ!VBQ<-K>=_Cm0Zrb0SU_$@qcpav_J0hNsZ#lY*BMZJTw-9^;iFBG_Nw z*u#XZr=U*cm0eO44+otENTkB08EW%$gY&y@L@UcHDz@fXhgDl_^1IPyM^w&T6&^k83Kb4^W6=8pm&Wt?v?>&Y3u4;O(F?X$)nD0PUL z++cV$QZx^;j%V!9I`UKYxUMsKi6{_9%7Fy(!Qu}EhyuixI2&oeVDKd(5d;!T_)@vi zvU)+bhC}h@=1~&q5|ML;$hsYj8!DImwFa~s9yE|e1V3){Rj6IP6r|`#7ybRu?Sh%7 zWdg6(;99q+V%F|)czDE@5Z#gY$@z2VRO@%ZH4KsAu?p-2s{w3Yq)%FkNJ&M#0kem2 zIE4!FI#;_LZivOy=HSKX66r?=kno?BXUsBqDsLXPWS+{1r=COj)&D8>ICdPM^Rr*N zpZrs>5FVu!631>;=bxWmL;un~R@OsU_35FokPs<4xN%=StHFbExn;&hz5gAtcr>dY z++#>^pPvKohmcuyjv2>Q^2<#UFAF{@u20&im$o)3DKSwi&uVM$Jq%9Am_m>bYgb;? zl%oM^9)@vhyp#-!_ll^xMzy86FI{arp4*)fAdvUT>JzY7M5np~0V`n`FA0ScL=2!) z(ZxYoT%!ij01p>eOz%fj>I#b(1ghE?$7`KzlTwjEL3O}sRaG}_+g4tW5kltOz-*9?36UAKMP9fUwvfS>) z$7ES2{hr!&%0gAMYSk))Xbwx|#Kc@q!=xK0Bp2G*?dXQK8xnC0^M*e10*1m^(K&x% z_J?z;wzssJRZ#F891Jtf(2F}?xFG(sXc=UJCOU#gL)lkd!&D0Yb(Qz`#ARjOd8_7E zBORV2^;{PjZ5NOFY|mf0b_<53Gi}&#_UGq=>QRHO|p7BtUE; zxwH_1o!751ik=YcJnD6GSx)lUSHr^|JMF0@w$JE6{N#7L??G zBafoD7uxrtuVT{R>{q>#=PSOip?5K<1R8 z8}eo#YH%r-gP0665dqnz8^5BlaV^6g-_qsxrN1##B2c z>eheQZaw@nz#yfY72EH!%WRFj2z74XsgJU`tPUzFH1b7sz1|paz3(qI6T`>_6XJSI}4WBz9$FDn;MndUQt=46KTPgPC0!&BzPdS#*h zayi56LShUUPFzyn^TU)nMsZBrmCYw_DgZ5~Lh#w%(S(G}LsD7td~>Vyk%JB*a{YTA z+put!GA=JQ15Z=?ldNAQ=@PC5uFz4Xv(WNNWyycpu!$n+<$@|Wn*t%6=cXnxq_6SA z2fy%mv??zU*MVO$Q&cn}Eh*_%Fak5)_n7qv7xUeD1t?xq9C}Tr?ZW;PV zZF*Vq>gls*ciOW{Z8vmKq<;2|cA53XZp<(xND(sAL$Z1$j}Q~2+Jh9&*n<4?8L`3V ztk{VMgBh2oml*J;xH&pbJUNkG5DsNCtsV9gJu9EU4R4F~qQn)MPt!8#igNOL=)hu!BUNI_vOwKB$gP;lN7@Fa9 zz+uz2yUGgnCk4K08~BO$*S%)i%Wt_PY|M0}8+R8xn1=Th_Y#R`MN zdn{%kdo$SsN$U22vcy~aWGG+7W-;GgVM5!o?>eld zsd-fC+JIQ(m5#PCSYvM5G%j#)~n`1f}c65hUZyVWg9YGkfF$ztNEW%@ou zfMvtU0E=r;*YECp=bI$@=ZoOs;}g!ay?Ynxc05Cqy)mJU^FBU4KoGPekr#w47oUNr z?*(Npf>(>bk}1)2+f*vMvTRD80&>V41*bbBN{^V)ql&G_yH!G!-xr@TLzyq|JnQL2 zXV@(2i=+`k7uVu2tAnQxrjNb zPLd|!q_%+~8Cr8fuy+)@puW4#Fcg5_oSQG$DX-^6c(d(>{>s6 z@;ea~+2!Se9Qn7i{kO5>RFgCF9XOYyO_Lov+`{givW<((WAK)mNz*nP0{j6g^Lk7~ zOpMSSu&t=!6CIz#)5j#{ttU0JOdw5JpZZqFd}l8o7vfE81rk4_15(`pE5`97(W1nn zA09YodLgXaVO-#qTLefIPbE`D+&B1dNE8o1k!3Ro)KO zboqtNA9&6?8g*PnSbA5#)0bB(sHmufT3=vh8Wcduho<%ueF@{f)0;4sL}X93eF8%a z#s$IAHgWTWq!F@T3hX*p>Zm$J&DSvgEmXxODQ$g zb|O=R)Dr#Y!+y@WgC%TS_0e0t(8#1b?(A3!?2-r9?_iuT>??AImC>Mf5vTI@trexVgnzghTP{JLYLSL-;yMps?BxKek^%dy$7ZmLWn9jqCKM)w)JsSTSa&!ZuNA>Gc=F#<5gMafhQ{lQ=}qEk2@zOr}w7{1_kgYj84 z@;IKfoEQZ3f{)lfZl=3_kNYYhgPoM{{?ILWgUhK~+n zAawVSACeb-enww`;F;PB*e@f0bSmh9pZn*kD_`x9{Sm{x^b>5Un#-C$%*6Y zbC~P%bYEm=5!d>ak$YC)rx$MZ|7qtyJo_24C*q|9=($aHx6l4KkNaWaod9a`lN@>^ z@N_=ngTvRil}vkTN){*##};96q1mC&b~~hVp^-shV2Pi{d2 z1eCNaGG$S%Wg7TA>3vc%8~F`S3gz#AE}M%Rg=0)5&o*nvt0Pz5rq2GZ$}7wQYQte> z-;zthq((M#!#&LjnA|jmGv8=a(OLp&X_7UnC1WtpVAjy)aX42`HfwnBqNt^#+lYtzg_6q3fnu-s zQQN;!h{@;~Yaoiw+tsBkH{_+k6LimrFvp~y;$tLxl)odN4b>;3Wd7@uLuQtopXyp2 zwG$@}(jjZ_0}D`OHt7zYSADU}FI!%b34 z_t-fUgv;*9@bJ+)xvY%Q={Jb#ys{Uq$~j^0*vAqh+qn^5YqfO%w}nW1;e7E2D`gyw@zMC z`ImQ~-}Z65_P?wOr5#{1q^7F<`UeIktuw>4;(PvLE3~fM1XTwE87~c>^Wps;({t_)LSK;i z29FC!JjNu2%j7{Z0?86yfP`DX2jNB)-*Hv3o~q7ivop(9> z^nx<)Ur#-1bbhXV9s&(SEp3E|Y{m3|tvljQ@GpK|b<{7z$?%I|;WWR_(eH(WFQ*6k z`-S3djRNAn&i{(>_lT|*jp1;%K5LQDXmKQI{1n7Gnv81_`Tvvlc!Q$?q5(AL>S(zh zfvimdjlsOioX#DRqi;O#&()aHC0s{5rMa1zkf0#ujx1j_Z){8ER|J}t>vmZ;Ww9?_ zXr|S%GJ?C$U4xD*{n^t+(uDcxCX8JX=E`;|I%XNX@$&1G?&A`nT9TAe`3*^5a3Vx+ zJ>{~5WFh+}gY%IX|BZX3(Fh_ylvJgKJOWT!T)DDTTRr0LLC2M==4_M~94bM-6ia&& zqF1<8-;PUp9jNFT^GPm7k)~F&s(07h+YA*p$|qb3BCWmwOyIFcy0Jbc%xogs5X#;g zM^y+f>C%-y33^M!124pY)n#@Gsaqy%STv+WUy^q7=8Ck_{cIW*vSp6Z4-~WB>VF=s zlU%AvO*lg?sUvI%2M+v>nnL!D8~?%roro8NAARK5Jahc$y!^a-W_I?)ui0_ZrzQ{S zT`U}&#co(LE_V0mbwUSN?X>7jH9hHjO0jy;eSoNL0quw0(mOagzX9n;SxN+q{U=9r zwBom}XskquM%ZRzR-^UQ;ls~>vz18mov?e|ksIMc+`pVA)%dwY0 zeiS%_9JfKY1M$m9));gcf}``7S1~f1c2aps0)vvBj9;6ycmL1x7fVeYfT5l_lg!_K z&B~1eB79hi+nG&j4ez(f#g$p|G@hf4XPtR`^DnpX1qd$?3T}OpS*N!lok@ZoVVz+} zi4-;>*kJ<)!4OBcwBz0Ww8@2o-TK!<Ob5!9ToFEZ&mlOdm}wO3II3=5<8 zreC{~c)|pSlV0>+)JRS5DB=(3DOIE#G(6GhURMdEbiS&0FjMHI3wb&7U?GsmbQ)n* zB1mc6NMiO~H!~$tJ_3EbeOp@u8AYZmi^$X%;bvXSz{R7TV*$Gm{PFQKh)VHUn?k*;@%j>?_@g%*pdytn zEZ3~>2XK)4?rZd%UTwfjumdBCkSRjb`)-j2@kVHZBqCzbD=FdT#ENwTq@n0OK2Kpe z8_9YD!syxI)J>*u3x8(Mo}G&SR)#fOHn**$ed2Q`Tmr-6<4{!YN2U-U)rr$UlXE^b zHe&Y2yN(=Yo~$cyX+;cIUc;7kN;k)`-@nA;x3Ee0@Gef_!-+QUD=QT*lrBk$_=}VH zdtE+@XuKN{F^h!II|Pm&(en$_DL#n*TFZqwRS28+R1Z`vj~2bU%>8jfVxru>-ClaLE!vfW&wBiE{NxIT!D5WuO?$Zgm5Vv;2((GZh%wp}{ms@_=N5RQX%w0fj!MR-&-Mi?=xDtCv1L zGLn*>K0ZEfE^KZ>UZ2eQEw4+&BBG>)tglsZC<`&%=#3C`vff5%JiV?6#)UhtkT(m~ z>}5KOwvG8?*Z)#UrLtegpm1G;Z(t%Y^im_=OD)3- zg7rgWGj}W&8k<34ZRCl0<_P=EFmyF8h=E+vv zs)XISED{7c!m1S`Kb19bcy!m2Ph5O@(kYk3sjfif;;Po;m!6)^NbhTj7-%V2mR&w2rX8Tx-m+xLZB;ct>)$%?r8DBa@{TYeX;4*R>tBy3A&9_t1++=M zJv|G}z8^-XxY3ScUg3nf)b!SZ79qrgBJ9isbm=+Tl~s#Jf=<;cM$++uqyXKRvb1Hq zXYcHL5%Hq=_t8of+kOZgdy&fwY70t??{@qi{A6iSkCukZa?aemJW0eu6;2Ka?Z}@0 z$@EKa;xRkb_2v8XMa4u#B)4?UXXnm)E}s+yswgfZdMk%nDCxl0>BrMcD&x)1T&HLH z!@W%AkY=f~_LJG6d=ZxCr<|o^(i>32)|QoVA@mM}j-Unq79pEY-v$T4R$!V4EfdoR zGj${n{M%x!)S0vS?}m?f727Qx{_GGjS%-aoV}|TsJHSBZo?icB##l6rZ3|@Qoatk+ zMn2|#+jsxTc5a?jyfq`4i-?qN;f6Dv5QO7R#hAu)Cg~qa_z0Ra_@llWhtr3{gQBxm zr9_67N#h&N5s}5~lncDuK%Q;8l4K1s1x%^4=GpE92mgM%2J;86&2zb)a&)6;%AsE5 zKetMA%#D{le0{uC4w5ZFx^n9PU3M|q_s68e!PIda+33RPIy>3`%|(fs{2S8AhpRSV zeOX;*U(kiw-MuF$o146?i8i!fv});2txmq5K9_R-+Gc{7I)inMYg4@&F+LaZqd*l_ zeg{=H@(e%?27NtOaaFyrvS>v4{nOXREN|~L+^P)m?bF@m(H5(9Z29`^`ikw@Y1;B( z(dF9@S>J{NmdBq~*JY?MPf%DGc&{^J_9eo29!>4+x;Wt|H_D!Lunp)bTw?A+A%r{lXX015(QH>z4*6+s#f6#3`E6{JWX=*zG@(mY1 zOiOCy{`OTFZ3twp!$0j zh?D?Jp1UogfANZt9jllOAiU{tIZVEQ1|BB!d))0MUz$2q->FESc)QtsPYf)cQ#nO) z^%Ioh#!LgO9=T{YNmUI*^0=SGSmT2F%Rr5=lI(s7Ya4GGDZ{!|*^eZj@m~dHA%VXi z?~er*LedVxegNF{^{G; z7M~ywoZ#lo)nj*at2XJxulTYy_S5b|>JJhU{I-kKw6#Sl`le6WOK#b|{he@Z!}m+B zt~PDYd&$0y4;@`2eFQ1l|4#ld!-f*Qc_Ry#|9jA>V9Wl$=*V;*tMO}XYr=ZY%S|># zBP|zqiapX|22k@1Rs+5v3)M&Dh#ls#J5x@6W`6Z|`=JgQm{Im5iL7PDZqVdQz6inH zaMD|s^ePjp7(c)Ss?*;o7JoQ>iNK$zL8#F=cmvm-q-<$sTj?2CzTKH^~C!srtKL|)}K8M-3&-d zl;&t6AGQZf!Iov!lIL3o$%Gam5$&$fA|fD?)l&sR4P7TzUQ8N_Jnds3pkpCwaNz}ce{6TKezV0a%u-T(&`%%De}pIpe>-iG49_6&FofsI=pw^*=m z|7Iy6LmRdnO5!tLF?GTR*5Tk(5<2W8#>ItYs`JPo_V)D=jkm==)(r9$TDsj+m7+JP zg??lXwK>9+5C}i{5EZ{Pd>!`getbJ@55<8N9tNJ@i9nHhzU%tH2x5}_qYc2>5A zkxHQuA)92Aj3^`;HW}HKk&Nv5d!BNQ&;7Z--^cfl-~GpZU-#p>uF847&f|3)$8#;N zOFM+xPXLu7#+P)A?~X0T>6a%;5kRGa(b|)$C$Eu@uFjcC%m0lZ_w=y#JAj?gN$P=9ikoSXX}L+QnG8IFcUe~16I zvB)Yuuy}2c>*?OX5iF&{ww^N1tm^__GuiZ)0sIaOQ_JMu8b2pSvJV8(GBrYy0?q}+ zsL0{WTUV^_u*9>R^4R^jLg8N6-083_s&uA=yqq=X&d;@HH8~R2LNx&b-KYJxyu9kJ zcStTyU&I$-?f(RU1#l0AT(4}P&xY{z)g|IvARy)WP2as;p$kJRHzRsVYAROx^gsU1 zkIQbW1XK9`z5>@VW1Z|9=@+qNPQB~%mA3t?Yu!9=qN~t*bLY{r?O6!)vwEF~3+10z z{9W0UpQ-s-$serJ|NTT!?y+k-r0`j$8Mpu*Yk0nktMFJr`fZHP{L7|ksS{XN=MfSDsgBsk>d<)N#o5`6uX8IQl) zkbgP+?{#&1N7mrsZ3(9BnxYjSBcI|`UpS?8etqqaa3>;_R6qa?#}$Ys4cAR?s#wNx z05O1Bs}TBbGCmZ(#eFZ@L5-~w8(zog;2wBS(onLlqJQSk`$g1@f&yjp1+Y`Wa`COZ zk@mj)(aoy&p8B>YzU1#VXl^SMJ1;r;HjXX1@Cm^s=|91bWGUOzL~0M~-A*Z|yPh zSw`;t^?PLsF5j+w&!E|7<=WzOp0=_R&d2X7jtB`g0u7|fm*05vmZ`vQo)EBN*Vv7QuJK0%D%q>r13BHCdE_8qq9k74!+ zSkq)-wyCHcnJ+umq@5?Q1Os3RSY4x?g*cX8&?FE<+L@q0g#P#-rl;a~GWt%_Gsk5$kNqFe&6mE@Uo~CaZp-R8 zS4SSjq>PNAXL5!k&3pgcdH)66=@ zJM=$({_KixUBP4A_p^&D0=O=RU-#S!69b?t($CXBH7fv4{@;o!DgsS*7S-R`ZZy+Y zcsDI#TE266>CfF&J7~^CI+){@t_&1QWH^mNWM|EA*h8qZPl#KA`nbPGUo5k&!N-Rh zwo?9?D+2j1Hgl-W+=6Xi+RKmLTw5~+^Tuhpn)g0Fk41+lFx3NCEtk7HMnex07N)u{ zQ5kddL6b0G(#M|fF*fZd?WInYADiX6cwtJb14$z67Vc`xqaELeLfLnDX6 z#sB{RbJ`b-yxjoQ5BN+n!%V6Ra6rEG=bi(~$M!E2Ym1DMWd0w@J83w6N8R#9(b2i^ zAU!kDB%hxvDJ?PNFW6++VBwtMc5MXS^gMG@QuI=lxLSWa}dxjoY#f83cvpDMZYH1JaVF==bA1|93x`r|V!sg*}B{)IEA4xsMS&T+O1H*e+x zd*VjT5lMo=1a`4csX?J z`~FJBhmbnNew?QmsgV^rr|(W)L3qWD9krz}_URuS{6L4P!3pl^ z=HlZ=i6O+4b48W*)#$#^i`ycz=EO`)iu8jh)FoIXW$laDPp``vq7Cm0&Fx?Acis>* zIMCO@Kg3BLr$k_YL8j3?T%Za|qfATbuva|`VWmGlR21%-o3OxSIk(J>c)XB&&im*2V0&vAe>~Yn z%`s`Wr;B({`VYHMi@LX8&#Y5P8y&^6+P(b(4>ifV>G;r>r2DplZ-+?&P^=&r2X^AN z$*rv7?KD?kz1=z)a3*?pj=rn&h&eeS^@}{<00;+?SBMuPQ>SMKQ!yn}-1bG=IJrlh zoMalXyh_%+@08DOO!>cIynXxjO*j_jzU7Bb8pY2?qmQ!OkBJGRI7|jXo`LoW{F!?J zWcXwUPj8>yL(DJY55KT@I?DUK{I~+(?dluV&;Hksaj=q$;gSr!X?}8bZS9yOY-=zP zQf=C_aJi6oaPK{F{OkPBbV>bt}>b^U^7x_Q=^Tr$h6Js9`jp(4GPJ>Uz+TX>)gLir^m z^f^?xs;rFl@Zn&W+Y}3nyvu{XHw0z7dIfZ0YX={mD=^(m+6{|`G68;mfXeV)PIsQM zo(#L2rew1WrNLzY++mP$tt>4mHf|IfUuqWJo{&;$v$QXo;>PyC%{;sIhD!0ae_FpS z^UAyL^)fjbz5zdmC3$K!P4>ytm37uMTq!uZEq5twSpcegZ2-L3%T=?!*8cDPbXug*<9t+>?Aq&b*^x}-8rDYAxudE zE_I0Df_DqrZ|qC4fabH?GZcFa+XvV`gx@dp|2$RS)TDWgs4|aM7jl9&N_cw{20x0@ zE_Rs`_(VyaY7Wli?k)0-IRPRjN}Q2};&vsQgyo0$ylSa>CzBTf{Qchw5uG>p-n|z9 z<>2-Q^@L_2c-J{G_7jg2Xaqs68sdHJL&w%6FR{u}$Tl%;_I!fS-Z=7>YeEYsH!d^0Cev#{yz=A&U)^}xsD~?VNzs}M;8sg03S2yy_<~+*ZHR2YQGzl`gO3b z(;xqGt5hAf_NFB{4_b{x(kc?)oi~55)V;mv{ijdgLIW$YR#15V@gq05Nyf(SKYZwk z=7YD^OCZm1F2lot9ada#xI*N+YrxcDfJ2}3b^`ti_yYi<0eK%FdaXxoT!QeWP(m{d zGq;)K7cV}2{(S$=oePd;pJgSnu+S}Zv~>~Hn#7X8Iuur_4@w9R+Vy)Ez2%_t1Z+|& zyc7LC;m*a5E|Az4R8ZAl79OC*4?uGD6jml#Cedh|QH%*WVmpAwq$`(yYiNJ=kd#qX ztEA~~BuAtsCO&J_0tG(XE#VpKET3R;y(fbpMMV|DR)1r?qS(S}7Im9*?>E}Z0hG0I zT1tA44{oc@$?Q)(hs8nhk7x03LCP@XAr%j!(|8A)5&U)G#*Kb}x>QZ+w|E>Run&@Z z+;;e}c$yK=+^SG=n+J=qGeHAldh$IcexV~rX5n_kf;*PT6td<=I4=+@g^Kxu&k73k zo*&@lH5$X*0|f@_sw=!h0LQU zRR#0ithhhijhsr#{DL;f5(#hU!N;%ZLNVXFVf}&6@n{M#ls47yJiuC@d@XLNB_C5~1rn6kZ z_~k~-2#R-T_|tKg2lnuGy$?z{_vtjLM)K+p#Um6Xso~NbW*Ul2;&G6SfwjAveW9~% z%@a?nIAn7(7nm%#Jo3km9(|+cHme!8k%|hG2)a++*i$@+0EG=EFRz1~*q)`QKcx4a z1@OQYa1>!`hI`EJIQp8>60AD{rMy>PnWMIr8AdqQXY~@$FsOD;M3dKc#8KLz1b?| zZC{>@5@U&;URah=i_8X1nM(H0Y_u^d8V8!?jW-y#Hjir`#FyRKT7c-JqUo{&#GzoC zNnM&fU{Z8qm1;Yglm&SS#7~8^t)4P_mc>t`NXXepIp@zn`aD_8=KGKVyZXXkd4pIy zVH*IVL`5Lf_5i?lZz}o$wlP|dC;XQxVPEy;P>aVt|3!G#D8EL<1hQ<{Y0Nb8Y~td> zAuQ7o2?*^M+>RJU?e3m2xyC!Y6B0Ql_u4OCb|5FYWi$M7(54=w#F;UGA7ZXAOy$|A zD7zyiPSSgAm{^{^B}*jPNXEh{Ls9{S3POU#S{@qO+S|8ojrp~u)s-si;2Q3+3Sldu z>@p3$e|-}#Lj4JgRDN_r-T4r;*FKqvJooP;y5~Gqaa%)_ z8i|dvLulESs+Q*c3RaOiM4$Zq&* zAN#M7=1T?a0>9q-h&rR1^odWa*F8tegT)YjODMpAuM?)Sv(a5!3PP)IxVyUpgjd*S zexxkX#a#-d&_oK{4VrVJ`KzjKa>@Rpidr%_Z981>`!oL3AFART`5r-~~q z1l$Yz8ot#7>c4QOUm__w$R)?`BrRP6qpvMnwgmI@@|vT=#`X__^I@9Hk z4}(e0CKEwh+^}%yuPDJ{52!0{XNVbIEr3r29{86XG`^;FH*X%J`<8|gi;wT&@@pVa z0N8U4w!*{ln~;fa;K|Azw>cH6PGiSMm~!6U`w}oe!P?AMkD$`mZT#y^(6f;e+%g`z zw>a`;m*b=S>l8+2g}csPdA+e9amb4<&RbSuhV65lERRp{`hPydlIjvL)YTfvN%K$K zX5-yjirk8D3Y)4Ix@gFb7)F~{-|pJ}>)j)&In}P)msS@Kr<=*kOqG~69a~LZrYilI z(>Qco|M;%=v3tMd-Knc>CRM$v`xsnlTx-A6?S%EON;(=l?l)0DIA)-1YdlLyJNGSmqujsN9$Mr3$0(B}fOND6zpa(gD zCC3&Z6}o$BRp;u~W9FgP&jt88FIh(wPr>y8gr{+E67@9Co^_l0Y7Yq=J3IUD))+Xr z^6{ku{xSVYp=m7{C9O~d4NKQhOnm%r5y@VUc{sk`-z7M3Pq@8v5)DLP2=HTXRV~nt zaFa+MJI0~Z8?pR`U=enGATfR|#CL}8AHd9h3cUJ{$5pPvog;>uiz{G!KO&HSE)?0HP@49*Bpn48-7LM4&9U{ zq3QZ@IZU`d=w^CD4~Noavs~C8X?D5p>>HvFPd&!`^Bp~$089gkyWHSP)}y`Z#Hx5k=HS@}r%A%;8NsY^wrZfAFSqs=Tf?(@zs- z^v>`c-cwO3@t!2S%0mqX$erQ@C(*H$rhi93^L-=_hH{-sh7;EpRMjAE9mFj68oS9@ z=kDxTnCehdP&m&&1PhTNB;|gZvYx}10@?<+o+vuDWL?1+cF}Q6(rwXM@hX;5@ZfvW zclMK~^i&#NF;@38ag!X44Z9c^#K0f(_ump1s5h#@M!~x18c-?Ex@{=i@X{q{%*TOM z5VhARu@rs0e?xDSI=e9Ks(9KhApSH;IDyW35oLpJUJ5dVGeUIA=80 zMgF<8Xs6p&ySH!D4PIRRInKg^sM}}1VdhnFbj%|vuqXg5{bR@8VkY~BQba{O&3&(5 z!AlQUz3!Kp1?5422(^XBjbO&9t#5nM!C@MTXYd9;nq|2R(3Koee!5UA%F@B|3=BPf ze*aBxBV(8xIz4cf)K5vy_U$uI{j}C=s*!e4_c+OMRn8`#KG$Hu+um1GUVR6HghfkB ztGcl2m(`susN_^7JNB6=N9to^P|)Q`4=Om&Xl7SCIFhVN$U=qm{HTUA@7-Dm;mJ*M;jWj2##H zQ(kpPB=!Tjhp)LNiqx>>;q@Cfz&t>WIvZakVUueZryY@F+E;X#Kim|TZ9h#S@BSQc zBu6io6G36)$lK^f3n)D#|G-6nLF@k>nmv;<)%vYkga3kImy zz2c9$5F+Se_TtqfCUPESH}cDMFY(v-BKRSr9~-mQ*+A-BgH>6wZnh#?DbchYj9ps$ zmU~ERXS|A66mXImlxYCotzOVeB3Yg3(Lns{J$jRnmJ^~0Q?Un)3ir}7FUBkyc zBAvzOu@PSVvk;pcPPyw6M8)FqR)4w4e{L9g&z6o%@njO1Q4o+mc0TbC11*TE!R>+9 zT_a_Sdp&BlzLc$hcsjwv%PDCWR{Fzl=${zys*#9W*f6T&hI~b^Tg8FhXWy?%ZIBzD)W1;I(Qzew)r3Z zJMmM*Y!xJ(zKDM8_csp}6NcZEKoU7?Ykh+YO8)-h&XK!Qd(g#6dSv#WS)KyeXU6N) za1UPMAw}Aw6Mq^QI383qFN>D%K=B2KTblQ7jenn9>BueE*x55XlG!s6sSt+(A>-^U z7NGLimqsW43oeJ>XW^#9C+o>czqjofQxFZQs2siXSL)2T&FSFsfpA%5yf>wxW$$|$E6r^X`)99hIenQXQYLnF2dg!xTzH)an**=&o>{HT zxC5V$%x<6CNp`vMNodH%84I5Ef9qaNlAE*mT78iV_DtcI&@E$yEm((};k0wi+I8y$ z3a0~EL@<yK`|FaLURcCeZJ_l47)uEZxH6YIE#(s@20rs>@gK3OZx zdL^MP|8pjZ`*^K+@42yJ<2$W;2jsc6vP;BI!n!(gs&kXd0oP!yXXH9y@HqJ4KutGy|4@Zf`rZjMQyh~~qG=mS?@k_y}T>mbuNV~YWT z@(Kxzn%L;-I&apfg2a^*e-UtwGkGxzkNyE)j=4(>iHr%^RU678RZiU5MM_TR>CHKR zZh2-Vjc^h}3@PjeaglWNV9dwV?lxN&fj-vVpakL|A}!&AF3FLMu4G@B2}?Z<5fb&U zQDV2Ie>1q4!ODJ}4<2l0J2Rf>>%IJdRh`;){uySX-gW5;$w(3x#_~NrelGaZ$Yw+t z06nRODMs2Ttkgj_Vc@&4TAT~kzhsSBE-tOh#pS?Caq-4=FWuk+uN{Cld?K8j{kS}wx68S-Bt>`0hJq@zE!`3i8R{sCsKC+qv5MpG+Ce;Eye(%j z*7CqjG&O!jkN+tgbj;oCk~0%6i@Gxp&>y{s_z5YNk&zbFy^eZgL5ZHlo9dqEaK~k zwWeCc=W!6tk`od-spY8XcUBpWaw;&QN6s}uI2cxyDHiNVOIk8jg(H2eY9*xc3IS|Z zPMSh7>-a87U_}CJ0K?F@=)PA)K#S2$!*XG2u*r{8;Y*I$8SIz@51!D}Y!LE1Z8-RB z=`K)7+_K&$B(d&>^GVoa+414>lkpP=ks2X6-$ku#RQ(;tKz0+Uk=R2VOj{m#Nz+@2 zWd=!gxh?e@eOa_%25mSxz5q0)jyuO+V>Qfrm2AX*xskFB5r9(+e%l|PLdyjWg>Y{0 z=f(_x<;UGkaW=to^*o+ugOAKToy-+L(662k;CUez|$hEo|P*O7yfbxzFCwZdhfOEU<>7PKwtD(>(^kN<(~k7cT65 zS#M-8er0{IiLOZ-UCsT{V<+>Y{}gnw_HpZ{K#d)@)@u4QF5s<#BJ;f{qOrC%1IRV{ zd92TIiwuIArmQx!x)zRcoopi0 zAcHMK+0E)qrGOA#W8=|GJr{g`KMzl=5iytQ_i2MX2Ip~54N8iz#oGE*>SBd-V zYuJs?dr8ipNAuCZqxr;|b#|&Jsm}3qmhr zMjWAGxkE{6FDBGj&zUcsGM+J>O-9hX3(hbafC zev%(VNh4R6rwF?cTHu1LE@1IBRe#6!*7IdRc(`kS<*t%A3ERQ0?Jb{OsZ+jE>FIr_@y&q`6z&}tTOWA;^3w6$d~}%KrilpIWT|uWM?hdR?-0@5 zqE_uvw0dIZ0|h{!8A zFy{1mCkDOY#Qvgvm#Y@c;NV7&g)BO&3l}dUKfIY>5%?~}q%GLIP^a_0L|M&@33uIK zxyObI!Msx(8w!Swy(KzOztNEr>S5$oV}^EQ1^aR7>#!?3j{em)aj__{dDz&F*V_zj zD+}%4g!XYM%}oAQeo6AW(XXfD-Msd@h@#O(@yC(yGhmX|>=7l*1QPk zPE9;VXG%wT^~`?!n#-RzD*`x2u{uF7;d<|kmz*9lrJyFlq`3Lf*XzwA#~h`1l8q=~ zuiMpla8SqjP~(-JoS>UY@H6WijO=gt0D4#z06+|yn0ot8tvH-5)t&!cCE_i$yB?O1r)OYpFu{V12#W_8&S+{QEXUdGr<@) za2m=+t_@7xTH&Q!CoCxVDMHc>0E12E)zm_^7Knl2HX0Wb1i|<8}c4GA9)cm+EX6NOR2%hdTRsa_AR0Zi!GVY6WjEl$Wu*(T^w;2 zJ|Z$cUbb0(0JmK3`a060FW$#3PtV%ct%ZDd6n%r}&c+A_;({Z#%I2Fg!^`9@J{2-| z5=mHI&QLuu0P~+7b61Wz^&f{=Qn9L-1X-k*Yw|2Ry$Ay!B|<|OV`^p=yM$zuZthX+ zO}!W$-`7~l@Na*g3p*jIHry=OQUxz!+Hw9Kav4Ph3v=X8aI{o~2zZSnOCYl8+kDlm)iQXW=<`;zOr;5eoOgEk?SYcKVxPf_(F(jHkn954P1cl}bp0h9pu z%wHYM$(*>D$0AdIOIa>aR-j=UFAJM77khE}0hZ+kc_U%ci_9L58z_XN!W||%7Cscs z`zEg`c6;-G-phYnX|_ot#|qAqyKCNyc4_#H+oQ6@4!p_ zAik~aYw5u!G%Nk+?OmY~c6gMy`Nyyc%e`Fdd;OG`Oz3{ETWIsyV1;=jgMFubXq1GM z$M6=K->EOoj7n(_l-nqHCs2mm?@si+k&|M{%y;yR2$_WIpHp`EOQF*g>MZv2k@g^} z@I&cN$dB5|+#_!M3ldwtd8z?;l3Izn6tZsFaT#Cw?di(Z?pS{u5)#7GKnaG}w&LB- zU#%|>Ff)7f&zw7}vH7W`3nm?`u|D*oCizYx4My20RGDHK)%foC85|g(i0BJpbl!SAwR{24FMZh&-%ntCt4*`;XI!=$7DhuOmbu!$K}1f&9XkJJ$~h@SPLs*LOqUEgEqy^t(LOTu|8-`y#pk+zNZ)g$graKtN=nthpdHO!i1WXD`T`J3 zI2#_8#yzW`Wm7(U?fb?6$?48j@smV9&mq9h&yOo1K$-Wz0qv)VG8&<2kik_LdGsa= z{e_Rgd;mX*O$cGs3-m_h6~G84amT<42!iw?0t0P8m1Xlyn9-Vmp6@dM^&NZ{ZW&4; zR>NdLUP4xRrm4|v`+%I2g10ekEn_U*CoS#V2Qo(+=EiT|S{?)UaB+Re$=N+(D^_by zLF)VVrBT~!^Ey126%^}>CsyGY-?ww0-VB5nK@)K1{FzymBpJo?CjS$6-;Fa~)zm)@ zQECpKTZSz-R}rv<=$ibSgCRfJqTK4)dmy?BLGKe_kv}BV@-vrd{KU$`>sf=ac*ECWduwOnD zU^MpZxU#XO4PaBTHh}?GC7LgE*+jGt3(G;)GPg15%8ZPR(o&g*3K$)u3P{ZT6i_4_ zB?G&cCnpW3eDrJCFA=?$hPaDaJE*;1xe-@zf)O2$uFR*K=nPbY4|)LjKDz|-i-7PG z6`wzUzs6qgoa8trEht@nf+it6B%Cq2{*JMk*^A`lm?u9bFX&)$UcN6jO!QRiZ`s>& ziy<$%em_5PV`!*PNVxo|kL#v?M=UWgF`d=cW*;U=$xY2sK^~p?ub1v9BA(rTT5YDL zo9YKJEYbeNCqFqQb=$hyc4H|WIR_YP5d9c4J17tq=H?Q>F=0jmT9^)W3Gc8B{UKjr+|S!tHmGXuH`wghYR>E8O}QBx3X1z$n)` z^RTSVi8E*N;fWw2QzGlgLa!gauH+*1-nAU}Lrp526wU7GI-k5qEvA1UHILElr+I4* zq;dWhre>OqWJ6{VOp08rI6g!mcrZMJ zwJf~Lg8{h`{*}LCy|&B#gdjRaqk}c}0k1i@4#$rlhu`ry`crF@v;PC2S!)31BbIyO zI*^j|Ur##n>~bjr6%jrP2PzI8$I}3%)AVs(uoTha^#`vc+;JcgBxvfL{Jq#@etVv# zgw8Gw4XGz7C7R zb>Q=bGiUXuq}!&3N!rDVVs;dgXXVuZKG=*B`-6v>+MlFknQ%hz6@jk2{2}b!C%--L-R%$ zR;qkB>}VJc=w!qoF06*n{hGi#Jo5b9-x5P*IS?T*GONA{JrvbOyL z`W_p}^`|=gjCP>C2FTLjbTm(g!L#+jB;D4n55ngWm@LB1e);_aW;%O&EZvQbIRc<` zvi|YZ{=`}gW#$E=?}R(RE$ZJ~DUC2RSusxfwouNumS`r2lb)v_TIg)9CG$>!LfJc8 zpAZ-c-ysEstIq=~zzSGt(*?|04&Aw@T=jdO*;I=Tn^yfTJZIz^w438r#iiqA}doK8K zJg@;jj%E($D`@pT*>gRR)nL2Ibx^91!JSOAgLz~txcW|0!!8$^yU%E9cGLC% zCg@xGl=zZcZ_HtIE z1Upa7J>>F^)l^C{Q9eD_&-Tl*UDMTlqFF( zuW5fnMkehttFqT>ag@O}(*=oVpuy3&<+cTK)wo$aS6hLOI#-~h<+DaKS=*yi`VHdx z(w(NvUx!3QELBTWi)@^_;gA_@E}iiTgkhw0^|?}0QL$MBCX{`3f$JJRCjpcfBJvod zD;s$@qk!~YSI2zq`$y)5rn7FJgl4+*gk*Q{mX?*B)Y5to@MpG&dny0WBo22}c6LMH zbz4|?g=0357t<_JAoW^#!SL-EHOXV z9L`VUNnvGkxZaQ`$R=Tz9eXXEbq~7SV>%ZybW4<%AgY)6{ZSw$Xcv!!wnx;7GagYM zx9?4Dg)D_6b$Qf}k_7ipy)5GzKm@(J3;n?NG;PW9VPvS^8+GJ565%fSsz$juI!fy2 zv*g(Yp1rZb=gk31V&riUC2}||UVVE^43T40q>aW!TI6b@?cr1A;dUQN&#;R>nfcQ4 zl-|v0WTHE@J$i{Hz^I!ifGxgl{N3?j^XUO5Wq~Ox>h$LeeV1CJbU0&zT18t;ui@tAsw>RuQ6(msMvDEmxzsg z?X^Rr4MS}XO1!G4pyKH2?y5l6J4N;s!)_*VbYwjls?FgI&a9Ys|FXxdGl~-F9rgCQM z9e02kzjWUII5ujWvYXH;W0i{0QSWYEoYM^8#t1lN34^Y0v_b6Z@S0I0zOSB!*T(xa zp8dhObn*MLx1UNIWsfnpvIGPE0d>e8^?r z0)O4`@XwO(?RVB)tNzg6!djCZJ-~cZu zEO7hG#|eB@Z~4+~dA>%*N;5B7<;t4FXY4+A7jM0+v?GZ|?PK^vm#!q8+!gJeSqTg$ z6E7U0X&K>|O{XZDkBQlFN_i_~-#|0pH-?}GWg4#6DalAuQ=^`7L0r-rJI61a)YVmF zw#Rl3FktNI%5n52RGTB$(bXx9BK`{ypz&8mys5Ggdh^`#Xri&HVwnNXdD)ljTGfRu zfxP0kXV`868*_-1x3L)qn$(XVV8KVm*r#WOJa`~gwdZye4>0IDpqG0PaeymVFHsJgqEjXf;P)Oi7qp2o)+vP7)hM}e zdueEy4ZT0NDs!BXSkS9t@P$#)!r(>;KjD```wdx_XOpO@o${nU3|lXG(cc=7(N%VQOLxP|>A6 zOYHFq`pQ3Wsh_eP8#~y1xFD|6c%DQ$;_F7#Ez-+n*e&%t?i_jnqm6}um7=7B7Y9UF z+ts$UiOns}8MROJ3`Gp7uUk-ZGZgrp(mGr)b$MQZ7A%)P^~&x;;x5nWembtv!`$0r zy5wDDaA|(IS#?{-(RT(TnLNQ(Z{{hnIHGONVHLs~@5^>4w05_dB3E&9#x=TiNA%yS zSB557Ip#L{m1(q`TpPPFI813oe{Z)>wWr*ul<&v~wL4eJWFESwgzu)&JLX?&^Y0?n zt*+&Rvoh+y2sYt;wQle9CdW@sRQ9d^V0&aH|6qGPxI+Q3qxGF;lXkRBSXX=Pu{CR< z*AvBFV5-p5u`UmwHvOrjw9>OXMiOjn#<;-X05Gl`Sb_-!A(cCKan zcNxl~vn_iN`smRFHrW9OfmEZpv!b6c*la;pXU5TDe94z0AR>Z^o<1}v$R0f+8jBFB zn!N1$2U$k0tldftj#O}4^Hv`I1E>0Nc&=9)o0@LixY01fAy8WD}uHfFC)h6Y=Np+pz(plqt50NUGbz$L0tnXS< z$Gw(5$F6q3ZFVx>b$)XDa6-vKwws{{j>LAciQu0UB&Ihxua9VYYvzB`+O#inANr>Y z#Qjz7p}xzNw9hvAMKKX)LNVa{%AxRL{*il&`~KJm zC0L8)5ip@1!<}6;G|Y>&_J4L3!C`+^60d!u-&xvr=HG6OnD1pLuBgy4mnuM$U=?7G zZj_(pcNaVeD}57BuBu&%hz`$&S@Bh6*6zSZkFMySJasC`u}10z*(0nwGW*?RAc~dz ztBtzfcOC&VxBzLV;8^{;61D?d1><4Yj&L1ITb}E6Uk&p%$n9P}T)9A}-WshTlFZOMuT;7^o3iZ?YWqK#7JxZ}0NU=@p~sqn8y9_0 z8V+*P5v75s41TB#>#6V)+oaYMDm?TU-2I(sVs8 z*TE7(z9HZ#W6Gzy%jH4VN%I@ALt;Nh&nPRIa_g)Y&H;_4#4FPyqH$rOmXslW|2hf( z0T_=LKt~3^m}>5l&;kpvaH5c{Q7df-t(J4(4oYOo zL~n0^Ljdp?K}x=WM(L%UNFsrq6-}(`cwY_PhNWbjp3k4@5456R)Na$O0(NGJAR+5t z_m5z&NpwnCp>j-YY|U3bWQC^Gv~TGCbRln3S*SLblKo2x!7|uIa4O=cva+!~p`yur zW3MB(V++SDc0(GTiTl4eT=M$BX;N}q_K`V`>R*V!*!X_@8hH!ydQv{&ls;!ye)V# za>t4PdZN7he~V)aexcRNbTv~|EvmH3yK!_T8eY?)3(?VW%K0G&_6&$Sql?K{?|$Dw ztTgefb&@BuYt)N!MX|>lYAsnL6Ie+<%eR;OL_Pqr)DXJM-LE1X$eClQ{GVqielOs) za_8UJa_thGWU~D>ZfR!3eZMw^pQ9yozuXw-N^@exI)7v%7u%iSv5HG|XimazD#pbPm_wfY7o)B|21&h3A%IUKC#!`U7C2gS*dDAY2m>cbMo#X7?zswBAS8A%o4oU5azn1jUxh)K+BC|} z7Ip#26Z`6oUUfvS<=9Y9JCrZ@8`6NPjPjja^S9Vo&8)-w-r00C!|mZyyIunE&UD7c z4qHf!dOQXN4jB3~G~~!PM!VHBztW9~&az?FE{+&^wmIIQ3JpNko=tLNH+5?piTfX4 zEbdLWk(*3d;3zoOZMt-ar$v?)qpQjlA0yr7N2|&(OEd%bd`PYZU;)yrS@^m%7_`*S zYD_7Hl6jt7tMVw?Hs#Mp`@$e`Q;~`8z#X5xEdqNh<1#N+itsY~M$eCJAxEHlkF?5x zbM#2GjQp{y(4q0)Gys7Fvk|xm@P*uhfXb$g+L4oB%i2?!<{>~w)^i)zsrRDu6xlkz z)V#?m$%lL$Af5}^W0OFNfgy@>}|8MDSbC4?6R-!N%U5-vrFjX zT3$x-M?RIUj87|1-*wwhy8ReDOAZYwP^6rF= zh3o6VM^k6#`olzZG?g=AE^408G>qR3!eQd`=RKi+Sm)=gm6SeU>krRJh(OO?|F*5Y zUULlROHI(Vk+Ksacg7Kw>720=r8g)r@#d^B}K&q z3Qo=r?J_VdR~XrFwbGqmUv#1D4k&1wVDABF9%2qXYBBO-3?x$Swp%)pQ8|OoYi!G8 zI%zC1?zvMQDs->JKnsoZ_P-`t*O{?P&E$up(S0Eew}J&kFbu1_KpT*BRtXett`8TH~3+#VqondP~0;kaO#$RpItv6GVfyan~eTdc~ zIAPZ%znTP+!?qlk_s2&@xfLoDiWa0F9!g#s7)*IKS$F4NmG!5T1MP(p=e63t zI8^xG-~IHku3gK+<%M4uJT0!v&0U&AOgB`Tgl#z9kV)OC*1J8Gz_Sqy-q_Ia@HaXT zoPmnsx9|39|F88I@$`Ru43SnK?9j51ajm1Sju?5Y2!$QTCHKdtrCFkz=}r4%^BqqWwn-=V-n{!XycGj#84ojb3b!Y?hZ==v00J z-bcG-$)9v9${C$;qH~z@4PhefBNpF%lyH9lJ zJs9&0w6xOqazuaS-fW+xVmMrEkIpF^S-2GdXA4H-*YDM3%_g54?=LZY;Sn8uPc{Vv zufH}xNqgCp%*&LCb;Ka35D2Ks6Be}3JM5O1J`8RHC2$iLDXMg=?v@$Dh->+EY5+3 zV^+%BqV%t6j$hQEpTDbqwDfFdMO9V2z+2&+CnT&Uof?{_{<M%q%a#+fJZgn{MUq_wTXtaKjRs*f4tU zS%Ltf`HDlp-viI@`q9JALEfjCTLgv6R`HnJjChFswhMkZWjjof;3a+w-B@#(^x5@* z=v+8CEyFXRkq3G^1}p6 zNJt1U4kSTXc-1jp%6Pc>njqq}CCJ<}klFU$aP%~PHQNv4vptyzovPmqK&_jFtkY_9 zH<$)5{zBK+{#UleQZQ)`@5K8}%Fo5u+URlm3(Xv+^@mm2E9iE7wUfxbt`g7f{%%ou z)n(3o@9hi@itW=RMg`;#{Rd%$OD6w&Twi&V(DY8`Wtpt^2pV3ElLrgE1J%M73~VRG z*I*|he4}bgTvkD$;)_pD&ThNclSR{VlM1x{_JuE%?AEz^tsJ|G%1YhG3rd`Ozs|W0 zN9WW$@E&2k8s0wNHEefk(bdIjF{Zwv$&ZnBxtY2C-MaaT9N2P*Bm5{lI5@a&)2`Cq zGv=?pft;(n*m;w>p6*!-!&Wzw{r`|4n(!#o-#0*UT}l~U?`)XSmy?lkA~Y=8<=6mL zeKMOK1_qWYtuG+Ebr|aut`*U7j>q3B>`!7VbYIee(mxv4=i*O(s$^UlRXo{gsd8C6 zods6O1^-$=^@cMUzkd z4npgu%BAwPzB2AD@kaDG4}5+d__!`}n4sC`(m1~!rh$qwzAAXJjZ0);vs=8IO?}`M z;ol19+QE?o)73pItj7p z>(`5*5&-uhFo0Gtb1isuGJ1i(*N2B5x^lw3c5g5FMNGr>Pe5*?Z;knW4t#6D6CWxo z0aL%?6PyOi?8_e40F+m#)zn5M z`xK@eqQrltU3EA}&!`NM5a<}LVr0cxEzww}gwmyIt)XhNvD>Dks-qJ!xQ6eM_bt>U zfe^8~$glkKS~5%jc`Zl7j@a%;xI0L)z*19DsqOi=$NC*(6GL^IwNB%8-{bmL)*Mu8 z?YMHvyB}6fEy`WF(*H@*;?%mSq6wz5Yqd-aRzvR>-z=p1`s%;7E90?mJK}ikhM~}C zqXJ;eM^E>I+6v(%z`+J)X6A~D3Rzj%jN2Pl+r*qLa)p>S=-yU`wk-GV@Bcx^)tM;Q zai6;Q_WIy|YFRB0}PVN-CFZT*Ru?&zi6Lq)k;n3&Wa5|K#Y zugoW4Oh?B865Hu7r+brPW4|TFhwl<|7$L%(3#ZyaFyR-U8};~yz9PgOq}>f3GQrPjIkSAw(s^lAptlAq8Q zFA|Bjq{x>UNPiOzHL%W14Y29TPv?q=jy)j25YW!qU7mor^%I`p(#KCq*sTi})?WW* zx6D%9dcOXr-DcY+z+U|rCK6Eb@~a)anOz&T6!keMwQ#Li@6Kb20C}RX&p7WU7VJ*IkAOIN}NSFkR~2o6;0RaEJB@R_m0?STQ=S z);1wkN#M`eeiP0S>Pv?E$R?V3u1v>W$(AFe$2lv1tDzLI3)HgFRX#oYd`Cx3_ zjbKF?khN(+{_pz&MFf@xe1)90Ru!t*>I|BvN zJBlVp_=yq6{@5VZ2nm(+p9pi=4GMyV+uWJv&pXL>uVPyB4Fa6_Yb4BpU>1wph&+{a zdyTYD*e-&|2?MP})71rxe}TS~_$5F*}$(B2hm+@YepKw(eZY7n}7p=l`bvbYw2v7V}}OD!A2GR9-ihb7vQD z#j|&Bt|q8p?u^BRex314?_SU-!K;drpM$altU&w>S0GV_oxJ4{rSeCuFYvzGiT7Qn zrFZmij!Y?2~{<=$l`yk_uGXaT*S`FdMA+zWL|xO@|GF*pJ~a1oGBO84qAbyhf*a7R z94Z92+l$HvE_qt`OT~KMy{oJ+^I8{o^L+6tYIP~F3dae`{?H%B&Oygo_~75V^KK$i z^vfhO{hM<7$YOuHv$~@}V;pXE9j#{ze%D1*MYZbK)r;5Xu67T_E~2StYE9@^dB-?~ z<1@%|qomDJVU(ksNvrcsAFCH-?%S?|Kj z>@Rx#qPK7-312J#^Wmp&dP!T(563Mqe{&ehZo-Ccau8ANCQ;oUVc3jpViXIuF!A$$ z{ZSycSMlSPxvFO>`)M92Wi|OfdL#(R8LkFLfaXzdg4+IWHK%V4u5ylv%3?%{>CI5{ zy#6~khY>KN2uq6uvdFoW3#~CS0y?&jLjJ>L@k>I!$2KK(eCW;d@44$WDoPZU} zt1SYt3=0Sl0OXlYapDyHu3Z4hLQFM|w8wK^y6IGBXERnvmKV^SrmXS8jq^(O9fn_S z-JN1B*BD2C!YI1)BsAfq&Lag+d#fKF|CG_9!foVt&n-x9>Ftb~UT?QFJMyNS6u@BaPR z*|C0t37T(Po1VD>&ogWwL^qN>;R*-{fbH)YZEfu{XF{Jo-Mwua>(0|()Ir>}mapIu z!6d!K&Fd1`mMYAQ-@~2btKRwnl^}V&o(T%>RM9N*YT(6EfpGx|=YNJ`aw_!=7 zSN}4#X`M}&%jFuLXG8DK&AfsJJ!XDnqv+7?8oKhmB5dBFWaLTryc2Cq*jOXz3d55p zvEj2AsNV8O%pxlC1=%`PW6{6=zPRl%vU0CKjA-}Np3yk%>+@eEzY1#4*HOvZo^}-$ za_KqQx?~!baM)TS`@E$%rQul}o#vL7{k%7N9HXE>bxyg_&oS|#K-!AcNMQ>@UR2`W zLh`-|x%t~Rnkh0%Ca-o#Xlv+FBlBzj&q*x^E~Cg-}m*tuGjS%Isa0E=YQHZE?*q)Ya!IZO?55F zaq8MkV@?2&`&-9v$-@miJTsn*D+(gtCw+XNgn&c@Jdy6cQfOvXGDJ*H!6gAXfJGWQ zMlmDd>SsS%YlK`38Tsi!D>x8uu+&M8`>7}SThL)$Er9vz7frU>JnvunnMe=cPT!Kr zl0)z~qw9N$4gjfNa$^I#_5lvyqJ6Wq!|z6)x2gEfg#3OOAjHr_&4lce0gA=T#YG|v zO$KP&%^J~f_O^}QPXlR`Apn)9*INYB?TzA(^*uccN8}iM0MBN_C9@uRfJ>%570_7! za7MCt##cot6NOMq{z3?Vf*#o$0v9{T7*Yq=q4CMuptrtE@HwYQnzcXdXS) z^peiBSD)0mrtX|Sx;Hl&5gnfs7rJqyrf7+-V8~uHOkb#$El7X@2q5T*IEAHozwq=y zD(S>d*Vv!8CSJ~|-G8Sg=)lAA53Tz}wa{r7%Ji)>5ZJfh_w_LlSrPqjbp)u9U?6I1 z&I0u|YtG2-2JB4g&8zc5LPMW>!6gHpj`@~;Tt=H~*0TXYfYLE7CbD*WTS+(K# zP{(}KCv9}4q8Y#Yj{;_j>C40>qT&?XuiZ2WvT zLdOAr`R<`1F57}a5S%OXvara}C*K2}ox@mV6a>Ney?}Id)ojA<)D2ka1Fi~jLg1(| z;y}njr?^{K@^2l6D(LWh-k6@ohaHjXld+ICkg+*R4d>hp2UQ+DbNzik`=b%9AQecZ z_M=PLeS$BpuP1nv+wIyg2dV=!3oq|xzshU4mX;Q4>GbP%i zQl>rJ4RKd7;q(M4jgyVopXfz$h}-OR$P%~1twL``(IaM4Oeysq!9mCoX)GR$8BETW zS9!QgaqKqX)WZ;E{5L91Y|wCl!O)?2#gmxP!Lv$?BJRddd%K@4yyc^pJKw*bNk}!( zFKgUl54zr8HNmPy>M3^xX4>zj63V-`r0a(z!_Di#4)BpX!p1TB{H{lOA$jzf^C^iQ z$SO0vc&N&WVN|Sff&iO zR2;kz%9Sx|(%V$uZ?LUe4)Xa6y>Vyf=FUc=mHRd|ecVp6ZyVIMz&7`GRsb)a*5ceCYja7aih&=CVRf9-Okq{H6HCyt!Xw4up(m(zDx zX6!$Rh#Rv>T~RwaBcVx5sZ!*BKOu-6nTlo7<-l77oCQ)kflq?sZ|K1BKr5df={24>;j2A(bYSKy zVqe)?!)YHcK~iPP@L6mohLxB1Gl-EmZUFZl5gCfu$db6+3b{C97E-J$M4FkdBU<(Q z6ewHj#BSP9p3UvL;E^mwCKjOz?2KrWJl6BO(A(dk1cdrX#yxdO^~D#t%+@1R%KFMd z?ZJ0x&x=fCq;JeS`VwS*jd#AEED-2?5i7Ctv*#6i`?2Q{r@M^#C0CWeVpcdoLG4hn zvr+m03g-SbUqXXa9eR+b)hTAZI1e^hNCp6h;-yQ6NHr8>U5&u4Os%u$jb~2f87#IVGlFO`SEj>33?M$xHB;9Dy1s)s|5 z?CJRTpgV$N@O};kM6gS7;0a;#L~N6Q2;5W)x+B-N;D1~pHDIFS7Q6?X@!LBaKARVM zS4$ADw!U!*7*dd1q~`Y%R_P12;Car$ZAwviFbJtqf?AW-aqDm~AzWC5hUu!#o#2Q4^HfFy5d z;)pLIA}ox=jYceRCc|nPoEN~iKin2m!dsYm7h*oa<+7;bP=nt9%AO-JkNtUYjs;YI z`+1jn$^V4LmBCgHNL+&zko(q7P5UxeyBBEike-~Kojn#8+XjqcDoRSN5TkOt>35Ls zf*2^&xh|2-^GHe>B^}484mhkDDAe}sI!Wds*Kd<+?pbo2S6@H(g)U>yMHOWyvXr^* zRHF-{VK?3rQ$uBVwy7S|M?@NFj<16p3dgF!zH0gQm%NqPIF1*pOn`N9*ojDaKsP&k z<0B5_Es+}@drcXU$QQwG6Gm+T8Zg<2sr3x%+Ag$Dv6dv&WSH9Io#w6{R=YXY7_~2W zBh&;=eX&{Q8irxv;rpOu9nM(dT77yqbF#J>^D1$ZIqa(d*zEq#O zY_7aOFpk}uCiXEs=Pv?g76LY?MQLRD3j|MuV6z6*TM~LG7&59wm%PP&_J56nT_zGY z1$gEM-!%aOHel1ZzR>nkS5dj?d3)^4*4p!#fNU%+x}c^=`}H(tt{4hdFo$_3JmSkt z^_C*EDbecIZT*w{Pt*_l*dG7ww903!ldiOa<9khS@0NZ#KQjytzx6rwe=_kz&3<|j zOI(B%@$HK7ZHKy@GNEFhcT64!-vmBge{qI~T`0}R@!<1}8Ph-TIXG%)M=%xwNjS{d zV60#Y)+{rk@lfr-)*FDXVu1x?AExSh!xS8TcrDjFIwoBk}&c>CAPV8Zrpf34;V z5fKpxlcil3NpzyS03!#{QtUY-t_$M!f&+c|j}S}xjB2+WsPQ8;~gyzb9D#0-DeXqTDtInqQs z_0=n&(lL>fmzcMaNi#NJN^3Q}tkJCw)(OPG+}x(7q`dfa{?x5hl}uBCTVtnd-D?4D zEbgJiJRv^kxu&R4Ttv8TJ{%C6Wt3C#!v5T|kkGBK|HcI2-F^Q0GUMr%$IVqylXaI; z{H3;5Q%`&5VZpb^5rtLuE@0xfWcVzQerICI!@+=n3rvSMzJC4s2a6}>ki~O7mx-uP z@Fu@f0>`K5+Q$5l-Xog|0-e2W0cscO=2% z_E(s82%W0+^0;6#GJDaAvhyWVG=Ymwn>^w{VTI*)1zU%Y%q2DMbn&v;QmJtE?-nPN zdqXYrY~RJ|U;j9jg)W%&zoAqw5@ecB+kNo`!+&A|+**F=@9x)LmQ^ za9ceecRh}L8Kk-&-au5t@bGXnZ2w-=CH2fhJg>)qo&j8LKw?MIm{i+tBz&k$Pk%)8 z7_JL^{O1tnQ*`rPWz1jR4l`z}upF)W)+q@;PEt^~&W4F1p`~NV_^e;*4!o6>31am8 ze()>Al;-f0k2HekSg2~prZGu|FC;Ip7WqAYwpNfdxhtoz)cDsUo@pywove)V{H&@(9;KFf|7J zD}&eGU9sFca6yCZ4hrSa2%aY?yRf%0gQWyuyTZc4p;V_m54Ales$gwnJ5RJHuGS(z1$e;i#|le|#py7mU9bmC!ZbxaTbOh}g|) z*tk)Ia}c~%@VAgo3K8gdTb+WY4SxIRVlY7g#ebV?Rm-7(3e3;J3JJDAE>abrHXs2( zzrf_$r20`jZ%Z~!1SS%(Z-wL^dGv8f~1Yi=$sFeC7WaH%Y2vsy#?tUSxJf-9EVi>o!im1+aD z`Y#{C-T57S7nM$xwVsgCH=>g=sWr~7MJZq%PdKzV%mWcBVsQu$eDv#`zT-n}e^QAq z+?KJ4FJ8*_)dJ7t`1tqcWbR)k#=+)A$`=6~_OKF43n(X4K@eG6wm!&J*Oa3kl8}si zs>hE$RouVv4S#q|mi!Z%Ie1a);e?)fPjwJM!79LnC)dQnqRPnp1Jy4!X_e~a$}!Q~ zbH{eWxgqvuBA0qRO_Wr{>(vJDWNV*yw`79J)!=@{cG{jlV&M9C#U3w2%P@Ucg8zDrm5}?rp~Xt zu)&ap3RuuvnxCH!{BzdEY0n>DZ?Im6ZQiLt^vLtpYrO$!{o#otR z?dO<}i0DKfxAw~lpH1p`Syo1QuB)RXuCq5|_(^PRu5lIFLjYnSe`^+)u*Y_)J|&Nq z**?w4B0El#DC3i?M#cgX;a`O)N1$4uE83>EksvV;HwK?jO%#iwh2v|D6^Hvgzxzz_ ztI`+QD1hj|?W%`86kUO@xd=@|kQcb!v&Fqs)_-E=^5$M}J*%E_1TWD?3-B@kuKmpl z;M)5~4>05TF~12Ilo!C3i>!Zp?&)X*c>)Qx9P&>cCN&EFwHP-1;P8w1(vebJ> z1b<4#jGO4^eoWuBHG6gIiqYX?D4+o=;IxAiIGPiaH-hGDYG!6&D>E3!Xk(RAxKBd2 zGrzC^_7q^9tCcuGcmaHeg zH)DH8YV!gKHa-pA~xQIgnopqrFItDlID$*E^}_kY%%Y^}BZZ zCd!o1)ecsVOJ`Mm*|`k=56_5Ej)dyJKL!}JNM(xZz?cctz^tQo<=`MrR`v3woW#xK z_mH?+ERdBsd8phX7UzL`Y7H{xiR)8F}DE0o2=Hz{bST*C)U^@wyIa=%1E@TEQ z!-r=CwpFbV`Cth8Rp5KJW`G!%2?*$|vA|XEPi{qXm_w4ihzQvZc!8if3cJ-Ksnwkn};rnVD{OY;*h#8Me?8<`ku9F!#oFn8Y8BAfK;9m#Ak0yn$>r#Hqe19ui z@+8=2DGO>0XOE-6UQ`%_QgCg+yaC=~P;?Jq;Cd$G<85R_ceZfY4!R|fyV^TAfU!H) zbEyJCuayIE3^uQpNjkp=7Pv6M4&(ZsAAUi~jQLa*P7E-hR#tNJ^I=AdQSZ-)yu7Ti za3W;`c$Z)a!FpM*91=qS?oaE321^1cC*YV|Yz>TKU_-62yCLT|T2~l@z|ZbwZTCeO zl?EL!AJ`*36Wn`549CZxfgBo40i1DohFin!q8W05#|g;d+bi-|OONmFWrJVhy=`+# zOZk@|ymC|$%ROO~H9X!vpCN%7;>orHUcC(DO0kkNKaYxfYlBp&>y4jZKFv;)y7$C@ zW#4xg%hG*6DB+H+FCW(+RI@K(!D>{lDVAqz8Z172A$nsh3jY&qIZSe6lrKDL68P~f z$bfN@4R5C8$~H4y60sliM}K}IcsshU*DP$cGeUe`_b^CEN`n6kqBjkvIm-&f3|K(| z8sM7KVKIu>h+#nYFg`J%z6p;9_?_UW)fB+B`}3y>?EGPljyNf}5X_mJ!t~fc?Mr@c zt}4i%jvog@5`S&ozM6{){)lZDc<*Rps3omJ6rb!qe2}sM2h4;0{oVAfoO8E5P|xAh zd`LEI4o}+74nEzRkW@Cz5#+dg;Wk){5KCUrkcP{|pulAQgl=&Z!!Wz#6_~fXPXiQg zj1>k2lN|CqK(Pf>LP!xLNk^Zvdl}#M*P{g{P}Lx3Spr!XZ{viZ zkpkprb#-+<3`gEa`!ep@d!?zc^SD*HnP6g0_u-v=MS*cubQ6w-%$}=?%5g4`<4e=J zW5PpY6oL$%$xPazpRk#>@|PrNV4(qvGCtZ#PwbIzmvA~6hJFpZYta}H`{Vi&m44F0 zGQU;D16g2=P-01Uirz8$&rPio6@HlCu8}Hg!+eUk${jmS)&KG1#wCJ9rMm=dlO-pwo?z@)Zo9y26pJd@fn2zNS-?P+c>XTf z3B(MTo0}tgu-^}i>5&Okkq4@v8@_k%9;Etx1j#vggH2eSQ9pK5{bbDtfU6OfCY8z6 z6Pq+UwcLx1)FyYPfjx#jk8C;stI|sN^uos*_BgP9O^pZIWN~7|>I(>dgZT~E^ zmA>1}`hoGd^}crcySG@fxJwvQdCq#ONfKK?7E!>#i1x3LtVfRib`wX8F@M>Ek|_|< zT&b|X2Jz#j`@&bs<163 z0cZ3o_UXY#7hiL{><jV%7CuqXrot({?zMh#!YnKD$&+n>=lKue$464Ckv&*SV~WwdOC#{nL>a(uC=4)eYiesZ zEC_rIX@AjhDj0_tRltOr;4z4A1Th|y=i*DrlfPO4Pt8H2uY^fIsT%XH;1qd2=UkQN zUUR=cOUpH8|E2o(GH!K=?x#3)mLoSiXG(;FD z?sAsN-*ZkNILNkuxDXIT0v>6ZYy9rUv9!war$lxE$?wN>cJ7b_>NQNepVXKqXGTs7 z9+A`qF<7U1dP-DwKYR8Jz}>#*T=Ef(fy9VEU@J2?y_kP>M=s`1a53w}oYVU?8-@dH zaG1ZqnrU9t>MD>yfTg?QzKf9jJwKn03^qB@(t2KZNkOBBMhFfK`)TSS&U z;6@k5dF7j|ynq&4g5`=HZeUV9$3?k5hI0h5&p=rXH5iNzGY}c1UK!aatKJO8)Nx$j ziuZ8~fP@G*=G(y@C&gU&C(@4$kS8cS<=v|0s4}*}`gELr08S^8PIW9U4I zH$+>2-wg)QE`Yw3-)7wBqH|4h(Ls{=Eo_9Gr4jzevmz@nkM><2Um$V!#QDPE%oU~?r=Q2-WKK&Nc!Z|k8aly zrZ1PQeHs<@(vzrx=XS_8dgI+R2WA4h{{@oUS9J5pdE4f*X^9eI8l@htS0`LNe1!P) zuNghx?yb~OowhvC^{7PZ9Y6>VCqbnL?#iRkKP+ZIxXAeHyD=QrVjV5th&Vk$-pW{Y zzL4qS#wXb(M&?peeH|Tn(H^gd%E)pgDuO}MBF!=@nw7^*f`k~=PK0uZ>M@6cLR~z+QznG z-SB6E6DKURoXDGl{LMW6cH*vIL7B3vX9PvjSV6r28PIiGf6lv~bE(~IRx3K=HCPw< zW(Ev>I^&C`S&b^-%f65Ym&vq#R6q^dJy_*3zOf;RTgfD`ADy=IuC)%|XFbYKY)6bTNeyBG(Wf#UBw(Dtc=;R`On~x4z%S>uO3OQv_4>5Acy7`82b#xy7LZVZ_Q?S69&itD)=f0@us)NC!L;hUOer~bA4q3%Kcv9*ZEDIiC?^=vRf_}w zlOy$$*)B*3<0(k}eY#~$yKG?jckDX_fE8-0s%hKIt{xsbbZD77UsG;RdF)IvVytyk z<<G(lF$&gLS{DtVfW!$kZn$PhhIzBCHRJyN@z~o__1ldENzm@Stt+H0I09EK` zhl4j(10b5)lRNlg<#^06Uce^BA{Fi5sBRjQT3-a)m8Fcr!ZX#qboSj@VQBqcRfTl5 zMcMNxt|tsAyK<4^?QsjJW~VQt_JDxG`d0r{#4Y}cNpkXp4~|v+0bY1@AdUm(i+!(5 zzoDFG?*r6bvXdtOVHL;XZ(HKFsHEko`RI5-Q&SUE%8(@tv$f?b@uid@1~rKh(!+rv z(aeeum6exwD@LK)P++-##DU7bgOk*iYJE9ZCR4;NI)|<)-;Nybj{^fHrTk-7-E**! zZ8MldsuOy~D{X)$t&vkt`CY7k*?JPvHSr#HOS^KxGGx{8Lz z0ql^1yZ|@~{8ZepQaIGllsKChylG)FkIGJQPSB0?v`(4{sy}5|tLAHOcEjlC#E4{k z*X@$KV)sWCdTPEUf>9mZ%=;h3M|?LV$$6#;pLP^h>B^iEB~F$59!bK}ICA|EYrqR6 zjndLh=r4d?;>v5;!okvT0NN0X&crH<4qB(rz$aNs>snh|15H*>fQs@hwvJ5S`RG$B z`6ji>!Z2XK(0<*);R|rIm89Kkq&PS-UcJH^;Z+yR%gOP#pR?c7b?c^g!`$>8iZSch z3UokP7JYkQG1^M8@rV;Lq7({$puXx?#q$Nisg^LuR`QD;SiJeXef9fT6Ng`>G5=tj z|l7dN%oKfG6wh387}NNE_g&oV7XM>quJNW{BIo)FJlwBaqV0eK{IW z;`7C%tGjvGgI?NL1FR-VTb~rBqK(JvlW)_?4e&d0b3focjwS^Xzy11@I~&L{<1atm zLWlHuy&B-DELKQwJgYZsCEfQmp;C9~!XY$-e)k>E51RvK5q)u{vsBc=6neT%mt>5a z8ZTYwCCA5I&>ly$gT9p`=^&8Z;rX@HjBFk*Z3ja<$i}>2P-~J zlkhu{>O686i9Ete^Lu|=TW&esErbmdUU4E}V5!^Bxc>ge8#g^Qw&)*T95B(_7aN0L zC^xxeIs;PEAOnQW?2%t20T7@ zv*pCk_CVOk^KU-ZZL|K0N-2&*x|#GsaX>@CY`e(l2KHOwBHH^1CTFitECJpUz zRN7^>&ljuGbVVu`VjB2ogp2oIE7t0Zu(GBW6hsVIEgxPMW>ViaHh_v?NCL}0eTd19 z6=^Ou(Q~4ouqh)b8p!Q!eTKFZdp-1((U`}Mr4ofYOFDoIqL}0WdgUZW(1eE4a@)bn z7dLKt74pzZ8@_&`^+ulFE6REyJT2M-iSN-gQ3TKy0UxfmwzkDXs|~Hp8gwwD$gln> zO@I7Hkzj+QgamzZJI?{f7Fm40VARA1mzvPwMwf2hB_5TFSfEc4L*9^ zRlWI$Mm6jXnZSQv6X*6r?!!zCqYSWn)5q<>CRG`NAHjmAEd%l%UqiGC$@XNW6Pt|8 z0Z7A7c?Q+O_DuHE6`fWE4RvmugG8K}0|-Z|G(aE0N)vL0ZAYk&+*covc)+FZV)Ouf z6-%2LN^0bJHz(l&H5=?E*s>$ zSWF|sbGkU}fqZ^0Wh!vUo`cKys8)E~GmE**|CB+q&<1Whe`{P!6?VRf; zT!wZ=JJo=&HV)}_sb3}}x@l6;uO3d%%<5+!Qln@L1>VCi(J1^vBJ@sJu8cum+yD;i zrJosbsWwk5V`G`OhhPK&?pz(L3lS0fD~zL)BHe34X_hlR@$k|((L3FDEgrPqSkT4d z{bv{ZM}wh7M7^HH$`Y@8|HLJN-5ZqFeCa$FDQ{-msNd3i+)C>(R0x4!P1)DdiqX+{ zGj%_rLi@zC^+de^9)!<90g{GF8(mJ?YXUe?&pk|M(CNPzM^K)YjZrKbB!oe zXZ*YK-QqvG3uD9HPt1Jiqkh$I;lVZ?T5VrdP~ZUiYcO*P3ktdejw38jIDW!Dv-@FS;6ZFC?b#on zgy0K@-V|^zV1L59j6x0&Z1V~sc9g?KqbhGiw(R;pakefpy_0Bjy>C@sYj1Y#M@<(q z03em!01PrC9z^BczR5O~W4^yZH}ky`G*PcQvquy#sp0CG1l@+BONO5gmSSsL+XJJ_ zduvshrKJ?%B&oUs%JFqWvg!~l9f$vs{&1$2cXt;NHNuNN6O?<2somJVZmo%9Jwo(c z$9!)iJop>HR|V!q(deoxxh=>0ROaRBF?!K@$XHxzJUP%!mwhI%{lA@{>Ep*yO)?Wf zawmFqUp}>|&3bQgO49gSc1e&y*?yve@61)he0xV*O)V{qi(e3nlAPa%ilz__CYLB! zzS-FQ*>+T(hgXY|lMJiYyZJtUP;dC}J*#fS7b(m)ONu0Qjei@CIC-@1r#w%>(_@V4|kUV zXplVrbef;kUT667^jH}0r?;+13z9r~%~krRy^f`awG(>RB#9R@6z$flTznTDAkU}b zMbwaLQ^4axZ(ql_#_|}JA5I{-1g+u@aJ_(OBgT#-8ca->0Ho&H7D(iHroN}ydMHhv zene8pk&12A8CS&T_)o=V0KCM&=!aEid+25){p&*j@E5TRK`luW9-Mfn8Lz42&cB64 zyr7_i^ega*< zwD}p%HTl7BtHd;F>TxreU5=${#yE$LZUjU_zY{$~TMT zY4oxq1g3#axBg9cT?aJVNu?Mut2FMqBHx-%Xy`X)`J0v3>Ob4-|B9m=AkG8B!J@uy2+E@Z z--8%nA%=v9Gs3tGu3ny=o}~|7MP2B?1GD)ya5D-zVN~HTiE!)s^7`Kt6bL}f2|qtk zi1%ES;_~Ou!HgT%0XB$*%tKgZ*^BrT(bC4S;QfUpBAQU28LUkZCVGs!89)pX&=Vjk zu##bTP9u+2>4JQUc<%F9$P9+P3V4e{ZC9vkFy0sWwj0PtLO@6etKzG-Zk^IfhQbbx z2dR>nK*z}invL)wIOlP=s{Af~goP>il7tnQ)W)~u6KKailZ;Uz02Yu{(-n51zc7qeqUB5i6YZ0AMn@Je2!4m z=X7#=Z`97(%IS3Rq`3YA+A&~WyYB-kL!cl{kH~+wfw*~f^|hrXt${@5Bvn(L59zXz zEdKEB^g7>t#vXZRO2VEZOKpkM%iM9EkH1q#>4pCfHmdJ+&CPd1SOmxTr`$x3i{>3% zElu3h8E=7*74W(*Eid1o6Uux2+6zSf?lpU`xOb@CqH0wTV2p%CsH8Qco#(xKkZ<3_ z6f{(POGQg7>OSQ7Ho&T$eDC)#UMUEhA2k(~SKCB67?>3IAxIYbl9(D(bRgXXbg#0> z&?`Yk*1{nkW*3F0%K=Pju%YlMZ%`1a@oDW!kmUyJeQ+FC*g;^ocORf#muoxRW;K2J zA9sSjFR^Q4bps(F4Psq~SKalw-zdm?orEs(>>pjEQ}V+smcdrI!Ui3BynTmW48E=lH;H+x z>9D_D+_!a!2is?9u<^ONo1Z@rQW7MFZ-W9Z|NWrmJqO@Rn6;j$I1YRX+UuyV5WK?9 z!2#PP$PzaN_cm}mPfY+k-2K~vT0GF8S1_{UxiswloL+BFZIiF@2Yc=Pbo(i&Lvr_U zTPy9k$yMfYg^&d5Nft&9P@m33!Cnb--WkVO`+SdX9-C}4Z~_#}gA&6Gp1sf5)^K%o z1%loHIrx8gu8oQ7>s-4=sI2dgARXR;|2wlG)zeF$GloPM8%o4j!afoKlAv2crCUO9 zB|0W%*kB(U9uwe{;Kkd@HvwA$5N?4Tyj8WZff|Qq$6u!s7m(xg|Jd8hg3CNC;k>=~ zVKoC%Y%m!K`U_#P{Bl{Yv%US*Wqpl@7elGu-sa0W2`PGex5P=T%AwtHe5wpyyB0QI z3TY9zh5UJ6MQJI?-+&7!L(%qr1bwH9;Y9Yg+<0U-{CZ#f&R1r32)KmeG&DM@5>^#= z;8-Vvpd$b0Cqgms0e?-+$I_BBAib|F<1c<0Ou;mUfy1Fzs2ZnYS6f;s?Sy4hf$+QHpsaoN7I{iee;?iH!* zWxAdIjQo6lHa0AKrECkRI<9__V=6eXMtz<%HPO=}x5}XJpGTbO;NZY{ZcImhKkeuGwb=*1p)iD6!JOKI{2+v(Q;)NBkM0bT;Fxmh2PwTIBJM==$ zcga#O5lFgR_?huS1==6OV|=jEg>BAj{p~kCKo~(%pBx+n`d48!J;SG6M1`j}l@ceHU(N6%;f)bxU zA08S~nu8U(&b`0^&2eRa$HQTj2$n;iPWXZ-T=^TR5jzaQk0D-?)j(gLw%`nBLcdHb zbQ(6Gd4MR*Ci_RlQ#7W3uloOgf(oDzGw1QOkscw zPWJVYGcgf|sVOO?*y6a_FJx*n{hETI4H?jj$qzZk#>A zePw7J3~n2f765VuUv8%Rn_8(z@YSQ^)QjwH1kZ&u%(vfAIx9hHNBrN%Lp#==Fi&zZ z!~(Set~iM@1HH!SJRv-oW+LfUj&~q2WIe=Ss0F+PxQLOq3=Tw=)F}Vo_yr4&jYP-9 zbI&By9ovgZOneRhJ=n5>8b~%K_?(o~9)wAsI)@PrGj=Wxf&ly?DhM>ma0dTslSeXs38*UCXJ!%`sFy9A7~qEb z{uZGXl$@A8hFUzM*02&T3`3F=#^LH~dA(NbcEh9R`7JMDCX4j$9H^Kk~??*ULW zME|IK!d065js>9yHsawP1LzBOlf$N9d@B&AhUP}_6H zL`Or`86YyC`c?74%>Vb~1x$E>{2q+F>WI8WQJ1;G4_E3zlhcYX4PZqLlw~GrYTPI+Y*Qpx z6Z_`t9@E7xj3v{Uw{&-j$kfsg2?)5XFJKY1C>!JjTps7u5n;^>n(qQs+3W8C`yd;q zTpE%mMyA63&fsr=?M?4aarE)-WYKeuYxN6V<)IBjo;2rCt|?Llw9LHidg~x<>P!%g zXobjH8g^U<4_^dQUIjKu7ID`poGTyDM3uN7TpiA1{HzY*vLrKHn>&-W@l?_ zI~#UB>}_=sc7tO#`NxHpw$28+st1-XeUIIOjt?pWN<`&jh%$Xk`S5}$VR;!|IVOc= zfju9iLr_$>8?N4Yjh6{o&*KUyQz`{zJ7*Tg&(6>u_6FaXCO>~j?7rJqu#st}Es^8f zY+nJvOkzSpt`JrPbU-%crCskSFow}QxnUQZqT@1Pj+tP_f6VX1NxplLtKB=BTl>3S zCrAQ5u=ca`k(evZNFpQ|b0t6fkJMB4MQZ6qMQ4FuJNT0k=z-O>% z1xMa|8lsng?}P&OS9gTXbB zs0zkYgYofk0I>m7gfTFGxR3a8e^}$AYnx7-@-YF8Nij)gY0T7L@04FU=Q@2gm|3ZQ zM&LL~wc1Zp;ilG2!cyZ1<8dK!+8N~UuoJ2b{}Ce-v!&CwH5wpd(e@3il- z1>HiH29rBNJ{}8mlNoP)ys`X`^STb}0BQXe*wjKm6#&}_=kGd09LvqcV;@ZBY);B& zu(U=tDH_xJF}G?S8_yLm-B$YyUHA8uVc<*RPrJIiZ-)xJX*K%64u}g(-{MhnNUYA( zA-Xl=1LFgkkL;B#x&~-cR_Nb?^Ad!Lbk9Mj2dWY9yRQIZT5>YuZRX^cnt~1BjdafT zBcD2V`~wK8I0sqmG_ZvR)3-Cy($ehgb8um&UB8T50@*JUP%;37G4~YhiE*ffz*F@E z5yB0YCw6g*)Wa{W!FE~+$c&}NN?_h0_c^8Z%j<9IfJFj8IOHc}_^sK?8v>8PYb06? zTp1o-kQ4L%_2bvhw=d@3X1`An!^ZL;djZ0}=b;G^GCTm2YJ>^Ok?uw!DMwzMdYSc1 z(&kMv9^%>N5tX*~b~;J-71%)lk#gu)^HrxEol5qeDU7Ktta_t)Wfw6}v&$1pxpMk5 zK^T^Wo*rdR&pV*q6eJI^R~u&!3Io_|wCcW_rS)o&V^2P5%~mJTHAUd`>DtfvkQtS# zpLZ2_-p#A69M6C5KNA`qC~S$(A>^#T@2a4HUD3vk+dRULq&YmdPv7Pt z#@{KpQiS>5uVoE3&K=it0~Y8437gaGe?bmZ;)@qDcWTOQ2l*FeSw|^u_nSW=yBGLW zCf^>tK2w}ZSVTBJJykB@R;)9m3e7d-wYS>+I;%kw4ozl4YK@TLp758gx{{+ZbF`-C zoiz`!vY`7q3SI*;pDKh6oth@HC6$-Tl2=;svDcPc>{BmWKWwwGnvV-=p1+d}Y!eHs z6OkENh5bW&H8-1t|5$FAyc4yg3>w73K52%W*mpaT!v|ZIDqDl7%90BewY5^9XsoQH zY48k6l?G8nQ1$-)_c~&ciddFelK@ruNS0uMO6VgaSx!_NUawy@WI;=!C^<2phyCreqAx%HS#Ys^SZ0aWo%z(MbO?YfD~p>r zRfOF4Ij=&N!}Dw!%a_4)fq;uQyU+hMLa{?pdwqY`UFiY?bSeNrXPq>Mw&HN`8%$M@ z@tUf51e`C}ZGtK+>ny1+SX@&e+)6G!KE#Bq>_+<|#O`Ml!UI8n0Vt7W@?9LBdaATO zFA=8qh|Vzo+VQ(KSalAN=0&{gHwJqY3-3v=0%ErHuy_{LH4wVjH$JY$DUtPir*2g( zf9U~PNpbNTuvHlu87VCls;)unn;E4kpGSF3Bm1vjdSI6w>x{cSUQHSM7dpviGI&_` zydJ#r1jzytIeBwagERE~EstW78Yr=MN{CZnO?+(EW_iu|icje7-jVYM<8t({5Yk7cfP@*P3NCs zgyDXXJM>v*MnXhs15d5R4f#U~=?wIa0V0bQM{8t0gsl43V5J_h>II)hGO}XRw|>C; zOOkL4v5!BZ_*+MNbH<%FWEJx|`GHoa1CpJ@Prb~^u>~+$0jC6(Y1P3CaV(^0k?g?bz4gwu3UT4pF;L^a> zy%%R8ChGfVXvFzWpFTDXu7~CU&tb0xgJky{bWuN@4Sv&y9;C{6Y5x3EP#`5AN1?^N zDvQa8g5~=msSEJDR}d?v4|l-(88(-b)q1WGeRe1*KS-+8XT>8c{LzkyipgiD=&A9`fYwfpOfFL_ zbB)U|ZP0Vnv@(Z|v@%Vo!CbI(Ls`LzGdVLzc~tYi95O``_A>}x+rJYexPOuGqU9rg z^EW`@s2Se}_H24aM)5j1sp+H-TvRfvXX+srJvikX{C*)@x!SchNyre$@&Qcs;kCrI zq)1RkdjGntGnXB6c&OqCkx4o~6gc1~H&TA{fr?JRWP)?Oh#ZozK}!eq3HmuYdU|7B zU4>2H9&;3kMl==_X9M6_lX(!rqg`!LutHc4leY*FJxLTd4%7Xa+u*x(gAI-UMdyO2w(E zGl=^>UN`^7{b9&l+*=T>!$2A`*vWBP*pbS@>;V?zqxv zBX$e;mCnxR#?ySVO8hp{urM~*&(T1pGJr+VeL5c;g>~KYrXNDV2MIVBH*9aacV2So zl`E2@JwKu*#Rw6Nt{{`qf3*>Lh5*_YR)}vDM9`;%YUFH*eOSD-NM3G@T{GUvkBThU z%GC6KDr1vEE5Og|KKWAOcjdA+Edbk}`~*h|ms0`yISxz?J#QD|Ay@nEH)3*QfQ{QU;~ zO%I?-(zx#MsjW^eM`m|cG~|jbmgms>B{%&=gx04K430Th9=~9gwX?NlD-QajVhu>B z;Ei07da#zhq%XU*MP!{Uv7^MB+iNt8hzSG`geFoJHO_am>bM0B9&CM+X5rV_v~>i2 zWp8lj%C}Q{U+S&>!_wog)wqN7DelRWWO0`a@Eg8Q(Gp+O2Dq6Im^}f~Y+PayR_O*% z&gN+c4-XGb%}6U`n;W&@0FOc93 zdS23Xrag}eGF?Y@x59=*z;JhM#f!u~b<}`;2@Y1{OLnd@=4`w{1tvN6(a6?qiS)Si z18=JF>HlPSgwe0^G0HGbVRyB*q7)T`d5GKiQNH#<(gYIMZYGtqCU>cY`OuWr@R4s`o*|a`#oVF+bjcYHVJ?a5uQl^5X!bxIJ@Nb*Xf)L+W8LqtX%*N{;l68B#R0EjmMZ?Xq)7Pum4g+p3F^kQRWm6E^( zN5QYN-L&UfUsFpz>bCIXF_$LKCH$`K^U1Lg}n=o(5-GGp@Jul~FK_D(r??y_N0&3B~#u`~!EETx*mC^3Y6#xR$g1ZTYXNJhu>Z z2Cyp7T3oCv&spXV+^VSjj|=9?d%t0~*7SejeZXf7 zjWZCOeKva(gT3L42kuUaU@zBP^O;NvCLyQzw6rw%Bsx1g;Y~t=8W_<4kox!4(ZRkx zm;X-vNH_VD`T-i)jgc~2$fK$!lW>7f)wK^O)o)=H{LIGmwJesn4&hU}6LJ?WG(dNv zq^*Z*&FNd{bFdHFnCq|aIDy>OOrsbp^I$)@(6TFeWyOxG7LaB^!M+<^O2jAfAEY8D z%9e`pXpQgb`7`r{x3W1VJFI_xuY$*e)n=F+%;Vc{;ZpET7gEUJp`-ugfQYw(BuaS` z{j#F>Ps-5y;aB5+vlz}0Hw>o{^$sD!oH zcN@e+{?u$q?_s#;(dj*MzMn2pJyiYo>N1oeeh;b(YLU?Dp1wZSKvuPio{z(yvl0mt~-}oC55hk>|hZCCR!ROrWJ)eUw2R+BaS27i{P*GB2fh5m0!E>{b z`RH(wHRNtf%J^QqA$ax*29-JFpmwtt z+IR?q`qo6Q(M{ZweNMLxz2LF~E6Ba|2p{Ycu<}6K-YUY|rrN?ZKEM*z)iE+UPTQ>$ zHY5Ym{<{DYwRuSC9`cMLk=O^Icmld9Rm7P@D+aBNI_zm74@(Cgi_eOQ9!TyIpcOKoEso2P;Y1ygiwuB`7Ic|^&^-`rW&k~bwQ-AmMW0&kbFNUotUwo+F%(R- z83GKt@(yVY^!zn{7A^5Z6soWdmi-Afx{PEnVLp_Q4F=o&+}cuFBG9>Y-e6-8j;SW~ z^+HTG|DjpiWLuA~4ntq4dY=={Ukm^pn-Y2c0IoqzIqq4XU1*_sVd|)pMP?7%i>s{W;4+#J$CgFrxwydZKgsYT(r||-Slzg$=b2*e6?e@g+I;d1I zD#$?|n*O}zYa8L;4`NWLAYN4gUFFhl6b#>Bw;d$vOgUhk)k|J~1K0-NppA6Ao)jCq zxtvn~L+-|nfJ;NK;3U*M`cit8VAQ7aL7=C_ty{r4C5a8$H@h+xZ==7zBEn9Y z#wDT$In-jb2!mJJG=do?3cUU(^sBX_`i$(Q7KZTDe?!2Mg*!&wGCV`a124Y&6g<{RZDLF7J!f%^hM8@a zNCXr}uuabm7+#|Z+$JJSY@R*o{I?fKEXoEwL*N)>Qs)4%8ODsSh?}jOi`EnQ-|+9* z=$FlFc(9it`TDB+xSTG;$THfCvxM7NTLU}Md%cUGET<)fxm%HCo?01ikkX*jeCcE1#*?Iudn+Y>`va5RHUh5 z6f0fVy>&jQQDXP_pC74{G$U?=3AP-biHDOgw@$OngcWMZvbDXv9kOjOSp6+?KvNPH z28p&$M7|#X0(jEHLe3+o*9+Oj7=mH@HIH#1L6q4H04a(jUeMU!;M0TzI@kt@9Kpd-JuZyTII4cCgkr((Pr<+-Wj|I4*^xby zl`=;Vt-@_CJ43K5iKHx9e3z_l<^!pswB{aM>CC@P)~l;5QtuPMJZp>KJ*|s_gL)H0F5!ApJb#CyB@d z(hp%IEF@uOyaUaW0?ssIKz$@0Wr`$EsH7u|Apd>jESN;z_%fCCM4)ZX!cAOa(NR3Q zn%g@&KEHlK_-X!O{XjNNv&v0mR_m{aEAReM=s|atytiGq{{>}tgs9yVR*Yawf~?`F zs){e*UkeLu2V2`$EznJZ6~B~}l*Axbb#PhK8|J}+$DK8f1CkEeCOWbFoy{x-_4qKq z3_V@vGfR%Qm+mFV*^GZgDEI5w5q0`xEQ@fVvlY=FH4YObqUJc%1IyGf^*^n<%JkM=)u@cKnNY z!)V_s&0Ssgy6dPMNxxNsVuq$nnbT531VhxCDiDsKt$k6;l^j1w@xfnU?%v{N6I>e? z4Fs-X!^Tylh$oDrJs#ZH#rEc(tWXfuJ9gMTi2 zxlTVDjljqNOjw4)%vu5nyC6~LtId{Q)0^NbU3S?hAIzw)%`5OnA7~rw1sS#Qi*B~- zZ8jD8=&cSn2y-{ZSSNh>2OB#-2RE|glvnD>p{vBMdM&(oRfkrTn^zbTk*a9({svJI zK;$8C5eV6}{O{enlAxSO41&OtpOv}c`7 z91jVrMti=ON+xvg)3uw*=83>>%mK#d8oQAJG=<=h;%4g#Yt^Nv9p#c*=UTD0$78@d z*3khkLC$PrWr7%36Ch-BNQ_fph5QB>yYaa|Glmb@R(4sT{-)+HFt6X~xB!!n5u(8u z)pxc2I2U^shR_XxV|RyvTvG9ZlH*P5hq~GC@Z;^Gu0B6JSd4?HfPTAcd-YETX~V~m zkk#+owXPKztA9l@-^*z9KrNm43&&j~Ev_j$0TdZes8&~F4soFbfXz+jrH6)?1O%)# zb~f(V0^XG+K6*l~2G0wfmbEO3e)l0j=muvJRD6VNIBNo~76fQ?Knfo}e0sn24BOlO ze_>RHy{q5}0SHw`d;0{>kz0h*EMUdtfE7Y@HlorxSOV4BI9UM-=jBh@8v5$^nXZbtKCdmDdAFF3^v1N<3?y=KyVQ=R@!~XV?($C9TQ{?@OB?jff!O_ z@`Y`ZJF#xs=^GAjbGyar_6i5%Ga7Mk!o;~BFr;69PqN)^+PxyDH%Y`e@!b=`zTE%3 zV)Syyr5dySmpg1V!?cK3d%>8X88MY%0I@|%-2uAKa{>%DY@h$O%-G#-K4^ZRC5J^o zKyKoy^TcWP!FIICx2Xo=5ZG^-oE?qJm-(1hyaTehas0Zz;@3O%YuT@Kt2pk6l7}N; z$cMgF8vo0;3-%ikW!}?Wl)34>#-0Wf(PB?$U)t+yYimQx032=L&l=Q1d&T7C;qf7k z7$Iv>l$VDo@x+4h9Is4j1zP`;=g9K3ut=7-!nuI*oFV8%J(vvH8WGXZsP>r=iCqDg zlS%7bG}Fl%OSpXG%hrhh=yNixA#4F=vHGI4VU$Hc8$g%M%*^|LO&%9&4D@^XD^T(~*Zd=SkeQo&h8SwRU~D38C~pat3wp*x;nnpA63UXD!HgX~2(Id#0UwA2-(+c}%6))a z*S(|q9-Hk z9_&D;yq3qRypfTaoUChXJOktrBK_O9si;xFFv<9hALX-eK>lMOeiNCq(Z^D@1?nHz zLQ01rCiGnHFdBxBN5BdMjs%oKNQ{GgXl21>cz4io{6vNZV3iwAO}HpfE`P!M1{oj` z4%7AM&wt#61j0)}bC#><4r{^OfTL9nu~`|aaOtG{DR7o4*V_BjU2$uaGNMkLyBCcG zB3EK!VKHK?LFEYt1H}i7ZIkA4EcpyQWQ`Y&Jdbu)bvI3DdjxKd1;Q=T1Vcb%xSrsf z5oci&etv$NVO^N#*KiSEwTm_5NOojDKG_lyioC%2i!Zk;#mBwLv*%il5_2!reOT}< zxRQV$3F8kSXtMQ~hE5(|S)s2_p9XkRLxTYP|M>{ckAc&e2Q)hE5*7 zen@ch9a@+o=kbL<%tX9Ely~1)(z08ux2rxeoofI#5iCTCo9Q8wwDz8-$d7ous(41# z^f1mDMj)3saXKRg4|JG?-T+z&=2y@uZ$MWJKpbohnGB1ZW&`z2`~@KA4VL7ER2yAa zqYqqfpZ91vKIG33_x#&XXw-+r@xCnT{OQpF5%{5b$DRnET(mdzPJc%U$6{aokQVp1 z1+jzFXy#nTSJQ#24TXjc_KrYQ2jb1GTesjmbxJwlBE54#sQ_2Mlfes8dJfWP^_~Ca zul0f|2=gMeRsZ5Rsz3&V4sI0|&f5ku$L9h3&)9ybu65%wv_ z%ZvXuP`Z2sSn(<|oh^;)@qx<_v|Bo{Yzh=SMgI)UGo9br`}f25tsdY45A1QRpsi~!r>^BFkz!>C*#NAfy%$}7`#xLC3a6^c@C zjt%^Ms{k(#jl2^~ha^Fw!u`e>D*za5^RE5Wcwqr9iWr%=jkeX5jB|+?spTOds6Ol^ zIEU_cpRV0*;F$1~@kXHqUlE0>KDxl06W7CEqm18RawitJijSWqNgr@9-*o>+#PNiA zoQ&(1XD8u5Ml&x1g{qyscum_;>p9b58~=+qc`!$Q@RL~QU1FoKzS-J4G6>&tc+l`+ z+cxe@O;)fe`k+XloG&PI+D*ui(nwfGoF9ccQaRWYIiRr-+Wlr^dcq%8e1?#jb{)T1 zGRT=82$EjtJq8oL$Vr1Z17p?#j%L-smz2WQ^*Beoh5h_y$A4{-&x=CBERSIw7nrMv zi~B+0{q}YSx|)}P@4LZT)#$ZnteyKH+lRw)<9PeVli&i@)gY^_s&ln$e&PYueReEgCrT{P>v;Px$e#x?s@Q z%yt5S&27*(}DpV!X`Ei~W?%q|nAYj2Lj- zfj=8#6yxsTE?Bnm?OPU*s7JqpVd)we$2d8GpV9%$Ftmf8J@dJOt3{w{fZn0v*7Kl~ zK(YONg|u<(3z;qI2BMj|bFFwYOs3!{xqF2G6Ct$Y3;9EnWoelD893|A$;}Ny&x~nD zgzFnbzycK6l2obade`OS3?tq9_~3!rre|QT12oH$HFBd^a|@+i-1Cvb8ymrN)kd&> z6k-J;gkpe!F9nWZptypP7Ep6F<}LOAAW52TqN$4V7zNy1WKmq}o^R(qD&_A)>^17o z5Z*8OAyCcsvf~nR>F1wi055?62gj`*UD~74lFw|BKmPvT3O2(ib>6SCl|~a?mNbu- zhorAsE%FNwy@`yg7v|hv-yTNZ2#^Aanlb0U)K9A|{tH_H)E`)R#Rvz%IJbD~_6Vl5 z(0Xv%_hs-_Y=IRN?7<#CCfj-rIWtU7^GOs<&S_DTa*HzkrR9G?ga7yr0dLbhHy#e& z73hOl<{w`X74?~_cYzsyeRcH%B)yT?DIP2(X;=+pC|I~~hE8Alaz=l)O;7K)g*VzGTWc~hF8HdjwO0jw>7 z+K)xd0!T^qVf4#|9qU+;-5+g%h03?@)sYU#`$c{;%cG z6i5PUq}K3hBz)W<7*@UxFN+yLLG*ewVZqAqp;j!4HMIjg?nW+fW~C|Lk$LF*9a0<| zb?)8!4kjaui;HryvUGl1ZSeo(Qbjbs9V7d5cUUd%p&^;YJ6OWG8gPi}(M%#$`o?%S z8Zxrd3Wwb1#rrXPEf@6G8}-g+4sF=3{Y{WKp9)=;C_fl62fD^}z8; z_P0gHm80ftOc7DiS15eXhO1p$qEcGkDXBx)1=}@H|l;X3w5r3BGfw- zR0?DsXe*AmeoaBT0{cr^z>!zXf&*6(dqx$O06^C1!Y)kH<#?ShnV^(}v!!Af_`>~Gld z|3SZe___}GYfX@T%0S%g&BwG!gwZTQ?7-%pbnOfh1jrWBL38!;)hnQWO#_OXmvzl{ z7#hY2)fa)Y$v4#0F7q#?XJz?8ZqcJhkKlx3hLq-f(zy@$Fn{%tpc7HY%fkY21c5O9 zy5x4yy2%Rn;Z0p#P@}svXf?imy&8SXcI2A5!G|YoHZ{-4{s*)21b>{Q`BFhH0e+US zaYf*@aPaL56bl8$5H={yC=kB6RbtQIMIczevULE=N?{n8P|d{O%jj4J3aV3Jgf~{VJfO42uhb;o;*La51om2CZYbC zobHf25(C31&LOP)VB~rQ=S|g-@7hsfAH)=N@za4_aLcZL8Yj)&xc<08u|%`(2kp$La$nddEA$l8dL0a^X#;$w$=?OtQrz~$#0sW z(na2A1t*0+ywKj+FKo{46bYpl%(Cx3`p%a5<9TxV;c$j@_T)S1p|3-V8J7Upq$b>y z%{L;3WBC>x`AeQ{s#OiE}Ov60VJf%%-3dJ*acv` zS!k8~$IMwS2ROqlJ8+x;VJOYP1iMj)o|0JtVFK(cG*S5PWwS&Q{>8Nv{0hs+2_g#`5}IVRKJ{ks#=>6}v|rCcLXYB5kwv?#}tf5#h6p$LAp5pa;RO1d zunv~8yayLPkszvC!=;jvwE0f)8Pfmo79CCI;4p!D=C=ix#Sh&*I=zBF_k+W+CGtZn z^(*fK>bI0@rmeEn(Umrnd-ZdQR{Ia>m855^amNFemFLCr{;N}`6cd_hC6;s)4; zfdiKO=0CJUL=9VPay~SORnK?$YX9iy=7@iLM=Ud`szj3u!p8a^ucCjE5&s5yi}clQ zu5S5Mnaj1zT`(Pj9)9n;o@r973~m^(E#<9pbz+Nq5Ep_4nl0i)2zcse*{9c`oD4(-3)-UI8}>z z;n$YTo(SK^u;4$hAEs*Hmq08-jtz@ihI{}~LQ#Hx;E9K;D0}VGr_llZF_q{kQ00{A zcR+B9frjRSZngsg66mSgz|U&D!l2_G!h`CIo5?**0kx3<6>4uuxugPVEf2ACG3q-F zSj=?br~XWg=+6 z-OQ*Y>SGMaTZG*VTS8xTVIlLSOY&2l-D4SCKDw4YYqZ^sGf^`h$>m=t`X8&QSoWb` z*E3bK;+ny!_Fg-G*9o!$DE?1H&O(%wfYN3cQ}1`}7!9fO0tjM(_Mr+Quqz&t3;PI4 zbCX@o@2mgywE7a%W|*8;KHJw+zcV$`*4GC&!w;W7uj^(P)v!4$>q+;wp}P$SVJfbb z*}W-exqtsY1fO$ZLUjh8u>7ASp2$e3Z`3_9;N8A>!4Q<-Q=U;(9@zn}c=Mc=%1F>? zaDLYj_WjFqN+l1^Z`&T^zw$YdlP)KRGA&P(Ya6jiqCky3{iL_0v~&fM5V+XcAsi3w z14KM29NSF(!P#){BhtTm;=ckbunewzam!wkpI+VY(YH}vPm%@_<1QAi`zMf$f*hb! zaqL(|s73p`hYg;0!21Wk%-@mqVUOF=tfMPW8@&0*cy*VBHw6vz{Ob%PN z{i--Fa=?f9c0R^=Qt5O~wjP_S!AnhR-m!XHI9sZN7q^4=dQXY5K>En8 z)L2hnhJZZ)mx#OVOvjer_I6EkbJ>w*Q*(%V4&lkrA#E2nxYL8njS_V7E{BK;q&~7E~^< z)nODWg?O&$5Mxi$K7WYHyrH7@xe!osR|)Pf-M-c0MGpND#Fogc!qhj!^%2jJu=0s{Hi1``$J_KT zyuhJ=c~!RO!u2mpOFdNG_|HP8==ws{j&kjmZuQ)AbOc-C1t@ONTu%%SUy!*AG*Gxg ziImFhLmH9x+A7x7G@fu{3k9dispSWUgM&NJM8Ka6I-=UzTK_saCG;>;iZIiuOEiK= zD-X&O%zs$O=ZPC1E?^=8CE z)3fdLE0!AXo_P>1SC>6^<(V7unBT9ZD%UL9E~`uNUtcGt!)Y#is!Olcktu}4i@)=F z_GANWo=&cG@b)`Bz{x#%Cec$oLreAQ<4NvefM8|+U`H}!*U0Q$o8x&&AfZh_# zu@Z6QyE&+}1u&P4_DDz0(H&s@CSVz5W)l z*^)2Gx-Fo!^YrwD-=}L`Zkg?Z zBf^*~zClKJfT8B%t3Y7vfrp77&>MHDxyA6F#e@10fKRcF`a&@4dhjG?r}ssQd;Q{t zRpAjDpwt9>_D#XPl>ewE?0K*~5`dD+k&0x=aSH$raTpf!o15>@6nq&gu2qt-zT+f1UZk?B(}8^2Uq#C=6K8wwU4kX{Xw%IfIW@?pP+ob99?F3x!^y^``uwE28Sem@ zq%f@4M6yfwBbtP*=szcw!;O7pjXH$26|_H$Pr*Q9l#PU(JUA)-D_Ev&)PAThWPVjh zds$UBi#9I~04KEUz3;DPjavd}9WUjr-pyN}MGFN_sxIp<&bF6Se4pcPI>s}~g+2U{ zm~wXD-bxZ(%Y`oz^6N5HGtRQ)PGt7Q5-^1UY@IO}>D|m*^HfaiS_Ea%0zf6y+(a1H z!@O~FZOXNrzQy2)3Hmb~U)7EO;nm0$!lMj#1&d&0UYWl8+@~p)1+arOv$HEN$D=lD zT12=PfhnW`G`Viy(#CYWx=F@m9W`2UGTX6Rc%)l2c2T^7(lP~hu>RaRLD!!+Al=RC z7-)DVR=dxp*g}qp<@hKa3G4CGCgg`MgaLl|>}s2qN?b@Eopt(q-UpL175N^`Zi_?bWpBXE5~uK|81$ z1@h(PwJAUs(-8@-c5s#umUFP#=1l@E7&tC`hl7oRjyv(%t7>R`Yz(270N4*GdEf;F zNOeoxPuci{2Loz@sO&sEXYVuum@InoL02szVvuE~6>lt-j}eYQu)0j$ak&tCG59pq zGOn$HjkWHhwVrTTeF;J0AQY2|+b_#&Yl-oI-6SpLv%7*Yr3W8Ec6Q}57LS6Ny0aB( zp6*KjdDs?$swc#Xi1pK9zT91aj{%pW0hAbit4e#s?L*>CPYXL1#6^>`KbtP$>j@Dz z6_EzAbXMO{wyP^E@sdCp@Q^V?*}tF7Tuu=`_(%(RO~MLABahtft2}`}AGVD8=`9SW z;nj!C)O~p~a=N{|eN%Hc5)qZb2gpTLD-Sb1cd{VX@zC3?tiYZOXc4}^n$(M~4iw`S z6QkaIBaUWzsLz~3+76J&}8WsIR|9q`&K~M$M-+N5wHY*A3 zG)tE{`}CtG+->NkMxwx&f4h&{(Nq7EAu~8GGvs|p+76 z&6W7@`iy?t2fh~1kCpBrrNIv4lmpEb7KpHWWbDXR1V=eoX@hhDPQhaylSe);lkbt^3~vA}|j(B61?udsMu z3M>T<+&u1Xjp}H~48q8Kl?$i9P6%9^fp0We{}PvEPxjVp&wF5l6w?goI3)eCD|u{b zf?Yijm|EXM63#gh?V2|LN2ZtL>fn{W7yp4<&q03ArNH)c?;!5hY1Vap{c-4#M@B|M zwVl9hl?|2#aLGfQO|YT6*vnQoHN)UvJ)?TTD}}HxGH&PwXcAY&fVeh9E^X{gmzf9d zMu6OQ-m5W@nHRsxe~0$;Gp42no_KDkHtTJp7+KB48smKv))nNp)mrQvZf`D8!q=?G zvZPaWD;V*1fkT}p>F;A^wg6mxQ|zeEnjM52^&o!-69|nS2Ixmy_FcNkpaIEQxjnJ8 zkG8TODd-{d6Fj6LpYq;cW2?dFco+Gn zY+IYbT!xAY3`DhfPz}Ng!9`FOcv}}wSx_jT$HFwYq@|cQ6mW8cMTu7`P*^O|^RNv_ zLb{dYMGWPh;MOWjrmWD@(^C&#>QtEGR&$JuU{jJA_P%28`Z&M64=-#-z*Lai9)T*c+nYUx`_sgK zPY)KhetySbO0e5a?F4BCs00Qvl)BpFWe&{D1iT}GUu!kjet&GrYjoNkM8ZVQemA3f zv(9hTumr5b(P+3`J)N&C{oHD2Iq%9SSPJIwkf14$oc|vWFx-@4AM1WZZ418uAKx|< zx~LkcaWhCmQ&U_P)inGTm}{X7ePE~qt}Z0}uy)6?VMt}l^@a8jg57~|0T<(HpQ6mI zmH-JV=HA;Haj15pqM{bm17W163zTMb;cqU^9~Rorr?2z6zv}U5~EHYFZ@7Yj*gDsEkMk;igo@BAjcr zwG-i9Vq)v3nwfo53hpypToAVw08Iw;(IGQt{c{a;zNUl;7-_4mKMdGB3c}w|gyvl$ zl~|B%m9el^x~bFeMZ z!OIWr<(Ih*-k4t@;+>Nw>7qcK2fT{C7tB&YN`N)FxDB>+*oPo>I*3NzvAdBB`s^sq zClF*sM^0Ws!S)W2b}*=gC=NPsD*zm#R4MSN(dM$8{Cka!h<-3%Gz(!= zSvDW?AgZTy_Oo)_y8I3?8C_(|_2I+q=sX`0j3+t~{|&c8o&;*CDMdHye@m*!0Wa>N zBqM>#PyJ%YPcM|u99LoC1Z-R!cpwNFYY%M95IY9MF@h21o`VC)4h&c5_%x;POaOxe z9LKl^#->pfHUEK?hsY>^qi}vk0*3(P=J*sEF6A0cZS717TBN92}c3I|T%}dJqHF7ZTe*o1ftYNw6L)Y!0 zLHzwtaPEYyf5O|;sDLM^+9UWj#?-TIP4I%9nTyit(gY-qrbMTUgagH!0ZZt5jyr0H^~PDMx_ z+uV{;-=-d?vrzKcf{*hed~#3UWfh;5DH;RMoexR?_|n1T3A;rYAVAo%0)8q@K6~Z7 zTi)VeTL3mC?%<#VgDRkJmv%v!EpdP6$*qmJXl9tq2Y@i)$rE34eDwm{&OoFAxjyI| z;GuvmCp_1{TT&cLaA?5RuXnvq1|4rjLHk`>0mH~AE&Rf2003anlna9*#I2`BDgFYC z4D^lfqeTT5b8>MtfiDFqib|bZK~}OD8#6P)cWS6*NTvRC#^>_0yn+HI9v%Yh%BrgH zu$|QyBewm7)kxQ2YkD3r<#F>$HnWnvB01t`R5l9p;YExsz5ZZ#1-ec}N z9Qa!1igeWct`twuYXh#ZDVJ;Jvid|s6De{TjYD;+sI1Hua>`l7^b(yzZ5B94v_L%c z^mvVCny!Jj`STA)_B=$-G>Izr%-RVNts)zlph8>Gk~?YEpj3VRTqTY|2x{v3va5?f z6OEtSBt~j-3Pq^Abs>w0e(>0U^NUHg38+yts~SUPOM{XRn;%^ARHQk=x!)0N5;izXlQ_) zwmD)|1t6Y>cGCI7hC`I+7z*&)l@oJKQEVBU= z0&%25tuY^$?=pfUyKtsYAH$b-1=`MKs|cMA``Oi%6=)Q`gRRY+4#V$Jb89|GX`Z;e zpujAKJS}Wqznq+u6pv2adniw)U6Jke>(}7kAp-g&Ku#e>l%}Q6;4rNNf~YL5tXTTj zf#8%+@+-HiyK*z}?5%Z!mtr_)AKn#==pa>lC6O3e;1L$aNoIh_)zx8O`Y&qHF3Z~# z081~9M&#n{O%Pd0J~(YMlYZx^o}A>00W+UW7p&&1UL+!%RsfW9c}wdBnPu%3a%}9@ zOR{(y%(d|0zL$ih#;<#u;W6)IWlv{{GnHTYApM;Df?nx+Vu{W!wr9H_CWR{f28MeZrxG&k0E{g9OljGbP(Eyx z#D5pYK1nhS74~o9_?cspb;f!$TE0yJatQSQOKx;}Z6~ z`(^xRVyL0vvd>Hpx$CO}i>iJ~J~u#X(b^$!)WL*mDdfH~1iQJ^gJu-}0qo}^RDveA zbSBu_iMMVT=Khq#JBrHo(GnhwLGlZGX4JqhAV6wDJeP_p60SCDVfI8UtNz$hw-5=_ z(J|~h3x8KWomS?19J;l8>lbTKFhlmk>3m9I#r3N4N{}&;7~Tz{;1e4yOEEpSh&-X_ z?8aNO$_l;cNYVI3)g!{aE2MMzGj-g7%eQqW)yHUXRqzP;#?+Kn^m`q%0@auFnn(k=%T8=t>KRo8D52gp{OUuP#L?*k%s`Nm`L z*(~69R_$}WAo3u*m%s9c@Qci2?e2v#;f`C2w|l;0d7CE5F^(VIsm`XcII`PJ%CjzI z__}GN1C9m`vv0DG($#)J^Y#VD9$QSo`$B;2`p8U)j0x5yx$unVg@xu2B^HmE?tH=O zlp+A4au7|2v)9MfiEXvEIGqZ_FKlG4PnBBOkNk)#@mZSRy;O;C`qp?o%HwERfL#!b zYRD+Iw6;F8vChoXzZ8#aUQK_coQ7i-7bB`JDSt0p7iQV&6-{ih*x;4!#%@|~TnzG& zV~?U|F5$eJj!_hTH#-m$4%YGZ3A7pyeq_$}WB?Zb4Q>gtnuD3PkdP1Bk05;6b7meSbp>WLa4Y6nI3y)cpS|Aj0U;NjQ-~}ZH3P)62E0LfWdVCT zGJe&1xTay7+WG~g5Mpj$Vum;e?_NYLRd99P0Zg6YKKQD9 zG`&}?a8;M{?PTvmt%Xq%;~ra8vI_g<-W+(uCjeeRj+Rcq71RF=pea!+A(7N%=&lB( z*Y26}f@yCbnCgXCd1DI*w&nq$qbBHf3n*$}Fag6|SB2weWe@P|*GgQYWOQeT#DOFc zm=LLix9PPZ`(^7s!OpkIT8KqkD!c$C7lY0Z>cx@DwNT+>%?Oo(*PekWBdbwS;Qb7q zSzo|_8EkyCUOMMcY!(7#FzYy&*JEuI0chA@*Cqswkedsm(&YYbjyhS0uI&}%BxCO? zWgjhSE`g;X`FkxqA0~N;A42}ScHZP=kmij_^H2^vYC0YEj(JSph(qkR>RJxs(K;?T03myDSrYw@mnJDU8Y)(hkc@6 zd72f(RF5 zEy)$tOgSsxAI%w`Mi`ZL_4!Bp?NU)b|G*sK_=T~tgO^i%f^%`w2QPBcmcS`wZty<|e@`)77g#q)r#5NS0xu z3`I)iGwO#)y(D3WFP_#?D({gjeaQ5FvYVB<3rG~OM;@^Gl5;|AFn;4&5dJ$Q>wJ?`-T1)%Jn z7dkiLqW=pZ{==F8ixTyIBk7{NPFgHU)*Ffr#<_#Pa5$J4ZMGq)(UrYOIscji z_l^SgZ`WRD5pe8L87yjERnHNJNa6ffDK3A|9377rY%i*Kipx&5YobCoFgKRt*c9F~ z8gJ+v9#m+N>|+*C>r9(!W%1`!j>jJ~d1^ki3io5EKiNDxX-Sb&f%EJp6;=m#HJ7jb zRdwyILy0Rc_jPYgDTn%@JUq2&AGpt7K>dTFxI8i_)0|@avnl1BchmQ7tBq*9n)q{P z=hMw@R!WE;c}1UEJ_wlqz;r;sZv%h}pojWJPP_UPkiOH&V&DdlY6OnibStbVv~_eK z8_^z4u?p7LpX=iqJ;msXPMHY%RM64G6%NMmLFsS7%5(^~oj!z)(WKEGD~qV6>uonQ zM4ANjBGC4=JwZrNYAy<)_ehzT-SYW;Ug5VcT+iQynGEX?3_EpyF+dSll9PObsf&XX zEOoM~0b@vMg_dS_oc9*0O8houlyPZEoWNd{sb#5)IvmaAA4??;n++f@& zZpmN#6zsrpel{_}g`rJXn&<61pCA{hV6L1rin6;U$zDX~(HkdMHvX#keE{B3dP~gl ziU+)>*#~FM@lwCOT|IfnI|Kk4_+M*kKHOwxf4@i01X+K^A;#q8A1{n3waGfIrR>O4 zS*Bli5*ndNPUS~G(akcgZ~@HY7PmtUu?Ow>rO6l$q?fA7l= z`O9T1c#TX!(gme*YRJ-cV7mZV`v?JJ?^C(*JxyCyLD6egA+f7B4A+Rmk1V!V!xVH5 z96UwJUWw?5(S~Obb!TRgwDMA1vx$!{6TMCHX`FmS_W`>>*L5${?H#4$3~iqMGC#kM zY*D_bAN&g&I|_s?#SN<%6Zo1v#ha0X!9}1;Q8`1=K}2pt=~^`#cRix96CuuY(N^Rh z+_a5+JFR8v!b*xyjU+3qp}6~acZ-7MUngsIenaqS@oI^ogXGh5L`O4jv(}T#pl0*I zy(6=v0~E?@<#{g;LAv<8gx(c!=nTOH9aXV|!%;@Ga zzKF?Gj`@Hx@M8hcQx>#8(#MlTgcmPf45_f-Bp?6q zA<(D#tqLP3Joc~O&B@ajysc&Yu80$=eb2xnpZXt7p6fR#^Myq?qnw>P+NHT~!09S% zV~!KQK!3HSo1q&WbLahfkMFKWewDypp()-cjca-3PHR}BFc!Nk$Q{AH^&pfG$#0kC z@@3PDh=GU{QO&c0*VIrcQ_5bLgh6+_>g|&XeLdq+ z>r?dY6$HEmu57ZPFp_QlMiHNpk&&Al7Z<_)Ud<%J+vjzZ@*Pb`*UesKgyV(&JtZsB zHcWBpRi-We(GAMAe|M1csy#0Q$iHm|jK9v3&u?fj=y5)RJ&8NYpGzx>&V?xoy_p>q zRsf)Z0*d`wg%I@;&YL7ywIBkvT)(1-%j z5L{6@-L-pE7dysZ1_vFWJp`_z1T(Xo$dgNI%yn6e`^;3gNXVxGuB~wN2?{Pgks

    s3|vTO=j0O{Bil+F|gVGDPQe8R*BQQpnMObOhW!!l@NR zo5Hl2;Iodds;%jrFNm#?S3fvKBRh>3Mn_kiZy0g5C#k`iKzbVp!~lI*ya!zm6&b$! z-59t&Jv}ukpZe98l0st?>bEfV<$;{xO$BaFg|?fD_0Q;7(=4EYT8q3b+tL!Nb*y{) zqP2QD^K*L`IUfi}I^Oi`-QG3&!e41X(B-<@H`_?svcxE9)$)$+$Sq3@1 zBV(6Dib~tJDlKwEI;Xip%oTpXyj^)QO{~J~5tEOqJQwHX7Bs~ugb_53*9=U^Qd8MciG?HUogTyOrAA{5c(M*`mVYN zB9%YZ9jLZ9V$yK2K?A^};4yFDtjDI*Bt-SjOD^6^5)X`+(s0}NZxd0Kt;m1;ZGM|@ zwqG(NGCo;1K0|_IL25NQXpHJ+1G-anc6^W2*2{J_HVQiCB5GX6_C;lsDKIcWtYem1 zj+i4w^xuZAv$J!>W`dG=T_&>@S>Nkuyv1gmrvJv=f3iKO&fQRqFX1usMwSuD;eqtj z;;dhdn4dn>URz0om83zz%e1WIPtU?J zw98Dmpns_QnEdD<`Ph480__N%<)A)%zcWC$yK`^a9$!C-yGP_cyG=H~H{&Lr zKPmJtqz=x=m$WqM{gmVB*@(X zr|Iw{rC(L7$!iv=hUZydbp<0#GHgC)VH_m83~JH>AphtAN{H~|MKx1{#v@UU-``Yl zugRA{B8japNUC+MDOEgs8X15%1I4CX+IN=H4F~U6eU%UWjqesVfvQ)g z1KL;WWG?aB{_jEAPrry7)B)S(0xLcs@nmAB{6YSaPJn^0CbZ&0yI)J~^#&-s2>qe9RWtm6)o(tH zrUUCHh@*!FFEw21E2*8vgZJgSg0n34bvf);x1dQmqeu^eop(HTY%y4Gj>bMwV!)uZ zq=aAYo8&cU5y7VH#eI4Y(=$j{1>4b5yP08)ipLWqnW^lh@d5}(i&7h9;`x7DhX!@k zkKRJd#$w#F^b%!yda>Gt5!>Rb}Jp|P$EaK^}#WD2g)z)^l;@l;UehiB@oV0Z0QbgKIxgP4*+ zy}bc?;5OfG3gg+9}m=iB7sZ$SOw ztP=}15R~0QhZ+|>a)kct+c+y|jM$x$?;<0$Bk#iY{FD^(%q^<49!moyx!UacO=OS9 z)jNF9gaqwA3t0+CNJI}w-rbucngaMF{k}l%b35Ycv84VVgn0k`d?_L#z=FYjABRPF zj%=T%{VBE$dat}LhoRfw`66^2y#8j`tC0#|RV>4!DGRIZ?yjLo+XZNdi;J%+&+P7C zguDtReVtuw>ct%AT56{NOXNy%HLG8Gx`=>9kL;H-cgTqhN%rm+YBYa<&3 z6r;z_TQKi3`PuaFY6JofP@yK^%?5K`ASS(ULv=H9t2{snX&0wXzx_57B=Ix7HYtjq zBjv5Y2|=S7;-t2qF+)Wg_{u=9T5Vx!;|h=*kZVTy%>(Qv8n&L$qb18ppm0{*(9vef zJtpn2@9J-^y)FoEWN?$(ABWI>26C-JG-%B?Y1w&@(|&Dxc((!6m9F= zqwK|*+?i8SMaxV~0FP{iyKBsu|Up-mzG z){y@yltPEhH-ooH*C6_~nG}f}V|%zc_z;9Itf-&Q$R=4L?y)FxxUqj2Q>H>na-Ic{ zp|ZX_@Fh-Gb`lOQan7p>n*-%c1^R}!k&jlS*NGl~_;2R(zs<0Q5Qg*@kb}Ll1{DFM z2V(y8fqA7yx)14)lP16mm^}1Vt#_b7 z6S^1+5TDQd&1Aj6jsU2t+)?(I>aZ~!0u^8*B@{=(Jg?rYAjD+&%?+t35>A^}BHco2 zgXygg5%Tts#B2F`3Z-gND7ln~p%^3OUjkYEBZUfv-B?{kOBqt0guI3Nf zgk%R-|5rb}#D$~qd-RC$l0m63E z1sE~iw@2e0zofQtDhc!Qw<_Oy4)Y}hl1NwyoK#U|nT@jy;ug~lbD(KWI;!8Z)YO4FB>WYIA)dh0C zr6rNMyJXhM?s$nx#A?q-o4F8L{)$-hs?0qv(OD= zhR7jB$a5jZFEKID+M$knUD^e`NS(%h=7f%5=^DS0>6W)XH*GLIh<&Q0ze7N4uE4qy_J1#Xh&pLy z2tp*0b@MClZ$eDQj6^ndf=gc?d)QUf6p8sw^$vUh{k^fzHpS`szr+{7pdL0>K%@cy zbh7fjITLn%^g{rG!KxMfP{FeIrnb=J2sYym)Xw*NbI0|{P;$og$2j%wViw-;lmPh1 z%oC#G2$E&8D&e!}4}+T9TO1wNklIZv)zY=2+_9{OuHyA{w9y_VvFi5ew2f7CSuk@a0Ttl45j%uPwKLR~=#gN@%+vZ2w zz4;YGQ5!JYStPd(>Znk3BWIBy z!6Ow^AA9uqIX)T;SEGf86KM6U5chyG0x>TbmZYirHkWsbUjJf<8@M=>GG{$oe>m`_ z_mZ=dvK%WmEL=&lKAz8M@sx`Hcp@i|jtUL;b|9qgk8BVtpZd#<^tX4eF7OSHGmc9_ za2k1*Sn^IU11%MCn!-M+L-JY7FCnEf6E!-9=x;i`h6eF+_C24k4od2r5HU2Jtx%+5 zb%>3ntI+6ZnHXkUI0g_QD7!RTqtEw+MR@tdv3Oz~klJ-}FIEbIKf?Lx`bam({1<$- z-URS@AuZTPq^SbvfiVM;nm~`$bA9HUP&-X0ex9vkvcDK^r-MP~)E~`5Zz^`Zbk@P3 zky?hwYf?twlTukhw?&~}=(9BiD2!{wbRhNfD~Z~{_AAI3t@HNC45soiZN;O=|Lz;P zbzFjp)x>{{A3pf}u!EI}W896^T6i74=c>Jc3RZrFbUi5(@R%*7K4mB_|YKJOP0ga-Pam?{{M@$ zAVX=M z-OnPST}h!6C~}_mxri7+$C-u8#V&{)cNV@{7zCs0u03ULIm>5DyZE&Ee0Ac-*5&!1 zF=`PWtJQxskJar5Py=U9^MO4x=~}QD1`1MIvciEt3ndB?a`Zmwi^tZfTPWVrR3ZJn4pSs4xRPxFmE zv?U*Cv2vSZq3~+!Hp$7!M9$lBvkF!ra+!aqS+sUe5OkW-h_z@rqlCIc-{+M@V$r%8VM-wn6ir9gbP*ZtAoZ{#}-DxW*vdIls##gq({K-aU{qUU2$8jpA<$ z5{NTQ7mqh4hR4Y&&NLN5lv78>?vkN1G*2DDMG`5?^P-Z=O ztiE0X!}7B8a}~n>fNQKV9$jAlIitDE;Yn;zm#a4irB59fE4FyR35K_LeF`D<;Pl9u zB9sUKEmK=LiJYKsXSp3)T#HfR<bUMUY6gk16?V{kBu!h0#q&*4|o{m zXXmEczn28A>-Ya4*_Gc*v!OfQJ)(c`^}htMIX)eMGrPb$%3RDN{L}F3>y*!r3$4p< z*CfXOM$aYZ8nO_g?~5CYInJVH%ZJjTp?*hb7fQo|KD5k^do+&oet;nDTf_bZhPwg4 z{Qmk+ST}F$pZzJ|^{!U%3J4qeYs13LidSY% zbl2@ewj-elcaJ;swi}5BwmoK7a(oN8?9Z?kD6Cqu<;0p~8D8QPt)l6_tjm=3Vpc)4 zxH_2R(d5P4m8x;O|B6}BE~G1G#V1zkl2b(Uzi9i zVuIy^J7xw+x)xD2>L0Sn8@g}N40Zo`)VYjOSl=DfMU_zXe*4p0)r+!Z&t z1YW(hCqFYC)tNENmiI01$%qBy$Rdd4ENi8gir+-fRtE3+$7Veg=gRo$NvxJr$m@MH z85-AeoPL|7`c7B8G0u!y34BSw8oGlJAG+DUTp^3dxhUMupLMIZ{kK&KZW;YRsw6Lw z>aj)6hm$$~k7WZyM>e=x3Hv_@op^W$1=u zpj6Vn3}376}r-21roV z4jFO#Ei*zn(Ih1jTceGaY+j!pSYCEu<%Of3qw|=gUFw1&z{@*_SbKj#e)C2a*_xUP zu76dBG29ex^ejw5x~*wNB19Q>V3z)YOt_L1okg`Q&Ue{4gZTAVsv4Y6-+&J5Qz3t1 zV`k$1mS+u8{d`|>+IsE~_1oYrzrc^i9d@+9YJza;#rz;chuQeej&UEF<1*ZK9Gfi< zN0=Tcf04VrVW}n^!U2zh{C}mk5hl{hwHvh=aHw?ip0JPO?l5lCXQC#{D;f_oQfzcX zRcuxoF=R>=DJrE$^U?<%%rGZpxdUj7;WkWfGf)D4vk`0D*Aer;WXa?x_pGSFyH7MB z&e?hE!*b0Zj#p{$uEM96Vms()mq{6hB=F<|X|5(^rK1#pF$*encoN~hNJI$<&XR{# z3CkPzXQ6;F4q|e(BUBN?=utgzg|S8t_nQfsp;Sa@I6pN0hhI{W_yr!_Nq4VThSQKn zPM6diuoyE|`17J?y@LlB;OPx0dcIrw!Lwq?P+XZNLM3Ta){ksqeYsN62cnDXzhC zNT}gb(RGJ_v+78}D2wnZksJCF>gb5eNvmMs`aK^Ke$cCK`>kkpSDyNRe25W}SD>$H zeGNns(%bGrjY{;-v_ZxUv+p}Ch<%smJ@sOa#|akA_$~HLAB<%VifE6M>zPLSilW`4 z;eV|6b)uuGW-C8{}7MJyJw*#6gnpQMCplX7EUO4W(z=7Zd8sU-LI&5Sf#Qo*FNf)OZaa?BNlUbCb)qjpjb#r+ z^i5}zia8#i_qlp*P%hRV8I#b97!%PxCBmOtpc^z(Kh&ncngi zQH*Upsdea06cm(aOd_pBUv>w4vAU(w9rg1a7|AHLWxIXvqlfpdZ`Q9m)a(72e{A5x z)iO{&6QNbO2$V`0yHQuf}~tuUyzA*XR{)k3gF8lVNiMS7Uc&&C!;g zSfdlAs3fmZ^eGE1&K3A1Gc_1l4_N#{gl(qlirJ_t_6iphYiytJK00T{&~_ty(!z!V zM``n}@Xz`6$kaFH9lKkxT-KyQ@m(eCp(^h0xM>Yp+j!@epN0wcN|_kN+_2<;Z`DO# z5SWt^QWqZnZQz@fN4xQBNZhRcU0aj!0!dbwVRhf?qNMk0?smM_41kaCL=IKDu)l;1H zspn_aL^-bs2W2)23Z|TVrY5Ym7TD5Fn{|z62}C;9F}Y}HD%&gG!4BzHhjl;xC2e9F zu=%4O`z=LpF|7E3R!9z2KU=xVAn$p^auWVE$UR6eYT(wo)BaS^PpV0hHKRTie>nR+<`Y>K>i<2vL64kdK3?`ynMv=s!(SV>P6jCd~K=n^GtamzpgeUfnv%7 zH|zv{(z}`6R}o7ef4N~A`uM?VBS(2BnQd}a^%{D=hQK)^tGY&lr4^Ywp3>o@O$^oE zBQGm6ar8Xq1YWLOZVJWvWYS36DHD@?+mP6oi97K;#?pS+jpB~#Q_m^P`Pwf}LPHX8 zFk#@wJc`B)hXorY+pT<|RMQX#^K49{wo35D5Gyrr^A!ide2Lv&KEp{d?Z)w9-q)+j zi{$YaS7h%F>IBi*>2Ewu@)O7BAPc&4QjI5&DwG>@CF|+$9#c|r2F_lwDNh}%z5v7l*_aP?97*DE{1A~YL(_i$bnCR7?N#@eSZ<0p zRS*EXyb-pB0`75N7L&3*;=PxM-TQWZBD|B+Z<3x^*cV$deZSF13ChGYZay)W{(O~7 z0DkYzxmG{l+QY{}x`xRW`y-A*gf_j*7DNA-CMsK-6o=J&Hl-=A$y0sn^GZ+LTgjK^ zPXfGy2&?cEqF>)jS4Ugn(O}3YKE(@49pv60XIq-I$$idO?CMBWZ14PB04Mshxq_Rm z*pbY@QbDFti>eM`eYd)Thmz=<*;g^U9IM0KnSy0Grs^<&g%TdVh9b)#favtfWnmgrN_}iz{xaXHblMAR`{``Y z9`m4IwHM#yJ9qTdpN1XkQ`hS@SJVKAJU`#wG(ku$>Mm+5Dm8;T*_erm2SmGT4-pBE zq!i8W!#38pJ7kyI@wQf?R`)J>i#p%hFbdh=r6FRt|$)0Cm$Ht%>0>MZ6P2Ot=$m$+P@73=(!Pc z6`7t>Te0$0{f%aKnFM8%jg-9qtIfu>>of6(glBG=_Q6e!e*RdeYX`6AYt^wr4~_Ld zd9$B-#@mWiCAgs&9t(dP!LZ{gALGcT!IyiscGSv7z#9f9STo{+CwM>*y?Zm0QgYLJ zE1Tcg- z@!WW1Weca3-Zcj1X=79Q#T!NW%gB#BKk0wII?KP%@vb|ZJA zur}*ENq$6%NCeLl%IzS^bXPWTf_f*~d=rm+qrnfnwg!1=EszYaxo3#*(Ae+&#SK9Ugl5Q z5rx;6UoK`;HRPIH!9q3_jb~o1DLDV!lkGn^dyzW<@x0gRuOIDed=Y;EYdY$KWTxvU zF%93Z`PS5b-r8-L&EtD?_R@Q8lQ@szTuW8#$<7;f{QKzL0~Y=6t*nY?khepFqBa`{ z<(D~dx~4^g0Zm*kR8)uF{wb&aBwV>+W>zmR3pO6HkBm<)l0(K1d5f$u3=qkWrj5!Q zbtnWmBaC`INz9g+F9DNql&`H!mOxqnw_9taw@O7*+!zI$LawuXzR1aU*uL+&RAq4Z zRfwM$`N8~5Ck$DIVU-ATPo+ZaZE&eDL1=u-|8ci0B_3hpmC{8Q(Jx~34^z;ryI0cW z38V&_aB@hH_#Q7vMWk38+$NZ;VH?1Z&YC3FC4z%A9&BDwS$|-=Q79l9_*4_N-b&g9 z!3cX3E#a!?f|ZG)&~7}(60FwNw2m8?3dtjkSzkp}Si*xU2^Dd3!L7D7Vag{`Zx4bj zGWpBhv8RnfHFPwygiv$Q+Ex0rH1O8H*#&fy^@!>&06$2-MYma4`(mg4rMLVj{d!zW zi$`)(Q$6xWQk9e!4I&6CO1@WFzmf&1ZbpB1s|bo53!!Dy@gdYNV`NrN_o# zmmn;}8$ILyjNyCqe!KH%bdO62F&^cq($pEBOW}%=P#9Q0dH4F(@gv$>e`kkA3?8|x zYO1M8do5J;Z;iSWA+gGT908zE&TXIj?t*X{D;EuFB9?=>f0)QV>qS+V=nK%ee0Yhn z2kz{lJ1%5RSEMncO#+iQpFdx_d+%0_?Qeo>H^-aiS;t9~mzUNUT;<;N4!r*6f<{iJ zSmw|({ljf0SCU!Ml)Sp{8vVep+=@c|*ye+`?rR=>lh8Z=^Z`UgVDlb2=!%!pUb(qH z+4e{gdOollXue?YQJod9Jdxwb-00&uT0e?v^|jxAHckC3Ec7^))g!u=5U>b2;7GI> zU4+(%GjSgAbi9O7Kfb}VmX@XfO8BI){v1RWzXP1a2k=vC((#BGozP`|h=V zl_=Nol5dn>&nM^oo_TSn<$^cAj>-Hh_x7%7&XU85g1$-b*JH!)Nx>JYYkjs`5U1X} zUU=uXgvh3JIQSi)xV2B!AiL;g0c9T)_uRuSZ(CM+#Si%L6bJ8G3qNp~0Xd zm>p?FE1n#~GQ;?~J9vE10L#o@9djf0xMrouh%Q(=ygu<7Yq_ZT<@5!9>iF6e{0WSH zMO4=doYhY{AmH^7*i~|?${(<#_=Gq~t|oj)F`F~K_p3Nca)!3YTvS}>+Yorz6r6rJ zU=oFH#_qjtA4a#Y9&^!h`F(!=dY(EcUR|a5Opm36jSS41RR)60QG-}6zYnh`aV84g z7DRYU>NgF$!nto>4BWxwjced;OgX2~>!rFXLb)pC_AZzay zn8MY4k&bjjhJ_|TccceP$V7G!0Eo1d)}1TzrK`ryS9hTgd(uat;;VtAfomw>eM9&L zp2f{cHi-tXs+l+!|LWH?5@famfzr69#z;_0UMt}i-%?td*4t_eNCtiOIC~t{8KN-97 z6BlLsyfarA=ywrtZMt@LhoVZN+-V?P+P>h4Z&3U@CH*Px4;oaOb)0I7Ra87FQWN(K zS#lEGf05u(emiwb^2*Us?m`1>kj!&;0r!nUMrln0FK3&nfwGre4IaL$Jk$gKi4?CG zL3_(}IPCsrtL$dEJ|_x z;%6I=_t-Vhsb)9X#Xf$0`gPFNdS&GLn#+UFBKwdlM8^gR*!;M@N*PR>sn1oz5??kj z)xAo8`>6GiqL)T%fc@!nxen^J1FmyjQ9}3g6(|cvH^}_9a#C!2FZjir^uM?xa_v=+ z2=_nxDNKHl;#&Ae7%)4pxR2vp%IlCv)9=0%H$qt2IRY#wE`w(F(2;hB-jWso|5< zH^DVex?vq(9`|YCc2H(&XXD${!Lx z7G?$B^b%|q!D1(6T@YFu?4QXnG3mCT_+!bR>)SkWomq_-&gB%l*~$s=5Xb{$9s_wN zGk;0`rQb=!S1td_IT$3}1siSNooa$N8oX&`ZS!^-Gf^+9+qTQLy(}_qf5%b&&PI(h zbwrhoRDpql_^Y=7vTz~KcKiD~a%XXSH?}#FyMx7VGWU1IZ!f&b)x#s3*KCtPuqs|= zklYPW)M~}C{VCcV`eMcCj62oBrEx@A03|VMXzbO3a}m3UY=Yvc>l@4F>pxdJ{(y%T z=W3?LX8A7g`))nL?*C2N0a+|rM*1@G_(0S+d}nmfh=6;y$Ly5Z*sEQx!^`OPo#Zoz z<*;N|-yGF!kKNHB5x~XwlgL+*wLS!DDJ0|{2tj&Ba9S)DX3)Cr?~1vQkkn1m;1mR= zcpkRdO{kV2yiq8Y?U-tqwZa?k0|&K`=sKDru5x@<+@WmacnP_q`qep53FA+_23XQq zIFGR2(rhMEJxZ+#w0WYPK9$cw^t1{k+*_y+9Uy&g!$o(P-S@+l)O|)>{r?3~O$ zpZ#zT&r~|-i(YTUXYaodb5ZP>!Rw%M;m5)f9|!#6k^^~*2+zI|J}HyueIZ)KXUMu= zn|1+O1V~;v$>!m#JtWrqblid!{&@Bkj?OvCYiWGI$UBo7yS0sObw6R3Xar*v^X=a> zHsE6B1p?^(cmxg=G+*+)#pL|Mii*8A^X35L?(woPX4k?O{HG3CyqwbRuCIPE${?$M zZOFJ?kRx)Pxco?9TOgvWDb?2rhCOn5yLtt*)zXyJ5KYsy!*iar^;t2Kne}K$gFvEm3l%-4vqrFis z3(oH!J<)?RmSupS^yI~BP4iAmyWJJnqBQU6IoT?YeGrfZNayS{-Ou#OvBU1`Ra-Sc z?ccASjt>$hbltNtHb@S5WM+_@?vD6L=25<&F13>}wNMy0I`C-=EV2O7d)QS^?;%iy zM)^A#EbK|Rw_z<-is0D*E*$=5kW$_*ZSFCsAb$*4%6)%Cq!J7PI28Dp_3Qm>k>fw< z=MM3$7w5{kJbx<9r5q=O?0dr$uN^?aOe7#i%zVkZe6;93sY3tCT4JW4U7| z+WNqi+b2OeEEkf=PEdB-*^_HuF4wXy@<<;>)rA15w&^$1K8+`(t-l z?s@^dG;;@2kvFuh6(mnVXC3-pgk@}-_~^+fFM5!fU0RQJrS zA1;>d0@|@RRsj%@MY~EC%eu)HYiO(omBPWt-BHtYPCFEM}Z>v zoy~Mg<7efB_zgD?>aDi`&^BKryR&gSem{8aHEsGi*FNKA90m$X1s2$17C^e-Pw&t? zBUfMj;i=pyd%;BZIIB7j*sw)MSCX43l%eKZ>2D0g2Ahvmpwzo2L!H6<#nn>7|Iegx z&LVTTNCxOIy=Xef)! zcqRV8(2eB#LyV9?z2OdK%`rrZ*T45MAVu|uJoxIGLNm?8_o5(=gq&Xk;gpegUanoA zd`@{&s#VqHC&>4=q6}~jm@oBH0#;<6L8Q154jHJ~I^J++TFKqyVr5K7<9HLX@mKeA zOl5K5H1@>y?zlJcrXFlMBpYBwq#^>v*}nc38zhGnKxwr> z!dKKK;;W|o+HBvB-M6MElL$DUHQjk&(dQ;!Y$0quIL<&xsph2~OBcZ^o$OlBLk~d8mpABXPC>wZ#nI$s+x28rc z`OkIAna_bXIFKh8GH~cd>lytz5-_Ukl%~LfZKnO&KO${1Lb1S+pF`cl06A!MnN{&Nim!aGfL1xEJPaUr zQ5TRouiq7xzstJ}w-chIQdc>mICP!$LyRACcsb4O7J&<|7I*w$a(QUY6BR~`$;CU3 zWH4qpAQKs>y@x2r5L<;2l-bb>cLp-%c2(Ga zPi3BuT0w|=mM5zYKCtRd3sF_%Fmjc!nO|5Qs7xg9580a)uOD&(?QdTBhTp#x^4*;* zDTZ_MQ-5V@x1f?1gUyMcoK`1qF4xbRHdEQ(Qh=}0B|>wz&{Xi++K z@NMC1IGq5!%+fcqqxlV`o%C?#rm{y8D$Is;D@pusv@AW`G5SEb#SAH%EU#r%8 zESo%mNIc6uZMl7zbb(O(b^h(vjpm~gxVZp`dZ0DL>L~DwZTu(@N-54m2b$TYP;}Pg zD|xS$|2T}ou1TX||J9EoC%Wt6-qZw*tH~4*$4*`sgPiv($haFX2XPnBQTPQBX`%vv z$2uNC!E0f4^{oeBGOI$ExAK8J1X^S0>ZprR2Lq^Fp5Ft4JJfuD_`z|gtI2nva6M>S ztLjl13X*X_VI7Wps3^cMHJBxbo}DYm)_rQzV?3Ahwy{B+C~ldL9dP@o3jr37g`gDt zzA7@NKm|fZffYt1$1T>Ajv5YqPlK!D)7MScIU z+x0-_wD9hmBG8)5>d!(2c^I&Zcwa+nxVL`)lVC@IYb9*^mFMCozWL}BH~DW`v}lQZ zRyB~?TCdQd_}ojC0NK+*s`Qg}Y9xeGfl9h>%^*<~R*QL3ux@W@Hmrd{2KK<*lp`+} z!iVg?p;@c6T>Fs5Z?MqvOn%t;g4l*cDUVs^*YEq@%K_B)ed9PM@}G7 zs59Prxw+~B@q$N55O$-N*6gElArpCASc^{lkXynb>6PHmI?vlx9eal+Z#AUdQ!PX> zzL2@`m}R{mzjP6s7x(R9CG$G_#l$kA*sb+bnlSc;)H<85Cd09ZutI zw+k})YCg>}=tWn9_1#>P%D)0%^8Us3_GpcHT;1H*X*gK+tPD0(*}03sclEyi<7q)W zG8#w_nn&zw#D04i^6`D}grqj| zgxcp0{H29{nfe(iJdUzLX*>t5E>#Ry4}v%=7I>DDtHGb42~_ZfmT!@(9dod?^cLG} zd9->mq#Mo(U?X71aVeP>tzvFa-F5k^8>%i zeawXVJb>`-6zKi)s`dTpW1w~Ry!cIbq)>=b$u`J)A395oE|$9=U-160-Q-Mr=&Hv6 z7Z5E79;~fpLf9B%8@#kwx>5CR-%G|3P>^ldffov7vOJEv1J8HI5tUqVAbL^BJA=Wq zeM0IELY&sfbWPd;#krO-x~gL#B3t9GWiOV)x2|1R@-7c%pJIB}En&-yX4oVYa_`m@ zerqYC2sOS~#$!wkbLk<_63}I%Ht>7!VF4%)DW8Eae;sX(P^2!R**NU%u7v@R{B>dA z4f$Fz@nF3V*Yc?G{@dxK!NLruD$9fb6jG>wV#p4nF$U^XD03P0FwfHy0QKFJ`p|BPExCq#s1)BxH+k(el*20WE{*zlU1oq@ZE$qve--5-te z5u8~lxr)xt?`rF72^M-ypFp@dkAl$Rht8l8ohT{9&YS?HU?;y}M_&}mR2h{Bvv2=U z`UM5uV*mu>aF<3KW}@&O5pKP<6e68lM%?46hsj zPLHVM2+gSGc1)9xuQ6TrJyXY#k7hP zLf1d1_%Xxn8vo5qfk&9+FKH?q++w(uD>xI#amRM?4%VCG-h;K;T zla*>uiM>AXq#VenG1}|^Y-V5hx>_-2oixSyUoYYPsR2cXrp55WkE7|;|EIQZz;)(E zhJE;4jQ|*3)h#KISXfYX;OMOK6G6k_K+EoQ?)j^M2}cAzDtHCevrj1vKHLFRTW#-? zUE!<#ielKdrK9sx;Fp?0Q%ZRJ?~rKT%0%>%R6n!z<29;hH@)_^$vCW!@uMJW=ka0Z z(|+IqDMp4bvE~;D|Jtwl7+^th3Id^cU3cpg8rn!tS?{M*HODf%N10WWkA|XC(9hi9CFJ-dU?nW)!F7}Q2`nL} z4R8YNO~Sp*OwbhHqZ}kEc#s;@QK_L9CsrH}D+R#JQc4PI(ch|FdB>=w!n{xB2*gDj z$?0+IC-KnpdJ5tlTl<3|xoN(MyXf&l>Qpgv^d8r284nWm4>Pm0R%`TNcmB6#heI&O4fW^tZCod4lRfWGoP-3Omn}AbvN9N78l-`sH7LWR zZMWD33Q_oZ%;-quRAHx{GtS|yY+j3J+t!l`s0P>y1QDYFZa&jlbQH@R5`glB`5Qu{ zX$4l^G7<+m>+}=ZkEs#ezs;czrW~t4-drw5z*-cK=MwvVu*V&pkN+Vnr%+!t?}c0% zpJ@o#9F<=dIbtX>vFbjYLzqAbfvs%)`6Z*5Cb>pY_BBh6AKr%Z<|yk{soW48V7^>^ z&QNWJhBuzN%;Bxaota7s50qv|m0^Wk%#dToc{vFcAioHJEI>m7@Y1ij7!=jj7av`p zA-H~^Oc3Tx&9eh5YdPn6y@JVZxn4ou3&itqjFskUAczQ-MLCOf!izo28{FC_(ypx~ zozaxbG1QE0^<4?3v3J*SPNVRoDz#1wQ4xo1h*r*GffzL1S5(lw8XO5Joib&Bb<3#R zspiExH~=p@!*sn9UhdOtkm-myP2xn0#Wb`$Qh(5@(S~yg-{I2i=rSc)e9k4r3RC z&hd^MWjXl!_8mYx3;1#cR8oLu3RB?aia8?*-h1l-5^18Mqs}GxQQFJol|iVk?SqKI zq*!QTy#~AI47j%h96Rfqw^I=UG=y+M*$5R3a?ucq3$AbCv{pxl*0=H%sWl(X8E^av zr2bwPulrzf1Z{C|wTmdKpBqaTG4JVdZ0pV}o|2x1^c<9ERk-j1`^H|<<+1+KtO+NX zklUbD1aQO|+*hvzpL8)D$=jO@tSf*;>2Lq>nA+#^p1;Oai0Z7T|55=Ijav~IgtEz+ zBsdbWPw942DBAu4X>epI{DEVsgdCx0+c2QcFa$Y9pV`cv`O)0K$#b?#S1EjUuwf2d zUu1CQT@k}k3sRDG-pW2fyBMYXDP{)Gec2BAis*8SM=__o4AjFx1h88nBHFmCDmLNJ zWLPqZOn^T#v5}fFKF!0VpJYC`BwQgO29fcA2o9wvAPE7j0mmJ!IPYmlT`#}I7=lsZ z4`JN5!B@~G4Ly<-0*Pzm@CQydZtcZMcHgDivcTR5bWXa=DIzw#JK}4F))DJ-U%Ln! zaUp+f+VUXJz1Kt3wEU&K+JH?2@$i%H>HM!1c$?}f3}8+m ztH(@;skZau$h5iACbO5!N;*o0!lG`_K)tp)3!|jk^^E>O{t0F67zTXq3{VkNJ?qYO zJr}dyP-G@l`6ib7iA2}eB1LzTUMHz=;p& z#?WbrSt~bvWX`ya)w2ZEs+aKfQZ&5BQD7o~I9(S+F(VPAIcK$Eb%dQ$Bo4u;XBmM= zvM=8tlOf80zj_U>HPe+3wch$KdRPT1z|Ka3pFV)+EW(ZBZJ|LLtw=&yMfIG?y35tE z-m8`WveT@P{`%RQK#moWo{Zl>igkwZxDl6mc{VQTx*oZ#DkMDM8EMcRFHU$p@rkWS zdPw&1MU%PHv*GneFIM)w!k%;G*k+p?Ldzc@BBSteRiykeDJ+E@>}oB)Z*iuS2Vn=^ zmw`UUf@tW!ZYnD_f6K;sS?qf}`>bIvrIxqO>#^Z~_* ztiNKIWM&e6c9_xtUy7g}5NBy@KzSwAzYXf?#Zs25I(wkndmj>Len7x7R}TDDtv6om z#>$q5V)Txp^R5Y_Gq7mz$D?>iKo2x@yXf<#&s#3;>g;`CA%73fxM5f9o~Kv{hM%mf z!7qtkr+**(`$6H-I^`(*gynK~yH0mH{VfTQHp*T5V=)Z?cO{pArhRAi3M_`FD`kJlTq|%VaLy10 zX3%CR1D!Q0fC=fl)8{qVgjA{IL1{^nk-LLv#C06eRF|QTa7bR**%sNe#c1SV=(}84 zPpAHSFh*s2FF#D59bf;J7XbE;viYGeitAiVx*3caZJCbEd-d9YsLDR`AIbG;NL4O;;- z0#qfH568h%6b(*@a)p2AUEgfXzVNMgm3*RsJQ@gZct>F^CSqAaal{H9vGG)1;FH!Q zKco2@;%%6mfqNTO3`4gDMk#%+faPiq_oDp1lH4iD!)ENI?>?{K*WliDSK0-_SzfSjxze_ zk>H&%6d!841m>Et5gCyJ#|^@&Csq?;&;rCWKL!2Q6!CscUF+VabU!Kd1pIx0Qd@nC z49}UZP3aBa44QAd_(;9r$AMUZw?jJTvnHou=EPwslR00g(?~KSi z^pZDhCf3?lIMTg78g__U0Ld?|0QP#ruO-h5wxAW3<7wM@P?IURcNJB55uIr7AKD{s zItGG*^g)$M5_HEkYOwF2-is_qVCsC#s{`^8CAY%{Wu(gz2Ow-xuCZmm9QaGwwN4v+e=#GH&wbYVScT4_&_| z{NWuoC}2}2oS&3$krx+CeNq<02M%BM4q+NFuIe`z0pwB1gS}a!hui#Of)jr2-%uR- z^X5vekmT#TEZqyE=KZx6Qw@LSe$tu|pq0M|0{iUBTx99h>L-3JVh?zwL(HqTZ&Fj` zk4?XbtiH$3^>i}u`~|dy$REYYqd+HZPIS*C@iO8lXsc$Dv`bzI=nC zZ}1sF82W=7gfb=|yi_cHjts-jQBl|L9(qMtosQDB-B z{{kW*H_^o0knytZojTvYR@4OuT5uJl`JgQlUP7e?N@2R_`hR4S+M?fDGtO@3gfEq1 z22GLz%;cZi!^#NFb>+S4K)*dXsVPE2oX;8w!Y?H6qfESlq{1HNWIGfhr&n*tT>5Z zm7eU6&;8=1B);t9x%k)85=iXz`7C)z4fxo{*zdS~=uav-NJzjiEP*9MY zo12f1kCl~`ot>SL(HOpc!V~;kmItZoyn1AIj>N2A-k2y`5`O>TL-*0Aj~^qqzeGgb zw(IEV2#Yf|F*#Ag7oj8WHSPMoD-S-zjx8H-4L+D-aY;hCsLHo-b^oa{`qE>|kwrgO z4obAS=R&?z2g4(+0@22hCcSzEXkFdI0hm_i>j>}gwX`+DXDU%y*5bW@ z9}e4QJvY{fXOSm!$pb4Jq^?k5J#H`jeUqqcW?^CB?EI~7O+{W_tKQx9*|XtV*F7mI zDbu*2OTmSYw!OH-U;b9Dog&cC&`9fwi@5@g;s4s(myWV@ba%6Ha>mBF)#(xS{I%pP z0z=~+Srq3jjR8J3weA8-NhCBzy<+)=ma}pEpp|Telsy`IeETEH`*r~}LK=#)sWJIC z5P`xDIc3pOz6z;g*LsN#d;=5 zqoboiLHM*t75Gt93=Rs47k06E{dy;ZDC~ou`-^W?4iD4PnoT~2d`XTw&bP_Q;mp^+ z#F%#8M*dB(t zu{1?YYaQDPvPJS)GT~X=0Nda$daQ=;-pwitThYFB20JAD{C~tt;H5wm{$Zg=eMn=g*>j`nj=i__C({ z*>VCWz3{j6jKxp!@fb+%v-)~!HtVFM?ESpw>ZYCiqV8`J+}FqS6k>7nwPT0HOKvhQ zc9)rXS)8L0MBSdn|Afo z&0_Xh!esxdJn=F!fwn5h!m?pY;79%Ya%<~9!?A#g8&L%^TrA3QjE@9={3jsLQ`Il3 zikw~8(D<7Nx}hK*RYP?-Eol$1H*4gBz`K0#vrI!iqArl6phn3$FW?z?w%^exDEQ8(vj&z{N4cR_A~`){Xh z5-2kF%AGq%?tOp}82ry@d@KK4CZkvz4_;)fmv+C^SF2BVuK~{FPyn3#QEfMm4p8P= z1O~7x(orA$lb&Z=g&)qAizcWlGN7LK#p;_wRC#)tn6X_zCI=3r0U>LiZsGIvPM>5p&$Q1hc2w;iKy6>aOl?_}JKI_yF&`136WWH1sE5_mMY zOR=D!U{v@kU~x#a6%@D=h0f0D-=8Y*bTNBb+{-UM*D$RYKyggNVeqCJegF5W)>s3< z?Be&bT9pr|$_xN5iREy*$%6h0l(`r9{RMj@F{=n_G7*Y0kQQL@l5=^)m-Lz6eIR|o ztK8}(nLw?c?epg&hnrIi3kzm&=VlMp&abLlB_%4^nRUmf>y|2CekqW87ertyCw91R zR_qTCQ@(up1t0HZmur&|es0~m#lutf?b|52Y&lIw{GYdu%IvgS!n4EXPh=(lQLX%1 zDefF3MMf{%@(WpDA1?0guR25n;6$k*2wzmz)l$EJrd0~9W(~kj@q^SjnfPRBkYBm5 zU=|{=d}&zePTR&S=kQi8PV?V8Re_L|#C7ve!%u`Jqo5xjG-?2s%{mF8TFc4KwwS}t z$B%9LaFOxf#g!EnMn)0y67RV=mbCO0c%nDQJKy$JX16vAUIr)jHaNLlre!TRLf(a3 zEG_e1^lNovqM$=WLqW(rURC!lQys+39})CCixcGurSw=RKw z6WRX&o8pAGm)L)yeGLuIbEL~_RIm#MGae%6!@Z7@+lT5Phjn#zp^BlZ>Q8UGUvP>T z7+RjH>38%_+pi6hv^7k~R3wRC9%|cK%gdeEyg432$M7^X~NqXSPMll#pFYe=(F#4VS~qyrXXbTeo*bZdT2SGI=Y|YdS!yw zuVMFa<;(60&f>*#GW}UgX7y-em`NV+cV1rT>y!;l4Pv?Bx%2b$-@kuvY;5c=q!5R% z4R1ticxt}*{9}i2O4_=v?m1)!-AazTBIlOA_NwnlNlBrY_1Lo|LEl+W9

    ?2w&TsD~_A*+I_<$Nx)iY-rP{m{=1Kb!W1uyHZTI6K;*P={}!qph$WPo7rcLO&3nvfS?CrMo&uc}!;?cJS%6 zcY)UTsgn&<>82C~zz6nI0YWn!g1o%@wbWLcUtC?7m+q36Cd-WywZNdwuPu~zCKxV}C^^Hr`C)I8IpjZ4Ms ziP7TXV)(-01PM>H~=KT!Dy)<*gjlz!p*a zCOYAYZE^^O(8;$&J_NI~KUxF+BD{#~tkv>Xq=!O9jzS$>nN$?9^T59?6jJw;2)1rO zG7kncs3q5FRZ&A@H6api%c65NAX?zyAXzMP)voX<#O+QQ?4TuW#J?%99>Q!LJ0sRH z7O7R!-I1PStM!Qv+`L~0|35+TT;`L}C!uc(#QPTfsm&=_2D)9k+j50rwPC#5)x3)| z;=#<~*4>$+1g1viTKBryTPDd<(h24fI2(H#c12&zwvLASZuFg4^B2sv)2sRtQ<|PH zA(>6!&eGfTfrlS3N-Mxy4&_>nO6=ZHMn}iaZ05YXD5yM4yCd*Vp9ge+{%1&L=50~% zk)W6>Ax=ai&y&FY=seBt=JuFEliIgiTgN_7F&~H2FiqR*;TBTfyAx%+*u_duJ=J7W zo!j}V+k^Dq%7RfcQ?NcLa`WCc%9wk^x=8@&EYx3aG5ME!<5B7$^p)q#&t?ijoqFq;v{W zN+aD3qDV3RbYHd0%k?bU!LV|oyOr*}>L>fN{qVODANmJj;YnOHh5##6 zP#kiO&jK4s?4hFCEh{tG`6;R&C-oZ(%+MepbA z87E>IW`@cuj1%W?C!8Pp-NW+W8)=4Wg(`9Av%OY?@gKhtrg-Q^#E>HFS@rBUt=|I{ z8ONZzp=;oGeUJ}6gA5mAAjC<&CnQ#m*Txc>TmHsPdNRV;x&rX~qJi?wm>cQ!9BDqH zEtx|%UQ$JWD&BnwlJbn_Y=zlLE~9jSy+b|LFuDV^7yn4e}>Y%PYmJ)0H8M4)1M z{vu);2+}y3&T}tWxJ=nnuwLbjgkQw^>$F`e>6CL%pPXjKt8=hEb@wm$`;YQgMuxZ2 zPFqZ7d>H0Shx0)bSbL1$YSs5(9-JIV^J7KzSo0M2d)rHH+3mQoKC4T05!q7@yA{5t z6nuW0Dnd#g!A(8ZUF(UK3I_Uu2m^)_|4yZH{s3j3ZRNml_0Dq)-6YK&8 z*fQ2ryhMUTawD3zCk+RmsK zDXuHO**0n;&SN4HA<3koFnBH#E0M%cj1?(ATWf^Jk4vX0w7Dw!G+sRZh@Sf2dGJA= zF+BLwuOPdq(tLh{Lzk_|8@%VV{k>Gx{pRBwImg|(H77*hQ>s2Fov6O1Ub=6^8S~Ahgydug zad5k1S3^U1&b{$wuj~wvPLYdqE(!cJe~p6d&>;yRIEBcK6Vuq?s9sA?Y;;`?S%5J_ zB`t!kWZUkps;YvW`1b7^x5LIm8}&Gz{S{uK5|p;bc?rQD&G?74@wO}ZO{Fj6ZRXyD zU0OCE&azvsCC);vte9`^4G_ydC2^i@(Mb7V{MVPgDA7M$O&rBUPQ9Livj)RGf2rs| z`ciyE_4~d;I^EsN;tC33qDkKKeNWNfrnpsj8QDPj{ZQf4k!E0;^?#h5dp^u)Rpna^yI3_2A0dd_GRUzr7Fp7 zq4BaQE+i6!#bN(WsK+p@hFMcpRrTr9rxJZyI!T#co+T{8`IL8(V`?mf4R6X3dkE1H zoNmAF)bx?B>aCAG+Z-{DFifc`;PSO^?b>pJzjqS+(KxU5q;W~!@ygh4b|HmsxuE^Rx}*sP+lX%aYT1 zvxSAfUTAA;kJ!c8O7s3_&9}A{`Q1PE6hVS0jaH>N_bRLW4M>;bX8vSDLwP`K=iMU3v2`G|3xnvgOBC0p9w7a`2 z=uZy)C&)uZL&L+9+otPva_e`d-csdLUVXdx@ee*^5)_-klTPQyW;AqZD2WI&Xea;OEde;S`8a7PnyPJ=s`U@Ir$A%!G{m& zLu=R8EHf0I-?^+kC=?$t({t_N=<~;aeQ*AdFbLRCuCoP~_+@aIlw^&HrmEAYCKaaz zGtpl)UC#?sb+ZEY?HC=zEPd=@^#B!=W)@qw8kXM~vghLAafYs2=pKTcmQ&{>@1eVZ zv7+=XE!U|1@3m&BSF|JuEe@9TZBzTCvc~`5KVjeBGZW~r%hgAaEEz{+6X&vT=lzOVt&aO82W{JM0Gs6$>(`kz21l<+Ab`?=d_Yh9|_C521( zjqexHBl7{!jtpW^8yK!06wXE2+1bU#+XFU37i{2bgS*MWbdo$a3;od3?t?@O;{tRa zeB#1c^dp0io1D>0j+5il9s^_;FO=^r_;`7V2n$Q4cW}lu8nU*@c4GVnmHMGg8;W!O zc}#1Sj}4{6Jb*FnrCebFAzi}?#_JpG*mAsc9zfvi}cU;6`HKZk@Glq z+bi~;v4Q?;`a9E}YOx-~uQF2nAdeUc9AGvm888_9ByAJZ39Ko`T~?hle=^zU3QQ!{7fu z*YR&}HIMk{t+x@Wz%Un$xhl{wq1eqaMfymkWpO=#xlOB;M7snG*RLL@pDcQlj4aeg zvSirotW8rdsFheZ*l*SZQa4caEb_s7 zDKyHU&Lf1fY3IVd7dw1z; zY-}uaQ1kZlE13TcCyZzL+c|y@0J>pE=xvUQ$Hw)141njal^^qNgy}FVPbK zElLz8&cK;F0mm`)AtQr(B5eZ&ilg$&ij&ag*_mLciQ*M;u1DcF*4Nhh%biO85?JV* z5o<1dQWVhO-{)nR^XO}(Vba8*LEO}@Ffl=2t0=`@lLS9Qy%9f&Am*c>4TG8OFraDC zD={LgKU@fk0H;xIORs&HlASEk*3t2%uGrt6{YzY3@r7-IykB2Cl8U2cJsUY&?51_w1Rd9BObnDliIJ+#J|4UeS{ba^4|b-@3%`&B{xla z$KIoRBVG6jji6UBiH(d$X1tFmAW-<;gcAqd8i4o79c*0O)1>T6!IC`EjG>Sv3FbFPn1HCMFnjR0InZW-8!A9o!^T}I{CID5= z2mDU#xdD7AFcScEBsN4uMbAzaKzZC>dbjTF?yX?f8%0-TL>T^>NtXcn2Vr57&fBs5 zMXNO=*uKTfK98gyIQzw(K8X06dauuaK zj754hsRUfh#>TX6=^GE0atH;1Jv~N1dhzn*V&j2gPft(y1mrl3{q;`QXnyohMP`WW zg(g>V=cQr@1cpQc2=sr#XZ#qQ7TC{*1i)U~)n1u7_V}*SWd=+Pq!8RJ z$-=?XkdX7Y(0IxDib!f|>PY`Lk(HLeyeVMn&@x@AiiLpFgZuqPq8{-0Md99gyWnA3 zKBtpJCwl#P-Z@aB|9N%nb?0qzwKEFEG=A|Irip!yG!NKLAfC<~?E3gvw(vWq%w4sN zr`&1U|I%L?2k<1|OjpfWdFuy|->m z?0H{r|FvbDqL~Z=z(Jfny2dZxN68>7Pj6oA-%Hn-e)wl(u8sH6{}lF|eSXP5Yg_6L zkX`Vf2S$~_WpCc&oB~b-&gi&%FGsMB5Er}tPe3Tsfg4ufx&z_xp1`$V(5g^D zN{Wvcy(R~bCFbFgS5c|cyVXHUa2g1s_-BZ+HvM&xmE#6z0S)TV(ia1K37aI^(h{sg zS0p2K-FbAYXnTW3@a8g?xkR8S1EST)Afl6T3HJ~S^e539+ ztIH_kFCW>YUirn|;Sz$FgL-2dAz-wcSi%Qnh@jOp^k|M|NBtL|RY1QN{kZz^q5l&0 zyq2y8o<~rr+txR|${9Fmx&`wI1P$YjPgFrjI9)|@gY~;inog?;Rpc=*<2Hduc%bYq zcF<&g{3!Mo#nN;yK_(Rfd5d_t7yzpj1@m1m}7Tew$n+f5lm0Yt=c z%=!cnE?ZkJH}$P~mK|&yJ3Q7-Ai{QXi_4N^mZrSC2jHzIS13sa%*nJRXKs&J(?1)V z$91%^O6x(}l@=iU?Z?l6+M&2u62OUwfz%6HDO&0wl=tqbklv%BdhnN3{=eUnSu#^C z^*DYdmj6AHKC+}&eukgGQkvmBhEc>F3}k^PO}*6C47vgj4h}l)Y>+_*YpCK!jfbmy z&!3|eJHrLx?A{GAaq$aJ$nB@D(D~0SFBr)B--t!}`yZ50TTJOe5e0;(u`&&PFIqlj{XE7L~7u#R3@tYw^1Ux^?$K z!iYc5w(wsfGWoBdp|cnPe7?=n{&;YPB}0)KU$JrwKH^Yw)7G=aC1teYmXAQTOW&q~ z4ssN<;^pO?joN`S2>|oP)!r9Cd^;&Jp!1+1YHQTL+Q?Us+IVMYM}1Rz0|UvCJk3=G z=CHh?`kB6S;rsVrT3U{uI8hx&tnMg%u>WSy?8{;s{{h~5>W7{oyLz3iq4qa$k)&ym z4Ip#Dybi3-XaS9WoAx?qvhetN|BYasuC(-&G*Ei}y{dM#?}6}T1p|Xa87#e5<$eO) zK3vjeTeh#&5j|-C##nANnw=ehNTVkOwBDU9_BTI|Y%P>5Ds!h3?Qm5*AD^A&0@N81 z5%KC3Hu$Y*f0AYIACuJVcccl+!s)BiT%$i{Rk+0ipRWn2Sd@j*1A2GR4V0gG?CY%+#EIOV{%gf6dJSHSiA*q--2c5H_d3A`Ww!M9^Li&Z|`>21n^2on^ z`_Vo%Jq6I0q!*IMSZ(7h?<{Ro#`zl?c?Hhg+y0{9@HKIXDAmlIOdd1achi=a2HF=M z$_p4(4+(@|27FE7v0E7f8!%&8yuH1Rg-hT`hKY%3$SW=(LG(n;ewt=^NH^B*d#KQW z*$=W2V>7cHqe;Na>(gzz?J3ggPz4DJufEt&=(+zUEvZ(7o&SnFp{T{v@}^EPNB|I2r4i;wft z&{T&C!Nxxys|jQxS|C1uzCN1Gq&xd5D3Rs$b=5q*K*5BZ{S@G8zSPw{uMJ_ib?X*B zKE6S|a&lW_gHG{9^Z`dd@5&B==!h1R=6zvXk;I_07}?3OWg~B?LOCr-03t9{!79sW z?9Gsawvx=}0w4Y7wJFj2w~~;H9YZcCr{xqvYQe|XiKbQRT9Y0@YiVd=ohio%MW-Nm zEqaMQ|G<-8bYTjl4M`}JkzOo86Y*Y1`tGn55TU6r(a9V~#$KZ}TU1xD@G!MxxPz9Yu@ zTT5E_bL~(F zONlt`R!}zT{!dh2_vb6fyc_zT0cV8L)xa2`Ar6nLyzhcckm4DuY&g~iH|1n;Z|aMl z8ydty2K41@R838nDqmnh`~P!EGLf;dnH>h8Ys&r!BsAYRI-Gek<3~0g-l*hgjduAk zG+O5*9tmK$N|$l@&WMPJjF>BAsb%~-|FwT}FH0!VBfE;8KZId`9G9Y~oB=va(zsuQ z451Z=BUhPnL)^;BikzJM#fujuHj5HsV)b=(*O-};!~fkioWotq$h6OiFc`hJOHZ(r zH5B4H4qjQxOUJ2rnK8RxcZ(m5bTpnAeoYJJAX*g8Si&~kX<$)&0wBT*EZo`zr{k}*R?8* z^;%z@L}MjLs|w%|X_@ETK8?stkcvAEbEvJ}kcev40{nY&gKhTIn(~iRUXJ*% zLw{1m5hRil{o1RE9rDbKiyW}z=W$(qfl0bJ2d24p%wC%uIRlZ!B^m@?6%UUv= z%!3&N4l3ZIy~(#a9wO4ICtW8XWCdL4m<6;$Ph0WXV!WtG zE6z~zHWlr4ly#b+Ly0AtyjF*=Ei>pn&ss!J;^c{N zmb)vT2Z6Y6o;KBP4f#a-NHa(=05mpP*L_9{zce&dMiMxYN+;bHH8nMjs5#U>v~!pm zdd~3lA2eU5yt0w529BThI>(T!1@Og6CINPYfQk=~a4C6Z;-}d(!gM`O(LJ8%LWw#0>o$-QLVq-S4JN){Q z!20JOZQpU)%#dbocnM!&Bo0_D+E}L_eq;vu#o5_X$!(W>1v!tbe!%U+t)3fNyhm6N zDtY3Vpld+zPTK=`#;AW7;{-#hLOeM*zd|tzI6p` zI@OY}IoAU?e`RIG@_^L&W1)Uh{WImauH%p%0#oLMsOxfwA17ZUY&X4Ig2=f8k(*-8 z<fptHld z#mpWB;2aKw>%y%QYg;zY>Y(S`H{b5=$9+8DD?h8_Kh3Sx$IHpN9VkRT-IawNKHSeS zu*+a>VS$B-XM|^65s=b;ABH)gvyz-5@cGQf!UuShC8xU3CT&KUu2}&&28^L zo(^N5L2jmDA^rA5dW1+ydO8WP=oy8B_T#k|%nDOeryJpdl<}}9H`Ge?`hG9{`pUb1 z-*zjzh|6L^Y<2){e()+$ciGEdH`dlpD&m4pOcRoYU`FBY6Q{KnAS z2JA8``i`7~E%h3mUAO;VgMsk<9835of}Za9x1r1p6Fc+K=Yxb9G}gS4SCmM5Z5w*Fhhni zH}#9BWm;O9%pj(^e0yPvYLdI;^*^7thbv1U6$l##$7>!E_TV<5rM0z>nftehjZPt? ze{=n1T$Ch1G0ayeMbdXuGj~uoo62aML-RqUkK|5PUfFO zvgv3&As|XC&Zf%9ILW*=bqCZtq=e~|y^uNBB(@lwg`!b{oSdSfqTk`;V7nA2hrNdu*q0N!R;~z?VV)ahU>#88gil9G%PQHZ!iH8Z=sqtVSMYr{f!y!!d zU6zwGhyTK>SBi<_vbe6&WXSM`+)7AH7W5<4SM4$B+xi26Zvg@>7$~M;WSoI}oi^6i z&hI=F5<>M+c;Mi`H8dowhL6EJcXVQXU$qUNaTv>^N%W(d4TM5vD4o~81^q&C% zM2j{G6Qm8m$|xak2Xc6MZDS0X)k~bYvM^L^S}mC&>O>PL%1MY6{{X8zRj)J*<00nq zzj&+aSxz@=K@EOh&;NwLFVXLZC-uSaWP**W)x_1bbRh4LKpnOfx)Lq zp-JsN9VXu<+GxkHo=}0b^wi|ovs{4h-~Zm&IF4umyFFU^pX@g7k%Y<|u$sbPD=Pyb zLj^pgnvE5IVCFPZCbSXu$U6f*TfY0|67(^6$bhCCE@IhuefSUJZJwY&q4?o$fNxK6 zPm|w+=7ay~Ksuq#J3N1Kqv1y(0O>#l0-IxcM<4S571U$0F|)JV4p+W_hEiUC5&k?! z%YD@y{Sx#ka;1ixWyl&yB;Y#%+PYfn3veMCFshp;@_Z5#ubSNkr(c2oJQ&7=mZ^37 z?E{kozYB>VXcYxN`i%ji1N24aN(AgSXnhbWz@TV2;i@z|0bZz`tu6MkV+(_2T;K#T zGiO0=|Nj~Z93TKK@dSM76=Yyt#iC$vL?%TF3V@Z-=0S^wj?PC(1EhF`#0&V?5Y4uE`1=UbwY-=H^ZS&Jjz+Pf^RDndCC%Lmq+)LY{u^?b zEQ`e^f@z0q#>K>Yi!=@m#MNswGy?UQK!Bos{AS(9BX1?eA%2 z{%nodoVz>&*P;~z!O2}d!yhRbwU8ocGd<_GSL(|30>bbo`EMVt;?b!13Lm2XB`oZ- z$pr~6$a_kKnsdd7^_ZVNDvO!CQkc7Tm*7>+oF-mR!Nv5dXlW22%om!r_||-z%KqwQ*Bg07bPOD zhKG9p8Om7~#ukS<1#C?;I41LH`Ll&_czvRaSefYU{2~=|vpeoT#&-qbOK8y|M}&R4 zW5dH0A3uH!T{+d%jPG2IL`w=K?tz%R>aG}yoMR~zwDGFtn}FmHxy13h`81N*83=r? z@t{MxA8yd5MuX2x4~OG$`bkLhF-SkV6IG9eZ^s=H$p)jUh{rMNlpk*&s}75e~TMc^Pcz?f_r5feBUpaO9m7VYm@_mC`8 znD|NdUWzN`;(036ALiLTJnkTL?5f1hdJq5dd2c}ra>NtgftisJoy5f$%E-(tncQ~k zE_{`b;82bLBFl0+2nZ#mci6@dZdw`aN&#@jAWkvPp^w>Rb*PIDF$(&_$Kb;%doHGpk8)(= z9~Dcd*o|yWxlM1N|j9;)TzDXJz_DlfN~+K3$xSaxwgk@30t`u2%S>_2@GQ zZ2!?T+QBKSRYd1au!FKvQvFmdS2xl=v31;&WF1mj&9^e12A=8Ns>Oc{*HwA`J0tkc zrU7wq!stS5Oh8=ovryCwuRHgaj|c8a(&nx<&3gXL^1YVDCyu9G&9^@K2yIC7UG_y! z5z+Y9mw+(KH9Y*}+pZry)px;-mBNLAvDMm&Ca=V{Y3YabB~F(^zEg~B;!5j0DL}!c z9~b^8Dx))qX~Krn*P$SkrZGqlQ95e!hJBhx4AIWF^1a6W=`USQ-jBiw%9pCZGQB=U z+C4Pn@=WmikIwlKS5>PHZsj&LA>&Qiae2{$VVM&Db3*MT0;9mkuSGtYYc0Rd<=T)% zkIP7dQ_yqi)nzAyt>{+Nxg8ld7D=GHR@}Jch=&k(?j2Wy{}B zT)2P>=v`bAwfa%XUsPAWWUXuV971_8%p$^nw(es+M-)Wy(ZhuF4Rp@zOE_gk?E1x7 zka_)Krx8$n7gUa*&8)Du)ik-Uphd#Q0I^UcbO4>q!ox(2TgvSj?)=KIQT{j=x4p#- z2$fjjMuCyz=u5UI#}J8>XD`Dk)N&ht%dRahDycfv{M21~QrO<%l>e-HRZZzKAgj?&5-CJ+3Uo5XH;J$ZN>qWP76Ss|V&siNV zL(S14Rzur{ACrDp_>X~$5=`6nOCh{VQGWa+1y8qi-nPAO(G#Ue8tXGc=YEi~8aA6a z=QbPijO=C?V0n|Yv@8xnjnv+@9kiGm?o$8JTTp0UNpxZ_!=`WV#POrUbd-mOR#5g)}3pk<9Ea-ui9i zzoG3X6Vt%rZtgsUkixMroy~qdNP~(@p6y1iI>VBN7_QNgYRlOHsAp7C=v2>Ctz)}b zu2Q}mne-^`ld*bGaU&@cjF*X;@5be)M)hk z&|{P2B%{5KENA_J`)}oyl%n)Tz870%vGW?PB9*0fEERjK)mogT&Q3M$siTH{Pq;PG zF_3Z$*8_1HK1$00O_~cZ1JWcyF~$<^jY~mN?@Tk?Op6w$d~hj%Tra)=qMj7M6t>W! zXI$9+241l5{cb?dXLd0htpb!#8BWIe#}J+de=AVklHECrgLE;x0s_@v0s?Ss27d>m zNyEQ4sZ+RG>^%8jbhe>y@P)qcWIGr+{>W=$#uAn(&oXy~t&{_5SR9 zRMb7mrt*UM4Dx`(ba><)2_<^YK=W;KDg8cPQwuml5~9!q4G`Q-#ygM($hMImCvM3A z9K+ylm}BWLXi<`+qfgkky0QXsDM+iWtE&T6Irm`h947I}bK&bld{8_|=(3}k*{BfC z!q5LQSrP@o`#$b_+wGms+GR}WGcr()+D|cJ^A)`HyfXoE_VQw%W~mi+ldCCiW_k1x zEKK((&QV7-L;Pu3oo?tsw#NO+IT*YFT$brE? zY!1Vr!s&}PD}j{(9Q;qc^neqDG#9nT_U1*tK3eh3(9O9h3vapq+P~}8dvS7%@{l7e zn83iq1aa$nOl0etn{|u{vJ?^YuBYor!o#~j!lA*cYhsL7xrK@gXTq&Q7Z=Idd59tw zLtRsY&AGmWcvd<2@yFL)O3cSk^huIAVO5rGZaeN6c|+Z>*-}=ycO?7r3w{r4Cbiu} zBadLZbA}%I==~}_i|DPpl9M|b7_59OWLD+W>#Gn5Jv_h&!$CH{!G=M?6Xab;lh$-X z#23<)+A;KAg0pMgLTE;KFk7gwQ@gwg8hZf?QZR_SrxrY!!{knE)DRVpd87tLt~~F$VPr*97TyJSw(QF(Zgxbn`~#WBGNjceIo3WY&y12IsR}spnxS=9wARQa|o4Ai) zL=S4o<8h8jI8VlCH=dpqMc#E_L4eJ8Z~IK}^b#DG5xs)FCvsi~l;?2qRu_pfG3%ij zQFf|eaS-&}N_QXOD}Y3kcRr%;3HV4<#AGJ1uZMRWAV!bqXVYpP1tTF5TOO0w{(sob zk!RI?aX;+gdp)+i_Up8BWl(wmk>(UgpDeu>Bhj^x>uRO-u0?O5uY6~O-bJ7}s&IFB z=z|C9ef6jPbr+|u%gEB);^%G2r{4F*p9DU?w{6#ri+oeR{lmEsjF6U=(1dp8)c7=41{6;XJE}>x8EE`dQ z%UNuH50)-H?uy0kafFSU*LDE%jK*2?F*DIMGnXF0SX;lemJulL#jSP6cc(Vdka}Ac zZ4VX1-{2>7K$VsT$hZ5_<|7C-mhVJ47R0!eeRNVguI^wbIc*T{@CpoW4MRNzPdln$ z--&zM&u(gP$jC0an!s$aBAnCgy=A8McH2Hi6~99KplV$(A-|36cnt_goFs%S2FL}jpwb&! z=(QgX#MwEny1(283 zGP~%IN_A~8Kj?9z%@Cii-ugj=1QNugNNb2NkTY(@m!O&v|K(nT{Yx=g@k%TC-vZ!L zq@sxouVLSKYZJOrYkD|_^j`jpoo;5cn$x+ctQsuIs5Rm`1?5c-Z>9_aY$&rPf33v zLj5o)*M$pqB4bpyukVyM?aWzBF2p!2zKwJ+=F^)*HxogyY=kg$*B_-YwX_cMnlYjX?CU-}LXYeal6^5&Ue?{=^*6n&X(jr$Z zzDvt%o4j6(t@@02Z#XQLer7r=X{bFi=Gt>QUh)AfP6mM|MmIg9`rw-Z;t_V0T4&?m znH_JcD~!noXfWysblsV|vmZVZ^4SR*@O zWbbRj<|{gKJpb+sM8m`rJlEZFL>b5HDd0WKp59A1-$+Ih>B#>|8a@(2krUa zQ_TW(4`w%u^Ng9U9%IZGXS8%*S=ktDFeAc}wU-dy+@oQ*b#p@Hj(&1Yz2{c9lTexB zw?c~0X7jC=MSEw?<5hveML!>BpJg0-brfcgKep&RIlJTktl>2uJ0dl2Ho^PIe6yOL zK&27`kt%JIGw8<`tvB7QipdbWC(31Gy>h$;1FSqo;FK1u7&UdqF%O}+pkBVTu52Dn z+zJNk^vZN=FOYn?Z5MeNT-T&W6_D=LR_5UKEtZ?>`V&@PFB{7|4r{}m*{(}XaVTh4 zACW5S!LqETHYBsXvl$$*R!V>v8*`fs`7vL=H$OlBYpgxWS6AYyjOz-aDN;!c=l)$3 zS1p}~)49sojxpistU~wh|VC*d8yOmb-%>6 zMyjQ*U1M2LVpdCxj=aS3RFpC@whLqU*H<~(-IYSvE0k8NjD29*%4THEnDNx z-3YaF)Qv)Q1Je5xEL1SN{jE!jVd&YpQQ~PIhP+)bUFtL#KG;>b1KYf&ckxY1UkN*k z11^W^xQHr8osr3{^N24zgF_6*L$qC=ky&k==S}X#*Ie*|JkEDfXl)hr>gNC(;|nZ4 zQK>ij6+xVcp1yvmUGUFW416A9?ANZPC}t5HJ7zC7eb*pm^~0nU5}@7O^yJKe0zOOe zZQehRw8jb}sBeZJqI~u@j$xt|?f+|#x6y;ly|}@+dF5b`%r^$a3^|C*hpV+0W6of{ zvrSGd-I7{kP1GUohtx}uv<_@m@7mudkSJB^PgF^)zB6|}Ho?_H-UE!f4h;59geC9C z*Kv^JbA5#)KZEl&7jxryxWB{-FDqs~%w}F;4un2`RG~FQiAhPzu-3G@OHUc2)x^b5 z`D2qJa+5Dt@HdR5pX`2~-=-UKCx}t*=uFQ@&FH8Q;meVi`s zUKkI%b?^}0?{uDACMUn6mzif!>aZW=jrApHWx%J(+m>?CgTh69>q9RaO7Zh)3pib; zFfVw6-H>vZkWD3&E@WG;vQ>cajvSuU{R64e=eT*#-oM>1@K6nXqo6xfL&iMS3tM+H zni7MIDVdaRCrQRhY%b88g_54(X^v1Ywp+Kn->fk))`IW702(Qm?uP2NIBH*YVMvmy z)r-a)(U6?$%BuUM-4m)toxNbc^QY%<_Y!rAUFu3k}&F?$oK!gy!D`t+HUVM$=W zAh%)b5;J>%gf$Omdr=dZBj1u_94Yj0ax_a>1sh~yX9{#IP4Iq2a?sgzVFfWI+K@zCp(wHnyH3GoBKD zS-FtuU$+(W4SWk1f^3%qb9>-4|Y?Gt0NIaT{Xh?1Y@5=RR%Xf{E#4B9ap+SrEY^pjC{;eQ>gP@3`Yj`;90R!hKZv#v4w8{GIz z|5C`%<25M%^>u%I-kRUrLXTb5A7tTU{+^s5zs1UGzqw#@JWCyw@LG_GB97zyhl}17 z7L%(a(>#tfYB|qdy9-cbVU=Z-Usir>8^sacdR=wf_w#2jFE44n$_Imjdt)NXW%gDS zygZGh|8#%DNEu5qwEcgkP9gYhoW7Qn_Y z-<<#~@XN5|Pt^0*g)a_i2}Ga98!C(}(Z6G}hw0(xS8Qc@H~&sFNAC@S$F!ltDX8uC zM$K=IR@q48zeGUmq43=q`%|+leeu!H3eBzDu70Jq7U&_ka3lVCm%{RLg^b45 zQY<++wa}X>fnP;Mz5^wNPb)sRl-T@uQaBRJ!~JW4N3W68hSqt!Hj>*uufmLa^`NHHe%eR{yG0Ggkk#d8bQtiq6|PRqZ1!bcD^(8`VYFg^K) zmlXAf;lF^#_3Yy^6{Y-1fA{DdBE;KqBVw#@6>{34KRsOfsi>x=cK`nU&-VgA0$o=g zeCbdzkm@LJ!*&fCX^Puak0>NGM}z5i1~2UNKCc4C2_*Omw(!K_6_H!4)b~F8M50Cj zW4^+2y&d$e+Ndl4j=`dbf)fo*L~q?jdm`&R`@!l*Uz%DI99a~du7{n?@TMPSJayCzR|+#dyx(bAmoBSP8KGb4(M%~cF*KaZ(fk3CH9gG8xH$D2 zr?0|){En2+gnOhqDY~QNU|r%8l!Qv0upr4Yk5ekY@?IWQ#Qu1pbi#*g#(NZz=VE$w zTixv*QE~$26|I%Z$Rtz>Od68&8$74a{jkUr3NmM>r(?NnQlQO>W%v7+d%ssb*4Ll& z+68^T+T7XsQJOzSSV~qlL7i6Z(WB9ZXfc6OdqKZBi>2Wxe~PA_Ugc8fm@ii~nvxK0 z8kMl?U!8v14xR)vkBgi^3kC$myD{A;#n|5&ggnm>96o{2C|{8NE`Rw5qQApdUBP0iqpnzJmqz-rvT{EGmL%&;JV1Lr#oJ_{e#Ot{7G%)3klFS5xg#E z-Cefz&$_Fs#`L%t88I0T`Ax=ZYiefJ5F?(Ek#P4`!96R3#j&6KJ=lOTZvLtZ|JtMY zOJ8qz>kjlrIEO?mp?Z$Z>>9MZBW=aeXr+=wOC}1iz~5hl=r`s?BM5@ zIqR6$k^RGK=O%?ze2*qLUOOAmrCtjJ5i;K(Nw04FMd?iwO|$*gnSl+8hjF`H3|O2} zL{rmlXKJOtDw22{kMPDE_ncWXJBfClLTp0ZeB+O=V6d+z2^r23-okyw8Z5EUNBaEk z)}gER3whUGZ;HBM-NBf8Y@xk^D>wDt@{gZ}WBu!^pVKHUd;9BuKN=4^d$Gvd{E;x; zyQM(tXnM!3rKY)x{ry$QQnDNu{g$q%3w07VEmKaMt1#%OC+F@RD!sJ1^mJxzI^mU( zWQo=D`H|Lzsg`*|xBb16{))JVM_}hwos8D=NH+ezAx}bo_uBd_N%oVLcQfore-R!)!8xj+dY56S$)Y269FE89GYHN3#E%)N4;*A2vOcy7j)PU8Aju zCM#@q%PY&@wI_v~E~IwtjeMj)?U@qfVt%}>Xrd*q>hxUkHy3JgLdz0BN6=hMSMWOw;pG|2f@qPO?o0Inmwy;A;vrR-`fAf80%6 zB&qN&ejizvQ)#ul@3WbvX4=KO{PvbY{tM~t1c)U^`;4q?A*?+G zcX3SBoAAJH9wAB{?#kJjO4E^VSL#pPHyM1BP;oQ)%BomVuCka=(t|PB& z*Gag?jq`?F?9a%ob$|kdqwh}70 zw8H$po88cx_rbTWRnFzuQ|GUC{hlVK#8q;|LZsrs^FXscvb~a34H=GqND`>1oZ-8G zNg{BeVbkQ(g8O_U9NIy9(+CB{AZy$C1$=A%+z*X*5f@((qh6XKDXdJ~1wUO=_M(%l zeN^dA?i}!3&lP?YkT3+DfNR8-cYg;nHsW1S$VeMS0(wgChWBg1YFk)YWy%V5efh%4 z!V&;YL9$|^9UczjELjTUtElvLWM;G_2<>p$obA5DWqtiF3yXrRtfnTtp}u}pNM7V# zDc{Zp)0;PI;mmQ3JOQO00qaGaT!q>V3|AS_MXxE;>j9R_$&t1#@-Hm(0BIs4=lJ9$ z&Ug3yw&j$D%dEoNv31c7mB94T2Jx-i)8722-txL>?HvG@~CsEFUxw8tX26?h>3Ggg5CuVc~f zI+engZ;bR*_Qj%3nYBD}wV2Y8-rm0!NV!Qb>9nf9#mpLHqOzL&@{Pt>6uK6_vzK&l zwo3Dx_##M%rcDTt@%3u|2nA}YMxjUZmzq>7D&Hq07?Y`rGd1Y=75HFuhs;L`}whoCB_ZisSs8S~@z9D5C>>jBz<@<+dh7q;4$q zdqs%pJbcxCnrk{AGal=fM5VI$cveSo-VpL-lGxU ztq8#QxrjWRv1;OV&fcD13RTnwnQy3nqwRF_1OcLL7!>O2r5pR$U!Xy|lW*?Yge`Shl|LruWKmoKvsC*AXLO+J@~Gth7^ zXjVRWG&D7xhbtLbKbUEblCVAN%YUvW7b5bjwDi1%#km)M zZzzA6lcuI-Y7g|=mac1PY7!cim*Mg3qv+J)dnov-U2gV&@l6oq$n2W^(j$y_<{LZ4 z^Shy?3JF_M>bvQ84qSf--r#>!!^_d(2Odw(;H!`S;-_bxg(^Ivb>Q7`b0j6x2A2u5@E8(e$%rlRo-+!UL;xLU zU`IlThsx@O7w*vNv|GBX@kSC7PK?BI+SY=FJ42T8i2!;1diyl_)e|a>aDD08`tuX) zNOM+Ve%aV(9i8vDZjlU@{=7~vtcw}}TJgy#5$nal*Pkw!A_4L=O2?K}f}IAVu9;g^ z5g?`E({uf-jJ1+0|A(@-jLLfJ_COy}1VI`R5JW*5X{1EDJ46~qy1P+9N|a7PRJtXk z5fP9skq+tZ?mN-#d-gf^9e0fD=e>u*f33OZ{MGd0aeOBCP*?Z#^tcOiX?OVwH$jDy zsz8zCn?3k|Mvr-3U+W18vU8yn`|0fDgmYQB56PEou0}5FhZ`k|wb#Q-h+sgya(w#;Zxc>qV87eP8JDq8Bh%o2YQOQ>ce(Pk9x$mG~ojg=Yj&bnzf##k}7& zvH`m7GrNueie>&opaWRX=v2onm@PUxiZl ztsy0KPBb<5oQ48X?(@mB+D^++civ#7twHOcL}+uh4&LYx(d2TC)4K)cO##tffBtCH!!4X;Er=csSUCn6n}-fqSPP#7yU zQXrb%P>Ol(EWrBZpvT{F45$H&40~HWd$>ITcz*>TSkOFkY(ihXGNP@cn&#QCo3bT?@F6l9HsTr+X`QEBY_conX7&b#WFgcK^_syq8S0wAR+WsfIGG{jscy zy1$#=`)E10+o+NSEf$nWo?RS{>Wa(yPenw0D=Jz(Jsw%Ke@!{@AeNY)4r_v+o_B6K@)Q z7R*=1GD)4s*KC(X+0-s&U;Y_jF76ar<@VK2+BzmCy*+wu@Kax%uuazu8_f0b)x3`% zOD$qa$Pp=)Ii3@R?xW8S_CD4pT){}>=JCw&aotJYXh507t1^uuy0>`@B-xK6pWPMD zE2wB&+~alrIa!-G_#ElDx%U7gsi>$ht!`}wmO|O8HY&lKd7?DolTY_w&~W1)0CQr4 z!f159W%gi;OBwe|jnGTdixvUhg6nUg@P|SHkU``-@AvH3tgT+Y$y`nfoj&PNok+f} zmGcW&6X&VF#5QN!RAIuofOA(~k$%L+-p$Kx=eE&npgrEW31O(D#KfUjuI$tvnbQ?p zTU(7CEdA`VM&Dn*15PhC*2M~Yn);@uw=OJ?)S~Wr?D0b5^!V{D%C@_3&=g+@WTSa0?wZ`B-u&`%ODE&`fCM!KgO|rXNaO z0Spu8vhbPU5SC>V<;tSmQ|lDrkS}NJCLER?EG{i+{W^ zEh#_W`OS^h^-<|xr6$8wE^bh3$+&apS69EDIi0#Y!nLHIZw$%k%g?)|gpIVESy!hH z=&-rDIlO1Zi?bTiF(`Fgvp=$gDEJ18V>YX~G-sAv9Uh<0*2vK^l954=>?BiRGl9u1 zMEmqbmKh5CYV{{7ENShRn_kkali1weK79tQ(kABN*B3MT-iMH1@N&Pg5_y)vp67R^ z%XG|sF8JJmxiMzn zT!i?Hf;7cmjB5@Qyl4>S9A9c}r+1(xW{NaFQ#h^S_~?K6zTDGW^ZD<()Cu3O6)UiA zGGtYFDkv02N0T0V3uAIxnY&MlV7Lg2h|=~eO|FhG@j;2WMgudNR0crRU2pGI0)0@Z z{A{K$KmrUsoIiVdmPUsrfhgln<`KAZ+Iu%C3P=8VS7ehh>4lnuJRtH=PO=SGB z@nQ7R!sQMf2a+!OQj|IXHoo(}R(rCftrS-Kw8LdZcBiJgb`^-n(_?7>D8Z@qOnwe9 zd6)IqW!8;?Uhef{Ufpl+z57xC3zyG_DxEH)!J!9^=#y3A9fGs7<4@Ja%fMZ}Z>Kk* z-8ODZ{}i(I{k4_PDc>|yHgKA8I4#*uwn}*+)m=cP_bne@b+*&ju&bwJpZk51HRitQ z+o7AZi|Xxp0wbV!2(iqxaKT}lbu6oXXIB?VMt?Rr29}29l!}tk>~4u#^dRG^TfR3A zqW(E^)nIgqcqX!#s|7+>0P}rnu*k`nsknaN^E<&x+b8Q-2(tbkYJ{i{!nc3p*>qTc z_|D^x(%3$Qffr#*e}kTg{k>o2RoC83pxnRpnurZkZl^l!G1GH^K)YvsJYx8E1>3bsq2wXUhlkB3RbAF(yr?3 zv&x+}hb!Us<43dk&+K?PUV5|bUth=KQC~G8ha*FM#v~(>N}w#S*sb>BuPxjtf!Qrp z8pY-%u))`!3jg$dnDdtv$~N8=;T5!>Jl&X%Hgi>8L)oz%vpzp?#pFduJx^qE*?fD8 z_|!k6mdSje-|$PAg|V?SptuCJu53|Bio-)%cUh0`oSnLu16V_EJJU=%_o5o*5?{x= z`)18yT@Jr`J|5HFM&0NXPvqu`ZhzZ4rLh7vi-Y6wWNRT84`*M72+c%oBn+(9b{Bn# zCg$({Nrq!`svgQzZ?DQ$WJ+UWBX!@SXdANcj8Bw)O~1}FL-m8HQ-&d z_gG+X(z*TSf!300Z9z|?tlN7_HU@&ZMVop5%2($n&wbqb&(9xAh{@&P9pE4Wo3xop z(?>#w%hhrU(v(9M<*q($wj;mhTDZ5?QsZGFH#50lC2OPs49`eNSZ)E%a8KeB z6RUxGF}(UFJOC%p7{8GAQY?%AC)!IzuP|?ST)pxC!otbbLzC9lt}gJf@!q?4xHa2`hKBb0`xyNGKFg6tAh_^1Zi|UN zLeBzNXjhf$-7kca0=z8Q`)X3g6bOd*OrM-E2kDSObOO8@>U+Ao!H5UAeunQ3+<2bq zXS(_1*A$Gxl*PHQeeteiz`fvz@T-uoMa4nTKbXWmj;Yt&hMxi&Apk&bsrcd;r%~Q3 z>iYV^LdaXd#KPk1u)szFc{4jhm~k%^DeJ&XBpiei*MG!3YJE%o8&%)Cc*?{XN+-qR zGzKKSWkJ&7I)?IaeDf`t&A9&8EE~f~v;OJP*4CBQXpH{pxAGFIqa$V06^B=@bvvyN z!*<$bk;z&wepT0B!gsVBl(h(C&WRd znMQzX@O|9IhAlTO)5^A&<;Z7dhlTlh$pC0FX=!OEJhwX_&7|V9mc4#oLUQsrWNz{~ zEiEiA!e6-yxr7lxHlyVag1(26L8=L;dlF&W@Vj@c40(+@3Q`cs&Z6t+bDoyQps7(I_8fA5W2SK%`VchI)8iR$656^f=Yp50+d^ zI)c_<_Ebwq-lL+i>b=|9*@=#hevxUBpATs#b5>aJ@4C+M^vbMakri|yj*cbN>?Cd> zxV4-j_V(<8d$;+ltgJwf#m5xB^W>CKb8`z`^x<%A={1yF_1Y+isd&tm;Mg?Ana?hU zM0w>htXcMSvNnveWo;Bv7>w$l%x+i`KBM}hVpAf#ChkjxQD3Myb8^7KKWuIK(3f%` zc>ljmh?k9GSnl_nGdAOjP3Kwb17LSOoQVGC`2W=2??_bcicz~^D!d3>h&9+~W4)iN z&Eqjz{tS7Mg9C-%+0t#PZ@eWkpy=|$5Px7Vv?5WoB+!C+5gSi4|F23y5$9ibTK$vz zO`W}Q>5It|bTuwD^RdH7zm8tTf9HFnv4MpEtbVxU(_@@iKwW&!S)fbAgV4?f+K-%$ zQVz-q&LDU;fVQ31``gQRFbe`Xe9PagQ*JVpY`!f)mle8x_6ir)@WC9-ONw1ta@D{E zKS{MwR)*LSJALn=L_uW@V?sw54&N4{_~tUI#|%AwSv8Q9A{Nfs;_HhDCS`wuLB`>_ zVGuk75(tNd)m5+A*60r(K0sKYDg^vN}` zk8KzQRPe7!VW_G2B|SIg36?okD6;p7*BatT)yj^K|CHPD2t$Vp?V?HyoO)%7;i5)| z44imE`G{&F@H{2d>tPt)yb8yP_TObH(!fHZQ_*SJBpvRd+;MddS?u zq9<1iGBd2|7ym{5Aom-+*Z;!O79&r<&7jnPD4Sc<4GF71eCY_Un#ZM`Y{r!f%PvZv52eygAOV$D{bUTWqSZ;^eSAW6X9YpEEE8?K=jyx_3{)|-Sp;O!4)peBYZcEyNQP*@ zj;tY+p5R!%eaOdk%&(}pH-I043{^19IAeBYMQ$>Lg!QaIP{>^@pd*1RQf_^5QTm?c za0>pTDV|NA0t)AyifZQ=eqJXasiotWNlxM>B{#)PYJ6D5>*KW*K3-yQGf!#cf++ zYXj2YV0O8F{kn0~f68l$4)Oi7gU5^3O0&F(ot2?TYQ-eJM)KZLTbr;b&zbD!knF(` zK$s%RAhI<9Ref$_wk_5%Gb^iw$YXu{oo?IhiK%vx{C4qiYE+ic%~*ppNgjWkDyQWp z#u`Wg&%Y?FC)cplf=0ZFvQl#|rT6`Lkpp@3tiMI2$J9v+O$%%L&Nc`sfJ zT%a>&r;LeQ7AiR!@<(H3Hsa!H=_`U}S^PV}1f{tl=Dn$tKXbz6%2hLB5kym?$ub$d=~vn z2%4gSfFqIVyqF6D^>DsaC3MW=d+YfS^Md*LOx4{5xk9E=Tt2I{!$!T}D`e#gLIC`H zoJ0youD1dySXX=d!M6ZQ?gt>Mk(E^icpda0L`25WZUY`#mpBQMp(K8OC2N>XdjrG& z3YWSs|CIabYY_ccK1}!QC)Q+wVz<8=S@iJ6l-}UlV})~&V}?CfD|#5Ir&#piuA=JK zq3JwbHXxZAe%yvarWg*fnuL3so9_#&s`$4xt*zHGl|MpWL*LJz@!#W+b!3?gL!2on zD6AdAWZp$aiiSf(o4S&c(x1gn-rlvYVhw$VP`e|->j!@3Y4gy&j3~7pyU5*u6$`@_;fL9H@+iB`cqfi(sYRDyWX*mVP}(HLWqir1~V}+MRDGau6&@f z6`q5cYR|#W9&xe{_q82_AZLurmrWYZR)#p%)SILKluk1X3x_nx@L*ZR{x9`!J_$#c zuWE+N$Ozsww!uOu)ntfNZ`zZk=kBp+iZkZ-%BGUH4vt{Hi9$ukM~)^m%s^c7jd=P{ zEvmxso8n5@I^j*hIu-5uwEP><%d4xK3q7BJ(*SULXXz&ra)HvboFfthckZ28#PbyU z3y~5VFX9QeO-I@k#e)!Hc~TDgqcmH$#f{X|j!-f()k{ZPvsob|qW>W$0ZPfr8o|Wu zeRE?>VbaeJf#>}?rH{g$Ch*bH2U-R4A{cAYtp5;{I2jvjW8;yu74^@F{jlw#IeOit zTpL)l3XYODUcA-xl0-d7BHvKYqCi|D7)b{q%c~uePI6rx&lsK|fJ&g{_BuJ>bvOW> z3`OsbeE(u!N8UrWZ}lI-K@X^@kIl>^(825im_r}YAFZ=+Qmn0)tGr*^DGHitwP`i= zWKH2%5YQTXYkY=rCs$vb;E|0#5vGX~wj3&QJv))MU4NFHHOPuE*hSC9{Ht3A8QY*?}|!66|NH6C{iGCC7pkKiTRzkX;Pf!jKm~ zH#ev9o*ECY;AZWH6CAvNq}%#&%v3Dmyy zrc|dj+Als{i{3iS6}XOzlQuXSx8E&$55zuq?;6c}dx$-V52+Bx&`F5061*iSqaU2E z_Tl@(6d8L8#EeFf&M-1UZ9OZ@7sdBEwko^C*PaAwh8i)aKaX)l&V(x?eZ9i_m2{8E zNul;c$3&j8E0~WuEcAqtxVX4vWq-f{v3&K1!Q|kWJ~+^iZw7G~pJO2pd#`@2XJwQX z@%|14e@t%$A?vc(8m+1I8XifkbE(Dh&O*;wXAF;6-pq?rovQ6rXI@vq6ya=^UOd^cuKP^j@TnTUTyj1Q?J(NCI zWfk^9A{$B%rP#*veQ{|(>0wG_f{<6=GnAY`8?^5C!aPeWqcQtrdDRre#zjVruOvd3 zK;h71`W*ylb;56OV5#P9B{%U(Wi2yT@tfUlJ+opGM@6#|Vh2DINDMaVhQmKWk%83A z#N=yju?p5pto-i|(Paxs`n)t%>nr%^jo8XEbn+Kt2V?0(yjQgwRpUT^^5Qa$?rHbR#K`{PDW^h7OylZTb^p0b zt?yseoN{)ep>2rK?&@e*gX~h@dJsqzjOOnZZvePppK!55kgSKL6p}{zg@cjHvAe%4Pmy!jGEb{UUXnNj$x)SL`U4|3&3SX%R4U4v_VwbR4 zpGve+rDcD>-lCrQ`2fZn?6B^=HC^Bf-2ioxlq8$HmjaA8{z1xvvAK3TMfow>!fC8$ zu_1Mn2w#5^+y-+)|JT$~XrGRJU})lwI4TGCNUg^{|EUVxB==+PoIh>L8_J0un3(to zadCFvE51wq)zr2mAD7R;xkCancg!!IZo&1yc_T+_rjkWRztki|PKxcDRf;p3sh!aa z$9rz8xCFYXUthW8T<1HDUo{Fmo}j!|o()~JS}48hXeQysC33(7b4&Wt;ZbKEXa$=D zZrcVM!U8fzB>Jx^L24|&iSI(zUSelNxd%_UdE2dBE^7^kY4P$ zDITNdPUH1wfTYQLQc;42$Q)O_Iqv%GCH?3)5qTc{hriv>g7f4vKVcg2LHejMN1IOa z{m)jb>57!m5k=81DD3y#LSDQmZSrA;2r?xT0ycbw1+^EJ->W6s>Us8K%xb}RJbR}P}aM-3qrsB-6iro<8 zgUv9IHvR*Y!9>KbnJyu;YA%mB$-Jyc`uJp)Xi>udhpqU{ob4$-1fW}(j{d=KaQ!@b zfxo=HdX=*1KHzvZHcpEw*Tfa#?#5*cK9So0^~*`_r3!kf3I$(5JN*cwCUs_n#enzv zf@x$p-ojL`f-thmb7QGAN}-brI6Mm@I~rJgV1M>*;WspehT4n7^R`|Lg0>>R1oK3ZA5p@ham>__|cq?@}0HC6j^zd)d?oHdu&!1@* zIjJ8&BbO6^cID`|X!&{p<`$gu#{{*E&vwrb7fem|!EFZe;cWE3Hc4TwGIvAtj_)3> zY88{>Lx+DHhop}M2oG`UKwI>kKlH?Ep$`-YZ1#;S$^!CRlivbh3O!ioR>a0E-t>W5 z3cwk(B@oD7W;sONmb$XHIs*6_plp!e93{lWB-gsM3=fctg9EhVz1`h~pFbyanyF}L z5SO`QU*}wa^KW2aASTuT>Ff>;4j~~Sja1ZH#QDer(c$52&MSko@(E!(@MNFt4(Ojl zn&idhsD_MmP+n-Ig*^D*S0lJOvb=9r=DD?$c`yQR~|_c=Z~NoKxN#R278VUqKS3EO>K6hT!i(uXsa^nmc}eaH|BwswAv0WtMEm z6=v%F!_cv>1o@m2-C}yXHa60|h>U}<_aMkh_SgQ?X@M)sm7mpQ{xe*m6~iZ~th!VL z8k(9u=V#mXXW-cjcG(P;gpN>%*HzbYr3vqrI~&{D+KbF#couKo6u?1Xww^2(1au?| z=7Z9P&>F5_)2p8QXS{mC$kq2$7uCvciVE=~l=5cy5Mgp)=csYxcwK{QWAg@x7Zq2a z9~|Zt!gi>A(U>v5)iOK*_b8}iRbEzKG+ngQ;EZTxI~<#P*KeYtMUKeV2{NdUWevdc zMEd0r8%sL)>2aHC#-2j5fZBnhwsr`h-)QF42HoIgh>2+e1##TQw}325cQ};-BBs?p zqhDPX8}?g&%tB{y`VJ3oz+=khTl!a2WWQ{rzxGn4(>wr%APMd%vZs5hq5*%8=dMX;(+Wn=IC+Z>TLJj4l=j!Fo04wNcW4cSM0w?Ncf&LF(*HuSiv)#WBM{ zM3g%&;-`HoEoIil3m)|OD4xO`I0-roS3+b$|0PFEW1g`@ZmWjf-vK@0WwMxxNyR_)0j#!1bk<6&}hbN#AR zK4=_-`Ij%sP^ zi_HM<4FyNKzV!b(Phww3+-Pp2#w8|_^M6ianLpU1a5S^CBa8o%n@1MlmwRi{)y*r% zm89z>&3B^e@H+}C_O^x2&en-ZUV(y1!6RRMj3;W7%!GM?ah18166k6SONUGV**ZCy zQyv^}Veubw+1{2BW-wt0Z%ymX!cim0exuXa>?f^pq15=f`rniqQ4AR0gxEF~7Dx@p z8B;CYl8#(Vh`sNe@y3U~t@0KcSlVxHKO_;XX@jo*i%;xDSATlsr1jY{VIv3>HqM|6 z+=18a$LZ-j#LF+XMh9vZbb>9|H|P9&h~(s*LF9_?VcNH8tu`6$ln*ck_~yS&Ai#T-LYTcb6cavuk8T zbZ~g3Kd&5zVg(@53xTdgtDtUwkp79jXEM&jYZp7SjGUaYKk8o8t=Q=Iqh3_w)PAcy z?*ybFWjE#7v*ffiGpT02$DCO!F!3hG#&c9HB6$0;)AKu-*Pl>#oJ~mFvr)GS}22rg{ldYi#{`->~P8s@hf7V zC2a1_sbURcVCt<$ad}d6Ly)NVsT0!nI_sB{jopE7em2$yzp_Cx4t0W@JacynAV z+hkHhFWg#9<2sUZ^HMe4ACboHx%Zwe8W|-)@z=hRXW$AiSl4N+a^+^am;WpDN$vf+ zrb;||H}AWK$?ezo^hl)SZML3(%%PIY@l!jEY8;oQ`jcug8kGwBFWcWdT8{S%Qr~82 zKz$Yshbfj&`U_#L-7R8tVR-f%>PBu>iSWG%XP@5%Q)9fB>GD4a;Kp-o*%HT+@|Rzf zV^APcAiD9wpLmlVQ>E`m#v2BPi0!P%OuG932tb?Sub6>K#?x6=T-@E$V?I$U?pX3= z3W#jd2C60eLQ5dUqN@)NZHELltFg+|>Zd&a3wxIY`QkB;)_%RSNx2V+jUcaF4kOWZy(*9AW8Jw~4j^Or zx=c|liQahFb*|8gs~t&*0faS=X^s_{sX}Whnpv4a;C??EcvehFAyHOz2 z_OQd%8?}m?9M@Jhro`Q62{i#bb0je%Q?IfsOhPjh)$#W{r)B(LcMg)eG^XRf%K4t< z{&dIds`1&6+hQ8G=M}SgSCO3jny~6G-lMGUpJV_!$=Jo@mSWMs@3swW5DM~R8cJc_ zP>L|`+(r%Da6oMjQfq;W1H)7Mb;82%-;2sRUKEU!N@V5_!~eAV zzw5$XP+Nfnv=2!*+~x)D`j{+i0f|gcf7y4O7y9a~>o_kdX{2bKFM2q6XEPoa;XuqS zIpulIlWM>M;F?3&4fj*ffknNVGENK6e${8O1U>lN(vnWb>wGX2KYdDN^La(xFW~qt zYmUYEC_9}g7Y`3NO#y1TW~D{!K)D?XeWA%4o}XVQd~Wz>$k}}q)pDAi%S|wvso@*{ z{_1#3U@ZspJze$_LL|V^Yc{TP_3f|e=2!2sj@9JETu1T4{$#&-wC1biQ5Lw}qq2AE zFu-aHYm2odHC1Jc<3B=PpYi#fuUXxhO{a@7>It1du3g|Q;4MPEgy7WU)Wd}jBXS9W zrfE~|;5M##>@a|fT6st7G%B|=WOVcv3(G2qP{NOBM}mnsu5)FB*N^bV+VtwGp+Smd zfaGgS{J67N_eN1ywr4JlFIWOj$ywN_>&ra$xseMtV%78eTG7|H0-vNNC7~ThzXw-~ z>JRjb-i^Mix;koi*~ju{Hfb61<;zH;t`#5V^f$h){mC+!Ds#VC-RgDCgzd^pk`&C& z8;skNntU&c7ZyyjCl&9X0uTQmBL3<>A6nureMH141Q4V^GlKACkn;ycXohN?03l2S zN+1@6PzIPFH^4;SVx<85ETkELj&ryBJ&Rl_04RWKxt4`qP`@C!hYAiuOv@MW`YOnd zTmW?GZ~2@KKm&~0yP@$C`wa!Z!TR_tuxap1uy-t(?1+(9BoeYS(zM$gx_|yEl>p7z zxdH+%<~n%cXC{mja9c>=nt(0#Nf%f~yEli;Soyu2sB1K3nH8GfkK;DyUIAWAhy=L< zWJYPzpA0AbULR<*A_)i1e|+pw4xZA~-YaYLY5%CvO9$YYz0Qj9T#0M8)cuwP3v2YN zs+V=kcc_?1wJb=Wm*w=&2s(L=774ak8Tms|QJq@7)@Ujf+Gl|7gYx2M9D8G^%;X%<7t+kk z*jhP^MPeQ2VFoT2&Ugf3Q@h3!3=*03#own+=9PDkg7Tz;Q9)7+mj#m5`E7p*tEu&Y zK@XMyP*L{;V`;pyw+Vw;YKjNrqKKJdAyP0^Z~p6Is)eBlLk&;;?39%YEgt(w=uUx7 z+b)j{JN?F)*Js$)M-czEy7BARN1`8zx6jP7EYW^{95T|y;>7+UhzaP5pC135HwFef z6_wAe?n#NcBF3NotMa|l&Ow8oO~zW;q2TpC+lzl}u~6y+FQRHZkCoqfA$TW{ei=%L zITl=o@Q&?GU2d^UA2#8GT|$fxw_V*PD*Z?Mh?EoCWf3UK$!rl{DI+U84de=wL=Zu^hKl+ar6{rI`Z*WQ6Rzq9I zc_g+AU*duvQXh2voY)lQ6^6Fzza`FS9+R%5|Iz?@ZGBPj7^O?FcG<56c4 zKP0t(MZPF`Dn>JT#ZPYUv#I_b)rw~)U{te3_!=i3WVKGm^pfH~b0uUvcZUyBDunnx zn(jYT<-b0{WN=D(;}?k;+g*=2&xhwP)CXNZEnWo^Gwv4@-_eR{Y6}d^*Xd94bPI71 zJB*76s_OEu{J)QWAqt`(>TS}9g!tj7fbj5I$7jenxc1BGuHf%l1$wlx$(o$)14&iU zKPr5%5lTs6n1b|=y0N9k^IyK;ci8~Mp~|)fCkjgRt?ItjN85XSc6O#u$H6eEThYq$ zL55h9EAnCVM2fu&qHgR#NL?Nh0#D(hI!SKR0r1U80M38s)r32DY@Y4nV^|Pv@*}QL zjynL61R^u3&tg!k(9q839hQQE5)(Pi;v$N6LG=tX@oUl_iU!|%nx*bDTiuzx3;JcP z{R_lS} zO=<=lTx}G|_xG8(WMjSZrCLP>{Jo!Me@pdE*`+R&`pO1GBGzNB1B|Y>6yFZc{xVoy z8P%|lkZtT~&$OB71hhys11Ezs;+_%>STMD;;;lyJw7_3?hDNz^u^|ZJ9K3U471g)U ze6g3!Ug10s-l#l3!b}qE{iZ0NvX%J6(^G)!!r}53mkq|Bte0x)EhObCadI{kZm0OH{C3NQ3m)p|9R*kt|NdwXG}Z`u-HYLl`S z*zE2&#(%q`*xM9JW@?aPVrJH=jnwjObwm(^_z;Y;vYH2Ot%{1vgbcDIkezVl6n3hL z7#^iyB?G-gcCZ$Oy2mwY5Co{OM zRu~kvfGA!d<+n9}RbLrG9?n}Zki%@7mAy>#^ncpjr#$WRl2HRlzAWF{+v8^R|7({S z@suZf0}Vm@4#KVyd036~c^_S-!8e-{u0sE@zFsax3q>Q7l!@(dm#~+b7-ueBjqo{~y#ypoOQJY?>})WTX5R^x&>-w{g+Ib4 z8mzy|5|&$vD{*#y?y#!sbZurrstR2sXl~{ql5c+gLd-})A}XfNl5c*CEqpY^o`iM{ z=MkzkHX_jWk4q|J#U{AYi7{XFk_Y%)X4^7~tB@~vTMOfVc-uA7+=px*p_Vr_NkrBC zi}tL(cY6_mi(ixv^HaOwe>hqxYn)AqqI&}Fj_p5xRwz*DUb?j0-Y(oi-PhO0#4H~f z!ClNIB;+6`_X;4y>1m(F9Rdi+FujkD{M@y@VG)t?>zKAecLUP6yp9}u`}zzzC~kMi zEb!dF-_fmf4i*hLcg*fdAo;6n1dgQu?g7V86xSmuh4Cq%YDpQOfBYW`)#60>9?+&y zO_$Yt_+aYa1*2SBr9?|qwPpu@3jU2c+wTlITATd=`J8;i@5op!aA{mlB%IO{Wbe6b z;^fb?KI7pryw^Qj=q=U|h%o_ZWHZ;3aQ=;HqV$W7w-LlQ9IPx1t(;s|8w2`m5nJtT zvRYrxB>Ts8i~jb!8XIi5*MhMoOs$3LBj%aK%NGEL>DDi@_KRwF!*X&gxtYbz;sBZ+ zT}ThNkWVq#K#U?3sMz1Ft>$Cpx; zK6P;xOh(Zz9CI1K*|+l~=vN<{cs+5RXoTN)Ly#`~CFds`TjxF`2O+Hg*Q~ll=nwf5 zGuHEk-9LW{!F!|4NhBlA`tWZ2sQ{xdbv8AT|4;-4PhmT{A(HRUdV5Oo4d<_YUJzai$|Mftb*i`QjaC(k$BAS_g|hrTy(h$&ZA=hXv;l?kSd~#O@f|wV-nMXeg z1R?oBi+dLx!M`lFMRwEZMfv|}ms2i9|I;n^MySF06mt}Qq*@kX#NC#72BuLGa^Ax12PmROfDBVSiVH!NY)1mXt!Xl#`HRZ~-oRcxZfRJnYX5fw zEn}?!n7;Hg$S9-v24QN9PoTa^E zV`p2~-)#(!g%}91 z-yhM#X-D=R#?`-9)|LXXv*U=ybU;LTaG4*Gnzov1GWY-4em`bvLlS=27knSR=;ajV zxM@DBYseh4xJJ*FM`fRDJb083BnnM7iCe?6-2qvCamgja;$}Rf5w?VjpUhRvM^+Hb z^+XVfnB~NLbBexx+UMfumyj{7ros^U=?fz2-+z>Za!Bf{=2>qo?d88Uk7`3u6jao& z-~pPg=b)(Am6=IbNdmVOq+__s(IGHC&3e4}h43YQrmboR*474&wcn0rRTy;}Kr?f4 zIu8PN^OJ)I^{j@`{GriuN)KHhX=|&tx(9hz0E8bN@s8GYgG!6R2Y|J>IP5=tyhC2q z-5zwXaz3Zhz+yBd{5pchIE4^~eKH;IMJ=x0(D|0IxV^Vkoy5CtI{Dv;lFhef?F844 zuxyaCpq4U&AhZm*sC9}a=ru!1%EOu06Rz@mvpD&vy%-?bZv6^2MzttP5AapVk~I6l zdYp+bT~FUi4apHw9<+q6^nCQP-KZQK3uLx2pMcGi<`wcsFCqsDk{JkNEX^5N{1wqaqeQt*B$<8B^U zc>W4h5Xuj0?xs9&m{k*fi-X{?ZUEbEj<*+zpx_v+-YH_W#-qbfHHK!?G?LJ#1K4QS zh3@x&X2UEtGdCv!&o0YDwwQHn7@6VCm2Vuoj==3I#|jp4;#3@x-~YGOl#8GA?f)TD zzEqPV^uBa%0P6<&q%u>UvSj3NOPuNNSE+^E9aq-I8X%pZuz*Bfc0@X(Jy{S32LZ=S z$PkP4GkprXtX>6x{8bR(=+XJ^eh{A*H!S^J%hR?~DZ9nF6RVK)2w%&?Xk0IOe{b_O z@n@U;T&?1lAoajJKI%-{0R0nT*S(uJQw+bkLmz+RzR-mvWYZ{<>6^=V&K!l(<*Np+ z-x(r`A{rYSI^+{LA&v(0e)QS%acrlAq+*u`1B*?tDV9F``Xxh!ees5d&2)6gzor;b zh;=wQz^N>O+>mzt{{B#CJc)>t_dt!bWxR)pbK*)V(9%qB$N3)bLw^3Uj!vQ5i+Poh zN(z>cAJ<%$`X-|!*e_*2F<;__)KaSv0of%)%E4nQ0Yc3a2`rKh?O@xUtCZ=zrNFc* zYw?JvR9E{)2uNo~aY)C_$n|Q7*{qLNw6`o4V@B8`np-Yg5BI69T@k+mzdMW=*63k| zGD5Qb==Oid>J;niD341MJMsK`jG<;wrB+nXs*o13jHK5hk^1)e0?xl1y7U*#M_r3m zY423)M@kvaePkey{-7Yc-RYr8;N}Lf2~2H@3gf+?j=5qBAXcfo3cXw@ z!;!NZ$0c7GS9in4hp+#DC*@o}Q*zJ{6_`jD2k1@V;*Hp9P#SiB9q(51Iow)Y5rCFc z5kkNKxbg7FX_nG&#BTQEVJ|J^N_zWf9+csq%WS?^m6!bZ`E#x3<7pEAWjIfrP*uUG z+Fd8y)!WN?d&cLu8+7;ung!P1UhbN1VZjrFgLubakEIpfuNJ>YT_~T$FhUqn@$q8^ zB$YAf|A_gJBD03}@MDZu|Rj>iXZ2ztG#sE}4xPA@zR0gWLc>BXD=kHs|NEltAcgW_mihas3nVNsuDQL~TRPQl+z%_%|Zx zPvP1D#GS-Lv#!34lj(QqZnagUriKnWdcOJiXheR`*RKg3O0KvxDcG5vY7W`=Eh?E^ zY-z$?CMFh=$K_gDLQDFSJ}q@GBxuOMe7LTmp&7`z#GomZ`+9~l66_!<;>;u~2%{8` zI-8B9lp2ucei%`~w0cML;$5g0wQIB~vF)i&YfeJ59NhTP9PagG3`2Tzi&&=jR#xi~ zJE8y~Z56TgM1T#4{Nc}(XE(zMnJC=d6_W1zM1a*rXQD9qB2>$G-sya|)jFDSEA$w| zkemV^gW0@aLMo#Ak~FdI>-cy(^QF(vpF3V3R_48VQ`m2=(Mazz{(=hhdiCXE5CtIV zqgzX^a52Zg^J{?0C`E1y-EP8_zwZq)95*8{^VzofQN;I@e1U8= zPNS#w03L$6`c>#h2 zhVq3C2z`l2ex^n#-6i}xX_y&l&!} zg^ZIf=gbz~h$U>BBK)z7PkH>mKP9ytLTTn>OMBodlz$kN2P-x~3J8ilg-Etw!*L!_ zf)&7Z3n}j#Kh-E&nCIz&($Jk^?J!sV!&klE(hBM)r}i{o@WK6SiVcdW8}Uq3r$Vt3&fc9X@-;FGt#whbFqVg<#1~v5D?} zNiubvo|F4<6Xi=%FHq2N_YKBD1;W>8ufdc}=ztqDKSnH8W)c zW8<$?iSLqYzkT~QG+LeJ{;N9iK%^yefLfMLI+yxcWn!qmJcpMG1~vTvjZ5|WAd|?d z=AuH=J4G`1!Ld24H*1@xe$K{mTQSj$47kwcVZ|XzZ{T)@#_}XyPy1ejE#@do7c3gU z{hES5s#k)(&m58R{(Em}&g$-RP;#<$Ni%hsO!VY}>75AgYp{@NF*FPbQ80v_+!8m# zL3-`?x2wY_(YyAl6IR>bOqINP44;0mVlIh)@p>%ah+)J5K|v!YCoh+4HQu}3Wj-wF zRIS)naN@awcxACGHF>V5eJAVx&o`OkBgO6~F(gFB#3I_;OM)SAe?}VVUhTQi^-6k` zetEoMOJY{@_u3(eTjC)n@LNveSxie%*Z~AE>oG3G^-4 z`-~U5&j@pyFFu1v2+mqjAP?Lh1<&xtM0wT%Bs;sWD+7arUtaH|HzIGl=S#lX8Wb)` zmv>RjX9@Uneobbt+)l5jr}8?&cC31+?|^^ZiYirGg#M<_qa)>EI{!zJ@85qH@wto< z$8R?!1%ijpW(dgmBzrrr>{8|RZ$dSADg;wpBXu04KRjt)=>C3YrSzBmzb;%sEJPA} zD=6%>FK4DJP>8CiM7S+$FnCOX;L5{HL^`K`d;VjC$vA*>ABOHQZ=0U&H5=} z{P2rDu4L5h&xaMfTBS=~kM>#gg~-qmz50T*PCm=;w=|`>q%+M=kx&p7F>zuH80f&I zWnPC%(D^-krX#8Pf%mCd-^aHUfVm_`Jgmag4||A#0~{V<3uB5&rn6N z(}M@MgYxpQuORMX`x>|-o*BKnT!NFkPIdIf)8A|N9TKOvy_-014$oO}gK#Wc3O zKw^o3onuK``>6cTJvaNS#?16)WZRL&4w{cv)YOx-YK~BxN)0wkK3VIDV>v16>EZ;h z)jjKyd`&Kg6$#;F-CVm|h+iG)O%rZ5DAw-H0lmWX?{}24OKK-xX}&S;N{%ie9w}q> z9i8wb=>BZAT;rkn4I$j6EB`HdJTT|-qKc|3?cU{-|d>u_%$F^~j(7JUbRi zSXsF`BZJI;Z^)z=B+?<@)uAXRU)$0%+uM&Yk5Kvv=`9F*X0{+T+$-?FDse$!wttBE z{$rS8*AF>NnszqfxjAODU6(yeG1b+HWqZ3PGwv??$$8p|`-{`L-V#OO41wLfXKAsO zrIv>RUXbMR`5ykQ5~P0Lr5l{hy36z^NA%|7a?#PoH5<>PkLdMhXesA>^C94|r*UzS z-}T!wBwZ}jU@?AJ^kCXPq!z|#{*_ICYihC!*i`MX(F!cb|vFfIp<}rKP}cs zBI-XqJN6bA-&9N{oSE@cX6N+&S@WUs<6Nl!Krs>n`|bDdbM!n`yEJGiQGAr86fElB+78@N+2)!uN8XxIP9L!hX5U-=6R{H(JTmm1Wt5oZBc&8{O- zV6~Zosh6Y($9RtBV^W@ubJFjn7ItG*U+DU>uE%PytP_7>A=|%y8nv>zI+U-QX!s5N z?8E`nX3^h2Z?P}yaV$#`GV)xo&D1un=nOj6RsH$7xxVb^dwF<+%cZo^3*36ePj93J ztVuZUeoeI3wf|0b{WvE~1Pu+0)22_KN@!;DjQIKCdK`B;J99sH5HbXXB-Ck};ZdfC zz0lo~5~LYBOxQcyEp@d~!L0kp8DsoOp*vG!ww72~iwUJ=Jf zyJFW63l%wLgFh0R$PmBcUwyhC`Rq3}gm@*q?Eioo9id~^p8YX>Ze?e&mNSyOuP6Y& z(75fp=*yjNkw!rUH@d28c4DYSRpjxrANkZFg!5@=!!e;Ld4!scjt+Z2Wp6qXZY{bc zm{GJ^Uhb~6Io>l~krr{ki;$8X886MTazDa(x*X^h@c$6@)^S~J%lr7Ir4*$>kdPK> z5s;J)X;E55T9A^K5CjPUQKY0h4Ui541eESpx{+@9%^N-Ec<%lDzIXq1U-uyFz1FOm zXP$XxR_O|RpxT48XRViAVUX;jBbc(X%K+USsSmyV zgp3Hw**dyZl6lEHNPBdfaW3&w@pX$;enyyDl=>A@cP1Xog$a6N(j=IBxD|! zUzd{;G0heG9jw*WjpRp>q?LDp*e5d3u;a1S82ES}+L;T(&$o30N%zdQToTo`viU~4o_%XdB|Pn+Gi zpUl;1kLz~USO{qsR=!KVAF-6wC_hVhO*K-7fdENcTbGr?KmaLq{|hO}e?XENdu0G1 zwa0gOe|1tsn%TJY13w;bPmR&rMP1{xwAk}n#fRQ#-ug<)45XMCK)`B&>-0VwB{jo3 z(YeNdn3lyThaN*rIXn~(anQ;d_liffl6W>3cB1=|5DUv*QPCom-1GL{XV1RbjaPzO znf~!3KJi@3{^V41n&hLQd)60v^I|fc<{Q3RNqE3?!Ws?NZ-ayHJonyH>B)h1A1<}$ z>KhnPy9oBLd-G;n@0~Bz8lwxzS>1x}rDeu2OW@}0cVnePhTi*E@9=$$b8b4Bdr8rL zea46@jI2N8M?Ez~X+ulP<7Y49_nAui`c=tvdY7D>rf&{w!f61jo|^=-w(ei$*uyk)6yc`Z$J->hu*5G3M z=ORV7sOUaeAPx&my+&5*_|0hi8U;=RY+CI@_dhEo2$C7L?zSj*jgCw9LxYHjRW3FL zV%^Mdq{`8eyfU|F7Z-Ao*eRdWpi*4!%hL^mPd(1=TLlTcclmb~2FWGtK=S7|^v*0S zvryv_5`L(!B^*85eNnO0d)4`ci&RdR5gO8 z3AvbOZr=^8mVs?HgWCIcjmUMp#6rWL9$ zh0Rv9p+LUlk~(UJ$P3n;57zoJ_+(3QoEIUQ+ZVXlNio1p82+8#I|6cycTtIR^ugrC zZTD(b${LC^tz_1syww^V?)=!uTmI(f872o&F_xZ#B#t}Q*h==4XueB8Jph4Alm^Um zx_ae3b#%fH@|LMyS6A3EHjY&D37NKdIDC5S)o%H8NNZd_lE8dYijD|gCx#%QvGzFj zBX2w1Zh1q_mn-+b@RvoURAY+FAqIA7OWf8q+4^gQFQik9Y7F7ic@yAVT)7h8+^okd zLOircNlmS^8Mc5G6}7lLD&Cy+T;PUe8jK}Wrd!W_@dAq)CNJ+yWaWz%E?rlprWWw0 zOTeE}G$>F%7215-cBBlCfsAZXn*WO5*xh%grluLezVg?vn=g-u&ds%myFd6aTs57p z6wv4ZLr$Js!;0h8F*8eq&Skg&X${w&$u!0L!fXy!rqy6BvAMxsCN8d_!9mS5On$tm z(?JJq$)WHn>8z~Ux}?(j`ezv#4m)PW?QU-!9WHZB{9JMM9|~b9qhz{*7c<0-)Dp9w zz*NQG;0uNgs|(Ol#z?zF*k*~)8FopPpb1V&bzY<4h}A={R9~zAIN$FbgUhHD!msc& zMBmoR>S~G&E`otLzE>IP#B-8_)O3hB^{cdjl~Qjxh4k;!X;3j>Sd$>HkYCWk@;e{$ zcV@b!faPPH;9Y=yd+a?%FYpor6R8RDJaB z(MIq1r^kd>JY4X{!868%6RmFB0m8YY!{*Z-Q0l;9!1&XR5+R@&NK7G8CrVaz!a7a= z0{!%hllf&tWwO$eeuB$}h8SaGzWs%7-bg-|tiNY!dR@;w;cOV~O%+ zX|n-IJ(Am%*odx(*GMv9C(?KgLqnt5G(cx%rpVN2#z?BO#ZCJ-_?~d>aW?%pv#>eW zEh@AF5G@}ck3qru-o3W;)OYuKHgu~95UMtLCyUwg^~9OJH`P|PyH5|#5OF(?eU6xb zdo?3q;JIcA0~{4HIido!>8r!RjU-xCyeS)F8SG@5i;Wh7u#Zm`H+nuf zwkS11a*r^L2@NwPSRenSADZ_S?P4GZTK{i?AXJCd^~kd(C1smM70=%OV_rU|z$V|r zgAEserZoo-e1*{A1`Nm(-9PxUEnvYZu^HK4ZaDxTD6goWVALxR6bJZxE@& zj1i=c;cpC}ZrENaoG+k*UZQ5fs{Tg=Wo2#h(QPQN zY2><=@NBg>HPyg$%BHEMG18sYNTIuW9otekC5j_^CT4V<|z%0Zc-C4H`s- zfBaaO6!^Zs!@9XlGVFtq7dC zQQoo*e|ypAwE6DVA#qJjjg1M-1~>X*A1n?)xT^ISu5|qYZQ%ViY9xB^JqR$618aK0 zBtJlPGDnK4qwRUP!6Ev~OC#@`tk%RldL?Sb$Zs}=&-msf?`-; zhrqCG2*bvyCc5eVN59_rJvj;_@Ee1Rh}XtSptJcWehJ@BMDe`9t=J71FqBdaRyB>} z>3IxfyUPU2HKSNG3{&R6VE+^xYk<0$nWS^Rj=kf(cT);Ta9Zz_rG7!yn2AC%WjKhO@@g#e--=jd`H;bu=1(tM3kmDU`<(QD>37-%}YhoIHny<`14?=61nV}=9)3WTBuG2V3? zMHx`*hPA!I-?@ZrcZiT`mrF@Fo5;zN?_sihPF4fRqXo+}HL9bgd>*)E4asJ}xY&b` zvB2jq9MkVWL%;>!k~N)kVUCm!cnG<-`Mr~PSrS2nJnwR`xMyL_kWFl{>z_=Lk2v<> zW#IuH;;_I#r&l6+kM>x#QXUeZ#=c4&9Y^`F^UZ zy-`g9s~rY1OkGHFo#Vz?N)x-Tni>v)eE`)sr`~4&3^;YJ%WqQF04|j#583_clzcMr zrWWsJmY~h~c2)617r!?rV|nhx%V$Jgh^e;h-Xm-&#;t)Gf9cDQzBDw?C52h1!ioz1 zOyEXskrVw=4vr_J$=L?Vf&E<7>h=Y%_J5}V-}Be&-}Vc69j1MFBuaawp-0tGK)@_h zb*svSM|O%72g6%7Cw8&_UB`zHn`P4psfCJ@Jhry2(4P8M_$n1kqaD|G?A4#Q3SPXZ zgMcscV4;@wbdH^hg2EIqTr|Q(Yd`O|w4TyYJ!SBH!Xz>3y+P%}s!Ht7Uu-9L@zd`w z4xBRbSi#cMi-S}I1AR&ZZ+8C89iwcHfc`%7oS~HrIZ;NbKeB^d$PUcg+L8~7=Nj$C z2?_LJF4NUUrE7=J^gI_>f^)65%FEaCKIT?=PLGXYZmeo$^S-y<*`9o9bi4Y}y~)kR zc_|;h9OH71r-3?5cjJ8t2@S9?keF`_+=Sd67T#}0mADaaGzo|GqSC^)H(wukvfRW# zXpBbb`Kt76T2gl-Gb zyG`b+{XhymD{`7oEM$!lb-%KfKs2%*sdjMq^D2QLzrm6v@oRxImeCMU2`kVXFUTeb zT$)Kb-z|Bd&GiQYS+|A@Jn;khOV-mm&nM?>;1D1ay0_0{(@~&W7AygvOuQzMlA}*d zz?oNLZTe|iDTDv+^=pCpxI^Y_5!~u2Ltp`fEpycx9Hx|6*&0o%pHfd3TleRI$%-F1 zPC;OD(2Hrqn)C4sC|uj1QGEL5PQbIct=Ps$x%Oeb-{w!7Id2pTfSwYSFsBy1Di=hEifEZnUW3XnVzAj^5$jw>Zt5=fKR0dPL`r55~9@_O?-zHHp}w^IL{r zceQScX*=HKQoRz5y)EavU8S}|@^4F)mH()W%$_vif9=}owKVkMrQuvXb?imwV%$Ee zC;Z9E_9L)Q|G~M#Hb(4dnwIk|XG|(&DoAP1pQ1n-ia(#% zfDj`QEYV$yAPu+J{GLjQiJt07CJKx{ht6MuR(r6Q*OkILBIKeyiRkBXb!w(^Akjd+FvVr%5u2*u!|$rvn3Pb2gXA zF1fBN&tuSTpX5BIpEdNUn7Sw{C zr}X4pW-xqFpCWzYxH99dt-FPCQMnw%kKJ~h;jWjm&Wfy;beVMmm zEHJHzpX1`i?X}jU*{P`_$JwJNCNYAU>$$RZPpFYV{lXuO&Bwdb*74TUb*DtRDJICc{&C>6C&?f!tr_pvUlj zJPfyHt7rY*oAZ0EE^mU5HL6V~(PfBO{ISCx5h?8@LM6dsA)oWg{Ugnt)o#p?3S1UdUlf?QHeHszpDDTT6MCwD= zbl=>*CR3MaD{eMgYjdl8X{z~r1b!C=jL19&xP{;i``%98v5|&!jh>CI5!z0iRwvXK zepo`Wm1Nr&OS34-)pBmrX1LtMWFar_TbT=wX~+3Wv@?h&AC}=G43LB`IQgQjn zG`;znmk&!s4D$w6$>4;_lrywnj)<%?@+Yy}=&f%*b}{ z+)7T7JLMkHW^x;;ttvzT{YmULUB~iu3QU$(QqWm z#?89RFNOw*GT=srT)Ic%Svl2uWVV93!vBlfwxt0E?!lj~;QV_^`9Tg{BmhrRUEJnauec_9M>3 zM7()trW#;SalLj*lePR;O5d6g3bM#s<%-w22z%n%=%*Gfg5P6ngbuSA)!Eihyb zz4?Xa@=qZq@1<{m7FSJ1*yIu?svnA~&xFC{SUX!aW`Tap#2CnuXLoA-1(T z##?`wm2nO>G8b8smUa*LhdV<>n5%2lhad5;^Z!UKX3FO-zLrP*liRJG;b>xl%V}u9 zcJRGGKCY|46{<4&cE7rY^W8(0Oe$mDDtC$%!)P~!gl-Xb2DA;%t;oACXHLF2WAQ&~ zbLZVVcC{+w#D+^$&zWsb4nOX|eq@@ACV-z_D47*;t=xi=sR3&8GnwbSu6&G_61-Di zx;sY(6_cb7q8KA5ZrzU&_v-lmffn>5^DN~cTyQ+nWU+WwjDg|JJj-D-qD;l#FkD}6 z-yG{27kSYOI4(p%T2jk8g8ju8;Ao+im|IZr!987#)5VoAFl@AGW127q{bt4HCvqbX z@J&+<5w+glWiY5_eWUM9VVAZbt0kd7#j4j**)*871;t%Yr~@c`V%-VW|3nztEdL*= zgW0=J?9&lvMXC55&AswNwoytENKu4zu?)GXVa*1p{)@)JDzN-vhzO@94o8VPY421 z6;V!1bPL@N^CAE-I_e_csGiCqGH>EHk*|@BQXr1PXr5_F2sK}&)ys2pg8OHcGxz8;kXy zWBbul9FCprHf!)JWx4)xeWFpcayGkA@!Wg{|30dA0!>=Z8{nN9%|@#c#STzmHo!DG zmnqNn%GsB1(GY1HcB;@u7og>D-Lg8L(C}D09CP$4gCquGV0yYs2a5F5A092-{c8F~ zMloUi#g*TAMX)~G`QMpB=u>K5|M&Kj?)-&;Px^lQMq{WX?bN< zKn6d~DI4Pl431%EOI7{h-#_KOZoR3eQLUoh*neNjSW?7&n&7)ZZ zrk0Y7kL~BU^dIhvRvYp4$EJ_1s!-*2YTDg9jEDUeotX60NGPFo@+;fWdoF+)Aky%V z>*>DNVGqNlsc*IE%UzDm75_ZFq_@UA3jt~56*k~jSOZ|*R3>U!Y-l?>o#E6PKePm= z^lqc0YA;y%T3N&@yXDUufxyJe+S*Pq3G{m99M%x4%LaWByV;D_M)cm2{p6v^lmCIP zEGp*`F2-64vyWJG&*Q=J&Wk)h3#>j9S@<-DXF zmZ5@S7sqBcUhTwD?B%6XUq23&Q#jZY(L!s@gw%&JE6?IA6M0&{tB4aIbVPy51jq%> z!O-y|6r^OzFK@-l)}n-H_m39(u|W0k@*)j$ zt3_wM##;-q3^nW9=o2($egw#8l$)t!`zJNIWn`2`8_^Rq6@}Oy*Oz&vew-67iokYL zM3(1sN=q*OhYU%A82=Tg>0P1|R9u+ok~)tHuo(=#qAiS}Y(ZidT!{uZGIOv|_8 zG5ShSft0j=f!4e91OL^E2ls%(mOkk*HWhL4b&<7^j*&ZUE&bjqev}y(*V&PN^kpwl-?KMYiR} zQMc#hP)>&`n@LT8U|5y=R;kBMRzScSgz2u5LM21P%hV^f(1Z(9unToDY|*2$W))%H zx391Ki0_#WtkeDO-liiTvf3EYJWf+0k{4fuxSX*l?_ zh1FV-tRohzI@wy3Ma;Lq21LbAXma_#f6RsoF|o1!pNEBWkK#w_wkeR>8zxey|bz53QRG;)z$$z20y=~l}qLk19UAya=@ z;*C4kyF~jLwOk5Go^^FCLTecC0nqvEuyXrbnt~Vu{XDNSNV|;kfzXI~L8_R5Po{jD zD#QPn%vN-ueFjV{&@=slbm{+p*%-h6^&jp;^IG6v*EbZ`3!*94e0_UTj16z;$C zG5!G%i26XO)aQ)r{&oRK3mz=$svAMJ3)J$?pOPgzBfYf0N*64o=%iSl>9>}p4sue+QK7=HWzxL6XjHn0xlEi$1DSaL<%4?Z#IV6c<^sxc(?y>2w3nm z0{oIMG72#cWKlzHkan|4hh$kBBlb8knKJwrHIr1xWN&>cdin%S4b za9s|LV9!1DhJ$87w0nc^fyfddK<0|yu+!>dJnZIi1%)kS4DW63jetmK4f{;$NN9%p zf9AaIayf!Dp81?gTleRjbf^`DYD)=_tjM$c4X<|l1gxgsFl~0KHja!WK(&eTk~N&M z%s_oMjfNjT=7)yjb&Gj34PObHM1(t0X0V|OCACkD0PDbwE`8}rnSgnvW>1$t1~r$} zuRPA8A?dWA$|d6G!NI99{fSZGbD@I&orm$4b|!uEnA|YQ!?gH3!8sw~++pFCarp6; zZ&SR-gC+ff@pWaZP1nMqU)7*4Ax&}`YU;F=+$B;@S^?V&l?l)9vg1X3*&gE8(wXjD z2#%Tf4NA^KBF{=8`Q}uRCs81qz(`8I4+$giYH?8Zdn7!kuI5DtwwN*7B>z z#XQSxLE%*|>ak5{4_@2-=x~;+dOOf`kYRAM{L1HPl`}Gu5p##w-cb5pUtVUn|4wX6 z3xgYJ^`x;bg4;nXU^a79rU5&@hA&N|JT~<7YEkoxi(B1k(hO7h*l0 z-)pCzBjp@H!Nd)bu4Y)j)O3sjNZT8;ws&X}e6NP0qTW|o=?nsn56M2Yb`ocNI5cD7 z^5s5gZplqy*!%oscmg7ZuCLiR=!t4sM=sIPKz(5kukvz=A@6_JVA4+#;ic}@yflX5 z;cZdYO-VZQ%I0D41c7js^_rh-K||>&qJ~Th5tA$SJl`2#&du$IhpXN=;P}lFe=asm zGe#udvYF+2ejnsSmo2l7v!Bt3ZsQMj#)xyC*7N)#%40Y9jH#3I2sF}+vitd010Ikx zWT_V#mOI`s88jrP!5=x#X?P`6R87s?t;uGt#G-SqxObP7j2(ph7X5 znf}DHypDl%!8icOqZK$&LgM6UA1PdZ{JRA=<#B;;8>hdzE5Iw-ob&dA0Avr>Hca0V z9Sg%yT&U2FQvN0GOPBVqb5I#6De`^^U7Kr5eiabl@bF=2eIanUC(ri9`F6P6PK`Jd z$|5DzJv}KvC-#t|*C_kS6eu>UJ@rDri2S2gJ1caCf{42pXz^-Vk6Wm*% z=sm2$k_bg(4a-KO391OGaZaYDlkPVJ8rxGPfrah04Ez|X^YWwCmZQ_6p^kHc=*qxI zwS%3VubXR*7G)O!Ts+8>9A}i(Q6@;Sh5em5Y_G7|(|{E%e$CzW?&H?5iG}6aj%(W0jX^!#=(l+I7c}XdsJalcXamQ)utu z1XS2|FiW_#g1&`@zQdjA!Fy6Sv*g}jtXShPfO<#_W>@J>gz2ZPHKgavDaT#P_iNIx zOo=%IVhPj}B0Dbw*=uNjZ4Wy?o5y_qt=%C_uQe6h2h4apL7bvjCHvVfT=)j#Y59Nc zVVPojPF9x0X@#6p<)qI9hLX*ei1&ab6de${Y*a6W(E1f9rI{wj3*g6Kt}o8p|B%vR z?CdNGa+6A?e1%rq^kP|C`_+@DBNJm|tTxE&+ja3crw%=g#^P+<)_cBU=BViC=6v0l$cneT z0Yh-hBzYtAp8iD+j;`*FLXPQgF}2o(LHeKc%o)R$AS z7Wp1k<|4z#1j+@}LlN2&+)jy@TN^8xX&PxLe4J~)!OF?0ovo#q{#&65K$9B3GHc*nzYNrmZGF=T=Mrf3PwK@=Huu$Ll@kuXw6$Bx;gV zDBzzA#XS*p<2}8{tXmKjxniE_kCn=dG9}}##?xloOSfLi4 zn=GIF4iB<@j_wpear&0p&U{%Jb-MwA#CD_pGvelyWOlxk)p4V5WkeD9v?^tEy|{qh;F`4I#-%fxUZhPTuziE|b0W3JQ9 z8Ni*&tQ^a{-m48j<%W%aL}PW8iin*2+r!Y%gLxoSHc|xcmAjv$zND7i_dL3^xz+aa z`1rE;<7c8a@j8x04`96%ZTkpoLj%Du*EbG25$|W2K{EYqi?_Nc5y1luGK6z89n$rIG#o(>dQYy^@x{ywC(zs$;UJtHTFFIUGaX{10WFIrRm!;z&^D9mE~vkXI3^OTa$ zq&sJeEeq-g!OJgnZxmIy@+nl-!Ym}1Je>v=IyybP$VsPu3AqZnhY(^?sJ z_^bH?)M`RzEtuu9S+*pFj`@O!?P}NX-ws3lqhn3_Eu>8g8_9#KA@<_qU%S2X?#xT4 zp)4B#DLOQgdG1~Y@o2~};=S|}%E3KvC)d`?yp9H@4p6`uTLlkGPuWdL!91>Q*V2WH^=5HEwmDL-%RuN4)o3 zB*)Rv%NhfAEVhEz}HgyB6 z;KcPXf^1Lbm*iy0Ul8OGvz82mjw)epN&*{1A`!$o^z?}U=W@Ot60KQ5-F$KIW!3&F zN>A~f-unFa)+SBzOEJt zT*)OX>G_Mb4@xuHm^*dh!hl6L2O%&@$9)uK0Reo}!~a=TN!hdE7mWKi8n0-V>J22J zvSs6uEGxYn8xzz1Vy?XA_;8K+XD>CLef+QD2Y8F0IY*ZHu#Mho2JdW80AIBB6gJ`( zEpuP#$x^FX>qYqq$4!vQgFX~$KWrcbci;O|ao z3vP{H6aBa1tlhi{1ZUrM@6&PO(h(W>Es=SO-ECPj@^r98cZ04fb17{S$mMe}B9m9B zWoq`H?bcI!*@B3BSX_-g%oVCuwxicQTfa9%NK7FHziD*6lfRVrb#B<$7vVlYn82cP z?NGzKbLPh_8Z}i`pCiJMVjRd+@bv5Y?UgUd={4E6G$wTv2Oiy8ja|;vt`OwTYuAM*6vOhjf zF@IWtPfR2t_F}*VO_7vi2Yg*d2J6xRAbp;k`}~ca)Sc0zV-dk4v}OC+Q++p4sLlJ$ z@phv0gENb44lBI@tOja-+sk1GQD7+3N?m0VxEZ%TIhj|Sxmox&wT3I~f# z`{fa~k(+4Cm=Zv!HF~$5H3jJ^6I09>YLAkCp}ENAvXvm%o7|3n!?~M#t^a~^{6?gj z-$}4!q}$cg)}0LqkWwLkH01MZYy`kmdU`th3&m_LGK@9?ec^;xVwN~D1Df~J1XMLl%FX6pC>TK9W**^ZJ~^b(0ITX zbQdaUA=Cd>_aDeRtVKbaE^vr>)Bhm5`tIG^Grfhq`FhzQW{``6XaFyuf9<=?eqY~> zw_YY(!1T7JMT-5kUGy}UH<#DBLXBJ_aZt1)#EKzA!o-85{iK=M={cLthS6ut9{}<$QtRh6H^y^4YGkpSu z4hEtK9#3sW@VrD@|3?IgX3v?3C+U5{641=abwSF4|BUtSS7It=wG&BY+LwQ>WB zLPXt#_csS|r?Ps%r3BgiBbHabJ@ju_H{@v9JvmktEtuKTVvw3D2x%j#{dU9Tolf;m zMv1K9f2_3i>jy4X^+W#`7fg(x4tpfph){^^l3zjgau);Bq?Mdp#kX(6&tFBdY^n7; zd-ndxH$&*KbndA81LXY&!^;=XXNGRj>7lLcqxnm4qtT^HsAP;9*?=H5y*M-AH=W+iS!t}v0v29pti(ps?{E~SWf?Oqxg?|SzdOT$%#~l@;cjq7JzV}Gb4%nT| zGy!QY$npuOFa4ZO)TC$~uFzRum~AUBE~{{F?dwZ|j?eJln(=T(aNsb>4zAcGA>w{n zW&8_T@fiJTExvd6?vDwRb2L>?JQ+VENiIRC0JKJ|QKsqTiMDlnBp&+V`v#rgzk7#^ zr<+H6;UMDhn$LZK3Djm#3?WJ8R&;eId?Z4Y3b1fuL(se%w)>11?~icHXqEpQO@TbYyfSYXb_S8flj0eRxf3o;-pXECTu__l`wH-miCYXB`A z+$a3n*68I_?ro5Hw(YLsK;6d}*5+mT9E&)%U%k`n&cnv{AfbTe_x_LNCt&>t5>Y_& zXu3u_Z_?}6+=7CF#1y`tp9F_(KHQVG&rwf{S|Tpjn@LC($xKN>52Zqkvm}Y(kGMG* z>j&m8*GN4CJyK#0CI{XFEN)3`2N)gi*6Q zphq@AYm`$&(D{x&OQMxegj2Vw8r=qZ+~KO812iufd@)?PqIKOU=qIHTY9_?cJq@Nh!H0-?j?S4I-%rId#{s5yyHzpVr9__s<# z68vS~=+rVO@L&vQ>W|+eQB|7WApc-VqOi=K7j9cqq06%*CtYgCe$Rbz$ z%AtM&GEHf9_G?xPW-$Hxu1Qc;rzE)JZYX0RkYX3;!Z(#x` zGo+yq>0|XpSt3fhO5>kwdOA;5Y<{NwlNbw&^1jiZm5Fy!Z?ek>kw#AZqHgNorS-abrNsy_iz-P{M z`@H#NO+tE)aDOok)?Hp74j;q=04e@x64iR*1v4q4!2G~ib*u=2jP!fU1KpQEpZ6;% zCT4lczd-$Ky-~{mczBS>%&Z`^gxd3t&H{u_Rw7VeqOWi2lS3H(eSn5wMcVw~l(7{M za}^E-q?DH4?meYcl6n@YO~Qqjf)w#VbST3K%-hl_f*9UbAGis98?FJ3>6@tz6lH z29~mA%I}0X*+AIttL>E7LhZjr#3KbmGE-Gs_{rB1Xem z^Jt_>v{#@!Q;_-f(&KRWG1PMg9ge45&T>?G>9q@Z>J61=72nmgQe4K^f{qVRY@<5u&&0=atZWB+g$1MaN7hYL#m>+7G18r8_)^PPsf<@4J9r1@HvUY?9Z5sLf;CK%I% zH_0))zl5zds_VIreEUWKl+Fp$yI?sICe-R>;zI2ow!RH2gGw2%f=ep9fb99r!3359%hqryigQv zWr+QZ)D8@+w!Cr-t%3eZae8_`>Mp4JlLo2$8eqdG#(<4f($C*U=$3GOB)B;~p%Wuc zb2*9n{VsF`k*&`7kE|5Gs?$kam-vJ^Lpdu}wPR}ZIX*o=I5cTv!^cU|WyF}b_V_b? zeMdEXM@H#24_!mH!82-1(+&Fq|8iLHv*572w^`M0+>n3sxvmZ_IG{l!t}hIe3$2X? zSj*AcuZHgT&SC6*4B^=6GR>aU*h{~jr;)vWCD{B7hIh8+m+bUTZ zzF|pW!7eTyW&fhZyZ-({i61Z`T1^^2JP*?FY)18xbj8utm5SDJ{O#wX?9u zPB1&YV{=fdVT9rR_H7=UrmWu0o0o<9<>YK{AN&a|@|Kn-1&l!ev(RhwP{H$HLlP*H zR>F8eljL{%b%ely%OCE6JrdJ+yx5C;^8s%Hfzy=`G0+(| z(=CbjvV>&V^G=j)y(U&9#BkITPV~zQ#+v+PeB>bYbGgsNG_n~QUow42^8R3@Ff&OV z(?|Xb3T3F1`1|`qx)OslL>JNEj8&S}-Kb9Z85YKOk~ZR@Z+5fB*Yr)L{L++^kA7yS zLqKoyN^E#*td4?!3`z{}N9Cj5Rw@CmSDByo668FUj;2g~y!bFxYqo;%>B(sOzK4!Y zW|A(?j6cHiq8`+tf#;9N>Z?9nL3Va~P{BWWVreDo`G_r3<;+z!p`oeb88WZ1ca#Z2 z)&uD;tY%m+m5Wi%&pU=cl1lvqY=>kJ;w* z@&4I6;=;SWs!Ia~bvlJV(0na0{xKocXQ=T04K-w)PC;agK=n`}wdn=BjiCl_APRNv z?r?0ebm|DTGMrzQ5PQBtF;UH5*B8&2Bo{1tC1FKm9o z;qEwE|Hbf0>|aQNj@}pue-mv@JMAa-pltE@dyiGmX&p>=Vaay*UcH0v%Mf+%gi*N| z)C3+%ue53hUAjt=Z#b^*`0(NDkJFx2>6qwG4t2b5|J0HhOm43_NIA02cI>1iI|<)) z{^M{_WoIhc=fTiJ9=f7ko0y@ur;a;bQ0;|C8--;qZRhzp6dJfNd{|U@1`Ayo7xugC zir&S-{fCX0)+c!XG{sOkaH@4qDFh|EP(At`tuiESY;11dz71ERJgi!2uFgsrPbm+b z6rI`+ACEpjW)cmOPj^P0om;I@e|m?()U#ZCo!WvqGL~K7hUI(3^fRdl@;H4gXLV>O zR8Hh+!|Lwv?`*VrH@xPQ(cOW zNI8vgPwm1-J!ZV!IIVub%r5M5Zv7QYaYY0bn}D|E>n>|;c2Ze1B(1h{wFw|K*cT;+ z8S55HueLbP&ILYfL`Dz8OC%f0LqsC?yAn^X73AS;pUZ}fHS#xlkN(g(rDdasK{sYW@B8a%wCb0LQoSU31S$jk0z z0wtf6L0Y(dUgQ|j%b5o(0d!yL2drh8j%g#*FP?vU790pfiQx5s9i55_7cud zJZikH7yd8rBB-$F)tOK5n}vGop=8UlY7RlePx{{&oLX6ZG4 zA9D2CV;p@9c4vIxU#{)zd>IU_E)$g8mw?la0Rj1qrqjWt&aDnAGEc7Wf1FIDO&&gO zZ}18F^M9bacUEbR$+g+9Zg;AAEM+j%xVr8cv@{Rj0Q3xgP2y~)3;l6Q_$$%$9%1FW zAS`5U6Ey!>WF=FbN@5ql90k`uA;NW7>`E6F3S*<5{|c=_nmPy4W#T*A-*2uwNQF#} zM(z-!Y-Q#_Rl&aBLVddN0v9H%`*C!FWo_ewGhx2uXx}&FK3$N+@BJLo zTJ8>}xhex}PNy*x9gU&(_zxfdWrSe@jcF_Kmv3kQG zO|j)ea59=MW+wwAK1U8FmiM~vfL}pQ_mQKUgdI&>+qbwwDNBjU$$V;FX@O@9%=0T3 z1J7v8YMzlclz0|=;MVY@cCT%!gf~CxeJ=iT>rIvY8oSds5w_n#g=5D!#eC;`ND2{F z6B=T?`qwL6zfx{s?>by42;&{IZaRmBh1)ml@y>IFG3+EjG_mU?Jfo z#oA#2zEn@fQG=(b@c%IBFLOqf`wpZ)5_E4#QSa8*-81R52g!M79&YAqG+f9Vj4$jP z>gkZABrWl`dI{v^crX32Oi5+g)p}723pmt}o;RNQ?WTp)^ftDq8@loYr@lC?mT`N1 zg)Ry;W+YHeQ}-d%!&1BSxXnBjda#aHjF#Q&fQOF1{exhBqL+H0?=F!=#@g(ooTK>i zT6x|3=E@RkpWhPxQ0kQ{Jn07uIotF$G-%T>sG2x+)IfSk7K`*a-V-Q6UWUI`(k49L zRF9#-SAxxp1K4Mmn@daKn9_(?Uu^a1`pdfkli^JZ2CVG(v&wVgd=NTf{P8b;jS5rO zUc^U2{sWCdu$FCe*n9IxS1>@E0xa2#jWt!rp9eO#?!$aPSXhK%|3M10tftb)#k;!C z0s`YFQo5A=4|9$N@^VZs8lLe;)-5kq-I@pYYtsU6CN3RWnmxiuEeI2qn8SXd$Rv9a zA&`Qg2;Ny??l8*Ui&qgt9)@KU@?Q6NoIA1k3DXgV+xG|Q z4WV=fadmubEF~ocMwxrRdF^gHF*K?ED3e{chHRrlFXCuhXS+V!4NKw`t&?XLnuZ{V z1G!DnjQeoN`HfO!dTd$n)TnB|!?Bi+dX|U(1*bJ-MB_#LqYi`+hS#BSL_nJ=MKLSzfK zN{F#`_0_=5)s`mtY{PzsEVcnL(#g&Fs)&@F95NobLLMswh{VcQRNIg@|;GC0p7hzOX)a@+v+V4YR_PqW5%ixut#j>HHl4d%|tUKS_ z?ua=(6PL?K;g?|i%~734nU7eR^O7Q*d*YVwv+6MNpCrp1nGpJG6A;;D@&5iWzq5S; zI1;D0qmTvMQ79b%fr>JjN`Oa?-n1#%y^=S;aiYUkeWsYs4%dPH5`tku{e{_c`9s=G zj;HIcEalDNmkV#QCE5r*ylgmgdu}~zKJ{dH`G=q&ybv`+-UqN@P>opp%y)Ny-*Xjr zS&58^fJ{o;Y@3CYYkX05w2w46@~mX!A1(!H^Mf22h};i+0{^^q2>Hwb1|1gd@I^K} zb(1QdBd~v4PjX<~+dQ~NYgxf6G-D4AekG~#6sxpOG}s{wf-FS%0TFZ_4QzW_m)8q)&8qjx(aS6IY>GoP~1`bttjB(t~29~O_8>pr|uE(*Q~oFV1O-!3QhQ9F&v`XS8c z%fGOErU?^aL;0X6hDT(*C}2%-dHjoa8#sSs2oL`sSzjI1)!J>1Al(hpARG$ZW1KTM&)(09x#pZ}|7;<> zHz9(M9fo=15H#;oziSqTCfyiQJqA%*t|4caOlHG>y595k-eX@e9!Qmgsk;_m1om&O z(!l9_RaKu|PBqU$x&sOid5!tP-teE`{s)0Wl)@E1o|;i%TuEa=csKE1qAreHIP(tt z-D{);I6z>F2BE9@PZFc>8Kcm#%6BW)WL_wT3HmPSV)X|4mAG;6HvvVfUAh552v9Ym z{74KIum8OKI4MPl(7zZ%N@7;WlRB&l6+ZKxx99a_Knriv3kxlLZE+6{_)jGCQ#Ss4 zxa)q}Sdy^#fsj#~lz_@(hh7k2@&13JHA~^i%PM=X-4B)VcgI;r5E;@*(Y);*T2%mm z2@y0im6<%SZpV9Po^y=)#^>vvy$m|yYm|p@gvgha6YCh)}`Z50% zMkHid6_*9vW!&lRx<}WK1SD@jVk*oh2_Mi?PJN#LhwA>PB%t`k=>t&tn6<&D5sT1i z`=4=8_T6rC2GlGn8j&@KL;zMWeU8M$WojXCTO^Dio|ibfw>Odxm4E5*vNzGRY*S~v z#$qU+#%2t3OWDT8xN^^QR+g=6KgIj+z%cvGYPvf*waJooZSJNVHAaZe|N_zbT5%a9};cME(KXKGYq+ z>rh&T-CSGH`zijVNxc0aN4N#xKf8{SQ8;@9H^seCHO-Ys2+x=YkF%_Rm+-OyqHB0Xc^s6q2nrYrflTK5_kgPRxkpP4v0i z^JDe{7+?TtyS_tA#DgprWnWUn`3M30FJ-+-1Mmj{;n-`v4qHoY<-?Ut{*y4CfUMh} z3V$SWG{j{)%Ts(bl;V-VBOpL$L?I*yZ)3Om-Tmz4*u2Ior})cqB8ne_zn*OjI@_X< z*&;G1(6-PL25x7dg&50RWzr+NNM(H9=5OET3wUzk1Ue2a8&v$8Q^jkgnC8^oax-UDB_vRzqtGo4#1|951IA_9kw<+Mf;s zPVVXi;2FointI+tATzvVG|hq)q=w8)snFxWY^BK(aD+RH~K@uKk+V%JDB-ijEvDP;($m4C-!rNZ!goDB7TJK>J^4E#H%)t<(Ogh)MUZwap zJLz}nJc~lg&9;c816f-%sCy^v9-0_N;7Xv8OQyYY$~$;kXSma}nJ?ch^fiA`a^W?+ zW5T{4Z<``&>CK+5rxQ~YCsdEpwpy(kNwmjZ_NKJ&C(SpmW>Prcz5me_5zYoLE(o;= z4$I{I5y^Kv;a5P+4@(RQ57+;mG-cZ4QIxYLIgxyhmqcf4F=B#kZ>~k8&5sT#H8FSX zrkJXPP{$qeAFnFOk3Mq_R}LJ-wG3bj^UdW;aX&C|!(l_hljt0^ZyQ2( z!W7c7GrUK{-BX@yA*#+L!9<27v?}6%BPx*B<>@cF&4;*zcQp)2gvvN^c?rsWAk^-o z?SSt20A45_t`GbMr2-bx8%_ArhRJ1j&~|=FM?-j+JIzzaDPEnKa|o6jXWB)Ej4h+l zrIcVyQj*mU4ccksT791meVJ$6Yu~nyrl0|j%Dt^*8E?=}CSZU+uZeYNu$5!|fRRLpn znwHQ7p@heCVzTuHP7GwqnM8xsL_Mll4Iy4dDdeHnLj13Y5Fw>~4`$Twi_z6%l;2vt zpK$Z~j3`nTCK{DyTXktXwzGs1oe8#WL;f!-IPc^OaNpwPP%D7+cVMSmc%tbf*_O0~ zS8MnRPctnL-Hw8NKX3M?mP%MIQwkQ)sc^7)_#~3ID?2<5oalKht)J`njK}aVz6g~X zmt4737FBV$7jueba?{$wsZSRVs9sCMgIH2Z1oago#wp*xeyL+IKOEDipPfLhOi8B4 zV}8=qs-Vo7rdrrh5S08{8EuErI)TgNm_K{vMYCpCPC&k7H1?g3N*k={446>L&`H-O z3}0$+DENO0Zg36fuq2UakNkPE1Si$=K(YD#&Im%o4oOQ1z8ovcGaTe9_E)~mckNU2 z#`T8r-pLy!^26&hxQ9;XXREgV$KxLxVS;uTtu5CXkMDRPsPlvR@BbUPxJ2X07 zWU*>>iV~R_`$rlBaA{(EIuu{3*-djjEWX`kA>qwI!+OydYqZ>It*M|_tL5h^%#Vul z^~%^-(AKg7RF4cQQw z?DO_H{E`|~fWTX7CQ~U#b$)maxsuUFG^Kn&nvH)IIO<-Axn}Q9xV|S3(RQ}~laCFb zjuLi;iU{U@qHO5FF`a&H7X1l;poL37)4V|%g@_bk^TS4=PcR`to4i5=dIGoE=B2iL z9!d6}=n)#IcE&a5NqNJQL!N~bJ!`T-{Pry#RjP%7Wom?#*#g|vj?XFEg;6{!i#}8n z!i@yrhOZcX7-lqUV)wTjuXUza)*05OH|^mg$KqV&mf>H|`XjL}flD|~zntxC)nlP< z>jQP7@L?_d@WFM1`L`E(R6G5Em^wF8#ghW+f;56wsNRI0@R`nxPJU+#I?N7lS~JeZHIwhkw5bx= zQ*T8yxc+d3Z@cWuJvE$)@dH%VH+v-sL z-x5J73>T<2%GpR64XUK2rzw$@eOc+YfW2q7Rb3^isSJOHMl}e{Es`8^8JdNOcBe|g zIy3~hG#7RLr!I_sw#3^WhPFnxI!`OZzEs_b%KZONHvoz~>q6 zt`?|a>DQcz71D-zzSdQljlN^MfXIL*nG1D(D=Qd#eg$q=%dW-a1pXIr!+_!(18K#8 zCitJaj)!~0c?$|bf@MG$;Yjrl=dEh}eln~(9|47lB^ykuPua>4h#tBe?yu@>BXeWG z3xSqX=Xjm0^YYp6u5ACU6L;aZo}#o}*S6Neri?J+5538Lctwbw^$!{){E}a&s0E|F z4JhZ}9)pq-l2ujqSShAAjIc`#isfiRitn2+cQtrZ9vCDnscVFHivUa9gGTIXY^l+s z%?W|M|vXLG0=!oVXcpQW$ao$0+Yjj=5*Agcj%$y!;L;r!s@#k|nz)6J=Rwm)w z5YDs=^C7uwD)KU#PDo*V1?*4^MF1voiXl0(#F3djEwCIUJPsWh_1SPGJ%gSec_IAk zl==;39CbDav#A2!4g#S0^pTe)8c@w7w-K+58Kx7D!*JoD!=aO9ztOoYSFohrIFN1{Vcpx_`2| zGahf+Q0p2x}lY#Fs4Z5*dlM^C}jdOQg4k~{DN1X%zX^nPK(wJuQq0)z^+&$lWs zTw9O4;um{*CraCTU_Z%;-eL&Wb}P>ke|qE)OTTzB&f2a1x3m_5b(Aov*9c zO1z|b5th!K)LZ&u?jIoBf;V;nvMOB4q1iPPtBwS=?-9~YoyIl%PTWePJl>$G7y2!B zUiZa7Qq~~wrE%g^bUcEGD7(H&(u1|^DVXM{o|Wzx8b60%gXf1@8ui2tG4z)HXUXVN zWhfK*6Y#z!%8umH5uxo-hU7j%FLh@_&zsHFV+1&LZ!RB7nY?-XFGx16mTet~Ug*vTX9PI-w#@mmdE!vv(C_T}vuAC^iVaj7U6tiGSDc_79&8Qdv$ z;Ai=MOCH7`LZ-4VBd^4Ls`KQ|=*x@sRJTDI&d;AZw^CMWqbG>9>MQ6|D<1Gz)t{%F zjHW*gD|2UPZ8+O>%bVp@B38g5l+2zTKA;jB65R`QuCXyveqcJ_8wKUDJJ2NNVJV}5 zN0H-m-QVKucdl|Yas8Ndf}c;b%0&AX4z-)3y}mlY*5K_cu|GDqF}d%cr&#|L*I^bp zyeYP7NX2cRgCT@$r)&IU>w9P+U*tC67M*s;p@B;Wdsk<%JAQ#FIBp7xPz_{XM_x#m zDq%fF;$wgvF!Z2I5YD4TXUGvJA*@YI4)qRiqpljwr#4QvCI&U(5c(EA^njm~`d|2D zfy4BCxV3QZjrzPegmd{yHyogc!!*9=4~k^>@(vqI*EKYO7TnoFzFIS0_)4r)Paj4I z9`h*Ol@%P855yLmh0lY<4$-N1 z*Yr#oBWm|%PUJEchq9sx29I%9+mQtNMoVZaBOqsb(+5_0`OW z1~n`;(t8KJ@Rf#5hnZf&K6OK^CV%RdT|_7-5pGP?MQoyzDq-$3b^@lJ2ja%2*lbS4 zmy|!L9&NgZULi9)<2`amm5Bas&Rj=$J~b$#4~@zAS_UzF5DLStw*O zr_)L(xJ5}ibUzVOR1XEcAI09U>e zI;g-B9-|2&IeEXBi_NDst{#f;3Y2k11`kiB0Y(G{2Pzd1N2)b)?dK;#$$o(1y%gw_ zkV4+Zq^c7q(OTU2mGeAxlyhsK@~Ng{k*@aZSv`y2CH7Okhh|ILsM5{Dsnf%C6mhZ; z?Q~ncUSIB7GG?up#s}^`?gJNI^A{Ke=t6#DQdP;5^t!sSFnsklT**L9#n(@lh{2V{ zbb0*SThcQh_tBJdLG9Jcu2lP(p_2$j$M5+Egg6%hL9E9$fBH48q$$3P-+!Lw`O8ao zI$9%qK}5a5VdU`&b@Y0RUp~SIGO4G-ZKwBpIDTmPSs%M@y}$ZOKN4Jj-Ws2T2BrXjgunI*RAp~IGla6 z%lisT*M@DDE^PQ^9|ZmR&Na>1vfGKN@oJ5Ec|`Wej{x1De^j4iO66`^x7qA$)}TBY z^QyZVKRwFu3|e5z=3uF{F*+HEo(?^UhYVtNVd;(kRaIHf8|RHT?>@98gaMo!15`|K>F+8H^D)zd9cO!KGZSd6t@p z{WC*nr04razHA=~>oR+M9?H*&m-ig=4z5w|@{2B>+Q|O`iPc{E!Qzy0b;N@Qg!Osc zv}I6ypG+nK_*MwX1K?{jw|5cM$9m0|Oe(H%BQ{yiY&thd%rZYlcbRM=gh5k1{nsh#4x_YJLm$)dqZ zYGNAgc;;-EQpH>!!mNZF?5nPNFlki0GSLWSKQLbIFt@u&i7K-;%;&D$>ndLLlJ|5J z9bbK3svkAN)VeYxrsREf{Ffx*qgTx{>{o8@qtV{F)bCEs_lYgs7BU_c65q|;TRQ5Q zaTx)pWDADaMb^5i(gO@8acyo!th^|w+ClQI1~sL4A?~C>+igC5JyaEm@0`wkrCCh6 zR#Ly7zC50bOAk{I^)wv2TTMDF6!Ox~aP*ml@kZ5MW=)Lv!3`A=$|1jFT<-4PPS!uF zUw|(&9?k<+vsACw5J4jA2I3Pfa-vYXCet}FbO;brTFEHty_FKbFgkjkr&>*h~&R(6KAis18oddmmT z2KKwwN^?H9(tmo{(QH+vSen}eOL92@tX(rhdA6 zV$RVlAdZiyEU@s~ND`l2TFk0xW`R7Lqa;M-saE}&U3rUDmCM^b!pEph{N*9Sv53^& z=FDRx)&v7Me0>-BRwvm<1~cBj5lNdXDu{1dZLZqOYW~mw;1EGi3C%-50j(5S5~-#8 zT^V_FmYEsCsVJd1Y9_)OX}NB6Mo8hDNqrnAb1ETmH_XT^W^*MC;{*UY2^30y^c77yaC&1pXR+slT#!>sg79J zd(^z#< z=>zP^uih#aCVbIl|B9@-{EV|+L)lhCu(!Y*gfLs)a`x7Sg?I;WoQU-1yy5PHR1Y>DYmZL0}diNul1VQWL*y-^f?M2gk1N9~8!-k-4$YREDl znIcOZnQ$ZQ=x`&M2>LcR%B0rc6jktuZMt03sz|GCDl)yHa<@WHe)l)&hhQm>Z{L2? zVIWGnytj6d)h6&WZ;*|mrDmL6kSL`Yi3$B{oRFvu1qclHRpIOMp@5suC`}`vP)#Ay z8@>Df|40eJm%Y?;?DnPg8$AZB&#oM{()sUeh+e$;6;HT$#Qs!4=jmzZ-XEJfjgwZ2 zEz!M9D4*BS;E>X(Wb)zYNMn2e?PVsDN9?HT&bG~@qUTk}V&hKd@v#C~=khn(INTJ+m(2_oI zX+#KYu?QHxqfM-8N+R0vc}ucws9L|?2@HmFy}+VBC!Wd$R+O8Tpziy-vXg)1EtJ&B zo#18-zbi0Pvyv`TO`F!rlLs2hr$ElfD`M@%fOKK%I_m(B^(b-4^Ba+B|lg=O2ds*!#}y zrQ=$y872{CXf=MXqya}srm(H;`XTA+sl-{?zmb>0YpcUNoZ>4sv`;wSeBFloD7XGR zm4*d0M`KkzDUl4WrE7RX* zZVf#706=}_NS=c#BI6ctKQfAk5r426Jsi}M(^%(IHv;a(h#r>h&b2w4pis7vt$)1h z(pg$9fH`E%?aOUK#g}Ln z#V`NxEb`v_rj8!19@moLPwW!hS39?K1PBQl2F0(%!5-Dr#2-EL(>Rc_SOr7C)%^Jk zql>Uki?|j4?`7{!cG^v>d&N^sqP2KRoQA{N(|CC30VTdMnrJj|u{N zASeTMY>E00E!ye6pVEaKo({^#{pSa=Kh^#rMnqECvN^vy#x{pbc1zx2tSO9;W5akd z&i(tXT(=SWo7ID~Y`>eE+O+d5OoAKYtu>`mvbR z*Vrr-rzO3lTg}6~t!B;!2HIS=Q`ETnGwY;PD89o7Z%IKRe1z`gF40b$UfQ@yV$mb0 zUij1!Bw!7?oBiE>oVV2&x=bGANjwE^MxE#_(UPmjtNPfL&uU>oo+kPoAdkWOP&3dS zgAqImmjdIy8(NWon_|v0CBB4XIu$!XQeX01)t&+t~vUcr9LY?Q`#tmz)|-jrbKe+qVyIGfMS{s}cRa5z^T& zuBIUHx{hekfDA8q4$Df;EriY<7d=|nl!^eCD~p-bbI|**dOYv`uM*~4I4>?<1qAWZ z;ijS2S|=Oezl_WV7dr>T5@6s#aD`MYS_#dF#-jrPSY=RKnNefXx7~*=Dxb&WfKT+Rava9e*r3IWJt4dHoGGQ-LVN{t*}nANV9b4>I^Cfrw_dXr z7E6n)()hCeXgKDZC9FTxK)qrKl#KdN>3IKS$Tr{pCf?4SJJ{);cA44;wA%H{bO)1x zf6WJJkr>#`W{Deq$Bi-8j4DY9g-N|!m20M4$nVEUOdAU>FZ0)|LJ16Ce)ibKp5P9E zF576VeE!afOmglGCY8Dg3r0{mN9R+=tBm()T0v7}D6#|nGVI1=n>sAc(3iM9_yYRG z7<#{LZN5fM#fYBar7>{5%G_BpP*Mr351BFJ4|q6a^lsB{G$fM+UnU+&vzz7*H(uWj zJw+h+T2QCnPxVlw2L|JMchNW##>pRHi9LEF zSfcd3$uOun{EGYH(aS*?2yx7AK!63rezYL;%nR31JyGixHh98b>lFoDn^|Ptx&D6S zEwA!V48@;S3(b!i!I!}|w1K`unANEw&#&6`Q#nhpynv9gjX)L{17w<*YbFHB}%|5PeLv7C~MgLCCe8;uK*oURZYs?Kt0Vlhl0G6zQ z-+&B-dwK}eO-3`PMdE?IK7RPa)9yV2r`N*oxzy6Tkd_p63r6NMkXBU6Jd|lPO!YVt z?v4z`8Z0i57Ae#J$cr&i7x9SQbx~{#=1xU@lIS*jb&2yz=&+T?|LQ5^I;h`oc29v9 zD0u`L&u3kHiJ+~AQz>}!D9`~bHdEfur1xvm(RXFwMOh4#3B5IwdI8M}&#+#T<0i7hRyjT6WazJJR_blPzZ-9_oJJ6qCG} z6U;8Hg+saFHr{XL2CNj6|LthR0!UK(Y=Eu1p8c0(y@4v?J zumQeXKSa#~X$@2FYKtggqHQqD>BfCpEXsldVu!fUK-y!rY$@G4wT#0=JF~v%XUqhD zbF4<^94NDyIz}^~on_oY5N=E;XHLZ-7`Zl=?5Oxr5UMfl*lLP&6MtBdLR6bG=b~=H zAZ2uVQ5M5xATS1OSiEkOl)b7>&I!736mcB?4`~(3IpW(NDG!IUY)C{eS&4E$vSE^r z1??r|!L>RCuU-Ne2aiGL=tuH=80@|nS>qb-;APT#ra3;JoYA|@F^>TPKvwcW*V-pv zS?i#FRGhuLX@0I-=QA_H5y(y3V#3etkbZX4hPztba?Td8B`zHbP6k&?_!)I?JWEHg(V8 zA1aRN;t|P+ev*!38#c=eK55nEalI_sFxCb}@kPc6z`T&>KdM zWRgU@#f+ff9sf*7=$G40kd#P?cP^qZ&iznUfrq2kAa59Ux2=z7+N5{*$owtB*JHEO zKRIRp=^}y83K{I|hfOKKvVJN!X+Bs1!$@yRXRNfY$V?lLv<0Qpi@S=fQ};;6 zMoPXdZN(id?u8nkZOkg9l?2F}bs%D;L@op;mS!)(d$3~uw==%i07bJ_hRU7rU>5HL# zQ#gjlrpN(4T}I9e7>lYa6WE37MHPf`20N_pyGQ8Ko8SZsN3YM^Q2R3$lKex?l0eK;eD7wj!R&|U6_5|sfUx%42-Q66W;QS z7#W-HNZ#%KHKW4LcSD}%PTuivT=L3e@2u9S~o=e zOaY{>w$xB%2_NHFT&_#0#ztS|2n&WFvVdlCC7llL$%fB2J6^Ml=b<6p%wh3-QL2s~ zpksukBuSal$r|u5#uzPR?5YzpPMVBeo@aI5%b2*`+xeY!`FKd@XJbvy7g!9eZQRsy zFgMitz^K0}znY}Q^m#4f+WnyTwH{jd>y7(SAJ80-6G@SD6NpPRxCx-JRAHQ5uYEzK z`q$2QjyjqI<3d=_apzl`BLE8|xQy3MLUmh-oM+-0*Ny5?AF*mY6gblpi@sPY?RXcE zn4w{U?0eMrjJ`Vvm|K6sFlY=}<)k0-xnH4=kZ9I!Ft1B7AP3gL1Q~)}ZaqGgkdmpS z&*kCUTG>1T9-7zOJcKrLXGu}&-}DgTzX(Bx;nhV3QNrXJHU5rAS(Dt=BaHKz;`Rle zCTkQSUlvI@zNaGbZIF2d_Wk}IdBN?C5!U)IlwRrvitzq;#LBjcUUNrv)3|HzsfBE| zrBYsY>1+skkr+r4-E&wp?9k1-&OV0$?N1f(Y7~OOuX;QI<^>MN)7#UsGmoP|Z^1kQ z!ed0-scndli3bbZU>ib9p=bG$(q#IlAEtz`=mVNm4#iJ1lF0%ZSDVjBghDvUFk;Jt zjqrSMpZzlW#)12YSQPIiMLR;2lFsa+)Nz{A?Uq6xEHi^QUH9Lo?{@L$(W|s=wV8jK zDe`iv`&MdMInbZLz}ji3F43*Bsa9z%H3t6egP9ixh)nvm5O52S9G4{M2=ZrOdpdUpQ!?L~qPk+0U{R+E`RIeBe4P>Eei z5!d~aJHttA+Zq~RI8;`c?X0c^GL48V>Xvy=1F^Xi^i}h37@%^VtZMvGl^@~JVtemC zh8#Xe*o5-&YWtyu^VDFfy3D8ChJ$C1pBBtd2l;e41P-EjU21D-ZJnoXWO19O3vI=Bc@V`2@sHxx55DNRGg{<^U4kjeUJRYq!ZZvWX6W4R6 zd~TF$0ZQ^0fmj3~9!BK;coEF}Bg(gtaLky)ZtPxb%*xIT#A%GRPULICmv1LDJ=R9iS+de)Vjqplx6aM5nrT9PD8P1kn1cn%+#E=ZnOT(mB&6-WO zxG=Rr$-z}UH-1C0VLOijKo2}wtKx&<_pgg1i z$H(|rmPpFzN68X{scx~__lA5~R#ES*m_&y(e4|NpOwB zN6ZNOczfwfy!InfxDii!BijdAOEsXRbBJTU)qDBcR1YYk<`JkzDjc;T+w!c_T14jzw+NFc`dMZo=yS zMtQQ-aCM4OQ*_SPcQtzd{hYH%OT2+25pN01b~p^!n~CQ9DG%+oe4y}7V88tKRnkxI z&T)@!AakP7jG|qDPR6Od#Fz=!M7YIg&t(~q8{EKD0K>(nXV?;A$Ct%`wX}7@Z*2{*R3<(;L&n$e1L8t zD;3*wu+^s0n*=*Y{yKgokbpIg&y!^7B$?^xjba&|n(DY*#DQD7XW(KrI0~SS%#oEp znz>z#@tJ@@P^zxmxe7bmi&Ws$0X%`rSh-u@;9nmoSl)qn!S^I+-k?6Ku`_UQR=iDD zm7ef%yzOg6o<+FB+^Zo*v$>C0v7b}EO7Vyy9{PX@wz#wuI6~ojaPKMDhG;>bkzP>g zn`7WZ3S0e?!sN_`ItSFe&9{7benI&T?PE!;!x|9FdQ_&&z$g$`xO-!7&LO12ubGW*lgU3u+}i+u&P(w5HEil z`P8p;F4gIbtgpTdjW)j*A$JdON;ZhDhncsGf3mH3_UQ))+-wuwJDNIBn+waaYC!?F zgPMYimPC`XrLV`hPr91aPm)n=%SIh~<*3-stq)u4QmQL6Vx8uN43u(WSC-d?mZ7Wt z5Or5yFuUCTiZ1@uGFp<&D_HsoK`yzD=VcA9=QbP5hp#*2u`}BGLcB$W_GG>GfUbUt z92L`eTxk|kxFoav5=6K6=G?g5+oX9`)rqpCYltEEl3!D(fzYH?LyD7i1u?Xzd$J_< zn!$V&QYh;TU&8+%Z{INmTr<2g9+bvw2le&)&dEF2?w|ui4T#kCq0yJ7+tEtcnt@C$ zqszp%O?r{TZ-{O%2%*2GOXz65VCo^O;E&A`mbsqG-5)?dQM5i1sJ`>k2}#yezmh0w zeNx3QaK9BZ`^X3c37JoV4VcekpFR!BG_J4cJFuGQxc@y3ujY>VI?14D{?Pce==wnA zH^#RD^Y)qng{`FR(nL6@*5<`7J5m8LPk`Zd_IPy(b`V3M z)0y@KjRqp|nUgO!@WlZbluH8U!|00;e6|dK+tWE|;`7t1oCOKs*=T+i$S0IQ zvk9^z2AFc!Xy4_q@u_IC0Zue_b{vz(uXi~Eg{>J8-N?tcEBNr(ZN||6krk}#YHr$S z{gN!X=bn7?wroYoUc$`@cj0&7?b8ibC~+UjI7%1@wVx-ry6J#_%Id~<+VHv5Qg$qi z^G6PMD{qxiy@!B;HLX@$ZI?wNkPFVP>i2#irhZx(Nxf( zg}>l0X>fKa4JLz(5NgWzAe6^@@+iK~=zHW){q33*}IRcV`ZV z?P0PwNmAP(QQZ70U0UI4^a$=*?V!dOwQ@3srb>!nFl7ZX*(tZ5FHQ?)3eeD z*^gxEM)vCvaILPzG@EI_9{JBYr0& zesf43Z~X=3k$esdrZ($^ZIrJ8!S~^4p{f`X<&dcDiALGpKmUyI*Av7$;qPEZoi=F) z&)0YR8@su4+|+C>8rOb%?RZp%BB(zfoPK#A<&UFDSZ?W!2Fy&j=J6xx zeL$$;Cy__I)!@Q(tN&J3Lgi8Ce+9sI_lDp z<>}ay&Lye!0LO9Sn!FgjI~Vf~8mSx?gL@U5>sua6j7e1XvpXY&-8fou*M<}D>_uU{ z5xJ+`S%Y~ANLkKo^oSk#)a%6LvBdO=+`MqpOdH7ozdrt5qS5V6%*v(EzE}@2jrW6G zZAK;oNKyVrTs|z%*~Z>7rl?F(@a!k_u-=_BxdXNqF?z z!MN95Ve0p3c13oM()kk@$nrA>*%Wudo=_c)z@eKP_D2r;{KLQB-AIXJ+Abh_*Wy!Itzz@l!X zB;zUR+zSpx3-p{r=Db@StVYvZsbl(zP;j|zihgdD-7M_g-J-{BLZ4!`2PNf{Uq?r_ z2d~^d8$fVjbkn2|?;x=Wx)$J8x7L3T^QD5Ts|^4hS1cx8oFy3I!zRI|50>IXQ-_oL&I^Q)k?YgR zC2MuJe>IlJ041lRDN<94vFgbnS7zv9E>mT=5vO6RB0|{E78M;Q>pbfwrWuhu;EmEs zQg#>KZT4Ewt@et+X)fIaW}2|Ga1QaHQs-g=sEs z5f(|LXZG={a)d*M9q1*sSM>H&UEY7_Ec!O>=8Q=q_#RAk`n&$-M{kyMK`CjdnSH`M zQ^8~%zP2&zwpZ;rr@M~T9}c&RL=cskut-e;`utzqv|ycfD*=PA!=5 zt;TFOEio}QWmkG^LqYHpm(59o%W$(^hMUtTf8@c>DK&;FqXHs1gp(e*+jS^eH^Nu3 z{CT^2AYlVM9@#t3+lfEf@?meH zV6hb&);2;*$`^F@{4>QhC>_CAwFimeBWtM9`)QK!26mSriQ zIA->J=`o%YDN8=UwUkKO+#`!#S1G5p-Wrjkbpi{ubURm+x74?T1r8Vz)`wHr z2u~`d3T?&QnM}Z}O)B&Y2Ak%o8+ApX-}{hOABRCoIMza$E)dA{m=-i*rcZf!jbg#_ z1GnIcT=LlH1JLY7pPDuN+c0X>0so>Dm}LoJjY9ic)}b@if~ys_A8yrhSll1W9j=K_ z91j-HcYmC{q}q}!unr<;vcPX4m%c*zZu?y;o~!cnbC&~~%Z{f$(;fO63I<^k8r z_7-aHnCthd&_Wje4Jk@uhj*q}He$l|#}sBhrq|#hY^aTr-g+QX?NQ9`q^OGnGoNHT zD{l2|5WjVWj=`~v69xl?CQK?Y0Fw>akSp6e@_Y2t0Tmp%I+z-z9`@O{>OKFI%B1bb z%}%yK=3*LWen%{Y_qqn{xGb))m6KTs3g4MUFvZ*s?$-)H_s=+)Zm`rH|9Wcodq;_h z>~C(|9Cjhf<|*h}!=-;t4(XHOjTOE+44(n&gYoWB=;Sj%pF!mp*ChMLEwEQ-D7t{| z&(b&*rRgZtKuJ@jHFKE0BSJ$RZHHL5=F{$dIb7@f5f%wO4$IPGBp#LmqX%w3sHsmv z@_4#l3BbMRoBnk#d@#2Hu9ZTsIUTaJ>iGj8xOuz~O9$puCtw`0=3qErJD z!`(|6eHNUsxEbCCuqez=BTM5-%^57U@PI#E1E7-~bgJw6@*C z*>-DIj4B*&gPV0j4(33ctE4`0;aZc^%pEg2u7{Q%2UPM%FYvxp#$J1%g-+)UJUR5F zWbF4z8~88l9d)OE1ac_x7`^TFw)eoTox>sC@pEx)+-!QW`|C`@|x?;_q2x3EJD+2h>ulil< z^Q-5=3XE5Sd&jNl->99en`LCMUC#4W7z$6r7VoRc%s*;t{tn{B!XL=swllt`$A>tc zH6u5GNfYc?&}*tUwLdv4*l$4P3ab1l0qEzS$&XI#v6s10Wf8gawSo0}qc^xn^FwZw zM=%pqUbNAHv*Jj%J^6MajYhxMWamR1{4SZv=qM(J_$-gZyZmMEC1Jl|YL6BaN!zWk zd9gx@`9~G@bl>Q$bvuB~kQp)(n%1~?<*H-l(f+o>Koe4Ew{0aa^+dVlPm-#zJm-r) z9U@Ux41K$=rk0Jw?=qE=wA`Nse@c-qm2!Yf!R{vbvmHJiWlYrA-;3hylqQe7eLDXz zAk-crleFkQ&zJ2>>3}V(KO(lBC+hVtUPwFW^^@tYzr3vVd>Hj$PiXAMPk%ZyUQ)M_ zrm#S|WjR}>XVeTZ4gZ)N+C&nkltjm{011Ej9((5T%YON5pN4E!hxiW5U$gx+gX$id z{a9HYrazc12>QFhBx%uKn+XE_HbcRZ3Z1gXqcOFS)eVy@xY3 zX*_8)8A`C}Yr^vH((Hgdthe16+=zU9*n}>Ozax50!TbvrT6xLCb6jCNG3rZZZprB) zj`a6FFY{{vqOYYRc;tRY^F|qfa`PE!-QKTw)|UDskaG8n&)pXq&a0gkiXtkBi)!?! zXA-wkas*nfly<-iV=WvS@6Ybk=cF?CktBQktg^>zD{tgr;HrSzHu&G^l6{f z|J?E^4(BKUEB|2x;Wv6%aVAr_4~kSkZ{&0kwUb8fr_dZ`Se)*U9T)&!>6A=_A>Y<6 zA=BiWSSl|jD6PkCAhP&)m!$&Gz~WBdLA>kTzj-xXKW8SoR_B4FPBL#G z&mr?b8IF3;`HyM(2~ZI9R=Ag7cN=Om2mN+IZ%1SucCctZ;3*lxMrCCEwL(s3CI9cT z8Jd1tO~pz#?4_5=y}t)#?$Ypo%3OUQ3xPm|{=!0(E+t8ldqf+9{Y^?jb34*#&WTtb zC^vgV@k-b(XIaP1442`1D*se3u*>Zv6Pp?6JUjig5=tF3?lK}GJK);~(~ZQ53D-hl zUXIsO!lMOH9xOjr0=}w5LYO=x;=hwOd3eWhLOZFF3eC><+E2#CJ^hs@9}|fl;4u&Y zz-Pmbv&P98IyoD7Mzv}i)EWXAAyy@>^{Mo4@MdUaiX=`=2omSu%n$2qu z-XwAr-2GCyq`Jaiboo_}SibVMBzPDJsS22^f3(W1g+Idfg=NynesXpCF>&Sc zEBhj2TRCzbSHm$x@Ai{%hfDSlr*DM~W5ktwLNd)BDvJ#N>0p_LU{TgMa$L7|sT-!I zYn>r^0_@RV3)!$_gYlm~1C<~wz;@ouKeW~7gfF!M+|OYBY?1_)`4(WUM|d}+m-Q>O zpAvB{?45gHem8spJ2P)_!fsqEcGkcQu-9&PaC4e9D@vXB6M@0G8JN)d`xnXcdV3o1 z;VOj3QV-Qc7yk4u2Iy2#;4A^lQZ@HzA>c>_(uiLq5WY^qJZLvrcRp{;ObWZ(c6}FU zq;5XRZ8c6mJlDh>fy0D#ZH-*%FAMJh!Iszht5d}?m7#?$)KrD<~yXE{YE7~=ZLEL=;8{0#xCik!{wU**?S=it) zd$m`T@u|eG%$-=JT4jhZ$>J+xEE9=!jP|V;8GM$=n9&pI3=2dm^Rn=nf(Rq|XTf5x zFIX0ol7eKN_=^UkH18$8ZTV}VT53Mv#Qt}WKy*g8g*&v93P;GT-d7v=66ekXjto^J z4`zOW2`|~=jg0;P)c0oT2e+x3{8Y&+c4574Z`>-unfs1jfel3@C9hu?@xMFzP=FwO zn(VLF`AEu$-W-Eecx_x{kK%#kyXOy}5B4}co4;D`kyYoUs{X1zE10Zz{44fd0;goe>Sc9WgjNMy^pXa z2x|Si1Sz@ZBXMX{TAE7|>SNx&w3qBAX%<4%t=8L0{JT79+;l(P9C8XQ&!XgrN%tpY zkE63AA_@`i%6bNa^Dv+Uh5{9sxxe^;Ib9mA{lNDezEmp+u=w(Be`mvGf0)6J6?OFh z?v-VpOcXb^fcVNEdIYAQX_eq@>SBzd+5N%uvTRR;7L*_9${s8PC?ArUj@tK#P)?0E zWi)XTG&f+KLIF9#bkj)AtHkdXi6-Q}rNia;EkTSf+q`{JJ1Op+1+i&O*+XB_1Jbhz zdBQZ3VI%0Aasn`+gr13wN~-dbK0)E&FjuK6qyk!a^V@z=+76oNx8rXcclTfZkiW^o zO9nm{#$~@I9v02p5m>D6DPW{2gtRl+Gn04aQ7Z&Sp>fp8a8T4yy^1g5*Aa@6?FB zT2@nOlkJ8Nq{xr`)8>Ji`_?L{uXn-lyZ^W; zBvg2)G2#z=?Et=lg$HnYpaaUC=3Z48;FcmeYY5=qW51UC#UL)d^ODYTh=G;*EBMB0 zqJ6*tu|zL}VKujp?+NA5c1=SWS=fDdTZ6ARYSw?SG{J(NgtC%`J=?V&PuLMqPI?TQ zPQj1myn~#gBw`8wQkdN)4@_@Kwguu6p!qF#Rk&$6Y8sIn*R=~M*P-PpWMnZQl+d8? z3K9TclOu;2i9({=glXj2ygcZy^<)TXDCOFw`J_;%hXsp?SpX$U4BXQmsTtTTkr3sj zuz6=WZ4lY_tRDBr5u zcxiXYM?}frzle@{XCWt^7kGbHEhRV`>+BI12&Ik z%@%M$VV6I~+tF>RaKC3vDCnhe3J?THREQ*SVuO7E=0ZR!O8mjGKFHh0@s1EZ4aPZ$ zaHs+?*9>sQ(L;>+e&H~{^Nzg6pBSdO;2f1+OC^{*V=P%imC#}|mh|}Mvi87mB_1D@ zS*gN_O}PimrK^Qlz_tjktbhQPm?s~f8eUCMeHQ!N>i}Lc@_$?pR=~Sy&!M8dcyWuO z6d(An!_GUvq=5qW91NrX-uM+p-M;kzW~|6-iLY?KJj3!W-aS(z+aEVi z09wIx3{V#4xUhx{Z*6YwqSuQL_6!f*6jJHuqjdCmi@3iw3_*fkDi=uvO+8 ze`zKCIjvIimrYPfv@rTHe_w(m1PsCh9-8-lfa<~N23Hlx0!}_J!lY)v7|+yU!$OfD z5BcEvTNoV(GL(XXQVwC{NW%J^Zf6ooi{Xir5)4=v5rt|>w(N>5)J%9`-XsOK`Gr@q zcRQkiRBcvMFH}6S5h3JT1861w_;uU)i7ZZu(|=L1#m{5<#@qbsJBM(mGwQJ7VrGH z5AQSk_U+pWt!F)K=)%2zAJ#g6e*q7}0d+RL`YZOXQa_BTV=&${vHFt&QhG`Y2jk;M zKVrsQRsAmV88|vu}mv!MaFT8PnoAMARtI0M)&IGuZbi#?@K!U}s}?Ga?l z`kXpE*jP|E%z+;SxuUPa!WoR|`D$Wj!#n6Gwb+#xQd9DN*6ud zya=hw*wBQ=r5V^XU(5!tYK0iEYs8;Wn(sR8q`!rkrD}W81M%HUo7FWOck77`<*C8iIH5OE|T=&PZJF-`C+j#EQ9W z6bnszd66Yy;2zYy-w0A^Pk-PZac}W^&&xCfL(Y@&dr*r0tCCg0~iK z&v&}*^hl#m7Q~{Xq6P;B$lrap9Lg&!a^KX!5Gf3F*iDC_TiwfTBpqJ0D7m2NUY@>}0sR5Ly-ih?}$pyrP1i*q|T z`%kb*iP73dkDe5IVbUu7&*=l5;s9nl_{#uO7JTpGS;dTe@~5RWsh9cRGPC8 zc=De`h>GIZsgT%+mLEU9*9r&-aL2CHy}~>TUAXxB+k&vX61JEDZiTY~I0Y_(?~9Av zO0bfJkg@lB4r~ls%NBjzNN|=_Hz^8&k>N!JUxfk@7Mk=^NFVuT2i1Uq;*O}*E=ol&V zL%lFw`d)RJ_{Mi$Q>)hEiKfvlPai>^a#7xR*PRtO!ARKJVAoi>wJVKj6n=$3oU03* zhaOUDud=?2Fc>~~i)K4MlX#MLp=bLS6;7)L37t26p)My^xzlMz8SgQ<+THlTP}><; zQwDo;z~T+-f<8^2tz3iYMJ{1r4=O(2Sd&>J9KuB0@*rw|hvQ@P?ezr$;f=aC1fmBg z+g<40d}O3(THhk<>t3r|uOYuDcgUl@q#D$2 z{*=f5#MHs}yBlGO@q8ZBxcV`C)>AO2V+U+%goTVlAohzs zee~p>$eM_0lQR28R%hz`)c%BxSPT95KaY0)d{ zBz>gJ)LJ>0^wW^mm?hxSK@UwFi=fpNg2-x0v%qjO8lY&%02*tChqK5)!lt%ADiWC= zAftK#N%|oJ7+{!a(SfPWZU;6o^h9gbC;MZ^6tM|#q$KChv>+#rgKtphyU$#9CtsYp z5q-q3dFAH6edvws&@%xvW5o{|WXvy(Uqr)B*U7nRVTte08eygAYWWv99oTP`2kYQ~ z1HScK5&At?Stq@#Dq_|{@$iC|jpuf}qM{-^EYuta@-33?=FQYM3bEWzAyz0UDbdHZ z=;Kk#{OO5mw|yW?HQB4XF8I*6`4xsbo`;{(eF zj|Sh%xw*Ngr>C{()Ah|k0_4Gc=_%qVPI~&;5afxmq2WihY~JhdhVpccId)$_xdQ(B z%rl6iRCmPd+1>}eQ>f5$peS3+L5ElpF%(_lS`wUq+!^ifa6A))_#^A*-vey5Z&2c-CgD$mPRA;2v|<#r+y z(k=g01PSfG7hXvuK)VZ*y6&)oi(Ry##OsX3gFQzDk=W!+f6EaBIw+vv(SVhCu*pn* zvQeVo9h$KQ*0>R0s{<`h~2FJL1}h2F4}XBMZfT51&i9< zz^%@>Ie2<^AX}XcO-V*}(4QgdIHc=5f(rQd?cT~>3tb5RQ6hl;cwyHqZJTO_h*o?G z{uevHdnPCK_OwGTq`>+%++V+8SJE#nOBfUvi-{2csM>g60g`HAJFJ?5lvjX)#>a0B zC!0_%M`jeK)9GxX7RysusHI;u2!n!7Rk-a}+$1orDQR`P*isz5214uXpvkk?aTI$~ zGhZ7q&B#l>V3NlooDl$9j=_$hcRkrv%*RPpH6rSRxt6BprMeFgb(>RGtDmD>^Al82 z)BQiDUhXQB-M7%%zQgxA^2Bj{Y+-Lb_NS=pJO}!+z~-2KDcW>-Qy)Fm5R1mQ&^Wd6 zQ_Jz~uQ^EPo4?!wGR-5uTkny-B%i8WP2E6YPw(W%)ckxs-_>kiayD4Z@^9h<@60;` z;OHikafX(SD``GRwaAeN-u%$y+5JPG<6e9S>uoOv!yZ>uQ_Irl=g`mY?Md1{z(5S; zPt~*|x91hxJ<=f=w)#Sz)Aro^{_aKz76lnuL1oC?w|7#%GJE{$;k=4O6bkE?um)c#1#vf*aIk74Jy~g2qakTL6QXH`Xg}tU*y&$d5eyb z@Fo=N*AnANgjN*j!t48)1t+os#~&-@5>H{P&9tU!^!ulm695y# z4ST>`KsFcJVi!^{K`cQP=j4G6t-#2 z8-`)`L8p`mhn-@m%@BASl2-1ZInT_S zl}Rdz(mYMM!>JS-=wxM?&|IDzgQbOYZ);=W;PjzJy231w%ox(B^5kr2W1=7tcD=H} zzBhi!dwX44=j@eJ6@7C3CX`m0!Kt_LttJ8;Qhn!Dw!kr3jGQD*<*GzW%MXq3T7&5= zf)}rZ$C&aon6&$UF;Qv3OSz&&UwW#hUMgZS^`2f%=c`3qs>JQ>)1*V>{PE%B)P&aW zqbK40rTs z{ji^_nvFc4xnwA0(w*q~SWokMoWs;Ny4K-a4he-JCwObOQ@lyk%A3bqLVQl7M(<}Z z_0~cTQY1oj#PJ4}d3bn8Dl@ppAjI$8dsU`ii&{w2RZ~-YbIxmZthBwYO;A9fP$Q?H zpa39(!h(n0lI4`>-p_D-P5-^NYZF^ZjR^}aHzz2H=foy=UpooGdvm_x$cQ!7TB9fE zqKljoWw`{dX4kSA1y~f!6X`c0@!2!fc&|{;DA!b5I|h&Lzt@q>W8g}zz0dLI=XHx_ z<$K5{`Z49McwiB1@qaL}A{J>+5EhHbFt1&+&)Uw<%=mp$B0;AoQ7djkCu|>bFOXH7MswMHa(K4;-r^e@XjOS8bsaLo{5Tz3cR)I*|TS!o}$5* zu~sRt|NO~18X9;zzzFf9!lSX_rHhSrRv#YHCVx=TKQ7_EvtEdG*K&b;ix^vFfbN<| z`^n(mV*-wgqRQ9zaQa}moRSp zyfpX6!@%PP#^>0BIy1W?Pt^QcQx`s!u)fo-2y~CPUWLeb=$Wi}%9Fa8a)2K>>75moWjm z>vKjCx$^W1~!_i9Yb> z?p^o2#FDcn9G!h~k^D&OWM;13)Tha9LS`4Iywz@Rd(wQl zPg=|!m0tV&g3$nf&bv#9@!S<1U0o3okvFej6A=@;3RA81{_lAoMeuWyMXYw+AYVO{ zK62Lecxp=36=`pIob_9CzW*W`?#CCWMB2pJ?2_tl$ReRmzH*nAjt&Jqy~&Z0*d`;$ z>T|QRPgGSu(nXktkl*Qgo%{U7e#>0c*!0_zPumol6uEQL#CL`FewJ)g^VjK8A~vqL zs%l74QOY_?CDN`7xtM4RrNvNGSeUogmL>5^G?Pb|DQ&6x`gjEAZZ`zJf=fU9IS$K* zF!i7F%e~%$i8$~NHQXXrJIGzlxM^m!r`kUk%q_=V(rRxKrmtw3)Njpp&TD_Y_m1<* z_KkwNh4+=}7|LJgL`+5mUH1not@m-S1viX_BkJ0}e;XJW=ecGM) z>d%8h;GH`MuMLq+IL@GKGt%HB>svuF`8nN2xTtIDQbk8X{^2dcr8HBp-bgaBvY+~v z!o!ngP0f0I<RRSo+;g~}_vm&{eXLl~DkxuwLZO>Ft` z?;DEWX-s%tU1mklgeG;t`I>N2iQ2w_nz7|3%UeVz+E_c6{$AT(jTYg8W*2d41@59# zuhgzF4~5PzoVimaov*}MT0d$_b{-0$EY078dgFEW79gyPzmn?Bx6gU0`#fz*IH;6n zZ)Tf-{JfT(d4sEor=h;4t`+U7#jcmcliz0*5$LzHwDdkQ($T?Td}8AC*j0Ek z{;o|oo|b>@@{(&F1r)Mw+wYPq!%^~?^Y;wn4!Iy3wh|1ZqyjbX-| zf}6&K+(es4R-fU{(T=iMRBu8RdM5m6JDJePxEmj8)3GpHG+sw5$7`WB|Dci9gHtF7 zv(ERV_8jYb!*98adGPl^h9;p8cIq^Hx48@Ljh_WntAYRwWpZHMg)JE zBVrC|4}da|`#jWmIcQr1aX=8|`FgKSUaxigtIjiqPN>&5)?$%HcK$o}#ve+hh9vKe zre5o#Cm(~eiO_p9T17o(eeOSr%j;5Ac1~VJGfQAA&HYHIJP>-J-*Cz6RgNcA0-kPh z+3t#RfBG0q=XNdjXhsQRwk=siMSVLiXbP@5eNMqA&#Pf~_~fMt#69CNKEIqL9ZJoP zL9dnF9_~aId{p1_nD#-5CD^TOphxBpvNr?}deu9LX6I*iS@0lpj*|Tg45eN=kKmkF zHgp+F#KXY}2nc}N)d`84gTuzrzLG@Nd8_LvHI_Q%hv(%Uz1V_!=KUCLE=DSOPwmV; ztL#9(VJki+=w>U0g@s$zU!UC8n&5an-9J>*X>U^a=NjIu9fy$fr-Z5CHXqt9@3Y@vdsoB$lB-`$ajadfVrIR6 z;h(chR(%X7ffv|9ws46>xGT(YY>9&WxUr+?XE65+H8B*^RD2#5D7ZWCe1DRERh?8- z6AM&`45muv;dy(~eKS2Koc=nsK*JPeEi#&l+b(vUK`cz@bU9a7`VwMiD3=r!^>n%M zLur;rjU9ty?~2V?(AB-5`4e-9v->F%q0ImGvE3ccHMh#TOY!c<9NUZ4-OfJ)>SVQz zkOfF0>Q^6yf{-}B+9p#H6B98oFhDekjg5sDnc|@}A6Ayn3VaCtDRiPAx2v#ZhW^EAK4%V_4zhW4$EB-DS~eQ6e_Wg;)s0uO`>;Gk0G!e<)H15#5?U4}a<$BO0Mv zJ*KvBeLEmv`kWV0p7hTLbYa=(x0fkI6NnJz!DLJ~#V7Btiym><-M_BTG_c#9DoYpn z{wfbozk*`)?EKMPrU>I^&&0T;%~uQ_NAJg`Yj@W3=a-jhPK9~Ke)n5iM$FBc2w^`| zyS6)>70SFckS*Q*lnP>13-{l#+R7N)$b`3h>3a2dZI41U_i~h2^E9sX3DRkr0t|K4%@vi}>3B)S~D58Rejg8j^(KyNTRe`rC1)uP?QS%G}qx8e;3Ty%#57w?=(Xf9DwSmo9g2h}f z!xau2AHnk=1E11SC{xgh%s%k9kO|~ zhAs$($;+0d1VOVgtH~qNK)8I2VNmb==Ot7KL_OdDWl9>A#^5x3LbzMM#Kh~=A4aDX zCj@N~sjs&e6x6!Sa(6{Oz8<$D%(ky;NX|^iNr55a1z!tVA3$hKJMW$cQPGI2Dkp!4 zZhq=xo)0NW%9DR4&!`OX^QeG9kM^!44q~soBI4fMRS(RGIelWk;&?x746mZ8-ST*P z#-3`o(yc8rjIOq}co8?|T4d5akB-(&N?y6_Ja&;g5xkB|WEXtci_DbU+O|Gt`cEgJ z={E_-Djd_&P4y+4@{W%B5{0M3+hsYQK5c4`wtkB&eU8JZyhgLB5W|_^U08~KD>svo zG&nk<*`1Z0d7D`JNk8?I4*I6pJIzxSj_(2#Wo4&_^!LrpGk4eXZ-x4uoX~8o)-Eu< ze_%CS;D3I3tTZ|zg4cu1_A04g#JQI)!|$ka85kLbOgp;2e$DPzogre7{At&vm?WAf zPg*YO@nm8mLBi}ba4Qnnr$B2B!hVA+(FvdtO_X2H~ zBOnzh@{HtTe86+f_y5TEwO|N#a6F zTZxn0-~QYo!8X*FHoL*3qyoeF{S|T&A~d8+xaFY_X`f7a6|R}z&?$OF4p zSv-niv;DQpuC7)XXxm@DJ&6}D_MM(65jDqf-Jcl8AL^$s7|C#69Tm5huYDFtMY57# zYb5=ySJ25yTUNF)kkr;~FUEa$;K@wV``O9zZL{Njn_G!Pd6dhes-6=S(0qKHo?fVQ zUYF7pdfN8;_itQu6`RMka@TD;;)tgH#q&x^gV1o(km{8cAa~5!nE4**-6?wd^y$N$ z!2<`XmQvzdco{Q2{VQ%WjZQ=>s8g@q<;#b)m+>6lN3Ndi4%x4dZ)W8MGhR|m;D0Sj zbkF3Io!u7}^&gB62L^9pVI_SW?8Z%1x*@xEa_B+C{8;B=;{dIylKf%*wn z=F$~9{H-t-Bkg3h9t)#Q!ccKn9ktn@&X2!>k|fhhREVIRx3~JxnoHL-OK2j2@UL{! zuXM^SD=Vw2s`~tSsWbj=ncEvvu@Y6&`AFYen>qrJ+iHqWpZskpvPh?)rd}S@k$8R# zRW>b_n(pp`A1P)lv94tAhv=$sfa4EeA-+ak;`$R+2(7a?BRN{WK`+p70fDZ%d$sr|X*koOZ{Uc)K*Z(2_!1^oa4gsT#!HAz@*0m_ z2F9=ttJWr|Q`zbvz_@s9cb*72yWd7rBY7%b?%uZb_Df3Qe#$eKm6{4{3`#ve{C7JN zBLDbAh(hAYdH?{07^M#;a`JTk$6aD6m5#?|VyMwk z69EBDZmG55LgQM`>eA=BnyMs>2?JCj?=y#`g2;5#quIF$X0@M53cWR1__2GAt9xp6 z*j>n?SLUTUYH7*E)m1ZW_dcWChgagR*GPPNdM}{*51*3kuO0SL`>^~Cnyj0UT4z(d zJNyIf;l5xIcuF@f&e*+J9lb!r9a6f0;QTjn)%)OC1i$3B=QXF->~*Mca<-aogq0c3YZ4;2SfdwOUaov=dW44Z%~`jQjJ_*CH>w9~Sfw-n>hl4S7kC%5{l*XD8aS8AiwX{L%< z(984eI5>@uRS<;N*2Nqw==xqBy|=Wq6gBa`xZ5){^sTqItVYyhWwm#}G^*t$K-Nz$m_jDZdVrF|wi^I|bRExvPaM)~smWYk<_A2T$K8y3=Lu9wz>y3?V zK|y^&X^Gd%2b-hk4zn`-M=FOL8vVb?$>BU9=jAt* z@ebs#rk@<8Jhw==y^?q=Qp3Yv`})RZErySeBb~313GHq7KM4uBlQrvM)N}I#LG8)n z<27mhM_tqcx)G8-hNX_Y)&9cJ2=WW?dt=grf;@zqh*MI8KQFYE_pz-uGgQuSg)0G>8|b) zyS15_^vk{e{wKZV(b3UpEP1gpmf0VV9Ydt!+KdU-Jg`D?KA5$vz8|%IIC~8xtbT^? zff7g@L71!m2Xi7g3AJbe3VFD2h2m+ocJmtgkdP0Af6K}Llm|S;%O~;AOr_6V~q%G~wbRf-hXet+f@U za@XZd#f?v?EZl5WebShjdHeC27&<7C*K(#QkPnyi$5rg8gcYUr=&6j5rM?WEwu!Vr ziekxXuUt*zpYu*JcGLo226}tppQ2TcLwT1Qr+*rhJ1)z;%1&3NHZ$I~_VhGRR6KY1 z`*)e;$d{2PR_yFphxfM@UZJ99Rrv4hl+K1XKDaxYWMa`A>=;g*7AW2^IOyI*MLgZl zRO!&_w7Zml;PKyB`9$rh!KRaR0^tIcbRtnCFjaVYxvx2h{N-HR728-p$j9^lW>Di~ z%!o3)m%mY!tGVpf7T}3DmQpEKyIp@W{@ftd+SSmn_BNyN|l?E71SH7Mu_`>f#>Bz+OpHs(%Q#Fd# z1~_k!>%=(+HrpTO8TEx9Oz0XGgjgacTg3Z(ir=NnPo#mgjCt;y%tB&ptfr362{r4f zRV7efPyVSyvxck<^@)0T({y4De^IZy0#JFQuD1Z!T#|Y&4cyJ_;pJj1MB?gSs@S|5 zdiAs)#g;0xG+THW6xLXA%~OuMsgAsQhL0RWNbhvrgxV93DuhRhpeIMyiP}EYKoo3x zv5`M?dLL%n+EMd9QP!Ho=9!zy#(A&Y=I~s6S$`xP{Ewum{SCv7_`6Jphp+UJBF^nm zb33K_o&ukd$l|fm>Z}l7-#a$rWg3qoey+Ix4CFvf6zJ>e?M+rAowMTanDquzE<^c{ ziP>@J>Wq&TbKUAp&0##UA}xt{|n-G)NK$-Aenk@~f_Iq6ktlxE(} z$zfe;e7oAeGJ6QM1Bhy>Z zY31Nx)6wpd$mRpZkx-oRe>WzXizK&{4Y3oPmWDjo)lN#2lp<))c>%54a{1c#^DIV{ zUmb`TXw|jYw~jL?Qkf8Eq3h6>w$=-(7;qu??%jL)_N_40x|qh%NE|JJ`k9`WLRuV0 z3zD9&vybw)c;Yvi8wS}oyo2uq$C`x!pC%mCBTufkB?ln>(;m=%uD)1*&Q<&fo8>$= z>k3FZfr(FlfO?e_B<(v4*)-G8F_CV$5R0_UmFCrgML9sb_?ILW>Q;_#;sc$zH4z*A z3y(tAqzp0YzWVr@JPI-y==Ut8;3qt4cNk`RVD8G|1#APLFmycl_x>?-CGHVqo^m ze)lDyp8aW%l`S-Vv^$kKe16aQ7sM}HD{U)g>nfB~S=luQrIylHuYzB`d>leC^7+#z zg{}L~lE3nN`u1S)rb=3}9eb$Y+?^K&)YGcF{{(Gqzyni=SID6Q1FExgPcxLMo97ZA zKYEmz>3=2K734ev(SMUIZynAf61t+#e~_^%L3mXQ-8MNg{hvMr3G_j>+Ttel)t|E_ zrzeN+NI7QMb%w=WejOBZlcX^XDBAHNlD>2xr0Lf)190nCyrLr8dZJijAPg8eW_v57=ua-|8O~f_+iS|V9GJIM@0AR zzLFWYhUAylzV8IRkjA14_jqE#1 zp0{~15OM4|Y4PlA2*Te}g*y?gGI}%0D5ATYw5VBaB42O%Y5grZ6-R_u2siD;zp;5d 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 Tb|cn7mfbt{Zx7q5=l1^qnCb{X diff --git a/docs/readthedocs/_static/figures/uml/TestDataHierarchy.png b/docs/readthedocs/_static/figures/uml/TestDataHierarchy.png deleted file mode 100644 index d64f77de2a7b0328f1fd73295b838ef623a503b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9192 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 diff --git a/docs/readthedocs/_static/figures/uml/ThermalDatamodelConcept.png b/docs/readthedocs/_static/figures/uml/ThermalDatamodelConcept.png deleted file mode 100644 index ca7b86373bd361052e3c5e5d4a3ddc239328a76b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152046 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 Y4=(yn^-d1jU`AF0SwQ!-MLk&#h9d~jc#jO>&r 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 R@4pk4E+G?A&oe8 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

    I01y<4 z*r+k51;Sp~XwS~BAW4E(;0DUW=3ECROr=qjk*|^J|IUkblEN(0Clt$u_oMv#*w*O5 z-RTM?h(pES00cDDn8}S^!xZoi5Ap+OENi49K&`E@7$=4t7pYrT_ znZ$lt6iP@=rl+77_40N;+~8zl7IT}EXoGCc9ns5|gF5&8v+k}ZyJqivlUHYP)6>%A z6%?+xNn0{)!eK0|CGE34ytQIHaZue{Z3T07U|}SqsQPJ+cg1Z~xws5el8FO=$G~hO zym7#V5b&TswsWXB6;#;4W7kA}T}LId2?9vnJ1nTW4b9y}x5r79McG$jrFQok6xqIZgB^;ARc7A>NN)o5$(?|oHn&Vr$C!%{ z_|t$2BSY=#5KcAGEPucTP6Do3*ofsc-`lN*%v5KKl(L?L{AMb>~gB7Mz+UkrnY|6m1ALGp^wboa4O@ zvX&Z>gf@IW5Jeci2abTG#F>3#4aT6vvRKH6q*zo-voH{GA&%5bm>jf^rMRU|_eFro zsQG3gCB#)ddLVqst!H`Dqgqtxa(1+ala` zjU`On5T{z6fj|ycIhP7);xv zPANOCF?(guZLHioz2Ru1)9kX|i&O%}Gu<|AHfN4zsXa^kFV}@#wubFSy}dsdHPpwH znDH&xLN-_*yPO-_sunR^=!~;E0lr% zHd2kv@H$?dh~SYRu78D`xN0bopeCf@|F%{Vw$|z^42eBB10d)3^3NJ0hPnk7f@ko+ zWJ*2{@5kfEDi52VgXCZGFc4BQsx-GbZO(3Ycse3kE>2G3-Nros`~tnwD~B<(Jv|Q( z6SGIe)t)oG&x(0+#(mGEm-x7uvi|4r@S<}KtXSCO1Pv^TvrD*6)v_v^Qk8$}H0OeV!@aFV1%t9q0XvAeri~94;*_ zt?j&edwN7=Wy+&_fjVcy*yk79UY9Mz;#Rh{$?@k1!Cwz(SHQMpjE!=FvmCwGqLKOr zZueJnJLZ|S-W_*mIMaLS0e8&Uc7v1ZW(LaB)E%^82a-Q{*@AH6D{L?ws@9YrFitLZ}D z-a?JTPMA=vJfWn-#m5(N+0t=v*!y&Y-)6R6G)IB3!$%!vvp%B*`@I+egS74gS+hDA zykulH0t>KqvnFuYck)rHm~)9E?mt>V229<)gVC!0W?eQIIL%WZxT$v}yo7qLzGi%z z2oX07ER#L87fgppao2*IVBI`T=ZyK_6AYDDcuMrXx;#aHXoV7j1~&(MMr7$+GvLgJ zoAM1=$8yq-@QFAq_w4TO#>dA4PakRL4n&6*2NST)z%un&jXIR&O2&4FgC4yP?8M9a zPh8ydC5+|1jD`SNxaL$mkBZQLuYHg@5PX1s=zMmdcJ&|Q{vfx6`wuKDNbwO|cWL)x z#PNP`fh2cid8XosGc`16msej^P(JzJWft%ZU_hi0zqn{=*z57NM?bYK9Wy=Gve}}L ziHH465~~q-%PQ?WNf)%%V4Zq={NYlYQbZ9u*f`G=Uj;yV{bRg zAdByhfZEBW1#vkHUV`g|z6Gm70c6J=bPTXhFPc5M-V7L1YJ!0M1^lRs#(F5Dl1K*t zJJK{58-STwmOs3_f+@^S30}`PO02t0d;U@q3wR-|QQ=q~4VCihj)ikKbaJJorLacN z!?NV(&z?Qt(sWc5Tth{{7-0=+oTZW3@$M(Nx35BPp#*53uxr|A zjl)8$f0m3r0X|4^E7BX?UzV@7OaNnZ-=)X?Mo=vAh4cQvtlQyA_$;TFO>fP|%R@7- z(^+CM65i%>@9n<0J?(}Atjn90khb2sYIIn&kK zd+*MjuV25Kzj|d~Gfifn-zoZzB9SF>{62^ff>N=61XcS6?QbzKt4WxpLWN);A5A%U z248vw#iAVQ*qs7GW*E*HZ$&vZdet7QWU)B; z12R6SB#Q^_Wu=Xm!VCS#)g$CIG!sa>(XU^3y1Ll0Qzr<&CkcdKr#O6W{Z&#jG&ZVs zKwJ=2!*Gab1m5ni)@;{n>+8?X%!nb=^8rs=_H~!E3HG9c*WewOgdgEyEZd^H`xo8H5bntMTw?mnHrDu7QLWaTQ!L zkQ#R%Y;y5oU>#znhM^RpQ7Ia1f$KF|&GtfK9$hm}3Uk4fB#5lo4&f6t=p+Dhtf67Ii&$GrnMqVC79 z;Szl%rQU<}v33Uus99_FllJ61K~}F&qk%v5zJYrLHJrDyc8h%o)#eq-OR=boSnLb7$iX?Vc98|$O}C8Y!XZH9|Ay)=n5Xh|$vtvVM?0{m zoLr^;V&;tLiC5BIN6QfUVc+r4cK`9knAj1^^u6uFE)Zy zwzYjO*Lee=?_SYOE@Q363}zgFJs{XJw?78eMTWaqfkP4W4X_MV#MhlCDU6gy8p%7$ z4jo!a8S0((?10IHQ5h92gb?CiA$_c^0$W0cKQ0OP;8^T{+Jg5Z3IyxuI8@;zM;M@0 zuWo>-k*W%?C!UMDj^_{5`k-X_x8|OW8m1x?q`OO(MMtr|1XbHJ7Yk_VWy!(K*es0h zX9bmf9{W%5TE?x&zIz-S`aGyQK3;{66{ozqqoWvDkcS-h+}AtNV4w%Udgs6sP%1vN zMZy%qB2ro9hZY4)mP)RE-vuo$W<*70%Uu3x*xQLx@ZOz_?{ z98ZM^W%4)O1B)ZfawYy$ls!xV3N_a6r&>wPx4>d5{A+7UN@ir8w`889yc@w+z!vKS z^_!^~7i&YptOP9H%;ak6fJo3iIXoy+VSwaLpnMFO8_IcjJW}K^2QLy_xrDpnr?vIa ze*>7?CXT+MWjUA4gWOoxKk33{ac($$rDbfaDbd)|6o|eXYG|mhB!AjxS(G_8OtZQn z@?(yF%6oGmw7V~Hg0tYxt>067%l>^-@&FFz|w?-0^6*sE`mLh-)Y3?)Yx@M!C$j!m>>1xJDb(I#Juu??hIP_4efMPvvO5HJV1;|u>2<_}M z-b8BB705D?pU@EM_AsC>SOOxy#GS?a*<`n`9RJjLdwdOV-KmFtW#9yGM#Q_7kXHdm z>7nxW4wV^M^;hYT6}QN+h7$!<+FC`TBX*~ON#ndT&U=1t%eQVF%RwvXY}F1gi;1OO z_K|=8my1js-e@RhvNG>8v%R)~N=#Q``wY+1YbZ)py9#6LWbswtezeGnw*r3!;E{m9 z@SZO{3ESsd{tE@qs>tRyvzjugk#P3>I2zg#oytM zf%Z&7ZOckX1hGEH89|K~Oc5< zpn5GxLMYnIsNH#ZnCAF+;eOkIQXL!;ITMr7-z`&m9=!K>5B%YnfX;z|AujH26eoJ7 zU}rZQr7!4UdiiEFBd&4L8+9!~KnDmKAMnh0$iN%R9;%(5UGd*gC)4KCF&G!RkswgZ z-RXH0T7hb4P^7LA7>DeD=? zB((o7%u`Z0f}uRB69>3R3S6({VWBnzW|yA*?PO*6jVF7y4F{uH<>iz{M#)6L00xKS z;lFjCsr?xjmmLwgpzpf$0qVkTAlYYLUYt9828o-%WJgE8z{09A-bUp#AR44)`;&$F z7gOaBp1UpZn2IWwdNx}z3b7%I!#D|F7ZJ3%Q8ja*5GIcF0<-btbNP#8-HtU4j)y&_ zd<4naE09u08Slq}4k-8w<&ymQ&#Xwr0}RAEWIFp~6gs(MU@i0oJg}6hap;h209fN4 z!{8XuLEUcv)(ci9>&IH`37Dh*0%)l8*TQW&380pE(qFUP&zDoSUQQ7*QNqG1kQ+AP zto+A$QfC#P@2K^(G}lwpii&gpo!H;sww~B^fk(ENY$}Y1;GglD9T>EK7k*}EL+`2i z8akK2l@cRi#&6;$ouLp2QRb-NO`sIARNtXG)Oy?z3mX|T=DJ>>1RK_-cEbQa0t1kW zMH*qnYOhqEf&IXM@JBdb_IyU=gBdRK8EXjv>Om1LpH$)H8i+tT=K#8HZ6BNuB>0*) zx*1iN0(nLl&>G*OCOzMZCww31lQh4V|1&3VS>F4sE4ZDn=Q!Q#?fJSIAJO!LYi`!E zcT9>3(1unULy#e`u|&m;+)aD&;qBVPR~(nGGBSCXU7XT)9D+1+#)H?F>~#k3)LHY# z930-o1o=czEoxjYH8E~C4LrFF2q;o$rK=`web~w7=kLMGv6YaM^N1LE3?vppPFnIA z=ju}u(v?mHthnGsl&wnWpw_~TZ^dC@&-Jab%86w%Soc;h6U(l-q`)#Cq`9j)Mg+OnX$Yle1-cER`y4 zLWuG?Ja>t+JVa_Tms&sboDtJ>90RKq6@S{iyVNiJ$RC6`*Tv`S?W$oCdis2>3=_a^ z5BfNGz4WmH%06oit9nop%5Qb2tjDE?>}5e^Y6i3xI1UDvkvJpK#igvgEClIvzAA_xfE^)^^aIahh)oMsJR}R7ZCyoSusPz6i>|Ivf65(f>*Yo3l zNtkgUQ?0>skn*4y?=My+Y=QF2%zYcsZ-(ob7bY>e?EgE?3m#ODa8dV>jr%F9L#Iy` z)VU0FdYQ&3aL*sZ>C!`n#`(~-Zd5_$1}8@6R=cMz+DymZoH+7(e(G;kcn+<sUQm+(e)}<)Dqnj-RGsBwq@)xO`W=#y-zlt#<9WQC(bI#eA#NT#Y#m+cdh<=+dv>wbMCQE?c^t2!6GNcjispulc#^+(c7&y zP7X2|Zs|ANw2-JTyo!H5s@d;Ydbvh*PrEuF1kD*IBNEgGQN0G_rkHx`e+U*R$`!ut< z#>+6TPEgujVx}pv{kBS7xTvDNcXq`Ba5eFjU60EQL84fr^|L||cE946_V%w*e6$qPcKiwwFvbsJ-Q5{>sT1&ZMJ6NM*x?*#3%;{^y`v8s*DFwz&{tcNl~De|F$ieMci znT}6a8sNe}>4q9PS>BD$G>xX4i{8GR4Xmd`WG44aT|eG4LYlC zJk6ArHq?b#{_l%5p94QPF#!E9GkM!EOlB|V$)Zm4J9-%s^p?Ri!(U&TCc*ubkpx$S zD%@dCps+AdLPHd@CQVpW+HP+C5d(8&{Tra7%Vt8u;qO;1djD!TuBV9>SD6wrw)gHI zVi0|L;saVN45$jY-T1VTf}(96EJ5xB5+p*~$`z>GcvD#uTqC-OYV_{^v#EIpx}xHA z9W=}3f>8Y6pKy=ioe+NBMPn&$QbchvAewI185>@o^+D&3%9t&`!0qp$4zZbooF6?G{6W5*P_*fQkQrh;x(>}LK~D(qj+3e?%92|pVuP+CORvD z(*7^3{%t;X0~+dTJJ@(fMqj~)Y7#8!yWYeQR;WVurD4IUq+cWEqZUd*f|;ebV^8o$ zf_RT}z8+e+`qRFtEXOwzo6!7D zVI?StE&uT^%vwyXuvwby0*$j=PtPFe-K*7!hV$hjm558Y{^SBiShW5Coo49fO3Pxs z03Mi8wvLNBit4DrrEkEa-n4E+^-gf-BHv;oqXkMgAUome!tHP7$|&kRe)kLG{7svV zl%Wc+(IE6rvZMgLUlxnb_YvNuw!twb$PD*zt&*$0z%{StCcAJ?SJi*7L({%7(kr#4 zN4ACRlm!Q62jtz*CSVgVx&bWvGPqNnygJv)!E%NX=A1Rc1~QZiEQ5z{aU8lG1R}2E z!xNb|6z^|&n6w$$6BnDbjp6xQ3(`>ZPsD2LjP}J*!$la3!y-Xg2!g!Fnw;6EKp1W8 zn0S1l)8%MKC!>*rka%j}h)k}1>y>d5e&*YY(@@)*Op`JpQVKRy0o@x-Fu?T7ACTBj zDH}KjF?+0rC4yd9Zn?5lt#EgU(y!k;DB}gDc<}wUvf`_Utp?DDMxj+^JFSndr5c_@ zV?iyDV`u<=CFvgxQ~r*vpB$#izzkik!aH}FTzBLX^rvgjLyqyiTx=ygXh@!PjoROMP?dS-P;ckRyJ6PvH5%MSh)*rdhJX;YpIm zp`hDk{aNJ;=|rP0%JWolY&%2*eISNn!^x~7ro`G#sW~&zahH3dU}{Zi&`)(vp@qZW z>I=w-tJeq?B}7XtA3DcjacTMyw;qz=vEL!bR)n_#+i^}T6KKRvIFA@ha$fHDy^H>- zx?0F4ptqqY3ag~G7Sndmb&I6bA?eU54$$s7)iP(c*9B6(q2hq2GRBKtn+TR69*BYO zmHWFDEvheBT&4f6lf~NhH#nrjAG=$}U6M`WW+H72T(TuAJu+&DP0`-Tza(60eSI;Q&4Hf)J1%(|Bg3mW-`_h;8h$`XGe?$Ww;10)*x%njJR~9_n%q3h z(?#tWJ|-oqfqGbUt_CkwQ<@{!F3Gd*+3@`Bqh&XZ+i$ z*#L~gjhYFcI)^JPM8|4t^q=p~DZUiaT6?ruZPXlNYnWG}nj5HGTRcyaY z-fzE2B(Y0rC(*P#c5H}Y)8|^JqICHshsGsd zLUVuvzt;x>vZRDNP`a5eZ1!TyMLq9eI7ba0fG?rfrt+-43%%!q9qVYo)aG+d&BuQB zP;(nrq&BZFf7n~FJQq2_)iru_tcF~a)S6Cuhqm5KdR0C_N_%u zuAePBFLTgjLvM(lgyc6j_d4PGUVnd!mA)4u^rJY*l|& z%PTgsXwx1Na=+=*VXnX&%h9xcIb-f>$W#=TSB-REJi4mqeVtI2P=}RBPa%+%G{0oW-E!URuwC)izt=cd&~(Qx z*k6)nj+%L|LDdaA3s(a4{Bev@__}78 znWrMyv$m5^S69ambrsqD8>jJAflGD7JD%D*PBBaSq313?L%Tq;{1>AI1`RW&=v!_OBBsg5n%`q;HQTGb9 zlk!Ut9M-lhb;vb~$zMxbOiXK}ouWe`Qud{u13%C%>-U>1y3o5~FCS{#^HB_bacSFZ zfwf2ZeeLMjznJ~%MJ9t?wk)50#d3xd-}v<*Im7$^9%N_UAWERE*UG1) z@^ag(vbA-=-j;j6vbNSmGh?X)d1K6Rv%+J}aNc4=m!o40Q_ zi(=+|5HJwRsjB)pQG9;_pMpSg?!aZ{qBXG6*Ed$+gR?=+2S0WvvE!M#wnyYRewg>T zr~l^NH9>=;Jr$|@{`hdOHnL!IPffmDw2nNV7jZ&izW*6{--oGi`9ntqS&i~a9N z3j8~gm*hCD?d=5bjmYu+_qM=I_3!C&?%w+J7E5%(#8U?g1e#{osF;}fl10_Lk$m;q zR)qxx*4EYssOP*YZd&ekjUwzSh7baA^(I$kn7$sh!;=SpX7^i=<1Yg+ z#-AQVDJQ-;YxLpA?0XY~Ht$`Pk&&@-5}PtoNSQzObJY3GwjP5vuSD_o>Z)v?ORM=W z`@b)*#QGdwyF(}?74t>Z&A6l$tt-V%v>W}^NTB9Ymx8-tZh1$tp>tuN^7rANLY4)>uAXeSuOP! zaZ#CaGn&s;z{zCEQ%LLC@Ixz3dHJP3l$XemPB0oN=DRXSU*1&(XnuHu~EJ+S^mRnBB~W_Qg`pb^8v!=s1YW!h=1 z$rtCs!o&x1=(Ebu_S$zf8={)-aQ(uymzC%U32#*rBzeU-6xfTkv_fI#@u$+X79Y;b z#F^3U5KPhXP5oDC3l?qf-IXII(B87Sjz0NJufF{xqosufOU&Nv7-?l@_Dw;AUMKZU zO2h1*TZa;QGekbS-i693pRO)a23$Kfe-Qeb?DQniA9L=i-<6%jsIHNBZ1%Bg*;99L z=_E{Fys>MHND=m=-=Fm_^`4N=%LENeooUGE<+ABXiOXUc}i z4gH!GT8fRZHjQy{HOc=~?HSsC;rCsidMs1GyQ8nZcVb(TMk2}m4^?8w>{|QttMiEd zJJDU*dzGZ;7A9y}0k(V_P4^Dz^go9hO+vU~l8=6+%vm}riyMS9>G*`=ga?`HL>4F@ zG1s&F5#v5jWY$8NI7CGgw~^6^+7_>{UE}ea$dpF++YC$ScYSf}ydip02{e6vT6X$Q5CQC?vN*rnIi%O_@Y)0~A-(HA+ zePv@K=7ki|T0Sw!s40@HO!|B(y7oS#{NYbDjH2c=wej71TtAxKcfy(sQN|0fwjBJc zajv8|;3V8zS(@79$HtI#tJHubzFY{1hCac`8_c+6>dBBVE zIX{w>{V;o*nVDHou&Qo)lWRTrHjZLn0p3FFsINeZ=TWZ-)?s1R?kjS9EDgp}VGa%s ze*Re9aPO$8D#3SL_akCrvYxS8%mxGmw6;no^tLV8T38IMIqnM!-`CxMX@#1P1$lWq zRD@5Sz^7E~t90^4p31F~^VFT?zcKzZ^qW|wOJ=yO>LTshAzkl#QO^br6gn1TKi~GB_jAe$1Nbhz4S;~-g2IK2SwQtMIQuUDu4Gg+-ThrQmyUwa<;xCOxtd1rE zF%mJhhX&^7=|TfvtZb|uu@miFO-xCfzt@EI=Rjp>3x}wdl7;(rFTwS)6!ma_(m8swW3|p?5i#3c^);**6#fY5kLP;3OT*{iyXAjz9vZV)U~mv4A%eSv#y_v}CA2y=X!;s|bYj zgMS4_Wgg+P_r0!8l$p8BT%RJ)ty?dX!mnCV6U;I59<{zgZ|Gg#fG-ud~ucn+8M^{7IZwHq&Fr%<=t1SaV zSU_O>Mg5$WVnQ$TcglCVri+#?9N7w*H_?3jlfpZVH|&4WCWlBk2LuNv>PEd=Tr`et z%Z|j~x<5N4Zc>uOmdf+&x2-?kl~nZDsHkV^>U<9#K%1gdW>^fsU_YAi0(@jraab zQpiwqjaiYNhPnF*Y^RKC_o~yhoYKUP+9@8=z`c~tTZ#UI6J@gU@`DVwo0E8oX|Ynz zj9!k~`K+%I`-JMGyS64pCKTP6TS+YwzT7f=f{4AoTAQ9uU!r7f{o&!mOde7kOdQUM z`io3}qt&-3MR|Avm&oHX;f-$H>`NuUq(z()9Wkc)9cDCY|A81fW-$mm8S`ieSGG!!6 z(NF9KOcIwYTcF3#aWjCe@usBizP}ilOo>?nH^s%1y(rQLI!axy;)ql% zKlwwqh zD=;wdyb;6kE1b3K(-#&&7^@wQva6GV!eL67CRv0$LP*C}G)KXA9r({k3)FAG4>k24 zcSYL(jIZitiR)uUl))9cHO{@1Q%NO03Ra&KA2iJvecd8s*Te-()Rui$5Luo=NZ|Kc z$TK_n2nA}xj@Ku-C^R0LF4`QBV6su=R56qo2IRnu@_5?c}Uq{bt<8J8O-N{ZQk+ z@I&w~9~EB@z`!J15^T7;@_ng)!{xA#l^p-$kNXegoSb-t$uH)AlQT!ky}sH+cmV4G zSK9F-laHeSX`;@zj)ot8#r2XmAp6jg`fP@xJ)!~M+riH}CWhkwvGtZ=Rc=w+=voVK zAt0bAoi-sL(nyGi5=u7+ND4@IF2F!a5D*ZM?iP{m7Nn6*r6iT^GZyameDC$0v;OTL zdvBik%sIzB?ikNkW+tXO7lGH+)gq3v-WPoAG)+uQ2vMB!#;f+IC4qn&cki1-_v*`) z)Xw@4Z(f<)wg0(09NRL^P5oF$CvMy_U55SEt<=%mMt^Y02?+^*_LJDNo6Pz%`ulDK zk+E4o^r0@x8=cX?w&Afe{xB`!{mGwqUKSP>UxqEPoqv-fwo~r7yUuIj`cO%n`V_J@ z#4ApwHP_q{7$wPTn&@r%F|d8GFr0J&ZCbq46<1Vhr`)GHe}ynTJz8p44 zZ=bHiyvF={3EM92Cgj<(h3vP!0yMotP%^bg+-pRBF{QUmn*eY3JVnkAi@G0BNLGo3 zL?$E-{@w|*VI*G1$*5=~$2ZV#K9DxoBP%H7+?qc7-JJ6kU&h-fj2ns+^lAV1%eX*h zrDfMYZH@1~aoD=;^LSG?QpDJsLf4u=Jh{g?>bJ0m4dN(cz|7^o!dbq%{y11z_}Qn^ zhUc%GUzlz7->af*D%!N_0WtXn|`eGFF46H0H3#yKejw36M zy4o63%heaMhJyC_dT`y|DHTd`{hcp+s0Y9YpB6}zf#U%qM{uB z{E@S5(;IT1s-@}lboFKsW?%h7^%keOB_^=>md`E{W%&70tgidV84Q%;(Lu}61#K4Z z_OXTsFD8$BQGPhPnI$FfE!c;~&A!ilePS|z6KT#z8WC~8M7;hS$dt^!>P|x>FaWNf z+d0E1{k&}stTTTp)aWjlDCpVU0G2L_@__h1IQoA!epYri9u;mK&ik;ivd5?r567=d zF3LVpdk_}#A?j3`-_tU=O1!YV{A;Xj^P!Vd3EBox*Nhh~ovO?dXZ+H=?z(5J7t~n% zFSSm;Ag5N&_EzHZdDAPn_-s=-^y{^-W9&NsfV~oDx*7Q9?SaqZJ1mzBOidqIlU9tg zw?d|r2Wm({()*sYWFozVE!VGuVR9mSs}*a269pB_&6lR85;*eMx-Ew87w;Dlk$u!# zt9usW**Ad$G?v)ZI+n&d#L`$>gj5-3dN{MtU4sqw)@yzY;qjUPut9FbQ*u(Amp-k< z8b5d5HH0>*u0Y_rv5tg9Y3&QS<#F@aP<~8s^JJEC9=YMdTFDbH4J4oqZ(JrpO=fjf zv5=c5fvbLc0%xjGVg*uAvB&S>%Fw)g$#%{BKJ8R;;5ltUx|$+>=Ue7SB9Gg=(@Fgb zC?*p|iIqAyWJ!MUnPU?O@SCK>b^t>}V3UY>9Kv+#*7rC&ovAP6Z0K61^$MYQ@hP5n z@Uq*kt?F+DgpRqd!O9`V0c=vLy3)ZFQ&y*V^as4f; zeVfl}Y$NvYVKjR3PHF&!Id11Mw7Oj_v~)+N(7k(602Kqf8aFiwwYj4uoFl|3WP_t;l@jwEry7xTgP)fs|yC9P5Yd&+0(2nb2hyWQz-**0EMe*O>6 zS@14X(UjsAAqwvey#IY873#XWLG={50s$`1)zdX4?Kx#>=B^S$Ecs&^f31tIhzMMfw13g)Se%|L6RmL9Gs0&?eoJg&&OpKyoN^E@H za65Zzf+91&hZwL1Z-0F%gUT3^n5bBd3nb>RC*t=a8RZ`oyuwLJqW{)5e7&1pp5-Q~ zqxEiuZne8Mi;klk-!G7-?7e@AvRRagmD_ADpYNJM>^JGyJ{{9fD_)v#TYJT?mnP4; zqw#uCc<~H5N5Q=kI!iT1<0ma^DgGlCLpVwu6k9e{wJE1duXp}Taw8`>?-d&{C8aRN z`-;6Um>3po#?qi-{IV^pa9E;(M8qMHS@FjjhqM_CO-a`kibrJpHW)=0yQ9t%eAke2 z0#U;Kd(WQDw6@|q;gX18t844mLzr@KY3j#4J>tLNnbsyIk+RIh_)z~$9?8f68nH9^ zwRZ^}QkSl+DwZhkOpeBHWCf^sN97FX7tLD~FY43P$gKkdxt`x0(OvtK-d}RN5&m9e zYsptnvlG_(_`l;aa1VCUZsY1SMLuXjrHb;ldF&j?$HIwc_4uo``6o8^ML74zhqy5W zgnhU-BHC21Ubkdnma;MzatAc8=yAj(i1Ok{wh5R@(Ohx$9@R=!lz7O>jAc?%?c)9d zi`>1aZ5C<5L~Q-3jw5vJevLJSIB!b5eBF@hev<}mEmLH^|67fRqRq`&c-d!4wW;nE z*rS|CM|6O3=$7P+9ptelM?357tJLePXnwVzYDD(UpUN1Cb06DKW=UiP;XE|4<^9`UiKIewzZ|2Q#$F(Vm?Zu z!`vcLG|{Wzz4BS?oh?@PA;Lwjyv~WkdvVlVc(;yCP{L`_Ba*)f84g`+-yilR zdm7>R{%du0GJ=BN(qh%uXpO}ZI7x9YkY?Z--yo)Bu<{R9ebQG3f7jG7irwm=v2pLF z&Os+C0N~#k{I^KavSGj{_0v52jMz5-7KRsDEeUEgX*zmQk;{&shSXaW6pXh8_Vswd>n_ES~qo&i$;}bu%1^mI@1=Q9Q8?m(-OVC{C^mLd{!C?^@T0ZIi zW0#d>aol!-ZvDj;W+(fn9GG|()*YcYRHUTjU&qGJlS|TePg>3HFTxVH!G*@tb2cY2 zjl)r^8V}aEDfPAE_4~9XBo*!VV^B8^-=PJ2iCsvgy7}a!{IZ}#l9T-_h5?-av(iz% zyg>Hw@u}qxZd{ol)6D%)vj*!8ybxEk?37F=%vR{?l6(9Zl&vb^-^q#v2g{AfD_5@g zVD?avceR$MbbUM}b@CtjivOIMfu#Q81&9g8Ic;X~>*?u+BIMgtm(_%ZAc<@H{PpZ6eq)4&w^XjhAjj7&&KXt7cmi5pYNM4VvmBtl4ci;GK9 zeg_vXfew!PLlI3tMt-a8=IYk%C59yvruu z`~~N+J#g#J-7vKm&oV#n1`(}aJXOLqd^9eZ&EoClWyoGr?KoF7}gUN~iQy)m^w?NKA)TRol~ zC( z68I#nqwWZ@KB#0NF0BigUn3fjbXuaumt8^5s}rtHv2<{F?a55)XkgCy>tFZYq0BnC z+Ku7@{$fgxRo%;cX{YSH9qZZ?s@H>{8ilcG*xopb3E!;TICLw-0+-IXB6-`z^G=cM zx+0z1N!)kcd$X@yY&_F#HrO>7x~F!#PiSD$DsHQqEhyMi;((Wr;_o$Tu3>-XOJ|-+ z+cP+n2Wd-vxTST*1|!pahMnhHio(z4&59Ro!}Mv|IEc;5(5KbcYly|WR? zcfAP-r-hwQ;YzLewPCGtz5gULd|!oUl!P&%{0Xp6XI~zKgoO0=D%Mr^QJ_hIXJdcY z;lydjG%FnY>cB(VrgmtEl8|Jox9o|Q3X6(G_q)snv6H_WjZIB1>n3jZX~opp$Vt8t z9d~%v8M%_9$D*`<)W!XsYBuEem|r*|@~va!{LI&g%z4>Ka7NG=E~*NY^L^Ux@$v7D zWlMP##PoL;l359rB}Lwd6sQSQGH}m}$cbYU#@8Q0=wKbPR)hYPUkJVf;uy}4H#Kb>LxmQ-$o5kQ#*!?pK zclq7O7R!?K)KumO>FWHC$Eumip!Q(#L|LSe4T8?!Ydb58W!^(ZMh5TR+;a}grPkI* zANGyYWhgd}o`u<#-4zl#X#QpI=!B-A4e=8EjPMGp)0?t-@%*`s+J#OLpt^uaM!~0X zSyZwIn3@9->;nYeAyK0OpZth&u-e(@5I`E`l#d2C|n(Wp&r)!${Bbs1yXnXk_3c6B~@Z4 z@6PZFV{>=ZJ=+1oI1-<5+bwZB(CSjm-UVrKW#oduPmwD$)D!v}1xBAQshabSoqSRP zkvz<%GNrKa_sXd5NX6iz6Ep62_^4ghizI%clnrc(SnVnzOWD7t=Nz zGF~+i0hwS*L3Z~&OPn*_aS zqN8dF=LiXX^IOC_7lB|zJnw#yUQ!F5gh>|1;@>68%W_J#s6wcXRmabHnLd^2M0^{7 z2lQMV`t;BSWAf{-3U~qz2T;nw^$lva%*=}}R`E9Wo5?un2|qvlchy{33gc- z8A72*iOX&6?HgqgcpxRG@4JJA<@Z32Kv>j-n&wZY`_M532Bt!z!N~ciiOOwxqn37C zLa(~g@)otj9dAA=|epG8XTmS?uBTb-!dnrWiWK;lZ}dyV+AFc$$>d`tH0<*?k=4q0mG?3{P61~?#X5G^25u#E|(eruh_^;AL}o{glp{8~@f zh$OmBoUrMjgx>iH+B3Y8&eQBIJT$re=>e_2NlZya)plCSFXb?Ygoksl{Uo%gN3twE zQ_#|CPeK8oliU*(8X5}oP8b+CBBb|9o?Z?Gyu~i&V#q}$^t0yVpypug8wxB(86tc% z+X+vL((gO`-;l&KZ?_YfcR_dPh~zagrL9?c_xQ7!N|dyN-B!ke zsS#}C@4cNJvIK-$o!aAIjqveN&cH3@7MW1i^|~p1qyn3Ri&_S3A{WT`W@lG0iE}b! zAz?+2vvs;YaE7$2g}%_>4geZiLh{?B$v47+n+zzc}cXcYv~so+j)2qV}g2E1`Pw)0F){2flfH8n2vp zZVlrIiENvicDnp?!yG(c8Zc1oTR3$O;NB5Y(6sEC5!=3OJ%gBY9ItX?wX0x>$R;H0 z<9AwKUvKmA=?4w|+IzPlb};+={24!1F*r1)-D-4S{Nn@I;u+P)^2Wv&R5(?St{+e< zX6en&x|y;@u7FtqOc@$m?d_v=o+Rov2oFuzdj;337AEE1Pt?~xt?e?~6;ts=bMUC_ z!d_H9S-GXdXZal$!!Op&XR=s1`zuIm>88p{(b;>XE{WT+z{Qf&oh}ICpC}x4!$!>0 z)02P%2(dE_=ZJ_TCdIP{j13K)GxgLC*b7=;!nN?o$;rvm((>7}B+2CI)rzP2UEjVX zJtowqeA7^uYg%AF$Udp5F$H~lRu_nJ8OnCvLCmFrwc6<(ah_|exmYL&E-$1KDR|v# z_Ue@vpNL%-ADU?dRUgmx@P#)&rgyfzrNqjMnOpgrc0q-c)hxP=0hR@XCO8sbXKHhA zs>&oM(Q{GqQd~@Nv=6Tv4dOO3vt;jR8~zYgDwXJr$)&DUd64x8N{y~f@2J*uZcF`g zWVFQtSk`n(d|6mJ1uxK^%6b23Pbro{PsM6ac0Vsr4s2*TJbO68l!hP$qOYM^5NtZK zH*w&a)upW!>BtaWwWLdBjr;ob*K#t~IjYzi#eXst;wjastj@ps60NR_azxMy#sv!t z)$Dz@ayK>d27y93to=Si16}MD0I`Lkku%p6d^m}~DI-(k)i=>_@@FLENI56elOe+l zvxQw6u)4jbKK!_V8}A%fIO~t&?ivf-0vXcK`1)-;u}7_nah3-6?y=}z6I&b;kU8ZN zH8Qoo@2p9uwkIV=08(GT2Ts<_jdhxkWF3oj{QXOSL4W+nFUa53FF>@;4A9aeY1isX zcR9F>YA6O`fp7pKLA3%Zkc*2@Y=bgxIR8|+!OX_km7JAl0WM{mP*M5hy~4`ZbL#sT z&XuoxbtiOKDHHLuS=W?a89iCXe*@Kq0v$efv~*1Jdy&LUc-PhAcNUatmAr|@&#?I% zQv1&I{p-E*|Hl+6Cq|3F1y|2!lllDP-}x{A3??$Mu(E>U_ZfxMbjjB(HeF8!4y!f z*pIhJnrlz7Cd^^=MziWV)R%UuOIzJ}Ivmie;0nBXBln}9cC5-RTeafT1G=dzp<~I) zdBFj0vD@J0u(D*Ybl>CGp7V@`RwnVcf_l`4*qnDkDgafiBi`J>fTXKlt4UylD3Fb1 zr<3~7-`(9CJF7g^iq%f;0`p0J`eb+ zmsIN!_N%e8U?Iy?T^`x`{Pe_Lwxb+t0ii==vwRu&r%Kod#5pj5_S~};9WA9?H#C9_ z>-1z+Dfs(W7_}v)=Z}+-`dPB7wL1IOUlZ-TX*>+WeUCP?0V}+HgyoaUjd!HzG3yKH zf~R|X{^jqU4%rN~nSyl})LBmK#8&vgNy7hF9?$yWVD7+NvgJR+l`chkh}Dr|^BJ~{ z=tldjHYo4b2XmdpOm48dEpJZ4n_6h;vU}G(2^*j9I?kE!4P&cK!^k>QaGBwQ$!mC_ zsI|RKvcu!qp6{#Qq`9$aGR^?o;M{HQr$f7`ZMd6}@djLlOFm-w-8i8|Cn}ESWyrQ&g^`?)V-2V+r^qi<4tGrxov9s zR)lYG=X)@GW?eqJpE1|6fMT=;4sz9PaWBri)YAC2)r?Rhl3mncH*=GNe)^OK``R=&&TgB$X9+u4y z12%tV`#WLrZ;9hpaoy*Si}bs`i@g%Eh3%&8E*=G6`9z`rkOh%&Vrj`k0i?aA!5w^{CHm zi@MDH(uw@)-ELW7F_X9Nyxu?g0`j2S4mH3Gh-{|dDAwU-4_>i(Yl)88v??|ZYg(WW z-MVn$8MM%ba^(?*S|sJ?o)BL+f1aMKDA-X}&Z`(qaD_egf1U+Zgn{WV1!~YYslCN! zn?E;(5|vpV0GNg9Z0t06s6uO9yjBn8U-sR>C;JBIA`c_#k@&KjK?mRwWF(#fCUuP5 zhDpMqFR;$MYn2t-8o;ks{C{79u|WOnz3Yl|nuv~z)6v$}hE`5ZZEzUEGowvqpD_Z< zXS3R_jC+)NY@oE#rn`zrJ=aZ*49C6~wlf^Ri>WElz;_y>wcG_lZVrXO)Ox>Ks^K-H zcyTuRV=fplEq?@+fg(co-Q0{AP`669&RV4(M#A=;VwoUlfI496JH7Ah`4VFZ?_ezl zF8R+R8yg>gv9kYSE9hx10!*kWh4dGWYl4rUg9A^q6-eRN1o>0z>$zD3Qky0F%IwIc zKeb_{DuyQ1^Bc~u{)VI*s=^A7gXUQ9xkxPjW?D;Jtu%p7gg%_~OeGkSW19d$p>mY&E0pf?WVX zEvhd}r&;1olZ@9nU@-53Jz&FgL$@s%{Avx@a3y49unNI#av(@8m*%8lQ+i)4x(<5zChOiTTDEW=&<3re3Fxp5{JxW#A ztMz^ql3l0TearO8w< zAGzC-DDiME{t?(l2x@g(^w~k{OHF3JNW$47N;N64S`Tn?u`wt?3x-yegN9|l2kkd5orOm&E<-~=EVxw#?!&=|*`@at2JNqe~a zct4W$v?^no0Le6{Q?7T^;2s6K62Ck1s{Udvo#=kgyH)TLUt(3w(JoWG9(MHWhUi%e zs+waN0hOP^GG0`~bMH>(S8K?KxGzo|PvX>_=p2W|*TWkil|LLDuSrouRJk;1R1RMA zy5E%SMe#Rhkm#?R(WL10y>IT7Tz>_&FX^Oq zgR}Tq20n%vl+Z@{*oG&6a2Sb8r=@AFofif7OF){v%|&ofRC{EpG??Y=H7C!$r_04HcOJ()pFDt z?v#zbxr8kYtnPr1b!47&@;YLxNO|v&I*(4VbgG_YltOC6qt(!MwL%Q8{g?5I60Q|6 zc}5Q{|LmK=$eddNT(tai__Eg-^F1Wz6}Svq44#%PZdaQFzksqNLyu9Ze7Wj>%uiRd zQEq^0{)c7*?qV&41=eF{Nr0Ia*YUgac99crUFY|gd?lV^=q+S#*Qo#MDpfvHd1IUt zVl>-G1P1X7yv;Vj?W0=dL;H<{d#|632dQMMo`Vq5xpTuS+pKDN+EuPwfJ(^7k|^US z()lrKo8#3-*Xq`QLUHWn%hqdZ|c-wqH3Eqvh-!Z*je8@nL1OO+1(BByUCe zuT=_MNxV@(1nY$n^W?$WunR8*?oEF@=SE&#QD{5+4W>fn<*@^LI6mBi)*Sor6^@TD z9^GcRh%S|}u)QnlYY82MdS8Z&(+dlbYf^k{1!SuSubk`aA&@~$L!+goRZ(8<>gERE zJnv~0i~n(yZUD~Qd+_0?FL+AB_Se|-{4nH-t1T_(HE>@KvzXG+arGEUNT9fvzO-=j zr}RwZ#8K^ewERKehgco1G7&)sIS9s(nh|35X4;bsmZv{v^49{hc|DQO0Rkh#7REtR znwpy5u7daOPZ%)u4>rJ+j2|xmWY?kZg1w-lwQpVRlgQA}Is&~y^^Ciqb>%o09nc#v zh=Tb(;r0Jo0kJCl-%t7_Zq#BIp!a#Qpf=d!Wv9;t=N#4?=Ma?|JhoXMu^MsHBgZa7 zBbEK{mvhArLfHydn~!!TVY9A*b{Q||kOdGjJA3JHZv)=;`3GLIjX;}F$5%ge_iREw z0;edpVRkUO6!Au+xjI^|iTYvr!Fn}9&yxyLZNf&fwB3V)gT1}txyWK7Aku%19rpC} z0Bo9`p6<8A-J{mm*H^ZUkWN+27LdB<=*X*M05K6aw}aYRM9~>CwDM_3`nvqz8J56n zM2a9{OjT05u`d>`KiVFS$`)t`Jn>spe|io9*N=(@U-71(Y4-~XxzMP7hv|kh*5g48 zM+*-@J_M6!v1Tr0Zp>c1C?2+Otk8kodp-ci_#-1Rw05BFYgIR0_ImBXIVf=himo>w z9%7@uyIUT}R+yL$Q6+HNxVs-({m47fX>E`@UZ20`9VB~wwEVA{Tk6u&krWvzso@f< z_+bmn=g-f#m0&*s0Sjymm>gMMyk+o%XZ`sQ>Lp=iv-K3G`grRD;)K^Ib3RZ_Fjwjm zl$4{IG#4>;S|4T8ARoja?D_@9I~NufW@np&73$(q;T}0U7JzQbRp^yl-jZ3p3-;tr z_Bc4my>!W{r&`r~o2?V#4volXWN0E~9%W|xWufR}ek*~uPPm97JwwA35c@MSZr-|e zi;0N|Jo6x2UJfnY43P0%B_Js`Nt>{D^_BPccfBd7Nda}!|a$cHZn<1-lB8eZq zCi#UgjjudX6kmxa_LyEEBZCpNAiip8YBo1F%VX(S0NVBE{tH&hY14eBz!TP{-=~yC zx`+4u5y~XqF^t4(-FnTzCVC)Mx){9HgnXB~`@k8IFu3$b9quck*S|#)`Fy}S8yaqM zzTwQ+)LWdt8ygVMk&06qF24;{Y6>HH*o0ff|XoI*CJz;>f8Euw8* zUf|j=8U@<>*wfr1=i^$+bZj-sM06!pHNQ-_`7eAb-~}mKjFyqb22+(9(Dpvc{l^C@ zxLj%pQJCi*kBH6<{P|JeY;vufK;}Q90y~v4Ph1If(K|_ zno4#BfR;Eex*qJx+YOFtNg3tki%QIPwU6E#6juum-@L06C%J*I!(4?1Ceql1y-Yi= z#}rcIwsv;Fx{w;2t{KAF=0BD}7D>~Op~JkhmEA+BOeL1fp;GmAthaHG&S~)Tm^xr^ zpNBuX8l?%RXq8l}JM#e%jrC7Q8w@|rr>;o;gydv4HVc9IcaU#{c+u2Uj2$`9`rvbh zR}Y+K+54BTrN>VftzJ~d{)-||c}fNi%Uy) zV!lgBNtqREvP3+o(Un{ybR7ii=&3dMB6xy^X3?mbh zYO>4AiKxxrv2R`O^H4vA?+r9PJ13w~2K8xBQ%z1R+J3gBy z`_NF$X>$Q~4VpW@fBULoCOGN9X)Fz-W|ec{YceE%0M0^z^sL$HLrWgyw~m+i7UfqP zk)&w0A4-zBlhKWvGgHO=%km`U1EpStn)C>XV6fvJD}yskH9Pf<)3;7F^&z<25(h=U zUqry*natVv#cw>1*v^r}FE89I(kzO$6iXkaytE~6y3p_85-m$kLlYAkdhgsaIGwU? zpFVWd(SJ>Sl#l;AA`VO(LP~_Kuc7%bC+h zJ5&PKORD2*=Jx@~~Lt z7dO|z3kL^2xbC;4Lauw@hwtf`+1WqOBw+K>)(^pFcpEoPbF%=+hmxd)AfO37 zT_k%fKxZJnoJ=VA4}{~dfh^+(uvdLIeHmy`@ZH)Ck;z_EN%x?uGDhqY5fOF!X7(+P zJ;2957m+n!{{H)G?>=|01iJ+%P>`qQic+ojV%NhKxAq|fSTP<Jt0<0~ZqIpx^<;0N#jn~W= zYSk|m6B7A@cL=Q}D)+#w$l!HoFyD>L)Lw)_&SyX{6#w!J~OhSob&d$!7nj-)K=>OHvDc93`&N}gN9Z)#% zccWWB&eV4C({B(AOn`q2*WNMGL_etu^lyrLj@ z&`4_UACbtK{fLNT7I7X8;g>O^gr8jsw46r9(iRSe*zL3aTgljJ@!1ifG?=6_-nox^ z*D4^!ATPu&D5yDgLpAdv(4G_=KN1T6{_G#sDud3Rpb6(ti-DFlr^ghmMSp;C#QvsF zPwtd>44ASpYqrX1i6cV2;}l}&ST%XAxOjQ5hdzo5g~)6$y)fLAa&dwKBO_)-!^@6B zs({Kc;1ze>+m86briwh1O%pw7`D|I}c4hc^0ln2woc)7bC23Mp0a#b&_|N$A|&b|9`z)htnutn@sg3*e2*lavYEM1Y-~?D9DkN zw>kee10o)M%EC~LTy+2VzG#8E!7Rs)R)8Z-O-;r{!)C=0 zb^_fMnxSV#u)oypb(jfvs{Y&Bj8IZy=zp{SEs)u&1(#tsG%`=B-3Qq3U{m+l>hUT5 zGtjji?8hg-;TGwWY%!~M`5ZqT+mc3*D!dz=2CMFS>D1Ue>d7uCg*`9Rm}|oZK0emP z)6NB(=bdO-=clKuT)XrCZfZtigvd8An<+a$=)TrWz2~zFRajeN;NeF6$sw?I%dl2|z&!c{jN)L{ zw<%eKPC?lLfHh7w_Ifdbe*v!G=(wHb;SHE4Oe^BP3xHkJ;WvzTpg4UXW{1?^&>oHa zUSaj|1sAN)B5{FtO0w1u2hwH3HgM}vSWwf8P@O+7!ZCw^_WHB#f_-On8I?a4-b@{a z2c6UAdLyimyT7u@aL&v`q)S-btc+)q~i@L*fB-bV-k78E2I-2a{CR68c-57sSCGRGA z_un9KdF@`t*i6s`jz> zs@QtCg4$rYaeJU39*~h**!#8i_AFt4L4rOS)79GQC!P9CPFF(0*~;qL$mOdfZzo19 z@Gj3}rhh88oh5LHX39K$NPKm8%JZN`jJc?zvuOf+=<`%=l#e=PtcC%_P{5>q5rP(D zDm8GNv&wbJ=?HUPUz$Oz1>nG^Kw5%NrhG}@n>{hIX`erHWe@ECX<;yc!-ScUM&b_eShZJi4&B8 zMe`&&tC2M*TIG}nFM8&Aoo!ZTQn*RLc2YdD z1zdM&i8bh4Kr(!JyN3h9jon4GJeb;>XGquI2CEX2#J_~PgP2cW28FbvPwtlQeAhAb zyg>OBb@W%Is&<}~pG9;K!qk?MPeO}L0X(L!LelcD7&4rd`M{?CnA;&X|7n$f^&RX( zizOg!Fr^uN)vJmO)~S7}09b%$6kOxtwQjrYHJ2fav*i6C1;jq-PL&dHu&U^gc)x;X z7*5ZO)j8Hi6X09 zHWc)+ug;MU*oq^s5l{J?z_8I2P>%Q^E>%NB5^rcCCFd0pZ)d-G<-^99KtTKbveA)A zE3A^IJ@)gTDMdxOvdJ?)U-Z|s=_BM#;@zC2ug+2zH+JIvdCJ`gU}1qD3v-|aMKOUF zcWD+m<^AQ$nr|t%Pm|Aze^gM+9xV8_!Eo}2AucYis;cV#{rlbj4mB<{DcXgi^~ z(DXs~7xw-=B-mgghPpcC=mVCBUN87A&UfP?NFYvxdU8k0YUZl4N4|OaQufT&xkR$e z0f0}9V`JJe-{=0?!|aJW;{mrhIRTSO3m9=xtx(d^%A(%}1Qe;Wbw)42=csN>2jE=2 zAa%H6otmUnq}Zdc@nkR2bWjw$V#-$Ah>K|c8m`!*|wj- zdUM|PmPtxV!oAkf)kX60OgMb6B5e7mfEJj^OoZ&Fxidp*PL9?H|34zX51I@ywNnti z59Ar%>X&Q}il~!MCs$(rh|b!ID)lCeb_Ux`*!GrjCK1qBUkPbMfg)V*LYMz_2GU{N)z! zWugl2CL@cf3)w-3O?c3j_HaOi-lqfV2Dm&nXtn!E&X~{LgfS{tu7Ds~S_R*6OCM_* z{w`Wkh3{L(IUCFs9hgrNRm~645!vV$(l!XD$aal6>>PJt`vrM@{pp_MhoXn;4M2&4 znN-#T*z!)NpKu`%q$K&sJ$%yaWH{R_@G1N)LcJSxPpXleck1<;ACBkY&x3jXF=(GmlyKYJW-xARRgov*(R|e%O+*QXp`r}~d#BPz6Qof_ zm9wA3CO6ZNV2Bc!oSKtL8{IN8C1mkn@N@)aT~FeA-Ly4=Z34 z$`d)5)%zYkg8`$fZ(T@Cj1~l#z==mr9U`6Tj^2Z`@DMu;>40$Lmn$m|4uArIk3mUD zNbpze;j!Ra=7V3B#O*wUe0)-ofs$8NjCf-Vo;}-*={Mskq0kZEy?RJgS64S((%0YL z2tzvP;^O1Gq#q1s4=zQwdqMp2NnL^Gk*i50NgA9I6!OU}Gh(+HP@#8(w5nnr9G|3B zrGqftKF2l^!yLfqa8_Yjdec;LO1kz)h4#>glevB?Ev;`K!T&v8i z9s;lOi4r7q5USHPTnzbv?!iausoj5)gOLd1%^5~0D5gFk#^K;@(@s8uq@f}@Uc_Gn z!f>BHeS){XnQ+=vp;G0TUb6!ijVhJWbN3JfQ=>L#GZZv-@LGP;70#(Gnew@07l8Gs z{o>%Z&P*H!hOynCy<~SsFX+t&m|(@n&0RWn)jHNLZ)apg^LP#79i0cg?;u)vsEg}1 zY{5HU1uoEAm`Dtb%tDj?yM(YvHtSq3*>4ZKR5ek*Pd>x z>**;%SN7%0<~y%Lh)7(~Ssut%`=f_K9Dag>J7hZ^E`9BtZQ^m6+{69%hm12Ct4Bi0 zJ8iTuBE4r-y&)4hRKj|xL1zfT@(bMiJq-0HQw&e0_!%Q&!1; z9j7eUx+IP0!h5@N=R&OIXVA0;@GNu|@b%FCTuUpf^tH?X_X>Af*Wp004F;h7@PiIA z_A#EpTibeVF(TkPtq1-t=n6|ke8^>TebMR(>H6o=#5EK2?_8SJ(B^5ApM!#ehMm`a z(Jx=UD#SA9?r+L_Ouvk#tK!*I+ezBm{wGW%r&Bk2@6JgH;_mdSF=c3OAwOPoKCtycT$ z0h(M!kDYV4ZpX?!`ZaN@h<2R81>ltLF(ANyY@Mo^6Zv_!2`OQa{G9&b38bpKYph=~ zx(IFUXzj@jCzg1sZ8j{70?;cBtrW3UH1zw&iC4X zT=Mf1Mei8|eQh%YTUL=~E_CgM-;FB(rhekU-T)ZPf|6gN42})v&fyeNmSO!w3*U$3&RvI2bf{TIerC1LgiQNXZ1`*K-ea@dT>=MEU zT{&Ql3W70r*iPU^c=X6mk8Eom82l&c?ccuHQpxB!x+&D{?p-2yaJbUg+&m$|nEIDf zd)5M7cj0U-k&pBPbXRAmqXvr;gm@iadL6cS-L+pJB@9ykABEqq)DILWy)luF+==hK zVAZgAz1ni}H~vt~I{El}S$uG=L(^k?kpnM(jUfzJ_r5qhTdn{Wz&`0piT_pgH9du= z-$a;*yO-i$FQMAz6)kf1yX1z~COvoNPj0HqV+gs$br5DB$C@aRh>p!Bn?aqrZZzZf zCsei6E0vX%P7^Nk>(dQupx9+9r33$NoICOl_=x;SC%qqe29##lMzWooij#*s6Xy;Y zu+G68LPq*5m6}ULc&dlW2UW2~wz37goiV??iw>kw`UTDR+kXrXOKJJ0p-a@D($2?% z3}SCsR|cGJ+L+8#VEkVRRBV3##t)ji@2Z8qXs*E5+U#?_H!+34WQI%<0APLr_y~N` zUGpb43htK2b$u%eGvstpgg#`qb?Tpc{D%Dp4H|3N!Qf#oROo0^JsaI`GZbh}2DyKp z?sa{}JqhUhGW%ZqI*2}AH?1Tzsx@?7d$UC2b-)0yeW41)smnnOMoeHWx1FHzv9n_u zxpp-Y#5~5DtTFOc=+5fv>tQ6D=kD|yK+OPOoU5_>3xP`d?-FD`k4s`5-FY>wL0;@G z5D9mTQi~<47IqALl)hRJys96rq4yxH)Al+J20calqDN$_A(!{i-q7C1cM=E~8$l%~jh{ej!JV^7w*RF5vp!4NE%(4iDG zdl`M0{3~6_5!X_Zs%(A@65^0kaCw2hp@fVw@Uk-k;aT>p&yrYEi>OrBb?Tc}*?IUV zAPliyK4g2W$qAn%>nz+^cRwu!xDxT=v^vx&}9hb z$Yt};u%ElylLnR{P-zELK(;uFJlxc=d_VuC;J3XDhgC7tHN_TZe~D4&*o=QZtG(9N)^?Z+@B+fV)(_$NMQfhs$Jy(P5LBsH4nb6i_1!3dY(dtQ83j4+Hq%5u|e>-7L&*qKS_2ZG^M{Pb0n=E^?U$RRFiT7hB# zMm!910l81@D#pByz<e=<3XfuVT_?HBa(c7ADgp$dTxCUD2aav1m6 z3e?_7Y6gb2C$xH8(Ytjg0zeIliqd)46lY|#8d)C$2yuFk`UW3IY@XEA(pvhfNli`t zMKkxiG1=jh!OlszHFT`8jN)fyXyPEs+l_>IpTq2KJF8e?1%qkI&D#u)sdEFK&rTGZ zJ6FnM;O4cKvfwac0Eg!D1Q>dAk($K_hDlVEJO$qF4Z8Po8szw4Q$Xg!kQJP@Lz_y{ zCzHD^6+WtR50Ucp`|5yzu#`SooLJ_)k|X=WPUD78Am0N!_Vw1J_;VNn^W_(!W2UK2 z5gZ^#t!r{pS9ccdY1-R&#LVV)W^R=qzygMZq?T|D+{n)v<7g$a`L|ve{#rh?%ZNh-GI6+E&_R~lw-02I&Cl+#e;}Png)YFEACIpsm~^3!1~zsMix>G$D#WbVWFL82je4mZt39d8 zJluGv34BYk(HTAcr?hMX{j`ArZrW2$I^wY-7Aww(QIW#nsus97%#TLhif2Ot(sU+@LFuKzBMS$Yn zbY#upwSTJuVFhrYo6pN(?YbT9f6!UfW4R36y6Nl9GQ$*2$XE%+Qz!UqyA2>+Pp3af z9)^a@t-b*7_6lTELB_J<0yiGy2gkqPeI0)mp-{zNy8ah<`7z(+CpR&EC=m*#+Binc z!K2o;;W-z9v)m*9w$KcMVd_JP!}rR3YC;U(P2J=2V zyw}fDAbR2xb?DRJy8S2e!-sOV!1*dR@&G#~I^s8w=&RrAdZaFPV8;Ei3?v)oG^-8B z?|uEL<1`)-7Z-%Rdc9?}Y`0%n9!Nz@xWC#jnbnGoK+YW)NYF5}4mKgRp%iP#hfq`O z@Xr(B6Kc^jocx-ol5}>$KBt)lw~_I61v~?Dw5$lvzmQ4kCEO_!l$hbs_lQ21+Qr2Q zuo=NvLvai~J}`aCc|Vro(@Lbk#ohJ9DCLzLT*)vL|Itd(lM)4xh{hi)XAdqP*!c9@kgh9tj z>%iK~xL8;8|M-!Xl48nDeQ(M;B!u*pcxY@a0OFm>NSG;ALILw%_#)l}cd4C~fBsz8 zw+_rIK>CcWK<9X?l)T=8SBN$kxN#%~>Hi!t5@3a*Dd;rI$mJP;^2sR6ht7YFk z8Fpicy1BzW*=LtZ*E~h+K|F8zAjr@VAL_wdOipGUKbSDLXC~u>lp=R*8J3NmaQZAi~?ms(@j&N)z=9_scSYTq)kVchEqq8WS z($Fzc(G_Ph$G7G&nH7ohpUKVYx*A|)jH;*|Mrfq zrMZw%JMUXo|0_*DOM2B}LrhTX&QqMv=S(+0zI^xh?>IZliod@{P*5=)-MzCn!@`_2 zIt3++YdhtSzO7FdY@6r#)7Dww3=A?Lb(nhYf z$lYUULi9S3$bQT08^SI9$C|fBCy!Sq^RAp{Z+!}^rgY8vvE(*aB+Eg02J%PH(}8@i zqop9)l;q_5Ywj@43R^7;cjL2;)Y@u_CQp`R>Gnjms|-}mJPJQ~=QY3B%eHrexM1Y) zu)%aw)9qkUYzo6uqorA%opv3J$yw<)xOpAz^z{P+WxPkn#*TV=XhK_?e*9?8%JTj3 ztiP#AC@cFYu{%06bSWU?a>@%$P+gmT`8PMb4>uGgXZ<=trlnE5PNkvI&Vl`e4Vc`am#7D>DA3r8M&{4yXa)Fql!_=NIF%Nn2 zrVKIq)vKYJm*vXA=VWU#Tl60P-G0ZPH-O7B>&p%y&nwYg)Vs0ChnSN(pn}yniA3V8 zPH1eg59@{dR*AlN)k~-$Nl~Jf@bF^OZsQu7rM~XYS2WpZV7$IfdE!lPyzZ;U*xs<) zNp&(K>YI39ycP)gzRT;sf3LuI)0xaoN)kh;K9KJ0>yk0>K8l1dzPfs8V6n2Zvp$Bj zgD^SWm+y|Fxx+6jjnO^BUnY7}-yz-=DE;Vv%}wp>40?OV&oTGau)TzM@HvB9zAr|7 zhl|63?z+I>7Y9|cINRm74PMnV&COLiO0wM-EPVw8`=tqJUxl{YOHb0VYOb4 zRj;e6cpCS7HyC_B0;UqWZ}Kj}%$ID;B}Lw|Y@t z-9$05rQQc~nwYp%WyiD!CVL??G^6HbtEQ|?U;f!wx<)fqslJUX2EI*&V|yctJ{trL z{QUv@{Jm6m2fuM9kC8>T4@pIx6lw%!{R(Hh*_*i(1AFQ8If25rMh1FQkH_!e z*OCN3#1DE?m=qwJb|E7J>y_;_0!!aaLMwaG!q9{>kqCsI&h%Mr71VKW{W;6`+)4rW z%rh&gNNZR9O}#BD(4hV1ZY!pa$nm)L0p8Tq$jKAe)X_=A*RLVGoI|@|tn9}&KHtpF z;U(x4h4C5Y|E_O7s7D}ty)L^Ty9m*_1q-j;h+XhR??Zs`@@^oXAthrv3iY^Gzk3(X zKFG^OY0AsrOl_zvlqz$UvAFFbv0%Ey)eE&j;j0{NfD6w;9D@R)R@5`ssn>HI4(>;m zZ|xe4gpW-7Ozm-JPHR;Zy-@nAez)Si4Ypa6j#WU&~|PnQHF z>9UmqA9$gx* zs=Jh2(Z>Z@vF`Q_UD1c0#OkrJmZe!9LuOiZXN}awx>n8*saH^h zStf=)m*;-$QBs8)%7cFBo46ewn+Lngse8w}%_rRk#~aJV&H9>}?nnFE2fJ&{d-LR0 z7Mw%v!@|>L;%0krEMmd#iJR}PTQeM64wSSe3l9&^4tNK2z2?D=`4z}M3S!lM0>_q- ziCLqsa>WoDA{-7`)x0+Ho%v}kF@wb2Ljoho@|GyJMngS)an2+4#Crxabg2)S(!H&i zn06oMcO6HYV`T(Ce|!o^fAt$*w7+b56~`o_X&EiHiF)sE5jX#C>yBq{KHj%R4L19p zq>)Wr-ga~iueOQM@;O>IASNbW)^LEAsCQeFcsGE9cjNGQL|N1G_xf{6`$kKi`X;@mgAN>m!V?%n4|bBc--nx7Bm zC<;fpru^6&%4-+H(3r``o(-&L8}4nJND_t|rG5JjZ4J9S{ zjkUB8uAYPCyXjzf8Ym@<{{%`w)3X01VxQlisBrP{MB!#z)L;%YwsO&?@5A%$J9*FF zcvDdDb5K$A=x2HV6S#qLZy`NCKK^8S?PyvA@XzUi2FRECrWD)<_rA) zKR-rw{GICV>6`f5!&tbG)V`_S`S!g5_zU3cqUk@=LV*3RHHqHVJ2*H1>pZ+Jad^A$ zdawbIcK5w?y=9xkL6V{n5&uGO2v|L}$&c!o=&i#JF!^d%P1f`lLrbv&x zmB~rP(V;V5O^t+v2Xo;7JnZe=eU2X|O;%U&>}>04Ym&&iN_Thnza6lK@{ym1+eO#O z2KW@*($3v!X%Q5;_FKsj1%EOT)!J+xc)0G@J|gfmGyt`zri# zHU`f$e;Qmk?hx^^(9jND%A50J6rBL?vt!JP#X4b#_WNu5| zO)2H-#b2p^UuCegQXg9awlc%H|LnT9gpcI+$>1O#7K|FtW2nXuy8Qv8!cTX+_K@-6 zRH6#B`0V-(38|^EW9vIBI_L$hpBz%<`ui}s7h+<5+E@vUOp@QAY`g=g>NtXU`*&=t zi1m@5)ZE*FD_dJHO%B`-M_O890l^7SipFx41F9Ks0xWK`wz(polz?tuMmOJ&BaP%gtc3@2AF$^YWhg*3^V$9QMvQLVui(LGIaQZlw%==>_Zky0@ z&(hfPv;uGb-3Sm)-woI$5%!6iOT=(DiVz=k zH3_+LS+}#}F){HEi5j!}#FeE@WtCGU0L4ZG4dwLhE%|S~VIm67)DCPvI&Xxp{Nh72 zv_=4YPB(hQ%HQ+_NXcRQ(9so57N%V(PWRbI85|=GJ{y%n!f*Yto}-v9^AmiH!%)gD zv|Cq(g=OqMMaPdrDKuGCLrt={({zzvCdn0?pT3g{Y`5p1(bM*Pn|KV-4`;{n+JD|I zlrzoY03<1NN3-%~D7Rv|PlrP_z^+`P!1W{`M;pnR@l7f}_SS`e+g0y1BWg+e4h`gbpL zR#yF7Ec}8rGY+3T@p*Kp&+jlv{@UBgp14UO#7GWMM4{P9?9spzkNjK|iKsBVzKf-k zDuv;>jdMXPRi<8qFMn4t0k-^>haPIa# zj?c-iFO}rSc!x|ia`R1E7YmEqM8VQO-4B1SL!C8f_L1l7>yABpQHG+V;m`(}6KiW@ zdHIaG3HEkX6-Gb9?%qqWu}y%e^66={wG|S^L*a|5RgXUKx&LWkZ|{|~JR9PPbUqwt zX<=P=4$W37UT&br4Q!(xF{U4WihR!}7SUlnh%*+Z^r%#E^m@d%{5(PC+>zD4Pu}yl z;I?#O`QL%nwoC90^d?h{0He0(~c9(7$A!hEs`8dSuJe3&RDu*8V#I2~~i@HV4g z#xw=_+__QQ#;||fjlOX^g5VUZ7LL+#6yx)H0=+hndA*SNR*q?71;@e+^+*?>qg`4K z*PLNxoBm5WXp#ME$ybxlkv~4z@qH$OVKBi5QM>Z??TQCVDiHgkv*|OeYdAeUUkCXE zArS7p;RGoDYB> zAs}#zf@Qvsx-LzuqZ^XLi2DU`zOnH;WtJ&VEr7dx9+%6$*Lb!8R<+7?}5UtQ3B?3&g1rxFvNE@J=63Kfhx zOpV{iXvOreEfaedh|MKAJ*JtwH3jj0D5%U7Kl+pSdSK9P%Ol?yQsq)t7;RTdY<- zzw!UG@<~1=*^fh5**?o(J5~!XZ#a~zzI;wG+j$yd#f;8udD)3>zph4dKYg}0dEGS- zTkaJH&GKVoNb-xT+3dI+D$~nLxV$_gadE3ccHZ>SDiH-BO1K}&odVafFaIjlUwy2d z>m;b)g5xYWF9hHMQ4DOWt{56p?-sY_13gRC&6fD9IM?U9u+CEBez_4z0dS{w+jXzl z)#&XbjLf_i_G=HSe=Z5wt6eUrYqZ@nry;#?2A73ZSlV^GukDhHQ;tf~H>WEAoubv* zTR;c+GS&N>FQdXGzSD}GC1iXH4%p-^Y^NZpiP}o&qo*sM#mKknO_@kaD=ygLf2Wo- zi!oVw0k(1Ujay*cIGDTnw~96XtBTbe#VxpmihO%Ib1)6p_g$2s@?$ss5*Z@$ZRU8= z_h19rt-DM2pLmiBe_vYqyIqo-e0Ro{0hTG-ku z;a+*9TvlFLIZ)fkW`1*0huE^p!{3G=RG(9jja?LY*RHeO%Y79QMSeHq8OS?OpWE$& zJ8>edZ?jH;BUt9x8n?1+L$_+cIzq1pr~PyZp!m`ESXl|oM=8zRbM$M)4RutY{jBwF z`g0qmSvMRznwRA)q5Su=75w{E8;PCZv;CS{^Qq3*!u+jlM%f9`+1tFw3s9@W(%>G2 zQUdd(>%ah5qJri-dY^YmT!oBmy|E=dNP^E|vmI)in5I^}wsM7`F%Meu!j!VYj0#TH z7^%xz8UZ|6X;a1G6Yo{|$!#&ZeA+Ilk-*NQK@|x|8N``Uj?o&qFZsP?sGNX zL{4>Qv+!EtdHN%r^r-y!GB`Ad#3=k8|H)kQiF_?j^xrADT*K+$8R53GS)Ky$K5`3p zak<_^=jZ3TY%u}J^RN1;aiK}T@M9(UzttVWgCj?W4_(kyC>e9M;cx|XRoA_STdi>~pp@p?0}+1XJcR=>PRFXm$M>-(IoWSVG%}r& zr7pt}<jF8@%htNH8F;g#PB;1`@hJzrjggV z?(AFi`%XqWY5aZP4noJ4cB&IxwwFkk-(!{5#2)m1Hs`|Nx`5P=*Kh*IuVWyH;qps3 z$gh>(ZH5uo!b-r*yBZ)yLxR-hPVt^#=&hg*u;m`9S=tonX?Zk7(zF^~JKgRbpCQ5& ze_g}*Z~x)&w13{^k~lh_eTZ~Y{hz0>KN_k2Ma7cyslA=bS1#?s&E#i4s(lZt0cn1j z@#R-j&=bglI+)vvSrx5qz5on=p*=S@rH-3bbK_BkJZZ@Y%~+oT68$wW##$lIq-^DM>(tuG{>8tj9E9pj46jYYMr4@gciF;=pNM{bm@j?MUb$mbq`QsJZqBzfj8`T`$a zHCm^ET-LE60maiKe^wY69Rjca?Jd7f|KOiG9D&WI<(!!^h;tM7c2DeCCn<`nm(yDP zOHw$a^8o-v9JRbbuJd-*)w5Srq;T-ub<#7aZX&suTDn4)ti=nk*4SI)IC(2U-I@Ow zo_Bh>B$rH6U7hKTv(NFHO)Jxecl8js1;y<@s%>&~G)cC_KX<{TkmIS*5PYCj<73#{HQLcxukUIRlhR-pEbRTqhyyFdsavQSSROE=+(dN zO!uSaOVKNuO@oa4?~3}_d*@3XU-9oV;k@tnn7kC?1Be1vPB0f?m~cCIZ4LOQaoKk_ z87Bn8#44&f|K#UHW$>SVDZ>FM0r%(OeE*wf7al0^8f-&ph@)hDwe{b9^mD2{2l@`* zp`kNG#6S4(=a2IApx0j4WWvF)QTsMl`a=hSd7sL!P@2?`NGrn${TgE8&_Ar7p>o6k z)vhQ_6v$_cRZ}bQNc&+(KM+@~o{37agN~~9nROXp(sDQn&i|*5zJ3}nI?o@3(e9vf zW{wx%*{1s**T(NB%W(KV6brgMJ>{Z%Xu`;|+h z=hJ2eUtkF+$m^vCU)G|@E7V*ti~$Axw_p4}tE>|>ICXxq+P*)C`^P%nnjiwWHsNL2 z({w_CkCVWi#=Syzo+419xU>sno>E8OXJphZ_pMR-?*&lAE??Fy4Zs8JtA$JP{E)Wo zb+B8<%=WfqcJ|u})r4Ni>DHFiD7}ynUA$NQh*MT`H3-}AMF+;Wzs%SU%ufL`hUS)b zeb#n&kbE#c=)phq>T=!woBOZI)VoL=Th7^$N%J|?{Z_UUM1bv0Xjyid0LPE_X&P$x z2>MW%qn*-7O@-nn!+myg%KLk7vg5>Un@hHjAEO)IvRLR?goWQAk>*vu#9{Y$Kl|}6 zyb6_swQv0=CN?$}Md4__k4CsZ50G#9T6z$xs0%CO zo1LNs110Zj_kMr-rlyLe8OMzYSr&fE>Tc)4q#%bwn^y00A%d2;Ghr~~qZuCoRLwhr zR%T{zvb&I!Srk=D=nJcwfa-I%+pTFcwIKGc z1VzcSWQlw6DQrzKlVMzZe2ZFucKrBmR<~kGP;&rV4gg<0ln8nP5Kk0o11vmBUBhn%#hnu6t2Iin+ zv|`qHht0bfmqMRA2HZ7Ve^Faf^6U8Mpn&!BGj?PsjrV#RaoTp)b`bPCx@!l>I=+@M z1R@$}b3pq&Db2!9MJz#)nj}w4dY#=hVWcTg1<)aqWC?X4=mly5^W;}PBOwksX|0`} zI4qRkD3&B3Ahqz}QK~xv7<=yuS7M~`4~`B51^Yw8XY{uhLXauayTDJG@p+9bOj2)T_qUg!HE8lZIsPAF)XK>C zvot!$XWN3IcVOYWFpKe3MAEqqY!d7@4>eEPo8G#(@9R>EwC-M$rb zL}(Roqv5a2BEAf0#^2`&j7|G^I{aD!uIuoO&M<5=bg`aL*gHDt#UEOFJu9{TyKsw; z0V;nLj{^%!2$ZqGEF^$M2ym`-YO+Rk4Y#qw&vcp{zQED~&U>g9H~6|}eSH!(kd+nI z2zxaMP+M1fcm;)pS&HAIcS6(CUBc7afB54st{anJ@bBiBM|Q^p=M6rFsP!I5Bcfiv zBZ8gv9k=D3qR_KyIig3ozom&%&Oq0i{*Hg@{}D=5?t~sn{Gzj=OuY4<4Fd;+S#56O zy&JFwCIb5z_Q;_fkSQQ$gQT67_64XAfB!o|IW4w!tH-b~QgcQ?5vdJ}tN7mAlm@C< zX|V_PNL$CK6{MZwpGhQUJA|Jmpo zXE()WfxIFf9wNpDXs>-#j_6*eqR;+dy4eTmt5DJSg})!Piyp7f z9QMw1up>bO0~3O9)62rnNH}F~8NEN161;U!KjUs^yPZSSCCjQIO;A2hJc|A3*8sI9_TV8!LaC7)cVzoo%K0fY7Oe7n40>2SQ zl9pUQGwLQy?XPveHIHfVB3D^(>-D5TR<57{M3l8Raq?T)QNk!ckks1fkCPK>1}7#g z_Axg6WmqZFJ8$zROGj-uU}MB0lxiyk9|! z&8GhrbLqWNMj1i_#QMt0()xpYT%NX08*HZMoZ99Ws1)SBl2SBG47-Yu2x)1!)j(-d z!O5_s^{58$0sDOKHD}SKTm5IgRkqyWCXD?&Q*j8(-q+`hf8E9?1NODHPj=mey{u?{ zRR*L)qBo?JjUSS@lTDbJ`*U($NlFx1I}-1)6@b2m3h*MPB0quU?+`KY~04i{eJp-L#-KBfJ|zf$cvO(?z`3XWO9Bc5>`vE^5kU%txPrqve4A zC-EJNfff&6{{Vz24Q;dgJ~YJ!&7b2-xcL!qT!Fdw1?Wk3jxMTGd}AX9l2%y@C7UG0 zGpeHIs>E~YoZ^!wY0Jy?*MlEIBM$rf>+c87EWOHCovM+{!4k!t)$}v>WV?fa3j$9J z)WF=Pny9E$cztM@k{Qn41O&+Z?0%B9rC8=v37ahY$;xWe&CnNGiPPFOK8D|3x1JyW zoS4qTP?&oGZU0$3FGIsA;CX-N?REL2NA6Zk0st73wj6%jfa0-a<(s#oyITIzkag~x z+-5f~^MLs5b1&i%b`3J$J&BYVmeUL}_E(o_x%=z3m4$_cySrvi0PG;}S)cBmwCF{- zkw0m2t>y?60%&!sO^zk^IoVCSS>-AUxb?I<sj)MfuTda*4B6SI5cn{>Sg-2tV3XQ?{olGP*K(V`E#>tbRHH3*86_ zxvCff>GF{oUoC~ays~?mnPL(b^A@8H#$ji!`aKwiPXyIwS6y#<<6xJUn=)F@WhyqL&Nt=WDU%S0UE-y~Do7M841(nPk9N?xdfNDlYdmj2 z-SJ~}I{_u(8g>n@AwROm0TNI+E!M5PE1DuGgObrkY2Rwn;BUZ4Ib8)XNr_A>7d&>$o z3W0L7;dBB3UFYq4Vj92SpKoW}GzibXQJJ(~Gv5mH5y? zt+zmLdhP)Gn78?Q4aFm^!SIm64{4zZQo`zmFa*8DPF?Kq!SPt{48epO415|`*00$Kb;$GH$L)aU`-dUZ|F1>B4rg31~F9)WN z4bO*dO={u%+=Q;_Z8~bM9P+!1D_82}zLQZk+fHe2Dm(pB&9So=T{(6JG6QLZ{vaNk zG`7w&bhvqbkfa%?%!fCyEtU0~bU2q0EqNcs3IR>Ll=@$6}EkPa1ES8P7-Wg8F${uBm z%l>jJmPDaQB@1t&B!9oRQ7!)29JJgasJSHM#$3Ha0C_E*6Q}7SQ*xo=)xUPMlYfL; zl35Hi`>t4X_uGyHsgmBxs3e1|tRgHsT9aG`yke`8wY?2Anl#>f#uHFmRvH}W>rV@<|es3pJ%oYtxds|Q~FzKx>DgZ zcAQ}NbiBjH{`zSkHsJ9BxYL~$UR8Y`H1!Pwy?*LQlBi3#XK=?_G3W2o6;d!CSnXl% z`LQsI@kvmKwX?tICQ3kUws!&w89kzt2b}iFrF%?BqstITLb;}{j_a9Ias7f& z2}BNtR8?0$smC5kq8T$r%E5Ihok>QNe|FS;OF9zERWMs3x}*sho@Q|l_yRA$^#VbX z=O?yY&@m=&{H*VzhHYZy&5;pm-VYYFTu63$DqZFoi&+DarY9c<86V!HGPw7qRebLo z{;^3blX0l(uGYB#?T%ZPqp7DIEf3eJmjxq$4+C_@7J{PCy2eE0%$Vk~mzXi)uu6*^ zQj97=69{pZuiru_c6&%l+Gi%o+ud!NUjrm%Cj{!-@YidT%xnZrGYzDpTMpo7)E>CJ zAJzG;d!;gK%#{*nVaRJ!4{&f%{TY8o(_6lo%6NRp^SSeQ<6f3PgxJjtTytR*kL=Pxtq{%}r&gZ~F|1cEf&@Wt zAk*=AsRw8P!w?_Eao0k5%FibE?4$hycG+F!{g&mTfVXN^Hn+q^9UeIsUySamP!6`$ zBezy*j?9n!(P|V4=}B8jQX;ahETsFjP+gs_%HW;xhdZ$YZ!h0FZB-1N|EaqGMM0}~ z|5*8`dX#?)^uH(t{YYZ&LHq8II=SCBC>rwYLql}k`0ZUQ4XBn`*gk7CN~v5h^z?Ku z46<4%hy;Hr0&4?oJ#@Ghb|PsNXYxhJD;uqazU)0VvDqiJ z&{JsRe#ko0wtqvC8W*&UFYBLvt3{b(bsV(Z`awy`1)f|q0aclrcM5RIXMgW42ma^2GnBc)3uAVL~3%ML>#~6yeko* z(Bx8!e9@f~)unBBhCOP2A8eBmN4EB74g&8Ts5t-4~9_ZnDBSFEz^JI{&+fKG8 zxpNn+EtGV(P1vUzn@^ksh@pOWdUsyP0rSCt-t4+gmBF)PFX-UO-QdVF$RPqg@E=+& zB;+%Zf)2%u-NV{4V=~OA!CEn5pzt)2}iZNu`}~-)6j^N z7i*15$Q3)&$WC?yDi=c{(|#+)Oi)lyhIxvvY)1a}XC#)ar`d{UZYNvU7wTN$M9H1h z*)<_q#D$qlmyA7Iz$AiF#e)2v_VNC6iL5aF(+Eej3iVs(GdN)g064;MpMw z@6QgY4j~)p*MM80JF-fVpfW^DI5v6y7orq?^DGbMXgl3-YylxD-_Ef6Q?5nEdyD$* ze7T%6{+f^hgv|t&Ro(*~!pJ^jyGgfR1Yw_7cO9^kE8*qkGub_H8BhUl;f_UxrQeX$ zW=J^$d@5u>JRlB>GjmvXijRk>ENn3diAa!c03+Y(Bf2oz=#NaC&&dDEM@QD6hgF>D z->=s7f4|yY8e9ttzNKTK_h{jp7hVZu8dSmYjZl4^d_FPO8_j6VEX+PXCDCQ63Sw8c zoXuWK=V_oi*AMx{x;D)0=MRA;j>-7q%KTMUDe&wIhEXQmFP56%R&BduL#G48l5{vt znEB>dNc?}^1kQRz3t9Jb8n{^B(x1?KYaFz&$#(zsNE%X|$`BYdh5lfT_;z75;HyX^ zNg18#s7cj@8E84TEfnaUIWIj)(y8kS3TmUSt9TYyEGMv_lM|bKVFnaT*8{+Q6>mxH z?+qHLw`hGfI7eZ!h$l>wrLSE>~+5Yx9GyH z%&e&2z_@_Xi^B!TtW%q0%hKO&G}ClyirA!u=A_8782a5ZjoU5(IIWkrdF^JUW))^t zlPiR0G144tO-Q=|{PrQI2e~F+qKT{FisduDT#_Q<8u~7`-c0hvk5?f+XT6|yo2X%DYCZp0*YFU0Y&68pAYh)oxDhN>CoU=Z zB}O;`Zoi25fPWn9{yphw{d3Rg4%ovwd z;xEDp#NLo(TWJb#Y?_9P=CrCR^EMhYW+f?<`0NY}d>?S`b8_yEl-4KyY6N*czDSO9 zra08uaUEC3f3Gr0`UIGYC+WYAAZO;iJbz9R@!Bqcoz&4!tNnu&{FL6b_oms`0vbaZ zrOfCx-eAc6 zh<2^q5@F|vCKqe#cdXf}YLqTorTHL76%Cm^)R*RN{E#Ah&jd25Yw?w^Gk;xh`G14& zChpC`SaM+eZ~kB!(a{Tquw+c z363o9@10Uqv;5SU*HFt5y)SRhb9vS;G!Xlx`(d2zlgI$$_*g8}9A$NNGMG;In!w6X zUBY3u@kBa$AF4yt5_UlomxzyGZgXdtK(h>63tjAcH_JaO+97pvpE?A z4SPK&*i3mNI82V?65jhOW_m~b&~Zjva-yq*CelbqpZ&~AWRS1mbA1}r8o~6oN2`Eg zmf-~-1_n=MeSUCKVr+@cQC#M-Im)ng#GdPZ0zh2ErMNH^qktrMgE=6jgbAj!Zx#?kg$N-k3w-;&vFmV&ao0 zv8#C%lVoJw{6Cquf41xE7fng5W$<-zGx+lIeH_v)@mJvqpb>%ca(YbTr+UsUNhgai z%*5}Z(U+ga4dj5m}ALRcC0FXYKfAD249E-4gubL{VLF)Q)lG)cSHpd z@ftuSwq!c|`(=slfhpQlA$1zWYirFm+gYcDgb%~9CGLS(JXI5qE+V6Llq}N0Qk$W7 zxnn@?9(v&F!gHSC816P|*0cdkDY%Wc*z)beKD+MT1eP!tmO@N70Q|P92rqmvonqVt zWRdc=z0^uEi{0w(`bMz}OX@%-^ctsh!7~v`OTBfeVW*L{eUg0^1F>j(cPKM4+{NR!d}*aF`_)TE3!_> zz=A*XI^q;9pG*cAcz$_eOE$?)#M|kYERY44=mbh5U&i zk}y?2T_$N>**CwzYgfAsQ~Fb!Zn@P|!Si!!81EhAjnX%}OxgA5K6pqt!^Fm4hHLH@ zx|$~yUdI7SE~e;Ye@9O@gh8)CB@9*eexa_I78Pg#!jz@jckV=rR$)rhR4wLF6s0`Z ztRI)Wt~HJ6D&i24YA#NJp)A!L#J%)MOp0=3(61C?gfwy@|b(Oo8~X7uznBW zyZK@k<4PnXk*#ZwA)T-1tF|%NM3-(^utIWYi;M0mR7;67vmQ_C3qOp|j43ukk*f1<7I7|E1; zE*wUb6N_KHQT};(J=*VWz%rM{3wVREUs;Wa%k^v&Zo$`Od#!Y(EG_<$Q#7;SK^pK)M6O=jhxsEx~dihn<@;h^DzD%k|K^Tx-3DpE~M8 z>^9k4mF99zR-MzN%Ez=cB_MI+jS^EN0XpZDiHrDq5jhK#M4{A#d5nW&?orsl5g zfJlN2@0>ws$!F*+_FqZ#sNTIcWoE^ccS{p{cWg}F+Ar=n`QWwa+O&5Tvr0l(idT`+ zVn}d;nkSaiMQi^Hr~_%QnT^=It2hPsDGWD+H~c4>T=o>y-evzd4~FHUS4Kp{4sn=D zbkVl@W{7e@6&5F}b#v`UVE#pW1x();v_loPxOUvuR+HBDKBZDFY0EstsZ=?E7=NmIK77~4ft|pXwatujvSYv`BxXq_CDDhI`gOa# z*5=l^9ITrtcg39QBu@(k8)s@gD^s2J*O`?KJVV69cddVFU5k$%@X5oh@+kXxI2}!Y zpw~ye8p?-J_H&1%@b)a|x~ol*;Hfx3;6dYBAsAnAVy5@C8shzd&XrvJnx~%kr1280 zLU*8*k=AJc(oo>sr<>Pdw}J!X{ z4po&Vs>fByf8grY%V+Mw6W5paeZq(y3wSel&bMJ+Jg%w{@j&M!U%uKyAQS%+Y;H5R za{M@5X=TobB`K!WKuzZgFo4pXiKw7k8D5rTW|~M_>gui38r9`kkf{s!>k*wp{0Z-Z z*VrZ@k1vXVb=POp%nRlfsPANki}zB0kfvG#gQPNGZ1#FIvDQWn8k^~R8sd?GYcVgZ zw>kGTrtji?v}wa|u~AVjQ<0OPgg(KPq^e@e#O7x!x zb(&ITDY>EtE?^Vl%{#~`AeNn$Kw$^Y13dtUvD_g)nljin27xLtE_Iv=a<#Q)(vs|w;SV8u@@)E;iPe>O* zKPA=~*GFr=27NX{H32QV?RfI>qb5u(%92SnRHaU3Ud*&-ITG%jm+4n8(t3Uz$2$Zx zHUlolC4QYzpOFhk>ZQfka5D2u%oI#K-OS=$O0G~;v|CI{6mg^u>!3})ms5F~IidJ*<6L|}M?#FtJgZv+uhjq}dTvFCN4yn2`_4Eg}%qfZDs^C$c955kPGa)9l ztriyHM1PS&xMlRdexbRN&QlBcBLi-Nv1jJVY+`3!y0r69sLVp5j^J8a zE|d@-#ODVi#|oEIUDW*)>f-~Z1l&j8--^6<941k$6?{?iDIb_%=&sfzS2{!U)GkEl zaPF*1zpo1TLD^c9iYQJ`D4Fa3vm<_j_x%1?W~|0c<3Se-X#{|fky!O!;~F6TID6B# zv>ZU?nORvpPfv(LtCvs?Dz7uEVh*1eo3Z?!_S96lb>1ypDO0n1&8|u-Dc2KZD83D4 z(^6heE)N_O;9Xr32!~8^^77Js^!OA&6nk*m84}@^KqQi?q>e-P)XLM%iu%|H8hxtD zSGjnE)}xj@(c6sUmhyYcXX{y>z)32}*Bs!(X{Fq2)=j--wRt-lrC2HBPb%l?X28L2 zr7Wr@y|85qq)KI+pL6debboI0WHIwO2FfWRW)I9HgY?#$BHV;m&MA_;@!MofWPPz} zr(Ka<9{C``NNR->qKOXSBDw-i-qP9ArZ169AkioAQHU1RZOhH+K?0ei>%7-) z#hx25J(kW39z}}q>QETo2rk^dLyR87!ocW={^K1UC%{=e!x;Z6(+t&{iJhP-tyC!R z1x6G;D`dyib!(dnRKc&g8W0RsJzGVl=$JhXv>~7v3(((h(U4N17KSlyLJ?3=oP1sM zJP_J9sFs%Ba}WO>H^mly3X)9fhZ3SYJkeyS+2n8lu#L#~k3hwO)k@dvll810q)sws zTh8rm$A;~nWY6_p^P^ri!)Xq-bd3B>uk{Luf^>iW6v`pMv~_OJ$}z7i26b>8P|A~4 z(1#@{GK{ZIQeWeNSq$q$E>8L~LMF~xjAWD6^BJzsc=+Sha17^0N1U*htKifqLHX1lEq&8}b^}6|78|u~^%zllNJtH1a7rV>4$Izi6MW;+yr_HzCAGInGnrQK^kS7}T6JbRRBvfBY+iFXKy^!{b2g zUtkSjYx>UZ=vUda3PTlav6C9HNBs5ifQW5TkDq=8H$!JZh3UQzs6?5Hkb24sX*Q3*8>`Ox0e@EY+$5XmAy^=?9Uq;54dVMdGK%nuP zJuHo1!`f=z5;H34F1SYuQ!&kv-7sO-M0lP8J;=>sO-mU9#aep#3Xs-iB1$r}0X=1R zVQ+ZI#dEQtk(J)9M|HfwexxQ{KwaX`k%I%#;h&!nDVjlxo}9%X?O!Y(1uY&* zd@qt%dyTud_<}`A?NzUcYiU`6{vbg*d$}$l=JmOhBVWf`KbU}yosuocU-kmdBd)#V z3H$Z~I4}g%Cum7rjrY#ijXmp||LR0|7cfo6)w+5Rr3r{7B<;s43?x_*@&d93LUSL8 zeLl9@sP5~l*2|$73?xS4p*B0tS`^ZZPwR%LQE>3O&8RNMEZ>eNgBuPhu=iYJvhYYE{@_<*ghC;6b~NdDu1S zp%^C{Zp51~yQ)=gapZ5aUjADYBC^`uFYbGr+kVeHd%}AgSE)3xCcj<+E=M=nLuV%p z@ZCgo@e19>@g4Z%Rkz`qS=^k|U$PAewNeQfgqV$(~@FOsG(lrf-Boieh@=7-Bc z%e@jsCI(-9gq?Ah4VS}o2JjepZS-A>A@La7M*@(gNSBtq*h!}u3P-KDn8~l>yl)YW z?Roh5Fh33q>ln%Ff65y>)IlWq^mQDPEY#eb-rzfO@_N+e4-gJfOM-M?m-R>RYs~H% zAaEB1)Sr*q6b0YD3WP?rHsawQALDwPjlPMFX%D}9>97z%|AklmUA%1dQZsi`x!YP_ z2?{*Faz(Pz<=Ia<<18?u^-;D(n+j2{b@9|WdLLZ_$oWhn7G3vP9i$FeLYot8-;fS| z_~M4H>PI&bLtxj=TDzqei8l4zO}TVMvpW7fU2PYT{$jK*5RGig}0})M#|}46?XIsq1!4oL&(J5 zr7f|H7=+6z=$sG(!CK9%xo~9<&Ei|b62<~fYTSh6`t-c8MQwS4PddqdFty)hBDNeg z&%3N{qeO9&ZK>>cI^)nY01Su!v!dg~I2LMts%`GQFDz4?7_JQ#P^5F6nXHTHi`p2u zr*5{N+HKR!tp(%fYHzS-F~Y00CF&C^%Hv(cxh_MSEapc1clPb@KacAwUJ1??b?-lB z@-)r;S&V3Z*AWUZTPI-y&H;aL%%--RmTpLL;^Qi(BvNqVC&muM5qnci(&OM&)G*FfHrMH&yc%6x-{Zc%VQ53W}}AQYqBkTW3SLi1z|`kTZ(Mkdcx_;81qTR!q{}9<;BV<*P6l z-;=YJl0hsPIm$oWscx1B+w%z)&fha2JowNP1BcKtx(svme$@eyOBm2}!LnCDa#nO<;MpmBxDQ*B-thuKJg7a)5oTn?8>^9hHK4;DS zA`HH0&OTU6t3DVYi}dP2Ix*pN@Y?8H`*QrxX$@(AW;M(K?scWPxfwvn{9HT_uCNNf zyf`0LX68!UuQR^2S;z;7lt!)C448B5>t$k{Qqx<3nJ?=gpYcaM0^MDK*cJFT9PY~L zpSnPkfUz#U!fi7oU*FwwDsI(ZmiLV!ztuBGs ziuOgF_c`%NjaP>mIXE2(rX;MGAf65qS@(Frkq{UioFBXi?9}k+utsX|)qG<9oEu47 z0S(Lwrcd=!)O9tM&ve8F%LW_Q+d$L7Q|}M7&@Uu4uGA8_4onPBGHCP`wBaNMEjQs`TLPwFvYF3@S@?16Fy}0Qvt;&sg|!z%&H>Yw?8o?Ebu& z8zxS(H&MW++b(HA@d~L>-_i57TWv}+?Or&6%RX$Xeu4UZ*|9}E2pe%Hb;jUPX@8cx zV%|mN3hi1p+^eu<ntV`!{NxqxUx&EGQ|= zNsM+fe_U@$U!bEA`mp<&&k)TK(y8gGw_;{iZqSqufAtbVQD5hi-qGRdNScHhYY^h} ziEwD~?|Xihnxh7n{&gI%2U^ONq?E%n4m9*SgnSppm%~j*z`J)!Q7L82`ax-dlg=ht z5^(*$T zu_0?&jQhdaM!BAEKyuTe_*H06*x3xAX?a7RWZpD7p!2E%YMcni!mg>pMZ>kS8BU5i&S%cM2$lHrXFIzm;m`qF7P8dTX>o&h zotcfHNFThSLb?V8;90!+@ccEL>oJqY6>nh%7sGAlR}7yaNC%kO1qB5z!?SQ}7d%&q z+u9A%ghh=8t99SYlTOLW^#)ofg77RSj288?=;?%-_ZEWt7&h`<7^wsgPrtz8pD)l~ z#dq_%fU$C>I)FrZ`G@6S7$qshw3#mz9nbgHDBQ2O_3i_#RI=U;pmRXYb$lA4ejVT! zkPT`0I3%R$__*n=<8W1)PcZh}0StT5Yxh3BQ&iG`D3!_>not^O z!Vx7hSDGZ1q?zUkB|`&}G)vOah%}FiiYB6YvMZJ5d2a9T_0)OKhxc{9-_P&A-yiS( z^Bg^UKli=vwXSuoYpuKCPKe&)Xd$lb=k*Sz$vEa{z~SUfdrCViq+8M_(7kV61?rqwf!#syT_t(D2Hr1GR~zNAeTrMzdtIXsF<)IV#ssd zcEOUQc=m4T>Z8}CNCeXh`B2I+g6uuiZ445(s?Po>M{sRYryss^@oRSW4h?i!A(Y2l zj>>X^uAn$ZVsi!E%Vd041kwBKkD452m7VeDKEIfd9|2cY?SN$S$k3sMwmFCv?pLo* z^65SOl+Fi`4XFb28W{hh=&kC0XB;lHJ0O~yX2izMr94>iw~lc` z`~gEIfx3^6m@OR79w!!B!g<~j(74EXn;3k6^5EHBXNfik2)gfc=CAp`G^ONiz*|29 zwF1#!#$NP)9_w0W!p!cY)YF6!Z2q3^#0t1A{Z9@r4;pXN+3}QK5y}F?C74md+jziJG zqf)~%>8X3YGA5yK@Pyju{NW6#y*r1hnZDrGsjGuN<$k4=qp z9lteeYt}Ef0BfH8H7$b#Uoo$$;JCa7BOTp@ugvR(+>Z233X95fugzYL0uSIDwgqAx zv}dAO0g%cw{9J7P*HdqxJ%aEK3Zh405(!&;*nL}+buBSXDlhoj{?-HH4)Lh}O?e-F zd5>yitNS=4>u!ut^eS!qJaoNOK_#e5bO--f7dKtD(58i%$X;3I2`pp4WK$FFObb+n zM1v$7dI^iKTDn!iMI(@69wMgV#Z5KAu|ZD^qtga^|3=MUfPVq|CFK^JN@jBoW_co6uBrM4drJB}F2+~>Tbn25xe zo7)5wPqp}it-Jp#oTb2=;X?M z|8El?-A;-;xpVFR6H`#GLc5a^1@g_9r!(rgvI(ey5bAqS?#QiE+3PZBOV^-2(N#))RP5 zgD6qs^>tdRD5%v5amv)y*(W3poDf=#E8QVvuxMLZ_DcNl-r}Z5i3kmwTY{XJ{+`kZ zJ$CeTD`t00&&{C6&Mb_bV3l*05bAjp{8nsu_QJ9wx=hLB(jxdcJ#rMW)#=Z5V&ao?$_wB(hs#6UTf{-XF&RBd?d?qve!}`N3COf> zUAVdV@z3L?3CPe+jVWO64PYtSo&Y^CSOvcthxNM~3O6;W4$kWc`Owj6-y-u5YXSH^ zG?|#1UWUYALX1s{f1>(8YDDo8jDf(+$`T)_pw)#Q99o8cp`7GgWni2sb}68dF0M`F zLEHjW|4}*o@Rd(#{N9f*Z|!>^ZUUEz&>0&O$F_Q_-9*3O=_^V%8vk!?31zFv3tFrN zuW^lK%o5>LrvroBfPT>+hG`3jHm<;sE6NH9zVwQpELyU~>4xauW&(~7m7Qwwx0VhL z>PaZzk}>Bm2K3 zYG~MR-$%g=;4L9}dj1ascZ-*AVthbo*n^WHD5~72T(UXdV58M>E=l8k$-<$*nFIfC zS%3ANjK6y`6`KQKC`9Dh_#Lf*=n?cc@5Dtg#L8e0+4X-r4#6$6OLVVi4T1K&MT_dM zjmtCBelW-<7Sj<5NvYUJe24td&J(1O_-AeOQrcvAFPOg9k74>3Dv8_uHGDU0K9~|# z+}RMzanEqt=rqxm`+0VLrsLKW%ydlORq_aY3L-;(W25tFWhK9c&&$7#roXvr;;&e@ zqPu<(e7Z`KkZ`o|tK=)*U(m9xq#LlgrZ;xS;UkGBg^on*-?k$}D_WWFjh@jvOxH4?;U;9A%xuL@xy7*x7U@uLSo7)ZFgisV$h-nl)i@RdK*e`MCP7fr@!-SN(*eD#6 zMVxD6UQ?m#81CDv!?MH&F}iY@vi_fo7R4t4QdX%yNg6z@iCe?F@7uTl+;}}Ye3Eh= zqn+cOB5zY6be+OJPXn*4Big+CGQy(~O% zS*U8+=h1iw0cD?TwTPDxv#!vBx)!i#(LssWueJN!639O$O_Pnw7cbx^+j`xg-t4i$K>7&GwvMSjH1bA1>CgbbQ!D~BdaHjAj!p@4J}W!gWY z&CAQ0bc=LQigRJdN-Rw}oK$yB|3Z7l>N64khrevx_Tvui0ucK)_Sc{kY!X*s;gjL1ipFu&^$M_z#eCTNSnIE^PSVG{MPW zsvU4MAvY$GE<4zvRcGO0f4zhRuM{Zl4|@^!i7j4ud-lJD%K!0~3cR;yF(a$p=l1b| zAgse%8)G~|JTSCd3Z4lPWlXBO_`Q;ttopzDCB*ZHQtcIE3C(|rMirX>QY`^$=grRs z%zN&sws79CBgiq@_Xgl@?Z5bvo_Ua#grS+hjq&Sl>z%h3!rxifpdDv^tYE^f7b;Ta zV=r|swz?s9VqzhXEbtJzwED7SjK zf$vP=iqJFFo;&;bK@Uf(x5RxQ$x0%PE5sYoR$zfWf{K`jJ2ORm*b8_Pd3KfJ-gF|a-SKz<;d z)Pk`U=gkv*6M#$M(G}4G+ z2xSWDi3bJzH%BG(527^kqH-4grPH4dV=9%k-qE~L|3hr|8Nf>s#}EDu59Sa*ALzWy zGCR!hq3O`rkIRxv!MJ{VD^jMo$WuH_Wbc{O&x(}}tC^P$4`5e~tc4T7-<*~X5~D-f za9g?P@^uNu6H1A1(L#QjJMI!Y@W$lwM_T6+3LrtJlWb@7rE35Bkt}l&LYKdCRtX9j&ZL%reFV4(Q%da4)-Fe0QPAs7J+ls$iqlg#WNTDaavdj3A7MH9ktv6=MK)}1=;xldZmSSew9^Twd zeJLNhN(9edRYGH^BlIP2VwEBb(M52Wqj=mZ0jeLs=%`HrwGrocNxuir5;bCZK{s-r zUk}CA3wXq)NY~)uYBRuzpBaH5zk4MI#}Rv4IYc5?fLLa)7Sb! ztCe=GYkpR{i>Wna6NYT=GCseVeRrgzhRLo5AH!f~;}Zu{(ka#1aEH}jFxNvZ^xBi8 zkQr|8a^ zw0pP4fCb{W$a{1~@+3Jv-UNlZj*ig7RVpftpBwFQ9l#a2TivYfC;UW~`ibBBVRT>p zoTfz)m!v68$t~Ik%`_$ki%0HUYHJsQ;McSbE5RFszRIyNpq_17hcmhqf-W&G96oge zqS#dCaN;5mixUPmVhqRmSGBm>n}ek5v@VRF!mqO~XC3b_h9JmH`nPsVcWxvMHmkO$ z>9LfXMM$Jxw!%9a7@91uCn-C{$jd=E)A3!W%~!|9jehWfhF0mzY`G9_o3?I>!r-&3 zkDk>X)=7;&`K0Rcn0CX8@}rgtD8V^LB@R@^aO6S+UA>b(Srtsn!Ax<@EiA-j&0Uu^ z(;;m$9Z){@iI7jFbTkFJr7C{};;Y|Wo#}KBO{>N(gK$$0P#Qj5usAF$$&=(XG$V4q3q8Xwaq90m1 z#5{BlV;?%+CbFwlNDDx=N&5C)XQ1#Mje8ppa}O~OZt3g`7DBC}&GRj;AvY#DMWXww zQs-w_fRZf^mGr7*hKa}lDzo44TgM1WYHSkr(bmb?^W)UvU}0g|&rLwW_v;1FtsSWy z6u*LA>SV{Ivr+QKO^(Karrs&D5s8N!!$vQz*m~kcSxEKQD=G&Jjh8m5%yCC=IbsR~ zko5K1hsNj(eN?EId;~$H)U)QIJ+JKDWGml4E-)LFTgfeWntQM2fkBT_1ah`+OhiWW zx_40<(a8S(yep%J_oSQM^~oD{9+NliiZShU)M3=M!!9TQPFl=jIrO zOLhexww3)ztVXbUw;NSJ#z82Wz438P_bQQI)=M3 zRU@b$)v8`|w3T(N{nC4P=>~8yW(tWirU@sHw50yXyHe?dxqV=t zl#X1#-oO6HXbj)G_Tf!jU~jlFC{Nk?95W3Vxd+|7ikatPi`pn_Ok3SRXFs1h8T$Uz z+^gz!#JnxJyL7vzCi}xZ7LwO$vA@rLQh9l~a_1NZ8&uwP9_{+fz%J2B+sfF=+PbQh zyLBCMy5bwUTNA>p3HFYZcQ?D)`!?F0q`9h@h$;FqlUGjkDlv)9;Qom82QEQWOr?o- z$m{iw$#>nYmeWmdS&u0mq3xIMt^A;YviZGUVvASKZ}H=H+udc!@e$hxf>td(v#D%M z7vcWEfrj`!${YBWgHav|ChF`XTD)4 zDU7`yyaC7R)wmHrFSg5l8RpI_=6 zYjpz>Spz*Yq#dBeJc2MQ7bT6jk+r*wAD-g5x9z_EQciU>w%To$ZnbdO=-a3nV~9gw ztrSx62Hq%c$|Enfbo*nC{re^~%s!j4#GDiWR{iI#Q5gk-d<2X(NA73=VMdFjWd~iwc8S9p) z`?_z?M_?~g@a{~nYUL0wV_EM8{_2axAH^(}ue`6JTCm>yW?Y;*gK~sPav0;%BMM9# zjM@~Jd9;d%+~Ag!x=u&0@zsC-B=?#NTludkFq~40V%T_0=-PV06D=bh7yBI@=L95N z69=Z8uCTwIn~<59YMRL;hYiT8+R3`B9k4TXS1Yd3b=4*foDdyjoLIk{g;ZQb?a9ux zaPw_roPHH{NQ$4LW%Z+yLoxSlT0YIyt9KQpJ*=JQ4sY$vuC_dv~)Vy=(-a{H;8d9%PppviVzJa`JfYB-MALE zp!1YWXZa`J$Mz!~H<=C}4(A-$;48>;Oh<={a`yPpS8cg~LB>@nkL^WlbMw8QGn4Y@ zSm>SR#%fZ{nx?yB6U~~l?2)WtYz0NMawfl?c16M_O%AM72 zda5^2SvN)bq!fhLW7r^KwY~CT6=%`6Zy!qUFsxmB#Bi=mY_A+uw9K7_K29S^NXLqt zFEEj~Csa05viwEO*HS)-mg<(4tJHiNGOakJky@V|mgy=YE4xRLdanw@sX2>sw+^?3 zi$DM5mOt}a(TKJ(8XrL(w&(`WIbn*wU{m19J*>`e z0>$on&eb`0Z2VYva__`8o|hLsj99XCh;#;)hc!9U8*O1@*U#8#b=5Rm)!DYjK*_7K_a+?VH7 z`&AdOwbgIVN-yXy(7s8#b3|p=t`T~ARhQ0fWg9|w@$)21N(n>lKPFj0H#Ij28rJ9m>t$p+WOKTzP>$fVv0r$_ueNY4~DvfSm2tgI^qH~k~L zi=OPCG`G8lqf^+Il4{NyBv5==)~VDZUN^H^Ov-MjnR8Rd^x)(Dsd5Px3d=&?cj-(H z1nnyE;cM})Q#R_HA&WV5oyp(i?_VLlE1o(0*igEAraQMM*Za<$%0YXHrHlKgrJJ`>nK9?)W zmkUy+)bYFBcCwq)e!hWS4_mA|Mln;mBl9$y=O`za(TG-DzUzju*_nw)_Y|WZHo=Wi<_taTXQ8eY)vVRV0Lm0|hDvO{;}xjO>+D=69a=5kUQnW>(<+;V$X zi^O?t(8)3W(mmK|VLxunkiUtXTOfDT$vq<4|AR^ht7BhZgRc8gIrHYmUSF>V4>ZX8 zK{3WpE*}rwFxvO2s-W}0?8_3TbHWjxhkO}z>a^zh zF}W<$|5(o8#Y|iC(mLf@@*o4bF!1D}_njxyQnz%{(FNfu6kCeK~^P}gFPn}j3^1({9 zfQ+L2Ubl5TB$bD(Ec;=&Pwr8V+~=b{+u^Z{~6ZIbVbFh{B0SzAIuDo^GMZjo`0U&Y&-E9pVI zj11PPzpI6PYDksqpcB7vMn!el4d9n_Kh+lvGTDm}F z8$Zvv#sd52Ys3sM#t)v8ufH?Kr=O*N?%SUhcvwCS2`{#-OhbylE~C?4>KotejTg35 zZ>k4V_~nN2j+oP;qPmn;976BKfU!*QbC%4Kte*S=0l}a z2Ku}kr*w39TO1Gt$z^|TSfj7e6%}{+s8bzr8_O`YfJ9Pq)qcd<;t_~&5%a41GHI$l z#Dn%hyknRrZJ6D8o71NcOcr2G)e^1*7i=GP(n=dtvbQ(3dw*7%#CwN2mrJ$P&qzBR;xyf%geB~*VNl+&Ymxy8>U3b}H(!F>8uqyUa=gLD+ z+Ey)W(F=H3+TGu5wz;6V;d66NI^2<6yo5v!7iAj{iS<2oHk@jW>3u`Y>SrXP6BD&< zcivnJq+wX$B9wEA*L8O2@iI)dRl{|rlLel9F14sqwHM#F?kv~Nb!pneMB=}lSTfv} zxgC~Cv+E3kq;BwhkgT9uD9kQ#MWC~+hn6%DXrX-Px%P@Q=b5{v4b5J;vZ1mwud1t4 z+rDGhUWV+kO?dWfqqU9i_Y&PK3-ZdckHua&IpYZ27j)KCNY3`s&L)tiWRl~)J!w_fhNns2Qh{?hMS-FXatq>tKQI|Sh8u;FF zsSSQoO~Tk?@^;=wzsvr$D?{_P>h`m(sy?w$ z=uoRi6ti6W4N#%Gdv#xP_HpGrySzZRM~_k;3E8`Rd`LBKe)VSbHWtP+!4RH_wWcgs z5*e!c@#FUc8CeGE2FsblxoBw*Ccl2BI7xN?lo}fw9{liool&@{nVHWkH&diuj z$FFJ??ko$=)GPSd+$?dDzi^Hd{+X4p8M7swVXaOdj)cpZ0-EgE9i+JXgNFr4Mhjn% zfpmImq_f4oGqf(r$f#ne=Y%)@gWBp1D63=H%NywlS?iRR5&buBHf z9i@R-sjQj)Os3UBkFl-e8!hcjL^Xz;?1DXgmmNtw_gbsSccA`_@zo<`v!zt-KMou? z;7aLqrIha(xUiF^?v>kMXG%)S<7HA;x{h^KVN7C{%iMIlW@-*D{W9M|a@&|AQsO(1 zuM$DC_^bL=2{$Lx`HMyFEuYb5-c(IUU&ArpQ@a+{cwAP^@j*rcU2Hv0V$V_ zWdH~A@{Ti$B@$b2IIlhH@#$gHlDaFf&y$=napHxznO^ZD{O;T}p{ zCBJsMk3^jH0IHGJIXm}BnmL(OM)4OVo5%v$^z{YT#K$Ja$0z)0 zx2==?YfG4i!k@4v_o6Imv_{tdhH*fnoKwG154I^-e1ndC1r zv$=1#_y_GWA?`}_%bg0&{h%XouImKNj@5%?c<|BB2Z;sf?%oZHH8&p!6f+Wm>0lXL z=aOyN{&^XIfFi`+AvR$BwUWEPdoT%l7A`)2{t42Gq1MHMXTF-%zsbmU9vN!O6cXEh zyfEr;IImomHShqpL|j~=>x<`xE*fxI_)pXSx$zX4{CH?5IP}22Q{T zVPi0XeW}JkRZeN{lr|?iTYDQfCJs3O7+#;wjH_dZ19FaOOqITjW-OL~P4UfsqbFvV zcK7tOI8QW1Tys;|%%5~BkDkxzrBOv#w&R42jSa7i-QcH){qU!RNfnrE$l90RvvD)6 z5bi6y*ZBK`61|#*Q&!}q-O%;n;YvM$2Vyf~K;ITgFy87!S7+dR_)iwTX8RwN(YDn6 z*7{zD_qs=}RjzK%kv=7SN^feI!{kzj+8Mc%Cw7`V%ZJa6f7<$D)8VjO*W<97V(SeD z=rDaYDIp;Ng=d^#+lnw*KBvLGnwpxE;ZN7@vB{e12rhXfJQGbF4adD|6!Nnj!HBn? z?jsZ3Uto;H%9=J>bs#-y{dajK5+onsBR`WQKl5GG zbqfBjw=vy%R6)To)a{dJ+X)(Im51QFGcq%M;l9jJcPC=n(fSH-@4Sa81 zQfH*E+|nabBC7@w!Lf0@@PVD>p?3wA6X6hn#=HNPYpa9{UNg+LGOdM8qtn zN5iBXvk|i4gLN`SJ#a9KcAAHpA{{1+=(*3_T+Vv|7RAk_qmfG)+n#^JlK_H$rC&%? zxe93~U(Gb}g{Q^pg}0SsadybyBJ$MMlbT6}8g|bCtjQW`$Wd-=PtbS@#>D@T-12@M zqN6TU6O zYA>T2ocbM<%%_>ab-P1TpIUNiYI50W>AruDny^?B1=1qq!B%+YXrET~*X>h4u%%vh z(>LxbHWu7h9B*@9&MWP>KPpP~-P*Jy-RnN$E6*U9hfMlfpOfwp0h$R_NTerD^^Wxx zxRD%y7MikMN%!(zAeMzlSpsjX979l`#ZhN9C;Q4xL%=F4eRpZQ(8XMXl1B*siCXEP zTBGFWeyDa;l)xnkUAE)uJQl<$=}&>8 z7g6(RHH%yRcJWOXFdO6*2GXR&a&=x`_#jX1q-Mp$#5{faG%il)&D{a#0Y|^huMhG$U%~0cO_ifa zpfbw{tjPbw__g1?jE~; zEI^NzhA?SYij&Reyft(r5+|kP&))%R58BO*oIEmt8naWQKV$>nhZo$sD{rKD@=N{k z)k`=_E}EGYyW}-xN*bE?hp^$8X3?wfm{M3LYJqk9#hZc-&PRfE>I2qraf*SbXlxnZt)m z(w@(H?s|mUNdAtcY(DlXe;Wk@UfV)VSMhf!NrdMdXFg5d%hySZF!-Kzpb=GzaCuib zqvO{$9Q5JYePv7GVkB)+kKX0Et|?#pj^VXHQ?7OQTysXrR;r$Fp1Ku@%uuvNL8@a1 zGg}PXrRCdJbgySa)k)j=A52bx;!B|F4Mqw;rY3V=51 zD`;nKij8x=T`R!YACVa{%s0;9wTYh1$HHroyFTw1QpD1T)e-9>L>3`vHC6>2{~hRM zqHixClGe0i)R#RYo=k0@kt{WMWm=H#v0A+*Ue?$08eZ0S(~iLwPvYC`{OBeMw2w}) zI?@$Bpk+8HMVL|mu5$gx`%lM5LC&jmlnU_}6FmbxY30}2m9)+UYaG4KWhq^sA&W%M zdde;$uHcYq7mfT~w#~r;;@+LsZN{kfT^^OIyjGvC?Z}EoR$J-s^1aLNp-%m6-9LS| zn+3suwcmJE#84Q#F^x}Uik5WD?e|z%glBugj_no*UGdRIMPQqk(5w1<7ePMFBcCJK z7?qeP+c+2IPHWaeSub@|1kD#{(QJq~UjI59lUtY<0yY z-GjeROqry3J~d^_Hp+T^iJoZJO1|=gX($F!$tvLz(2IzuV6dOqjpnN4t4KbSG@h%5 zpMmoS@GdaRP8ylZ$T*N>B>%`cVC%`vsHn)hIH`>b$Hr_!qW_+ooulH`p4A8U7YItv zlgZ@#mp@ANZw6nzBJOR)Gv4PYdU?I0q+z*`PLg3A@(b2%%i7emAA^s{FFXX)!6jv> z*-dxMcwkvcPmVFtle#XGUWhO7gn48)Zb>;`*2=GMBs!x90~rSZ+bYu4R7mYA?vmnJ z4?-Ck9R2Ox>yr5PINA(+iuY`|P|;#Uy^3gE_hqV1?Ynx;?E79w9)!K6zs#-y(&x!w zMH1fAz1qNRr60Xs&rl+OPJ-5t^7O-~Je2Nbk}Pg^w{Rnu&rkOX3 zMmoxvSx=l4bFG~kkkSpy-iJPf&r-GoV_fP1WbP%I02GE=mf!Y^#`c1g>$zE3;6`l-?>?aUq{Z%xJY| zlV)myT(hLiH{|5t}RzqH*Cm7jV0QMF+YOxom@|LZEyP7Q&Y<$)^x<|4nXcGp-boZ{&vd|em zhstX(J#Gmewy=OY=lK;s&Xy#lp07{W6m*vfH4W{xW)kD;_v;M#AWs ztgq6o-lk#}dapOa`{!SF>4RUsaWNl@I*_TI4pG?&{6hD&O86ti-dU}tda#qIGDad( z`4H&Och{n=R1vIZb@dsegdn6dK*%Cm>T3>8_RQhwCKVpEAp7z8b?fAKEM_MYCXW%A zBlnSi*@v(xpOcd);N6r@R6ib^RO-?(F@aKJfwm&w4kxxEoV+2Ql7L*PD+jJwkZGCd zg-{u>?N9&fi1GijQExqI;RBC?h?4n=8re?2xj@}1a~RpA$$|GL0~_-|Q(b7u#zsoL zmrL+250;di(OM$C;c}~sC+*JYL+W5hv>Ziv@Kk(^SIn1BPyAIr{Z>Gu_w{QjE9+?# zOT(o2XV+O*)g?K$-JG7TZ{s_AwwY^pnXZ;h8*1f+Iqx|S;UT9d=zz6UH6Hur3A zrrq+}2g`a`5Jue5OWN-RsPo!71AP%qgB^z(lXbw+Kf%Q%|5_tzB2FQ_WqM zM>m5@m8leRw4E3)FP}&feGwCLtA}}X!uEUb2e7jRH)&hXfDXZpvBN|Zfm<*$nI1LP zWA)6|hdHzr*)kFV5}#k3L^K=f?2gKmLhp*C#7oHkt*c(Cwzb7bI+@UX)|_zGb1xx`;8KG*@#}5b}r8vy1Ce`8cJ{YHEgB&q%en7LnZ^U)~}Z zELIr?u~K}jN$hW}a6Q=#Wcg&|RDq{0OLhv}Tb2ZnS41?cI#Rf+W7dcm+qQ+pya?o@ zWPp4Ff9#p=Gp1Hdn;on}|7b^U71k@;y{< zHXX|?l=-b<5BYyE2@o(+HX$qhz!rMQ=_+}4fXeV(mp>L8k3AHO@XrV=d(i8 z*!%>jZ@+z0`cjH&5Z=(0$`uy(5C0VNYyAQZ_4B>4U=)|JyX)gu!KjAAfALFGd@O&y z2sD3Q_t--J{hj*BMU>`=oao;@ky=3W79mGPf_vpfIN`@T4Xh}+C3vD6m0I$rXO=xt zxcj+063#|;Yi(TvCCd?M?v>}?q~vG=S9DYf&bxt?*MIpPDDq8GCaB@18%-8U$z`(K z_Ipqn1y^$3DIEnQd^WHC#p_|swi}hVfrAtqi36=NKAsZjE-`EYMMom&$ed#+t5<(X zTJXo4*?#?7c^~`hlD1a2y+&bLzG&Qk3&*NX@MUV+T^Jv?mF?4Un08?EHqE zTeKkj_{(!S?{lYZWxtFAV)F<8to?#%1&2%UeoO;mxOr0zI*1EJi_U7cl)pRk+Xp;# zr&YYe@Xmt{gxMVU(&w?>GqUisSQ;SKhRqg zUpmz!1`vk|-W$h>LX#Q?6@Bgr3pg8(04-C~vC$u2taPp-WP`gc2y5RrADRAbB?QjH z{fTHzUcegwM}><2fg%WaCj`Of<`gW)_H0ux6QuC6PIg8}@#^cl5gDy?v`;=)(Mfx` zGb;n)4@G-odGSLPe*K}J$ZoxSHj_% zSPBo2i&_?*Z*$dj?c79*BH5c@NPC@f)6?}}qH3)MYPP!)QPcV&CC3*1Rae-aP_Jwa}~jZ0r#rWzhzhZhqM*IWqDGTwQ;a4`4mAPrCKLMEl*~zT{$&yCX)w2fRID^7!e|xT7oV| zsoCNUhe(`|sA#Bk(j-gFYMoPeIYb$JlVGxN>6seb3JZ`4u=FR8_TeV&O>ZW!Uqzd` z)Z!iNu>@eFaJ^jc6}9#D-E*>( zQOAtt+2%X+8+k&cdgKX?`d!Y53R}xonSDSnMD)W;+Qr8_m(pU}GlF`p%D3|f_TnQ}rUrg__Bvgk7cZIYU$e8HayE+W15D55*9w;f+e-4Qks z0SELl9*G{LR_>uc<_X^t&u6Gf;-kXgSsc$a6(1gf3JE$U(;_ZnP zNw*f<;2U5D0Lq1Z%@&C5Qe_{KVZxE{=*&S;z=G#Y+@H)vgi|3;Ub!Ofp?`I}w;5!{ zZ5@Z-c?u4e;#g$e;t6D&B3_O`-}~3MLqfUc#$rq7>r$&lb=Xv8*%Yy1mdw;r#GYa8 zqwO54WFL$?hD7T^N*Y9dfwDw|?r#QP+s0C4OxaG@f~0^H+x*}z-gg1VS?xy%J)y}@ zGK~dJ2djzP@+aH7?Md6J+90Yu{Z(aLy$~DrZi5XBoZw*a@%TfEq+mpQC~84e@veZz zQn05c*KD(+5K6YHZOctSpM0MGUblU}o-SZ%Bo#Znkaw&Ep|SAW6lZ^nF`49ewoi|` z+Rbi<6DhsmYXHCgena)=&+QlI0iwdXUjmZskcFGx0&=7tT=;>}^FPp*Oe$FTqFArM3z)`fAJRmB9r4PKBZ z#FjV)3GwkhHAMOAVJM--B+|49NVVb+j0_Izr_HRDc>&vjqsWAF|Q?5axd&rLuCk z8cc=nYc=FbbuaY{q`1iAgd?$K3}(pOEoFCN-iz3M(p8jgFAIi7CGn@qj3c3+bQbVF z2QEdgW)%^mOE&@Had1==r|Tmg4LySJaurOKI8a#>hfGh;SX9Xjag1S+f4faZG$8}^NP!1N9?HrlV%f#9BTw9`* zW^lNTGyEt*dFc*DU$*{QtSeDCd?X`}dap|3I-_zqtyKf3q3ydY+qlWGXa5KdaJ^ma z<8utI44RA;;yics3TU7ixTDEGB5X6+TtIi$!=U2rpR290^L}rJvqi zz5Vl1HSY%H_eL(ov%Pne+Ert?Irj!6g1yNTiCRB=th+aDN&{pz*K9lgse-6J_Tgc&>q9R>BMZLiKE zr-`W8#1lB5juB^`b^5m;mxF~nVs+H*~Z;lAZ-4_<1gc8`7=JA*P#t(WT;**dPMBF8$g?#64D{dsB8Dfg~P_4 zAcnk>xi3|c15l*z)Jkw=sh}3cDw*fqYTEY8Qcn`hK7Yzw#!T;Cy5u1+iQ+f zX;x8=qfZw+3M=`aUw?aVAHv8+olMh);QfhZDzQc``@=P4Tx*Yj6`cY$Yt=3s{-agM zk&t2oiS7>&A>>5MR(ib=+MDL6)%^t2fnNA~kPPcU9; zW|(v9t>x|s3Gv8y<{3#h&sl@7`n37w6d^t-Nazf&t9r#buCZ)}$J$3hS9d1V^g96f4(a7b08&w9Czz9xzrJeZ zAHJ$F8hcd;G?<^n=?s(d{+_*s*ZcUtqO@&ctL72NU!Jb0p-bP5epa6XT zNn1NL!9~kgCSgGxtt)AI*14$SJ8Ca*X#}7~y8)=QzdhuW-+D;YuALznKMrnWHaRAy zm2yPB1!^%u?2nb}x^JNeMsS9Mg+UW;&}y;=2&i$+8WrCWuz~N22DlqLuv;EXpD?c_S`ko2oI}{IrNp~n9kbu#BuY9}_awOo990BoW*BRBhO*YJdtq+&W zHmdF9{lW+ZO`V#@2DTL5{@@X2#@Q_JXpJ|1yUf`j)Zm(f5UHL~8$e#LZsyr8Wk+}(Jg2?P71!f7dc<9N!h z%ICT9XNREEEjYPF*!lb@J<+}pnC@%KlQEXbO79+jN=-f>$q|^&`;C9;=Ia*0@Xv!< z`y#|R%)tK9Y+PW3&Yk}Sh7dnMFGMaoI>GEXq%a6ntWrE|MOYE!4?*I8)J7rf!(X)T z3C{;h54tMp3uz6IJv>8XqhzmXTG>lYU6AaZoinytN#LTRM+v`6M)J(7Bo6AjvhD*WM!Q!yc-*P2Fam>yohxL zuW+Xjt$v+Dnz@}jQqWw!iXFXRsjR*$+e)zvxw$*8Dttk=fQ+yI!dw0WjRP(70^I<- zg&vW=sDgj^#{_=?pYRi%(`I6aWbv#Zti4_SmmFjyr3-2)pFMS-KVKlonl`+`&|;`a z_x+C5vDX~kbokM`(70cz9h8#ee@E?@-*p*o|Dcp>J3Y$lS5`>J1qBqsDvwSE3h{qd zFU8OKH@ap@YxL&Ln`zAKdBhIpi@DYGl|8x;^spgeCwnVrIK>fVRv-c$R_ zwrn&~&XY)D6s14*{w22$XFEXcO{#!U{B!9Fq7r3l-g0>r%?3UqZ6Hc9pi?@=q#;&- z+|S?v&5&?)b#;pEKy!b8Kg18(IZjiti8+-X_!j=eUzi8E<98_Xlp^Y6RievSt-i0p z^K%4m@lQ;X4hsE)H$NU-^3H%(Zg#K$osTF>V{tZTy@!4^iirk{qRua8)%hv=9LTQ# zQQiK&K5fVhpvs?9(!hVpbeZdc8`-IC+Bkr;^);k4;N=3v7~0=0a+!$NZn^WpZP0Uk zd>oQ(sjS?ip}Vg_+W?h@E7Wbj+h76Z&*n{lncY=@>^Eg+&8dC4bFr>tiTTvyD$}_@ zv07@W7a^o0gv*5z{bWM8Y-}H!lHve-EuEMF!MGLv8gkUhFzl2!N8tqpTic1-D+M4@ z=4jT1q^=6$y2yWcOqsZ$nLA%(7VyI@J#lZyUvJG-sf%+7XIHeUxYd0 zZt$M&?q*l&9JHo8^F1KFbcDz}*VWa|2>Sfi(m=7fxjC}IQ`q5Doj`yO$Xw5r@xI}}!)OBUlS657~*BF#WSB1jJp z>$Prv3u%?>WC34wO%2r({TMgH2BWO6 zo9iN* zP~p(ABh$-IzU7;J%csJ%SLs6>s3Vj{vk<;O6HzE4No`91z{GvT?+(Y)I4KmD5A%y_^y}iLJv9=3kP^M~oK?kw~(=b?G_Q{0852N@Pbt`T6Wgf+P!SRUvxL64C2 zNY_dS0@5`!q@bVxRXfVTvGMUDqN2jv94?G<6innyWMe5)5)#bNX$fIXsm?}zqfocf zAGAa}gDflp!bK`&PFq`>9DfBWC!F|D{JY`rC2EN}%!%s1eSvpRjUKV3xy(7({P7K< zW%AZ5SFiTL+d;O5Cr*94!3q{O-^8&dL7N+TT%0(QOP44^@D=3Ss$9W@d@UfL`fI5! z3UBZh$op(<&GAmDwF(q3q~utOp6+_Cm?Ru>#M0Ah@@i)!I``}+t@&32MpF3PWgNDF zoSFVZ#%?P7{7FX@WSsM$G8!E!;^ULDfaGmvK{CoP5E-JbVE0}b>JO5F+%FXi=hoG- zigc~p77hJD3&kJPjBD$=+xtCPuG-q-8Q%~Unh}S!4)eSM=tTX&QKXVKf4vrB)&APKEs!yW>#!?5Ta|8!Q>(E=0Qu z$VS`FE+R7$dSqhXa8$%JuJxWQ#(9|wwQbgb!+mW~5)&IMxDBce<#|D1D3E<;sXZiK z|4(ic#r?o33ZY`8VWbx*pRPdRmFE=zm#uw!^pW6k0oP#xyu;-qN6MgXEg^K$b#IKn zygcr9aa3HvuFjnU+<6gfs%esyr^@z)Cs8m91+4@ zhH&;qqvf6Z(>p(Y{FomR3}5_ghG>=SD7BaI0ykfPf)t-Xx!Bw51n+e|i$Cng6NDcg zgrkhVSyaOzbLek6EeX6`r>s>V@ALe5a$xqInKg>YtMn=W#amaVCxuV?9yosdGg^?t z;IRp%ujZSJpLHqUb>YjVu?KY-S9@MEx^XTlzP-q66EmBR1o{1!s;a7{rnNPUSdOdH z#3F2g?&~M_&7t$z^Eq8B_V&dX93i|4PHAAAf|{C|7t@8K3fn(cE|Rt`eOn!`NrjR- z<<+ZKIXQBQ^pNejz&TTXgj0;AQfza(^X4RwnA+!fLdM8+aQK5j`0PPy7oV{DOa7zO z+@V5l5Zj4_ZX0OCOOWQ?2b%UjX!gbLe}7Pw);-{e-4LXct;7z5y1|d{aVCB%J5hf8 zNgk8d75Gr0!;2PvUJjdF|$ck%7@#q;eWBjMDnl$7!08l9N{>aZ@QTP?R9$%eJ{h$}^;O_}tLO@XcZ@!G`< zr&*F&R`JO$EWS1Tc4<0oe$U4fz$>IXT&kv3{L?aAv!6hlFi>6Q_f*+ z23&dupzR&7d+n-@cX5w-KkTvF@F2}T|NYpWDB`E{8~kE40-B>C|5|d3u1^t!cgb~) zg&$?HqAkd1+y3^`rlo~a5fqY_t&gja-&_Hg+9Li_!jDA1?%1=GEr#dP+HE4t#13!$ z#m8!YjvUZB`we&lzt5m0m4IUO>DTnUB~>g~PcELQuAuj>5NzO_k_ zq==6Z)e)_g#MAEW{KZ~YId9zGwg|y#PPe5S*Bjnw%zIhLy*X{>)LYu^&C--tD&wps zT8wVTlGSsL9Xw7vf&W)=%^er|ej&;2aYHv5`{hm#{{1=+h<{7!{}uPInrr6T^uPbd zWG?f^-}+B3X3fJ}9T_K-Fsz}!K>j;&dz&m{zR_$iV#WVdk@{s11a}iZ;TMpd&_(>G zUj#3iPl@OLS`fH1PeJ_mVe<;W|E}53wW9x;#!uDq|C+{sO@rvU|F5V0N$UFFfbuhX z{{ORS%;xqrSzgrsJ|}MxQFqVzDtqrsrx(W*QETqv%fBFXY>Ubt&-U$IW3Yu?NPYbD z7R|jH0&BOhS1T<)@b;`GNAOXT^*RQ3rzjB(HeMC*d2IFHpm4OTU)DCIG-6 zdFoOsX&flwe3U^?heR_aj|w@mn_145h3b*QW**Y9{$d-}&~{bVX+M@Y&EdY8a$AQS zk0e#8C&BcDoCTj^;z?`k*cb090?(&AOp~!G%C0Md9{f#4wNbc*f+XujARK&9CnY`H z^SViA5}BK8(VN$2UD(kP?y{BdiRPuK5NEYSmiVi33jg`+Q+j)1WY$nciGODh>TD9q z%Er>wL33ojGEV~1bhA1rak}=XplZjITMLyk0ZIoM0VYg?3+w(U7pHltWxOt6n8xJF zI7Ty#9MJf;zhn_2{<22L(bT~q<4o*TO*w_sugWqrC*;lvm;Yu>o-b_({Qg0PZxF*3 za9>MI1Kv97Oh54zu`a*=3LoM5ABWDPrbn!wgp(^Pavrj(H_b1l=*M3c=taJbmHlgz z5j?Y+(WoV+6BUt+sizC2eNvzWNg;hh@V3jI0Rov~#FDJF8jm-dU$_5!kc<6mruhd+ z8?|if`0aywGq$MO%)jyO?q1D!CpT=F?!)<_6^S27!4}&KCq1-9zkf*hNZq| z?1T9YxchouF+@TS1L?cZ<(QW}f6CO!PLY~U^yDR(f1e`#r!hTWnwj&_Px}F}0_8F@ zXCD8a5g{F65fKc7XN`Sx(q@&yz2XL0{-?&ukFW9L2k zOB{lOs}J!;RWvrB1Z{7VcK&7uSvaVeXF+9T3XFKtryTfWIdcC~134S6C?XbGbhNaz3=9mQP^g9X5q^fnWfVza=xH}@oJ zYQWb|*SITv_{OHD{QP_hh0=FZu~)U}U1kusJv;gFfTSes$89IJKBO|nc`ybSAP8p+ z47dOm_^Yk0nAhVtdChsVK{@}^8-KiYZBysQ0KOjwYR&`Hkqgdf9|t&Eb8|CbDQ0Yn zUuLmOy!Js&3;uD!mU&<$D3l1sfaHLNL3Nxp@DEf`5uKTNg&1O8zE$*T_m7s?$_`cI zPiF$$I|$ckf2BtA&rrY7#$-D3Q@Z!Ng$4O@Gne!b^RFACl?Df5<_qd0?Bh%tki?8- zr`3h3CCvp|AhXTB3Gq?MI2lySh+gvC|4?J09~&MXKJ$j9yg#Y-8Z9<8OCiSjBVJ{n ziB-Y-iYQRQ%ZNfmZZlBQGb#?U2!TW{)j@NZI|SK7~iA!37+GY{Uamg zo##OkHg2}4EnV>}e&s_rNiwwTdY=S?DX$f3@wBvdmT*`{M{atV+u#V^Yh&S(9;&R( zT~$xA)c1UqwRCP25vQP2;xoF&I>KC`1<{h$^3NHTR3gX|S-C67nk6B+_gH&-keFU|vCnR>+oot* zW-v=Y!VS!;HxitjY8E;&@?4xlf>^_Sorkde1pa5kVZf^Lt}kkQsI{mBn7!OYP)X(b zf}Wxr&GWY$lf;ILcFWFd2*3}dC6Qi?*DW;*t7|g>-;i8pwR=EA<>Y8A}7~PY>>@M-PCaw3A|_xDR_x_dc80JyKT}kj9|` z`t%BI;~xUk&&N?@YvS~<)@TJNPHkZq8W(Cg`5RV0TOdban?a>prq;&GC!j1Gr}wP^ zji&V=Vv|DPSQB+uL40oWiM1z-Shz=^U3fefY#dz(xQHvLFBkS` zc;M|tpl@XR%(?wO9`1#G;JC1ftngDtkC4f6dpzf~GFn7=qS-tPP>pj=04gHyBW)f6_4;eG(nlbIzep5R2`et79t!Y z@`vTPo=jsIMn2QRG#jUwF0W+aJ!2bdF8$`GE?9CsW7K3&Rwz@stZ>i8EypG!KZ;xn5ATJ$6EAq z(3fj8yWh#qDGYIoox&Dp!^Uq;|BD9!aH)Qfo==G%n|_5|SPe+k)N z+I{9OOgIUVcrp#Qi(?vn@%C1msEIcQvi8QE{f=kd{*o(mUB0fhI2BmfaLipK;U`GR zD}l6c{Ei|sR2#`POHVZfEPH`SAlSBUHZ!{n?Anr%fcwi;nh`c3miNctUcbxKE9N>N zenxcV#iCr+l84NW-(*fe1}~W?h`J(M=leGqo>sI2;;~|><@_5ttjE1W&%6$Xw%sWP z>DIF(U4T7m6G+B~JmFZ%q5?(JF0k=HzpgY*+utImVzDDQiH~E2=+*69cT|g*W9pIJ z`WbjbdXMi5*1SjL!R$6;O`v?7$DPbz+wUf?Ts(mD3R=`o>^zQ&e9j2dDdu_s7iBfxc{?2%n&qO~)Q>wn%?QJO_@O70HWM1TS|1g)FKV zdi>SpkRcsfH$6wmTB;b<4~d+eE|lan@YAZYh>( zB%&3QOFS=Rm22oZ82!8~6iFx9enP=$%0mC$sdT0d2a5-EC~EJl>mp zwy6;@gp}5gPQsTyT8p~Ikz!tDFBY>G>C^O(qSGjtI-{3pmo*bbsQ*adFX~Zs63eIV zPBOFSj)2X$N&!aYv7sVtwkSKB^$A^w@eX3?+FEly)JZ4XaAwKLT@TWa>6KV0nTV&J zI2YPe&kwlJN~fmyIaTkKNF+iNKf5#L2-&~`*`=Q1?Xu%NyeVm>Q3F&mrYN0t+%<}3 z^byhAl7@V<*`11yY>0ceLtop7d>a83TS;md$0KKINXBAwd7rMNoqfcS6bKYQX#b)X zB&amDBG_H*@+>Cu5={mgtTevkQ$rsp=+Kat+ojDXu2ndjG_{Nk5}-pVeS6HWITnng1gtt$y+>A+Yg%`R8i$m(3{A9&9kKez z6kVRK!q9<*ve|PycxhY;v(5E#ZF}aNEHYzXanRB+Qig38{58;pxaOT(CpO($B70KN z5V2b8z0WE1)nzgBpLR*rMjOl~Yu(fjk(1Z)o1eUWr7G)ezM0USBW;i|Ol)&RbTB7= z+lxO0mZSu~4Q{Pep!XpgL=}R4;Io-x#bf~uiHCPmMKLAc{w2G-40Jf}HdC=#Dy@{1`qO^nRf>$_ek>-m=@ zUKiL|-!cwDRKpU_H_;pF#=PBxlIEh=OABSbX+~&VKH^nI)y(?y>Mji>mr|Vs{SG;TY|J()6iewueHcD>Fq1QZl#RmV-0m)wdpVu1uf` zZ3~BXSNZF7ET!B)J~AC%U7_KRNwK?_ zD<}dTWE|wMx`1JVf!#zve2nhKP{1}}O$91*hL+O8adXx!X3QcA^>#I^W-bZ?*QcF_ z&);9E7muJ)^O0Gi<{_{TlN|yb3|Yg54ihs{fA#Y169>kD9+gXuN9T;oQHtVqGdPoZ z#&W{(AM)P?FHQ|%Jy9D1Lv83_a3PPKD^-!0U!Uc>EdidDBBWS}@Z0MNzcJZvxPWgX zo!?URxXrUU-z4&IF7=csmL}w46(fSR{ZtRZ4#h(Q%NSch#>?7PU)NyPuTGju@=ux+ zh8U_p3^*i#688>G9C!Upx~StA@TMnI4PyQnLm zi0ct99dtZ^j@YR?$6J;n_xCY*)YT3)V!eYIF-WUzq6OL+5dw1tEu)e7D09-=qEXb1(5~?(U3uf9co$;r z@VuYkvd|NyF~yjy`z&;0KBdd>m{3}+TJ~v6-OO}eaB6x>7F6t5`Y&WS+)Be1~;%!`G@wOCBRxazGcd%h{=N(M0Jm70Vx91IMX8Y z)s}rPO5J#7mCwt?)!igjg=9R4PS@CIL$P4#H)2lX$!eKiY0AxpDI1A;+-Qw@{(>8+ z-pHD)tj!BE_u^xTXtsKP1%m^8Ezg>0p5s&-Ol}hfR(I&L4u54n+QC!*jG_~;N0^zj zc62px3O1W?WGMg}ytc|8sI0eKKf zG9Xts7g2d`D;#VgL%X>^d5x6Ox`Bt(D%MC}>_a`p2xxyHy4-{bKTneS;lOAV3RLImvh< z5VJh5HvSZFaY2%x>8K;49=CbH+eG~tC0r~t+3M$^Ei_Or?q+OsgBbAf+06+TyB>hd zHX4YrWJ!Y~{f?=@dbrYR_-mmdptes-pO4rV=fPPDS~Y>*A=Jg9--u&ofOHyR{mwdOWUV3)ZMPdw8+1Len?bbMurAvCbXNf9jo$=uz24XP3xwwf?A$?~ zk`R5A`K?@NSc0>_qSN)SoKxw*v{3ayRXhwGlo_#tJ^FmSlkabEI8R6g+Fl0`kNw%X ztc@8uZ2u`POi1q72x(q*2XNEh%6>cl<|s+g$qxXe(eMWA4N8`Urqh8dn_M>c=ceX` z#aibG;qUa_e>=nEK@BV%ord9tN|VE4wjuDt3Mc%b^4`E5v9?U^tSM-(utc8GiR40#BRQ!^(fp zVeTHN{%N)K5U&u#7Y@L#qhvni8{gt1#*$!`!vP3Y0D7A69i&O%m*;_N#;~xc%j;3v zzbDt7z;7|O9xwiTHvWHz->qVj)HHRV#E*u&PQzNlpa4{r)cOJLIHY57Vs|~iDfUOe z;Jzt9EO;mig5|vV^>RKr!^_hmlgS{x6=b3+6~y>FSa?#Hs5Jb*J>xrY4BUP1-o1o` zgxj}o14tI6b%wk_NEm>R{y^(saXv>t-l zd9kHx+WnzV_s9MQ@tDzV2BlU-mX8c+Nfx7E$4^dtEm-nLUl-J9rw<*>DU$i=Y{J5^JuBN8up+krMS`lwjiL-%L!S47# zM_twS@3;8p{bY+Cau( zN$49!)Dx*DwYcA*O|UdTB^Bx?_o@~&euwPFc<>D$h6zJ_={^DNJgV!T7&qRHhyJfO z{%(BcWmZ;JF`uuVq+ttn3xzqAIvW- zfSj&RyZAKqMVb%pZ~6c|=_}F=m@_r&p6Vfx(9a9bhXCHz+dDQkHaR&tI|~Q3xhZgf(rE7w{{#x>;8^F&y^=mw68$&XSj)&K|(^)h|~ZIC7*LB!2ew zu{QDLMrFeU$F?Oo!Q*yl3Vy1rJTCpreT4qyG~jDbKqOti{sTec+iNM(aBzE52{ins zNXJ1_B9U12yCu^L97yI}UI0q4wk@*(>>UEgU~q7-udnabt5>&$nKhU~|J%<60^yFZ z)zKOMFDT*%4Zs|h9o5sbFX{n}f)0Znq_k&GF6RKoQc*C53_IyS_la<)2NbWX;!;%NG{)&G7m3Pk-G#KE6kf1GK)dgYb0T^qO{5 z$$z1ZDn9d{PbdE~?Y-jUu+IX*$5(Xz%go%6|GbdayS}`F$H0EB0K|JyAj`MA7tlTH z#DOoYXA4W(Cs~{&>(eC8k_QqoEyxqym?8yOT^F&fE^TV4(f z2nP@G`6j*t&agW`W~tyg27>|ED4<6j!21&KX+?kCJ!@-g_%YtG9{r2dXYkjntHH%q z>7c!|w6u(jjFgmZ0Al{Gp@xRjUp2H}O$}(HzknFFwe`4{0nQ5)|NgF_3O`y>)vvtX wy=v9*=S?B+viQ7=U;dl%WyA3P`ku@GKyahRTz=Lf@3(WOFPwUQ;`clM23wXetN;K2 diff --git a/docs/readthedocs/_static/figures/uml/InputDatamodelConcept.png b/docs/readthedocs/_static/figures/uml/InputDatamodelConcept.png deleted file mode 100644 index 05a66894072999d5892bca522d7ad2891abbb342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200291 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

    -hc*DsK( z!V);EieOC7kw2Io5h?An(g$R3TWVF*Vp>fA5D$U5hX0X_gxsy z5~i>A*1t+abAK~&$sT4G2|wh~HJYx)_`eTV-fyXh*A9+K1bslpl5#1oM3=U9L*gqz zO<<(}Vu0NBb&0y_>H!Px<;eyyO3E+b4#N39tY98Wv=1s+hVBVaF2r7y0%(GA^?rvJ zNqOv*Xmcn6lzWyjAt7hD4Ysbemn;;=1f*!3<;f_wPo3P1`O!=v3cP8LlRKoOpYxOhhOl>MNW-n+Ku!O* zW?AVLK*YW0(}61&N{HaDt;a$^Bu`&lh>>6Zy0ySI4XX36o_pmy<}ci>&u6f682<2z zl;&~W?wRf?yqiAy`e)BuWwvydCqDAkX|N&-s_%c=7-^!f7ruXg z4XZ+*eS&P{+r7Td&Rm75K)3(lw2O3$wMP5;S{K0p5KB0ewFKODb_)n@PPpy*+u21i z5RwSew(4bQD8V_YV-J`ESUWDlW+2F@hLlKfQxAv0xoFt!FGWNx?^sGf4YZ+TwKzt+E|3UO8n+EZUfW`OJuATh~b0qP?Xe^yP5WJ9n z0t-%?7T-T2cf~8oxxUK%q$?s_mlsr554v?4K2iRm^A>&xIm+i^ePN1>QX4CPUKv&z zhJV1Z_^MOyE$}23CH297rTQw!Gk|z-m^v9F!9gn@W3=W91iE4=t`{_rAxHyRd-)9V z?s{~QZ$4;ILQKGj(YsODYX3fIBt4(k#fYT?(<8v818F3J9$VKMR9MB$_8r}di$9JJadMjp)!N6iD)JS~3z4xvGyAk6UD z8iphMcuS6DdS(XklUr~Ds(dVQRQQ%1C;co&<9UQ|4meH;IgG~o`dlHN?^T|Wu_r8T z1ravn3Vpgk&Cg#AV|$eqCoyo99Y!}NAww4)_HYP9aY0NqT_Ln};4^jN`*_ZR2(&@d z%8gMM78ZY-3}X)GT?LW1^oIeLIkY(TM4tDf^c~y}gMh7QF?INPVH+?czZO5^_3Tls zO*~ciDD?owZqP{TyzXaIpxZYeAMo>{-Hic>uEjM}fAed{9HO-(Jt_Biv}~w?NbgRV zNJr%jdJgVjQ?pb46TgT0f4mKFF;o4M?eC_-&d@ywn*Bbxci#yxG6Uc0LOI)~Gc)C?g)Gc@49SO-Jp-3~B!k=q^}gAPBJMnRM(zvrVV3*gv$ ziD3AqAa3LncT=n={ zyhgwMjMm-gPd5;N7NV+W&puEi6`7|85{JRLcKY_xLt8F&3Lk-){vwg#jLUoR3Ut%P zYQA)CJD}gSYVWeRd-g2KZIqL~Ewv+C@;Ny-YK-m8XeUiv_h>uqDfVBmX!m&LN21X?CGC@WogpEIHlYLrWpPtychJ@=waoH9- z8)09ixAo);T%g`(p_R$l9 zTpmO^{`1TM44BG_igeEI6K7CvU-;j(M=+lL?m%LWof`i^!}-5YA-_rkWJ9$2ccEQv z(#YB6D4y(v>Smg~7k(LF+lFfHS$7BqDer8kubG+tY;c@BVXFoRF??Z*o{a@uAK%_a zf&B~oAOo03L(pnGeVBth_~dK8JA)6*ohfYLk8;= z+MpVgKZ_HR53~cMp^BQnobxY&*8ag}AjAKZV;p~;vP`nTS`)a~5&bW7u!4dgIIjB5 zo?St7^1qzDVU3A3+!EeFj2s-+!zs{11Jg9UfDcwA#h!Tjkax3p-z9=A6F_m@)E}U> zeVO}5ZOh`A72jTqbwIZVq3sO>lINO?=2GhxZx|9svpbwJN%$Y%8pQ93kP7K`wQ5~2wKBhAY(wG=j&S!yNhgXnGDG;Uw#9SF9^*b=MU6+<;CDh z;qh4e0=eK77|#}xTRUYCwiD2cQb@pngH}?)E+UdfhYEX5{)<$1@d?Iw*()#rTk6OB zpt7tmrUDN5pCtA+4dRppq-PjsVIRcVMaYA@dB_fGUP^s%OvMrE7+6|}g256o&m*FJ zXx~T~WB`x&+g6xk2%9qyMq3hspiD-YPd-aHSsgCNqB6K)`Thk4ApK~62M&u{tJ8hc zsgjo);<`mYK#Fq#fGUvcFAb26Kb_DotXpKtCIcgYM3C`PAbSnODIm*wVUHb@?##?g zKKp^>E~{4s=h1qD6;X;}|EcgePk~vR3iB|DGtVGQe705php}$;=q&}9Fr0e>hw}dG z)B^$uh1|~&4j%p7p<)}Dl)Ab)2-eUIiZR+W!SPLS_-n=sa_zhoIOwQ~YO)?n{>$uqeXffqKXYcK>eR;yO(XYD0+YFM~+)9K$CH&rf1R zNH2sS!6TWy^Ws;h^uQ6|&w5-8!C7SZ?cd!||B^nJMdT8Fg*dq}kUWGVBjFax=w4DLiI%W8Rwrv;dMa3LdM6T7`VX z7vO*3kYIRpf2`ie3y%L1kLoP=q>&ZjJCkg!uS`U($Kn1cznC46}enlP+$jtzycfg z*1*4n^+-xuR1mtrJM+&5zaFjVbPhQ#9ImY&KOn*51B58*_&})V9O@u6_=Y;PXju!_ z-c%gm^OrMTuD{V62b%gE>r)g#zVgVp2mUR{Nrf<5$FbU&eQj#xZ(u)+vtEZLNMf+! zh}2!;@EHi!F`7U)3+n_5CCX%6cW!&$jYnQdruEOADD>R|xUzE(oj)QPvaX5*zf`fZ zFE!`k0knoRs>V;SFtrtvig>!hi~;Qmczy{-y3%*4&tU_eKJ5#s@fh2u{ zgK>3`yAZ2NOH$OBR4bnTBk+nCPnmL~rbPl4Uv7ddqsrM{Gcmd9_bQORJQ2K7ry*DRfU z(ucI8CtrC6R{dYkEfJmfeSI6LvU>d2($_vls6NnlgNO~7ENrXvASxDgpp!4}$P}TL zdo`_ISbq??{O=G7^s_jRdjaf=vMyf!UoZVH@Of$p36fy01|c(UOU}sSizP z$zvauHZ8DWt?>m1Iv~j=umr)J0HR=YbxDkydJpd`LW(>@Wu7yH6%z=PssCQhu#+C- zidH{jXk=z*XDej$a+OI+;RcB=kMywkQPF$_t zdxtwh{(OZ9ZJNMet@yt?ePKmdZEHJ5y)*iwAJj zxo)xMEVXm>_hk_OCd$&gU{PEY)O!c8b_18-N|orX`@G*0MMX;w7a>~&gcxdg`86o) z*@LCWkDK9N^|^jMhkt?LTLs0V^BFk$zAue&+1^js$hN2!NEX840AG+LNrqfV;j<@v zuc2B{>Y716Om@R|O}*c6H{UL@`Dv$n$iUl7)a%{Ale!`me)D|AA{5^JES2bsu`dV& zP(O99gWd&BTG6Q+N~O~d+n^ob<>&9!1l^OlJtp`43PsolZkqyJW6kpeA(s6)$;ZZ9 zf8Gr(L3V~jKCi@iIRBdf7w=$zX6qj@AlI1IO3!55+IfpthgzI5yUS$@OyjSi|Cv}q zI``d1@KWiGml;KYy;JYEq!v<8Ok#wR4#hB9=1SlDa$V=o ziroh$Ob3=GC97e3<-*2nDKJIrNp_cl7v{M0#q^utmd@<>Q{tfQ;8eK1jy5Y_bOtg@LS{4GaPec=L>InPAkGbujQCm7;?bm~QxMfZ!;4PGw>?7?WuZ8*PuL|L)( zy~6kcoEVH94$1d{x#^zBX5&BEFZu@K?0kHhTeO_Nhek?{Kv^MH_ECK#<4CUQ?hxZK z*M@ejMdnnG;z=OMG+R5KvM^*PuB@&qAJSRkQaNv(HbJ>fg#hw!l?(iPE=l01k`+6b zB+VMz9i|yran%DC!)@MiDGbK?;Ly;cx(SY=i8rzf(yEnc@O0%F{0j6IdOV1Et1(cv zDC@q2FO41{(+C{VBM8v~pRdWJlFBd;okI-WL zp458^C}kaKC-n2?auBaXOzv^w42A#?K0baAw^udGOsW2KJuxMj#>?R4sg_XKigW$k zwDEeixK3dORXL0TuviIP4p5L_TU}44+O3?^0BRHsBh{rv`nbAWZX|)~f`TGmYK+V; zx0U{N!}`p~JN8C3=io%phDwpf*L{jDOHjMAC0_sndKeEEe_F17&USsqSWVzt@Jd}w zvsm>SZ-k3ArwvNa3qa%dEjeyxE789hi{~`9ZIC76y6LTby%t_aoPRB$c zd zenc=0aU>&+D>F0hVn@l0m*qF3A?lR969K9%CoyDC-?-1uzYg}ga!9hpOd+n+V_PtS znR99F9USEav%gYCsJNfizJC3g@*Y=AVxshO65JohgNya&@TJK|YKysS<~FMH;Wt)N zOk$Qucc~DB1awxilS(&fG@#joz%=k!-UbOaAe`$B_xFiR#M~RxKgj(q9qTrFY!pne zHW>7Vke&1HZ2yK6+*ohORGbotfj$qCA%G~0YlCwAS2L4(toy{?1STHd z$K3S4hIH-vKKcVj1Jd#iIu}S`F2}M0sPHOA_SAea8*{whLcP-8ZmF`F<%w=FyW{_@j`jeI7b-xF1*t!`g6h^7c z2EMv|QQLjJl1}+zL8{W+}#q16MEno`IVG{;JChkFBUo=w4}ewhD;cOs~Hx z3qR;^m*yY(p87(&F7J2(ZlnYJRlZaqMkFs|pJ<)|{P87i2oH-?0OfW|vCBjiWRTzv z`iH$tE#$CvGqLnj1p^fbA;VR$jRS(vSz8~U$2;M--6a##?5Zg`L{9DVK9b>p zufNYN5h*Xqye_nPK!u0_txZ3d4Da?!hg%~C}6*ElZd~ZLiktq+8A2WH#jci8Psgc4Ky`> zsn_o}slfV-fihH~^QtGKA0dnE(7N&U8L_muGEdRt_zj19%D$)G|FHKdlbf`A<~AHK!}#Tb^A~@A z?St>@`%yNTe~@6F&=4XnzvceM&QGIY0^Y@fVW~Gb!nfi{$C-QHkozA3x!C}f?)y~v z=qzh0Qwf2~7ZNAG(u{eA9{WMfz$O1z#z^|O(bMyFi_P>~G@~TLlvv#&p$jeDBJ<*K zGxQ!X#ZE-t`mbtl(y2}Z4GmE971Mti`Rh60Yq97UOmU)SMj_olMbe08xcz}fRa|2x zDhxA$x!)}zJ!bP9QVm}D{r*K7nvRw1dC<|`^vluM3YB9k(B-hu{M!{7xeG!}Msz^G zcBB>P)nTI@Tqd@P&tJZTgxx1>ut^sTMJ|1Ls)bs`cDA-p#Vepy3kMefc+7J|48vVp zK7Zz6W`5ABdqpoA%HECdjLSDXlUrddNMzOhIx}KEGc zv@>6x3L#|G@cMqA5-Zv)uL`FO)z6Uc0i#ai`2>o#?8x4CQG^lkhiCL)J5Qb8uHocI z^VE+Y9@lj*2)v$)|A|QjRwpZ~u8|kkR^90<8<Y){V`P}%_> zHlwE@pABpZ&^EDNu9)OpURr{%Fpx=3@hfm(vbs?tm?neR;^SX;T2hgE}R8x(E5Jc3vW9`nJM+ zTdU@h>ak*avVjVvVw!R{3G`eQJKEm>sB8>3Jsr|^Et%@DTRMy1MRJj~DE>j-<`hk=fGI>{Qq8k%iFyNn&zZx^OPr;v{y4g^glSdY=aS?6wr`gZcSCCld!3d8O zS_NRyhX)dWv)*K!)YR0tcz7_<^$G-W4EL5UO za?d)W!_Eu{iz;u0{hi=_fk=SvG@+~9+(_880>_AlXXs$_!StEGj&;v{jg<3xbXwHi z86)J%5>R?%PD&369v;oaDcljSBlsf0cu$4_<~k(NO#MM*3JtU4Ez}QCY+g}GhO7x) zL9hB8eMzM5mO_RgHBK!HXwKTF0X&Xqvn{0Dc~(^}QTiBN{DOl4S-~sY{79r+u=Jf) z9`TXKMxVl{Lc54NO~kQ@H|6{(F{sfOepTVS(Zm#(-W*kzx*(+e;T<%ai1~q% z6;iZ7mQxTQWnhq6Nf7mvUf|yPG~~B&0h$0wyWEjB=Az%r@O_EN$VU77>C!7MTOi&& zXq6!K-K7h3wGg!g<~F#a)b#ZWBa^kXPA}Ys)Ee(e(>r%wkg~VKm*auHkDRI75) zZZgA2B4waun5ORchP=MSup8|zOa7LFuRd5`No>Z-U(UDE`N^eR$rgZt^Sf}z#6V9; zV+Rm3m>S!#`n~)>wtaWpjc6>qXB&#do#%ZMG@|1L$&o=GpD$h!jK3uhrc*m9DfGCu zN|Q{skL%?$xHxwwfdskK_s;?iCy%;Fg-F=;*D}g9^x?6Z=u-=wpd1!!8 zULa@uWtJu=6sg$RSCI5T0T&B(^*B39$iQv#eWHI#9z5Vr*^&a%+;q-~!JgO|Ms?XMfC8H;Z;Jx*8`(^{+TDSnNqK2gG!qQUfb>LP#s&xpOEC0($?7ltjGdeU>3rjlT-uA4U z069PSFNd2^p+v^h5@Uq%pazL)?I>Qio2GT8zGVI=t!=Y9Y^LBQzb`Dk-dumr0jbvj zse<;R2zL7%kPz`4?w~}yU2Qn3&t_#}3V6@VM3-7gt)Dd1D+@Ur-qaXjmqrCckdzr8 zkOfz4(c7IRr7fG`3|zw`s?MGiRN=%#-t^{E?NgUt-k|5Nxygq~y$Rn${JTn~MX}+$ zvn_V9t`8_KT@l;_Keoe*2rW!j@Cm@=1^KL2p;9=XuH6ceKS2Hqx&kqtSn?o zB3q}R7J&D6T~U5a+DmKm9lQlj$UBGi26c5lpibLQ`krQS%DO4t9;g8bprp)zZ)J1S zb@^2x@}ZPfR=PqajLH~vBtT-c|Aa^a@WKheHZ2fof}-!-xpPLI3v}*sUdzPE8A@hh z_skab0x=S)v@DB{`nHlyR7W>*mT?Zk?7KO9D5$}}$N;<-&|#3d3bo7T7TBQyx>_pQ znm9X9Vn_y=C(s0y#Eb|JdDTt8yDyVus6nxUqCNpRSx{zce!?iwA%u6E-~r;N)YK#x zqZv9_fs6H&Zy=e94QL@DKIcDPe~UL%q6fQ*a^SW;^N{L z@vks_!b*rk2xGJq63Wg!&sNPJ;6m>|wCg~x!nfXk(Ri6|U#Wy%gU@F!oFUzxWD&4; z*p3PvT6|hsomtztVMdJWhR+pJPR+O|!beuS9cF58B2X4^b`KtZftU{71&1`}W`HxO z4E{a=a~`g1>UEAj(jV^3_dJE5(!!FG#K==;VUKvQ2xUU7=2alG(m727ck$#wjas+2 z@_NcWar3fdINU1P!tTTtDb6#PB+djl@q? zaJX=16}!n@?J8%1EH;`y>PskOz;{9dpShVCC*2xkFty|Z1?A4DSK#XAR;*J_EhJicyQ>#>-iHRgyyHj;~$Z? z&>Y}GEBEC>vg1f)xOIdkm3N^mb}LGI)zgC4-SUpUeo-H^vk%q#t_l1+dMkz+Du2)J zqg9_vm5DW19h=!p=Ge%|O&`8)F^YXBbEQN^N5gZkZ%qW_qdg;(%7d;VWM&0uD}x{1 zbOC@A0x%cXS@b<1GzcVjEi~`o9s{k#=drO5k&rYDA1<_xPPJW?XpI0d!xkhy*t!Vk zP15B#uMip*1C-33y%zIc&>y2<&&{2y4jaYMp<~avgUw9)=72@8Y`cjSvbq++Q=Hg;O z5HN+;5*KGk%yzoh3WN zbi`dC4L7n~&XI573CR5cbK*uNNL-9zFPFg8DE}EsSMqVXL~iFHd=Yn?0YRFCw!^DL z1%e-7nZg!esyk1^Mgq=+1MSV_!FVc+ctY%O8||^8r>Ezwxa-Xk=NAdx?__2^g5n$N z0w4?mzSHG|2`HoaGQ?wOi0bV}gimf85;fq-p)*q;Z5w5v3~?PUMsLQOW*REt?V*wp zp_CzXx0Nf{4)*YQ221i`nxSAnvS$ha*RT~pPZfz6q=1OP%pF&C5HKCS$JTU!d&@a* z8K?g1$cB8!r5L173`2Ux@wpuSsD??J4FW#N5@#1?5BYo4^&|4zX$FdUcDqV`#j`u( z?G6`N&+r+v;{bl*wOV(U`}32ud(e2dQS9kd+TeVatcG{$2Zd0l zLNU%tM9UNSad4`E14C8y6Aae(=oQKyUP2Zd1N8u!!*zJJ}aW zH@B+oZ%hhhT?479Em)A#4ZF!MY;j_P#sMxn*)x~#p9umUp`g4Rr>-tmvB-l z!I!Ga%tU!O{1hWm>Xr1^*$+l_ysQMRGW$ZrwS>?&RKE-tFT0p__GPOX{iP>ajzNxT zIF^!6^+E$c`~C*_!F?5}lSbzG;U)Ynb(PC^%=vG*R=WzlXuC{|Jqp(Zm+tGUBNEji z`Zo`U+C5tc-RBZcq0O@a%C-gMV?C^4hsi_jQsT!#2nlFhO1XPqOF1d|xFa*4sv@lW zikTx>#oBrO6ieZ%UpN=sTcTl{U*1WGe^p0cgY6dOk?XU`{*l`UXqYXN+9m{-qkk9C zvY=)bRJT_pY2|14m5l_xevWjnrcrdL7aZEn%?DZqMJ7$PiEzO>*@{Rz`5|_As z@LDmw_yu7Yj&uA1CcNO@yuJFKA&k`np!Wv;^*=!tGvRjnl@HKPoT2sm7J2n>r`wPFV)a$eGAH|MiDK2|6J^2U_i`FhUUhxW zRhB&DlraDce>~c3KM;SS5LZi&1__o8hg&rbTqK26^8|R=l0~dP3!KX;POT>qb7CFB z0v-=s4=aC^b;&IUrjH31xl|+R${I==nXfel$|BH;6emWE_Ni)877V|2=H`SU2N{Ln zVdB||keAUm^dBc%8*2JKR+YU>#n?*r*Q8Q_%Ly&Y*I0hR7%uUtAJ|UbJLotnTdR{9 z2?;YlJz+l_KxEfE(bs(7D2NRBb4T?B1%r`AAzZ}6J0wD^P%Zk9&^VCv6geo{^ z&-+lT!$?{O`3`8PPUAA<_kx%%)bR(Hd%9bQoY;N6}v!b3Q-N7*`QZp+31^NC8pg*Xv=|;a(UESH=0&Ld2HE?;z zfc;^j2vvNah2+pTp3Fr1-QrF}H1s_!jhtZDghk`T86RYY>q=wZmS8OBnC6?Di%meB!HuWVuh~(m_4v3!ItEHP?dq34j5Kn+@ zA!J(Z`7pHJhIhyNhleqL4Ix6L_>fWQH)tu?L`1pcC3fys&~$rmOv1UNp{7n|B`79j zxMG$AF%Ir-ZnAPvKQ4tO+gt3A!`b<|H4J@D|3qrBqf4Q63!NCEje~g!u2{H-AjY+7 ztD5vjyjFWjd@BG7_wGi~HGK^k)_*16q9*QxhlfW+s$v6M#0K>}oXi%gpSBnf{Ddo! zzaY!u`$NV(RmLG`uFo+X{kacCmGVe2^Pgw6o7a3AcDLpSAQfg6Xbn@^CAOsPYeLL- z%*np9dH+5p=xZsRJ+zqz@@JB@8)*Q#S@k<23j!YvvWIlW^L&04%doa{##*B>0I~TL5;YGnEuT;5S1Boae}w1^Q z*b%-h16g!jy3BfPN`kF&pjCIYwT+2~p5_WR*I?K;;Ws)t@N%?_jk~8oSdhOp>);rN zhGc>uD}0aoA8q4!@Zq0{^pImQ*Jg%P`Mbl{VRV8iIQil6DY?@s-x3Tu!A1>ASdQ6i z{xUpgH0079%|0QA2P1h8DvEismSmoqU=hh*+hO<(9{hBc=)ZZBkAQC^EW9EvZCI;& z0(Jp0(wlodV;lcnM1pFOd+YiaANsLal|&2wd#Akts^_dhLp?kKfchnQVHLAZ-4QJc z%lX2J;3R^)hE{)uPRRPc6a=Iy!f7yF^h*k93o^ZFL*-{2ps7Mow04317`9TDbB1l9@)3i|qFV(0>}PGt+f+S@|qfl22MRkcm~ z>5W%e@cI3sPNqs8o6w?3?|pYE>C^m^yCXN`7gShA1!>;-;@eIA!jaUEW+W5to2Wih zM|(3A#8Kb$UxF}-jwi4u>tq-MrQ*rT7jQGwgHjYC{=ggRryuE>hN{|z?ON6KNM5V`1;XH8LwcmO{hTBtZU&^@*mGP|K23yg z!KjU#qT&vI*W|*i2~+hxY0Y>pYpKwey-^Z=u>Kn0(f?9xq{)m_-79#={2x(6T1@BA zgw3N`zRT|^Ms;otHLtu;qXg$6mO@DH+lM4HBql~&P&rPsp$lGC4e!?@D4OuY^-suY zkG!9N9Hd%Ms=K~yINbdXQ~%Q=B4yJJb4LYE^O*0ikiIAHoYu9oamc+AW`ZqUihk;l zq4cr`;Vjnuzgi!qS&6U0iY{tGzb~XyTEU!u8tnhq8_8Su%wHWd(#b?`0LoX}1Z;P% z!j72Vh1{|kn!;adSeR#T+@t3NOKRo-V(7j}_-Hg9T zZg)%nz7cMA3xHwi0(U|>k;I7)7!naD_fT?rhdo}6B869-Teh!Igcfn#ghYgSfApZrHy zv8i3Ez(Rn|9ErxcBjOqlQ;1P1(LM(oTR)+7A&#=G<&vD6yZbDNShBOFZrljy=A_+d z@M(%Qac)_vN(#vhj9I82b^1o3Q_-d9aO0o1)|!aSxzLLn=GT7ielOi<*lqs%-nytil%{vD zZ{r&?Fk>`HEyKgWP0%TR>3<-LqLn!R5?xCR

    aaN?eqk=dW0Ayn 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 v 17 - -************ -Where to get -************ -Checkout latest from `GitHub `_ or use maven for dependency -management: - -Stable releases -=============== -On `Maven central `_: - -.. code-block:: xml - - - com.github.ie3-institute - PowerSystemDataModel - 2.1.0 - - -Snapshot releases -================= -Available on `OSS Sonatype `_. -Add the correct repository: - -.. code-block:: xml - - - https://s01.oss.sonatype.org/content/repositories/snapshots - - -and add the dependency: - -.. code-block:: xml - - - com.github.ie3-institute - PowerSystemDataModel - 3.0-SNAPSHOT - diff --git a/docs/readthedocs/index.rst b/docs/readthedocs/index.rst deleted file mode 100644 index edae434d4..000000000 --- a/docs/readthedocs/index.rst +++ /dev/null @@ -1,35 +0,0 @@ -Documentation of the PowerSystemDataModel -========================================= - -Welcome to the documentation of the PowerSystemDataModel. -It provides an extensive data model capable of modelling energy systems with high granularity e.g. for bottom-up simulations. -Additionally, useful functions to process, augment and furnish model i/o information is provided. -Effective handling of geographic information related to power grids is also possible. - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - gettingstarted - models/models - io/basiciousage - -Contact the (Main) Maintainers ------------------------------- -If you feel, something this missing, wrong or misleading, please contact one of our main contributors: - - * `@sensarmad `_ - * `@t-ober `_ - * `@danielfeismann `_ - * `@sebastian-peter `_ - * `@jo-bao `_ - * `@julianhohmann `_ - -Hat tip to all other contributors! - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/readthedocs/io/ValidationUtils.md b/docs/readthedocs/io/ValidationUtils.md deleted file mode 100644 index d0c38d9e6..000000000 --- a/docs/readthedocs/io/ValidationUtils.md +++ /dev/null @@ -1,80 +0,0 @@ -# Validation Utils -This page gives an overview about the ValidationUtils in the *PowerSystemDataModel*. - -## What are the ValidationUtils? -The methods in ValidationUtils and subclasses can be used to check that objects are valid, meaning their parameters have valid values and they are correctly connected. - -## What is checked? -- The check methods include checks that assigned values are valid, e.g. lines are not allowed to have negative lengths or the rated power factor of any unit must be between 0 and 1. -- Furthermore, several connections are checked, e.g. that lines only connect nodes of the same voltage level or that the voltage levels indicated for the transformer sides match the voltage levels of the nodes they are connected to. - -## How does it work? -- The method `ValidationUtils.check(Object)` is the only method that should be called by the user. -- This check method identifies the object class and forwards it to a specific check method for the given object -- The overall structure of the ValidationUtils methods follows a cascading scheme, orientated along the class tree -- Example: A `LineInput lineInput` should be checked - 1. `ValidationUtils.check(lineInput)` is called - 2. `ValidationUtils.check(lineInput)` identifies the class of the object as `AssetInput` and calls `ValidationUtils.checkAsset(lineInput)` - 3. `ValidationUtils.checkAsset(lineInput)`, if applicable, checks those parameters that all `AssetInput` have in common (e.g. operation time) and further identifies the object, more specifically, as a `ConnectorInput` and calls `ConnectorValidationUtils.check(lineInput)` - 4. `ConnectorValidationUtils.check(lineInput)`, if applicable, checks those parameters that all `ConnectorInput` have in common and further identifies the object, more specifically, as a `LineInput` and calls `ConnectorValidationUtils.checkLine(lineInput)` - 5. `ConnectorValidationUtils.checkLine(lineInput)` checks all specific parameters of a `LineInput` -- ValidationUtils furthermore contains several utils methods used in the subclasses - -## Which objects are checked? -The ValidationUtils include validation checks for... - -- NodeValidationUtils - - NodeInput - - VoltageLevel -- ConnectorValidationUtils: - - ConnectorInput - - LineInput - - Transformer2WInput - - Transformer3WInput - - SwitchInput - - ConnectorTypeInput - - LineTypeInput - - Transformer2WTypeInput - - Transformer3WTypeInput -- MeasurementUnitValidationUtils - - MeasurementUnitInput -- SystemParticipantValidationUtils - - SystemParticipantInput - - BmInput - - ChpInput - - EvInput - - FixedFeedInInput - - HpInput - - LoadInput - - PvInput - - StorageInput - - WecInput - - (missing: EvcsInput) - - SystemParticipantTypeInput - - BmTypeInput - - ChpTypeInput - - EvTypeInput - - HpTypeInput - - StorageTypeInput - - WecTypeInput - - (missing: EvcsTypeInput/ChargingPointType) -- ThermalUnitValidationUtils - - ThermalUnitInput - - ThermalSinkInput - - ThermalHouseInput - - ThermalStorageInput - - CylindricalStorageInput -- GraphicValidationUtils - - GraphicInput - - LineGraphicInput - - NodeGraphicInput -- GridContainerValidationUtils - - GraphicElements - - GridContainer - - RawGridElements - - SystemParticipants - -## What should be considered? -- Due to many checks with if-conditions, the usage of the ValidationUtils for many objects might be runtime relevant. -- The check for a GridContainer includes the interplay of the contained entities as well as the checks of all contained entities. -- If new classes are introduced to the *PowerSystemDataModel*, make sure to follow the forwarding structure of the ValidationUtils methods when writing the check methods! diff --git a/docs/readthedocs/io/basiciousage.md b/docs/readthedocs/io/basiciousage.md deleted file mode 100644 index 64ce498df..000000000 --- a/docs/readthedocs/io/basiciousage.md +++ /dev/null @@ -1,40 +0,0 @@ -# I/O - -The PowerSystemDataModel library additionally offers I/O-capabilities. -In the long run, it is our aim to provide many different source and sink technologies. -Therefore, the I/O-package is structured as highly modular. - -```{toctree} ---- -maxdepth: 2 ---- -csvfiles -sql -influxdb -ValidationUtils.md -``` - -## Data sink structure - -[![Class diagram of data sink classes](../_static/figures/uml/DataSinkClassDiagram.png)](../_static/figures/uml/DataSinkClassDiagram.png) - -## Data source structure - -The sources are divided in three blocks: -1. InputEntities and ResultEntities -2. TimeSeries related sources -3. Weather and Coordinate sources - -[![Class diagram of entity sources](../_static/figures/uml/EntitySourceClassDiagram.png)](../_static/figures/uml/EntitySourceClassDiagram.png) - -[![Class diagram of time series sources](../_static/figures/uml/TimeSeriesSourceClassDiagram.png)](../_static/figures/uml/TimeSeriesSourceClassDiagram.png) - -[![Class diagram of weather and coordinate sources](../_static/figures/uml/WeatherCoordinateSourceClassDiagram.png)](../_static/figures/uml/WeatherCoordinateSourceClassDiagram.png) - -The function to read the sources are implemented in the DataSource classes. - -[![Class diagram of data sources](../_static/figures/uml/FunctionalDataSourceClassDiagram.png)](../_static/figures/uml/FunctionalDataSourceClassDiagram.png) - -## Data deployment - -[![Diagram of input data deployment](../_static/figures/uml/InputDataDeployment.png)](../_static/figures/uml/InputDataDeployment.png) diff --git a/docs/readthedocs/io/csvfiles.md b/docs/readthedocs/io/csvfiles.md deleted file mode 100644 index e022918ad..000000000 --- a/docs/readthedocs/io/csvfiles.md +++ /dev/null @@ -1,212 +0,0 @@ -# CSV files - -## Naming of files - -A naming strategy provides a mapping between model classes and the human readable names of those entities to be used -within e.g. the data sinks, in which the serialized representation of several objects of this class can be found. -Currently we offer two different, pre-defined naming strategies, which you might extend to fit your needs: - -1. **EntityPersistenceNamingStrategy**: - A basic naming strategy that is able to add prefix and suffix to the names of the entities. A flat folder structure - is considered. For more details see [Default naming strategy](#default-naming-strategy). -2. **HierarchicFileNamingStrategy**: - An extended version of the EntityPersistenceNamingStrategy. Additionally, the [Default directory hierarchy](#default-directory-hierarchy) is taken - into account. Please note, that this directory hierarchy is only meant to be used in conjunction with input models. - -However, you can control the behaviour of serialization and de-serialization of models by injecting the desired naming -strategy you like into `CsvDataSource` and `CsvFileSink`. - -## Default naming strategy - -There is a default mapping from model class to naming of entities in the case you would like to use csv files for -(de-)serialization of models. -You may extend / alter the naming with pre- or suffix by calling `new EntityPersistenceNamingStrategy("prefix","suffix")`. - -### Input - -| Model | File Name | -|:----------------------------------|:------------------------------------------------------------------------------------------| -| operator | *prefix_* operator_input *_suffix* | -| node | *prefix_* node_input *_suffix* | -| line | *prefix_* line_input *_suffix*
    *prefix_* line_type_input *_suffix* | -| switch | *prefix_* switch_input *_suffix* | -| two winding transformer | *prefix_* transformer2w_input *_suffix*
    *prefix_* transformer2w_type_input *_suffix* | -| three winding transformer | *prefix_* transformer3w_input *_suffix*
    *prefix_* transformer3w_type_input *_suffix* | -| measurement unit | *prefix_* measurement_unit_input *_suffix* | -| biomass plant | *prefix_* bm_input *_suffix*
    *prefix_* bm_type_input *_suffix* | -| combined heat and power plant | *prefix_* chp_input *_suffix*
    *prefix_* chp_type_input *_suffix* | -| electric vehicle | *prefix_* ev_input *_suffix*
    *prefix_* ev_type_input *_suffix* | -| electric vehicle charging station | *prefix_* evcs_input *_suffix* | -| fixed feed in facility | *prefix_* fixed_feed_in_input *_suffix* | -| heat pump | *prefix_* hp_input *_suffix*
    *prefix_* hp_type_input *_suffix* | -| load | *prefix_* load_input *_suffix* | -| photovoltaic power plant | *prefix_* pc_input *_suffix* | -| electrical energy storage | *prefix_* storage_input *_suffix*
    *prefix_* storage_type_input *_suffix* | -| wind energy converter | *prefix_* wec_input *_suffix*
    *prefix_* wec_type_input *_suffix* | -| schematic node graphic | *prefix_* node_graphic_input *_suffix* | -| schematic line graphic | *prefix_* line_graphic_input *_suffix* | - - -### Time Series - -| Model | File Name | -|:-----------------------|:------------------------------------------| -| individual time series | *prefix_* its *_columnScheme_UUID_suffix* | -| load profile input | *prefix_* rts *_profileKey_UUID_suffix* | - - -Let's spend a few more words on the individual time series: -Those files are meant to carry different types of content - one might give information about wholesale market prices, -the other is a record of power values provided by a real system. -To be able to understand, what's inside of the file, the *columnScheme* part of the file name gives insight of it's -content. -The following keys are supported until now: - -| Key | Information and supported head line | -|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------| -| c | An energy price (e.g. in €/MWh; c stands for charge).
    Permissible head line: ``uuid,time,price`` | -| p | Active power
    Permissible head line: ``uuid,time,p`` | -| pq | Active and reactive power
    Permissible head line: ``uuid,time,p,q`` | -| h | Heat power demand
    Permissible head line: ``uuid,time,h`` | -| ph | Active and heat power
    Permissible head line: ``uuid,time,p,h`` | -| pqh | Active, reactive and heat power
    Permissible head line: ``uuid,time,p,q,h`` | -| weather | Weather information
    Permissible head line: ``uuid,time,coordinate,direct_irradiation,diffuse_irradiation,temperature,wind_velocity,wind_direction`` | - - -As the ``uuid`` and ``time`` field are mandatory, they are not mentioned explicitly, here. - -### Results - - -| Model | File Name | -|:----------------------------------|:--------------------------------------------| -| node | *prefix_* node_res *_suffix* | -| line | *prefix_* line_res *_suffix* | -| switch | *prefix_* switch_res *_suffix* | -| two winding transformer | *prefix_* transformer2w_res *_suffix* | -| three winding transformer | *prefix_* transformer3w_res *_suffix* | -| biomass plant | *prefix_* bm_res *_suffix* | -| combined heat and power plant | *prefix_* chp_res *_suffix* | -| electric vehicle | *prefix_* ev_res *_suffix* | -| electric vehicle charging station | *prefix_* evcs_res\*_suffix* | -| fixed feed in | *prefix_* fixed_feed_in_res *_suffix* | -| heat pump | *prefix_* hp_res *_suffix* | -| load | *prefix_* load_res *_suffix* | -| photovoltaic power plant | *prefix_* pv_res *_suffix* | -| storage | *prefix_* storage_res *_suffix* | -| wind energy converter | *prefix_* wec_res *_suffix* | -| thermal house model | *prefix_* thermal_house_res *_suffix* | -| cylindrical thermal storage | *prefix_* cylindrical_storage_res *_suffix* | - - -## Default directory hierarchy - -Although there is no fixed structure of files mandatory, there is something, we consider to be a good idea of -structuring things. -You may either ship your csv files directly in this structure or compress everything in a .tar.gz file. -However, following this form, we are able to provide you some helpful tools in obtaining and saving your models a bit -easier. - -![Default directory hierarchy for input classes](../_static/figures/uml/DefaultInputDirectoryHierarchy.png) -Default directory hierarchy for input classes - -![Default directory hierarchy for result classes](../_static/figures/uml/DefaultResultDirectoryHierarchy.png) -Default directory hierarchy for result classes - -The italic parts are optional and the others are mandatory. -As you see, this still is a pretty flexible approach, as you only need to provide, what you really need. -However, note that this hierarchy is only meant to be used in conjunction with input models, yet. - -The class `DefaultInputHierarchy` offers some helpful methods to validate and create a default input file -hierarchy. - -## De-serialization (loading models) - -Having an instance of [Grid Container](/models/input/grid/gridcontainer) is most of the time the target whenever you load your -grid. It consists of the three main blocks: - -1. [Raw grid elements](/models/input/grid/gridcontainer) -2. [System participants](/models/input/grid/gridcontainer) -3. [Graphics](/models/input/grid/gridcontainer) - -Those blocks are also reflected in the structure of data source interface definitions. -There is one source for each of the containers, respectively. - -As a full data set has references among the models (e.g. a line model points to its' nodes it connects), there is a -hierarchical structure, in which models have to be loaded. -Therefore, the different sources have also references among themselves. -An application example to load an *exampleGrid* from csv files located in `./exampleGrid` could look like this: - - -``` java - /* Parameterization */ - String gridName = "exampleGrid"; - String csvSep = ","; - String folderPath = "./exampleGrid"; - EntityPersistenceNamingStrategy namingStrategy = new EntityPersistenceNamingStrategy(); // Default naming strategy - - /* Instantiating sources */ - TypeSource typeSource = new CsvTypeSource(csvSep, folderPath, namingStrategy); - RawGridSource rawGridSource = new CsvRawGridSource(csvSep, folderPath, namingStrategy, typeSource); - ThermalSource thermalSource = new CsvThermalSource(csvSep, folderPath, namingStrategy, typeSource); - SystemParticipantSource systemParticipantSource = new CsvSystemParticipantSource( - csvSep, - folderPath, - namingStrategy, - typeSource, - thermalSource, - rawGridSource - ); - GraphicSource graphicsSource = new CsvGraphicSource( - csvSep, - folderPath, - namingStrategy, - typeSource, - rawGridSource - ); - - /* Loading models */ - RawGridElements rawGridElements = rawGridSource.getGridData().orElseThrow( - () -> new SourceException("Error during reading of raw grid data.")); - SystemParticipants systemParticipants = systemParticipantSource.getSystemParticipants().orElseThrow( - () -> new SourceException("Error during reading of system participant data.")); - GraphicElements graphicElements = graphicsSource.getGraphicElements().orElseThrow( - () -> new SourceException("Error during reading of graphic elements.")); - JointGridContainer fullGrid = new JointGridContainer( - gridName, - rawGridElements, - systemParticipants, - graphicElements - ); -``` - -As observable from the code, it doesn't play a role, where the different parts come from. -It is also a valid solution, to receive types from file, but participants and raw grid elements from a data base. -Only prerequisite is an implementation of the different interfaces for the desired data source. - -## Serialization (writing models) - -Serializing models is a bit easier: - -``` java - /* Parameterization */ - String csvSep = ","; - String folderPath = "./exampleGrid"; - EntityPersistenceNamingStrategy namingStrategy = new EntityPersistenceNamingStrategy(); - boolean initEmptyFiles = false; - - /* Instantiating the sink */ - CsvFileSink sink = new CsvFileSink(folderPath, namingStrategy, initEmptyFiles, csvSep); - sink.persistJointGridContainer(grid); -``` - -The sink takes a collection of model suitable for serialization and handles the rest (e.g. unboxing of nested models) -on its own. -But caveat: As the (csv) writers are implemented in a concurrent, non-blocking way, duplicates of nested models could -occur. - -## Compression and extraction of files - -We consider either regular directories or compressed [tarball archives](https://en.wikipedia.org/wiki/Tar_(computing)) -(`*.tar.gz`) as source of input files. -The class `TarballUtils` offers some helpful functions to compress or extract input data files for easier shipping. \ No newline at end of file diff --git a/docs/readthedocs/io/influxdb.rst b/docs/readthedocs/io/influxdb.rst deleted file mode 100644 index 1bd69d48c..000000000 --- a/docs/readthedocs/io/influxdb.rst +++ /dev/null @@ -1,33 +0,0 @@ -******** -InfluxDB -******** -`InfluxDB `_ is a time series database. As such, it can only -handle time based data like weather data or results. -The PowerSystemDataModel offers two interface implementations for InfluxDB 1.x: WeatherSource and OutputDataSink. - -Introduction to InfluxDB -======================== -InfluxDB is a NoSQL database as it is neither relational nor able to handle SQL queries, even though InfluxDB's own -QueryLanguage, `InfluxQL `_ is very similar to SQL. -InfluxDB persists data in *measurements*. A measurement is comparable to a table in a relational data model. It consists -of a *measurement name*, *fields*, *tags* and a *time column*. The measurement name is the equivalent of a table name. Fields -and tags are similar as they both hold data like columns in relational data. But while fields are supposed to hold -the actual data, tags should only hold metadata, which is why tag values can only be strings. Under default -configuration, one tag key can only hold 10 000 distinct tag values. This choice was made as tags are indexed and -supposed to be queried. Fields should only be queried if not avoidable. The time column is automatically provided, it -holds timestamps in `RFC3339 UTC `_, which for example looks like -"2020-06-22T10:14:50.52Z". The equivalent to a table row is a measurement point. It holds field and tag values as well -as the time. While the data values are optional, a timestamp is not. If no time is provided when persisting, the current -system time is used. - -Instantiating an InfluxDB DataConnector -======================================= -To instantiate an InfluxDbConnector a connection url, a database name and a scenario name should be provided. The -scenario name is used to build measurement names for results. -If none of those are provided, default values are used. - -.. code-block:: java - - InfluxDbConnector unparameterizedInfluxDb = new InfluxDbConnector(); - InfluxDbConnector defaultInfluxDb = new InfluxDbConnector(""http://localhost:8086/", "ie3_in", null); - unparameterizedInfluxDb.equals(defaultInfluxDb); //true \ No newline at end of file diff --git a/docs/readthedocs/io/sql.md b/docs/readthedocs/io/sql.md deleted file mode 100644 index 71edba1a3..000000000 --- a/docs/readthedocs/io/sql.md +++ /dev/null @@ -1,8 +0,0 @@ -# SQL - - -## Id Coordinate Source -The sql implementation of id coordinate source uses [PostgreSql](https://www.postgresql.org/) with the -addon [PostGis](https://postgis.net/). `PostGis` is used to improve the querying of geographical data. -The `Coordinate` attribute is stored as a [Geography](http://postgis.net/workshops/postgis-intro/geography.html) with -the type [Point](https://postgis.net/docs/ST_Point.html) and the default SRID 4326. diff --git a/docs/readthedocs/make.bat b/docs/readthedocs/make.bat deleted file mode 100644 index 922152e96..000000000 --- a/docs/readthedocs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/readthedocs/models/input/additionaldata/idcoordinatesource.md b/docs/readthedocs/models/input/additionaldata/idcoordinatesource.md deleted file mode 100644 index 665490477..000000000 --- a/docs/readthedocs/models/input/additionaldata/idcoordinatesource.md +++ /dev/null @@ -1,92 +0,0 @@ -# IdCoordinateSource -An id coordinate source provides a mapping between ids of a coordinate and the actual coordinates -latitude and longitude values. The id coordinate source itself is an interface that provides some -methods to get coordinates, ids of coordinates or the distance between a given coordinate and other -coordinates. - - -## Information - -| Attribute | Remarks | -|:-------------|:---------------------------------------------------------------| -| `Id` | An integer value for identifying the coordinate. | -| `Coordiante` | Geographical information presented as `Lat/long` of a `Point`. | - - - -## Known implementations: -The following implementations are currently known: - -- [Csv Id Coordinate Source](/io/csvfiles) -- [Sql Id Coordinate Source](/io/sql) - - -## Method for coordinates: -The IdCoordinateSource contains method for returning coordinates for given ids. - -``` java - Optional getCoordinate(int id) - Collection getCoordinates(int... ids) - Collection getAllCoordinates() -``` - -1. This method is used to return the coordinate of a given id. If no coordinate is found for -the given id, an empty optional is returned. - -2. This method is used to return the coordinates of a given set of ids. The method will only return -coordinates for existing ids. - -3. This method is used to return all available coordinates. - - -## Method for ids: -The IdCoordinateSource contains a method for retrieving the id of a given coordinate. - -``` java - Optional getId(Point coordinate) -``` - -This method is used to return the id of a given coordinate. If no id is found for the given -coordinate, an empty optional is returned. - - -## Method for retrieving near coordinates: -The IdCoordinateSource also contains methods for retrieving coordinates/points that are near a given coordinate. -All implementations of these methods in this project will use the method ``restrictToBoundingBox`` for finding and -returning four corner points. - -``` java - List getNearestCoordinates(Point coordinatem int n) - List getClosestCoordinates(Point coordinate, int n, ComparableQuantity distance) - List calculateCoordinateDistances(Point coordinate, int n, Collection coordinates) -``` - -1. This method will return the nearest n coordinates for a given coordinate. The method works by having a default radius -that is increased with every iteration until n coordinates are found. - -2. This method will return the closest n coordinates for a given coordinate. Unlike the first method, this method has a -defined radius, that won't be increased. Therefor this method can only consider the coordinates inside the bounding box -around this radius. - -3. This method is used to calculate the distances to a set of give coordinates. After the calculation -the method will return the closest n coordinates. If the number of distances is less than n, this method will -return less than n coordinates. - - -## Finding and returning the closest corner coordinates: -In most cases we need four corner coordinates for our given coordinate. Therefor the -IdCoordinateSource contains a method that will use the calculated distances to find the closest -corner coordinates for the given coordinate. - -``` java - List restrictToBoundingBox( - Point coordinate, - Collection distances, - int numberOfPoints - ) -``` - -For a given set of coordinates, the closest four corner coordinates plus more close points if n > 4 -are returned. If n < 4 the method will return the closest n corner coordinates. If the set of -coordinates contains a coordinate that matches the given coordinate, only this one coordinate is -returned. If n > number of coordinates in the set, all coordinates are returned. \ No newline at end of file diff --git a/docs/readthedocs/models/input/additionaldata/timeseries.md b/docs/readthedocs/models/input/additionaldata/timeseries.md deleted file mode 100644 index 9590a8404..000000000 --- a/docs/readthedocs/models/input/additionaldata/timeseries.md +++ /dev/null @@ -1,30 +0,0 @@ -# Time Series -Time series are meant to represent a timely ordered series of values. -Those can either be electrical or non-electrical depending on what one may need for power system simulations. -Our time series models are divided into two subtypes: - -## Individual Time Series -Each time instance in this time series has its own value (random duplicates may occur obviously). -They are only applicable for the time frame that is defined by the content of the time series. - -## Repetitive Time Series -Those time series do have repetitive values, e.g. each day or at any other period. -Therefore, they can be applied to any time frame, as the mapping from time instant to value is made by information -reduction. -In addition to actual data, a mapping function has to be known. - -## Available Classes -To be as flexible, as possible, the actual content of the time series is given as children of the `Value` class. -The following different values are available: - -| Value Class | Purpose | -|:-----------------------|:--------------------------------------------------------------------------------------------------------------| -| `PValue` | Electrical active power | -| `SValue` | Electrical active and reactive power | -| `HeatAndPValue` | Combination of thermal power (e.g. in kW)
    and electrical active power (e.g. in kW) | -| `HeatAndSValue` | Combination of thermal power (e.g. in kW)
    and electrical active and reactive power (e.g. in kW and kVAr) | -| `EnergyPriceValue` | Wholesale market price (e.g. in € / MWh) | -| `SolarIrradianceValue` | Combination of diffuse and direct solar irradiance | -| `TemperatureValue` | Temperature information | -| `WindValue` | Combination of wind direction and wind velocity | -| `WeatherValue` | Combination of irradiance, temperature and wind information | diff --git a/docs/readthedocs/models/input/grid/gridcontainer.md b/docs/readthedocs/models/input/grid/gridcontainer.md deleted file mode 100644 index e40d20c5c..000000000 --- a/docs/readthedocs/models/input/grid/gridcontainer.md +++ /dev/null @@ -1,92 +0,0 @@ -# Grid Container - -The grid container groups all entities that are able to form a full grid model. -Two types of grid containers are available: - -**JointGridContainer**
    -This one is able to hold a grid model spanning several voltage levels. -On instantiation, a sub grid topology graph is built. -This graph holds `SubGridContainers` as vertices and transformer models as edges. -Thereby, you are able to discover the topology of galvanically separated sub grids and access those sub models -directly. - -and - -**SubGridContainer**
    -This one is meant to hold all models, that form a galvanically separated sub grid. -In contrast to the `JointGridContainer` it only covers one voltage level and therefore has an additional field -for the predominant voltage level apparent in the container. -Why predominant? -As of convention, the `SubGridContainers` hold also reference to the transformers leading to higher sub grids -and their higher voltage coupling point. - -![Sub grid boundary definition for transformers with upstream switchgear](../../../_static/figures/transformerWithSwitchGear.png) - -Let's shed a more detailed light on the boundaries of a sub grid as of our definition. -This especially is important, if the switchgear of the transformer is modeled in detail. -We defined, that all nodes in upstream direction of the transformer, that are connected by switches *only* (therefore -are within the switchgear) are counted towards the inferior sub grid structure (here "2"), although they belong to a -different voltage level. -This decision is taken, because we assume, that the interest to operate on the given switchgear will most likely be -placed in the inferior grid structure. - -The "real" coupling node A is not comprised in the sub grids node collection, but obviously has reference through the -switch between nodes A and B. - -A synoptic overview of both classes' attributes is given here: - -## Attributes, Units and Remarks - -| Attribute | Unit | Remarks | -|:------------------------|:-----|:--------------------------------------------------| -| gridName | -- | Human readable identifier | -| rawGrid | -- | see below | -| systemParticipants | -- | see below | -| graphics | -- | see below | -| subGridTopologyGraph | -- | topology of sub grids - only `JointGridContainer` | -| predominantVoltageLevel | -- | main voltage level - only `SubGridContainer` | -| subnet | -- | sub grid number - only `SubGridContainer` | - - -### RawGridElements -This sub container simply holds: - -* [nodes](/models/input/grid/node) -* [lines](/models/input/grid/line) -* [switches](/models/input/grid/switch) -* [two winding transformers](/models/input/grid/transformer2w) -* [three winding transformers](/models/input/grid/transformer3w) -* [measurement units](/models/input/grid/measurementunit) - - -### SystemParticipants -This sub container simply holds: - -* [biomass plant](/models/input/participant/bm) -* [combined heat and power plant](/models/input/participant/chp) -- [electric vehicles](/models/input/participant/ev) -- [electric vehicle charging stations](/models/input/participant/evcs) -- [fixed feed in facilities](/models/input/participant/fixedfeedin) -- [heat pumps](/models/input/participant/hp) -- [loads](/models/input/participant/load) -- [photovoltaic power plants](/models/input/participant/pv) -- [electrical energy storages](/models/input/participant/storage) -- [wind energy converters](/models/input/participant/wec) - -and the needed nested thermal models. - - -### Graphics -This sub container simply holds: - -* [schematic node graphics](/models/input/grid/nodegraphic) -* [schematic line graphics](/models/input/grid/linegraphic) - - -## Container Concept - -![Model container concept](../../../_static/figures/uml/ModelContainerConcept.png) - -## Caveats -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md deleted file mode 100644 index a7d23fe29..000000000 --- a/docs/readthedocs/models/input/grid/line.md +++ /dev/null @@ -1,102 +0,0 @@ -# Line - -Representation of an AC line. - -## Attributes, Units and Remarks - -### Type Model - -| Attribute | Unit | Remarks | -|:----------|:--------|:--------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| r | Ω / km | Phase resistance per length | -| x | Ω / km | Phase reactance per length | -| g | µS / km | Phase-to-ground conductance per length | -| b | µS / km | Phase-to-ground susceptance per length | -| iMax | A | Maximum permissible current | -| vRated | kV | Rated voltage | - - -A list with some standard line types can be found here: `Standard Line Types`_ - - -### Entity Model - -| Attribute | Unit | Remarks | -|:------------------|:-----|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| nodeA | -- | | -| nodeB | -- | | -| parallelDevices | -- | overall amount of parallel lines to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two lines using the specified parameters) | -| type | -- | | -| length | km | | -| geoPosition | -- | Line string of geographical locations describing the
    position of the line | -| olmCharacteristic | -- | Characteristic of possible overhead line monitoring
    Can be given in the form of `olm:{}`.
    The pairs are wind velocity in x and permissible
    loading in y. | - - - -## Standard Line Types - -Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found -`here `_. This file can be used directly -for any simulation with ``simona``. -The lines which source is ``simBench`` are from `here `_. - - -### Overhead Lines - -Some standard overhead lines. - -| uuid | b | g | iMax | id | r | vRated | x | source | -|:--------------------------------------|--------:|----:|--------:|--------------------:|---------:|-------:|---------:|:---------| -| 91617ab8-3de2-4fba-be45-a54473ba09a9 | 3.61283 | 0.0 | 1300.0 | LineType_1 | 0.08 | 380.0 | 0.32 | simBench | -| b3b231ae-a971-4432-80d7-4ce2f2a56a32 | 3.22799 | 0.0 | 1950.0 | LineType_4 | 0.033333 | 380.0 | 0.333333 | simBench | -| 24595f91-8295-41f8-a3d8-c9418d860d9c | 1.076 | 0.0 | 650.0 | LineType_6 | 0.1 | 380.0 | 1.0 | simBench | -| f0fc57ec-aa5a-4484-b870-be70a5428cbd | 6.45597 | 0.0 | 3900.0 | LineType_9 | 0.016667 | 380.0 | 0.166667 | simBench | -| ba70d8e7-b082-49bc-8c45-3c10e1236c3e | 8.60796 | 0.0 | 5200.0 | LineType_10 | 0.0125 | 380.0 | 0.125 | simBench | -| veee8eeed-62c9-4345-aa5a-3743fe32007d | 12.9119 | 0.0 | 7800.0 | LineType_11 | 0.008333 | 380.0 | 0.083333 | simBench | -| d2b16935-dcd7-44d2-8623-cec4c703ccdc | 17.2159 | 0.0 | 10400.0 | LineType_12 | 0.00625 | 380.0 | 0.0625 | simBench | -| a490c96e-6e90-485a-b0d7-adeb81fa09cd | 4.30398 | 0.0 | 2600.0 | LineType_2 | 0.025 | 220.0 | 0.25 | simBench | -| 5272bcbc-7d0e-4759-85fa-27943fd8d19c | 2.15199 | 0.0 | 1300.0 | LineType_3 | 0.05 | 220.0 | 0.5 | simBench | -| dd0bac07-de8d-4608-af36-b8ff2819f55a | 7.22566 | 0.0 | 2600.0 | LineType_5 | 0.04 | 220.0 | 0.16 | simBench | -| 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 | 1.80642 | 0.0 | 650.0 | LineType_7 | 0.16 | 220.0 | 0.64 | simBench | -| bdc83a85-c796-4bcb-8b79-8988dc2804f8 | 5.41925 | 0.0 | 1950.0 | LineType_8 | 0.053333 | 220.0 | 0.213333 | simBench | -| 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 | 2.8274 | 0.0 | 680.0 | Al/St_265/35 | 0.1095 | 110.0 | 0.296 | simBench | -| 5b542a50-b0c2-4497-ba90-b2b31aafaa0b | 2.87456 | 0.0 | 170.0 | 34-AL1/6-ST1A 20.0 | 0.8342 | 20.0 | 0.382 | simBench | -| d594cd67-4459-44bc-9594-db710372db71 | 2.98451 | 0.0 | 210.0 | 48-AL1/8-ST1A 20.0 | 0.5939 | 20.0 | 0.372 | simBench | -| 305e60ad-cfd2-4127-9d83-8d9b21942d93 | 3.04734 | 0.0 | 290.0 | 70-AL1/11-ST1A 20.0 | 0.4132 | 20.0 | 0.36 | simBench | -| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 0.4 | 1.8769 | 0.4 | 0.409 | simBench | -| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 0.4 | 1.2012 | 0.4 | 0.394 | simBench | - - -### Cables - -Some standard cables. - -| uuid | b | g | iMax | id | r | vRated | x | source | -|:-------------------------------------|--------:|----:|------:|-----------------------------:|-------:|-------:|----------:|:---------| -| cc59abd4-770b-45d2-98c8-919c91f1ca4b | 58.7478 | 0.0 | 652.0 | 1x630_RM/50 | 0.122 | 110.0 | 0.122522 | simBench | -| 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 | 59.3761 | 0.0 | 158.0 | NA2XS2Y 1x50 RM/25 12/20 kV | 0.64 | 20.0 | 0.145 | simBench | -| 4adef9e6-5e40-416d-8bd2-b6768d156c54 | 59.6903 | 0.0 | 220.0 | NA2XS2Y 1x70 RM/25 12/20 kV | 0.443 | 20.0 | 0.132 | simBench | -| d5c03484-59c2-44d5-a2ee-63a5a0d623b4 | 67.8584 | 0.0 | 252.0 | NA2XS2Y 1x95 RM/25 12/20 kV | 0.313 | 20.0 | 0.132 | simBench | -| 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 | 72.2566 | 0.0 | 283.0 | NA2XS2Y 1x120 RM/25 12/20 kV | 0.253 | 20.0 | 0.119 | simBench | -| 36243493-eb31-4e81-bd13-b54ef59c4cbe | 78.5398 | 0.0 | 319.0 | NA2XS2Y 1x150 RM/25 12/20 kV | 0.206 | 20.0 | 0.116 | simBench | -| 437689f8-366d-4b04-b42d-d7a754db074b | 85.7655 | 0.0 | 362.0 | NA2XS2Y 1x185 RM/25 12/20 kV | 0.161 | 20.0 | 0.117 | simBench | -| b459115d-d4eb-47d4-b7ec-625339ee0dcc | 95.5044 | 0.0 | 421.0 | NA2XS2Y 1x240 RM/25 12/20 kV | 0.122 | 20.0 | 0.112 | simBench | -| 9aed5818-c037-4033-8d15-806c62d70b8f | 113.097 | 0.0 | 315.0 | NA2XS2Y 1x150 RM/25 6/10 kV | 0.206 | 10.0 | 0.11 | simBench | -| 60d37bc7-157a-4c32-b1b5-e74c10d70531 | 127.549 | 0.0 | 358.0 | NA2XS2Y 1x185 RM/25 6/10 kV | 0.161 | 10.0 | 0.11 | simBench | -| a3ced617-2ffd-4593-b8e9-bcad9a521aab | 143.257 | 0.0 | 416.0 | NA2XS2Y 1x240 RM/25 6/10 kV | 0.122 | 10.0 | 0.105 | simBench | -| f0484bb6-9d0d-4d13-bfbe-b83783b8352a | 150.796 | 0.0 | 471.0 | NA2XS2Y 1x300 RM/25 6/10 kV | 0.1 | 10.0 | 0.0974 | simBench | -| 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 | 169.646 | 0.0 | 535.0 | NA2XS2Y 1x400 RM/25 6/10 kV | 0.078 | 10.0 | 0.0942 | simBench | -| 65181464-230a-487b-978f-81e406e9eb22 | 260.752 | 0.0 | 270.0 | NAYY 4x150SE 0.6/1kV | 0.2067 | 0.4 | 0.0804248 | simBench | -| 1200d9eb-6d10-47f3-8543-abea43b128d3 | 273.319 | 0.0 | 357.0 | NAYY 4x240SE 0.6/1kV | 0.1267 | 0.4 | 0.0797965 | simBench | - - -## Caveats - -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/linegraphic.rst b/docs/readthedocs/models/input/grid/linegraphic.rst deleted file mode 100644 index fea67300d..000000000 --- a/docs/readthedocs/models/input/grid/linegraphic.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. _line_graphic_model: - -Schematic Line Graphic ----------------------- -Schematic drawing information for a line model. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - graphicLayer - - -- - - | Human readable identifier of the graphic layer to draw - | this element on - - * - path - - -- - - Line string of coordinates describing the drawing - - * - line - - -- - - Reference to the physical line model - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/measurementunit.rst b/docs/readthedocs/models/input/grid/measurementunit.rst deleted file mode 100644 index 1f0e8bc4a..000000000 --- a/docs/readthedocs/models/input/grid/measurementunit.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. _measurement_unit_model: - -Measurement Unit ----------------- -Representation of a measurement unit placed at a node. -It can be used to mark restrictive access to simulation results to e.g. control algorithms. -The measured information are indicated by boolean fields. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - id - - -- - - Human readable identifier - - * - operator - - -- - - - - * - operationTime - - -- - - Timely restriction of operation - - * - node - - -- - - - - * - vMag - - -- - - Voltage magnitude measurements are available - - * - vAng - - -- - - Voltage angle measurements are available - - * - p - - -- - - Active power measurements are available - - * - q - - -- - - Reactive power measurements are available - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/node.rst b/docs/readthedocs/models/input/grid/node.rst deleted file mode 100644 index 531dbd4e4..000000000 --- a/docs/readthedocs/models/input/grid/node.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. _node_model: - -Node ----- -Representation of an electrical node, with no further distinction into bus bar, auxiliary node or others. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - id - - -- - - Human readable identifier - - * - operator - - -- - - - - * - operationTime - - -- - - Timely restriction of operation - - * - vTarget - - p.u. - - Target voltage magnitude to be used by voltage regulation entities - - * - slack - - -- - - | Boolean indicator, if this nodes serves as a slack node in power - | flow calculation - - * - geoPosition - - -- - - Geographical location - - * - voltLvl - - -- - - Information of the voltage level (id and nominal voltage) - - * - subnet - - -- - - Sub grid number - - -Caveats -^^^^^^^ -System participants, that need to have geographical locations, inherit the position from the node. -If the overall location does not play a big role, you are able to use the default location with -:code:`NodeInput#DEFAULT_GEO_POSITION` being located on TU Dortmund university's campus (`See on OpenStreetMaps `_). diff --git a/docs/readthedocs/models/input/grid/nodegraphic.rst b/docs/readthedocs/models/input/grid/nodegraphic.rst deleted file mode 100644 index 6f0a6858d..000000000 --- a/docs/readthedocs/models/input/grid/nodegraphic.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _node_graphic_model: - -Schematic Node Graphic ----------------------- -Schematic drawing information for a node model. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - graphicLayer - - -- - - | Human readable identifier of the graphic layer to draw - | this element on - - * - path - - -- - - Line string of coordinates describing the drawing, e.g. for bus bars - - * - point - - -- - - Alternative to line string, only drawing a point coordinate - - * - node - - -- - - Reference to the physical node model - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/switch.rst b/docs/readthedocs/models/input/grid/switch.rst deleted file mode 100644 index c3ee6565a..000000000 --- a/docs/readthedocs/models/input/grid/switch.rst +++ /dev/null @@ -1,52 +0,0 @@ -.. _switch_model: - -Switch ------- -Model of an ideal switch connecting two node models of the same voltage level - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - id - - -- - - Human readable identifier - - * - operator - - -- - - - - * - operationTime - - -- - - Timely restriction of operation - - * - nodeA - - -- - - - - * - nodeB - - -- - - - - * - closed - - -- - - true, if the switch is closed - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md deleted file mode 100644 index a213b09dc..000000000 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ /dev/null @@ -1,77 +0,0 @@ -# Two Winding Transformer - -Model of a two winding transformer. -It is assumed, that node A is the node with higher voltage. - -## Attributes, Units and Remarks - -### Type Model - -All impedances and admittances are given with respect to the higher voltage side. -As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit representations. - -| Attribute | Unit | Remarks | -|:----------|:-----|:--------------------------------------------------------| -| id | | Human readable identifier | -| rSc | Ω | Short circuit resistance | -| xSc | Ω | Short circuit reactance | -| gM | nS | No load conductance | -| bM | nS | No load susceptance | -| sRated | kVA | Rated apparent power | -| vRatedA | kV | Rated voltage at higher voltage terminal | -| vRatedB | kV | Rated voltage at lower voltage terminal | -| dV | % | Voltage magnitude increase per tap position | -| dPhi | ° | Voltage angle increase per tap position | -| tapSide | | true, if tap changer is installed on lower voltage side | -| tapNeutr | | Neutral tap position | -| tapMin | | Minimum tap position | -| tapMax | | Maximum tap position | - -A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ - - -### Entity Model - -| Attribute | Unit | Remarks | -|:----------------|:-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| nodeA | -- | Higher voltage node | -| nodeB | -- | Lower voltage node | -| parallelDevices | -- | overall amount of parallel transformers to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two transformers using the specified parameters) | -| type | -- | | -| tapPos | -- | Current position of the tap changer | -| autoTap | -- | true, if there is a tap regulation apparent and active | - - -## Standard Two Winding Transformer Types - - -Following there are some standard two winding transformer types with their source. A ``csv file`` containing the types listed -below can be found `here `_. This -file can be used directly for any simulation with ``simona``. -The transformers which source is ``simBench`` are from `here `_. - - -| uuid | bM | dPhi | dV | gM | id | rSc | sRated | tapMax | tapMin | tapNeutr | tapSide | vRatedA | vRatedB | xSc | source | -|:-------------------------------------|--------------------:|-----:|----:|-------------------:|------------------------------------:|--------------------:|---------:|-------:|-------:|---------:|--------:|--------:|--------:|-------------------:|:---------| -| 5a890aae-b9c9-4ebf-8a49-8850ae9df402 | 219.43184927638458 | 0.0 | 1.0 | 1731.3019390581715 | Typ_x_380/220 | 0.6016666666666666 | 600000.0 | 16 | -16 | 0 | false | 380.0 | 220.0 | 44.51926783240413 | simBench | -| 03159c0d-126e-47cc-9871-066870df3a3f | 1193.4686938790917 | 0.0 | 1.0 | 831.0249307479223 | 350MVA_380/110 | 1.0608979591836734 | 350000.0 | 16 | -16 | 0 | false | 380.0 | 110.0 | 9 0.75951402093402 | simBench | -| 7cb289cb-e6af-4470-9c68-e5a91978a5e7 | 2013.800484464662 | 0.0 | 1.0 | 1446.280991735537 | 300MVA_220/110 | 0.20704444444444442 | 300000.0 | 16 | -16 | 0 | false | 220.0 | 110.0 | 19.358892855688435 | simBench | -| 73644bc6-78cf-4882-9837-e6508cab092d | 867.7685950413226 | 0.0 | 1.5 | 1157.0247933884295 | 25 MVA 110/20 kV YNd5 | 1.9843999999999997 | 25000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 58.04608993412045 | simBench | -| 6935ae26-374a-4c24-aeee-6d5760d6ddf3 | 720.4791642215993 | 0.0 | 1.5 | 1487.603305785124 | 40 MVA 110/20 kV YNd5 | 1.0285 | 40000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 48.994205909984906 | simBench | -| b49db20f-b8b5-4265-8318-f669b9d121e9 | 1015.6886939330394 | 0.0 | 1.5 | 1818.181818181818 | 63 MVA 110/10 kV YNd5 | .6146031746031745 | 63000.0 | 9 | -9 | 0 | false | 110.0 | 10.0 | 34.56596500037509 | simBench | -| 0843b836-cee4-4a8c-81a4-098400fe91cf | 24.495101551166183 | 0.0 | 2.5 | 2999.9999999999995 | 0.4 MVA 20/0.4 kV Dyn5 ASEA | 11.999999999999998 | 400.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 58.787753826796276 | simBench | -| a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 | 9.591746452043322 | 0.0 | 2.5 | 1149.9999999999998 | 0.16 MVA 20/0.4 kV DOTE 160/20 SGB | 36.71874999999999 | 160.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.01469452961452 | simBench | -| 0644c120-a247-425f-bbe4-31b153f7f440 | 16.583241729259253 | 0.0 | 2.5 | 2199.9999999999995 | 0.25 MVA 20/0.4 kV Dyn5 ASEA | 21.119999999999997 | 250.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.6479876986153 | simBench | -| bdf22ee4-deba-41f4-a187-ae00638a6880 | 36.47380569074435 | 0.0 | 2.5 | 4125.0 | 0.63 MVA 20/0.4 kV Dyn5 ASEA | 6.953892668178382 | 630.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 37.45518044666632 | simBench | -| a0cbd90a-4e9f-47db-8dca-041d3a288f77 | 145.8952227629774 | 0.0 | 2.5 | 16500.0 | 0.63 MVA 10/0.4 kV Dyn5 ASEA | 1.7384731670445954 | 630.0 | 2 | -2 | 0 | false | 10.0 | 0.4 | 9.36379511166658 | simBench | - - - -## Caveats - -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/transformer3w.rst b/docs/readthedocs/models/input/grid/transformer3w.rst deleted file mode 100644 index 925f6cb5c..000000000 --- a/docs/readthedocs/models/input/grid/transformer3w.rst +++ /dev/null @@ -1,182 +0,0 @@ -.. _transformer3w_model: - -Three Winding Transformer -------------------------- -Model of a three winding transformer. -It is assumed, that node A is the node with highest, node B with intermediate and node C with lowest voltage. - -The assumed mathematical model is inspired by *ABB Schaltanlagenhanbuch* [Gremmel1999]_, but with the addition of a -central phase-to-ground admittance, cf. following picture. - -.. figure:: ../../../_static/figures/ecdTransformer3w.png - :align: center - :alt: Equivalent circuit diagram of a three winding transformer - - "Star like" T-equivalent circuit diagram of a three winding transformer - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" -All impedances and admittances are given with respect to the higher voltage side. - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - - - - - * - id - - - - Human readable identifier - - * - rScA - - Ω - - Short circuit resistance in branch A - - * - rScB - - Ω - - Short circuit resistance in branch B - - * - rScC - - Ω - - Short circuit resistance in branch C - - * - xScA - - Ω - - Short circuit reactance in branch A - - * - xScB - - Ω - - Short circuit reactance in branch B - - * - xScC - - Ω - - Short circuit reactance in branch C - - * - gM - - nS - - No load conductance - - * - bM - - nS - - No load susceptance - - * - sRatedA - - kVA - - Rated apparent power of branch A - - * - sRatedB - - kVA - - Rated apparent power of branch B - - * - sRatedC - - kVA - - Rated apparent power of branch C - - * - vRatedA - - kV - - Rated voltage at higher node A - - * - vRatedB - - kV - - Rated voltage at higher node B - - * - vRatedC - - kV - - Rated voltage at higher node C - - * - dV - - % - - Voltage magnitude increase per tap position - - * - dPhi - - ° - - Voltage angle increase per tap position - - * - tapNeutr - - - - Neutral tap position - - * - tapMin - - - - Minimum tap position - - * - tapMax - - - - Maximum tap position - - -Entity Model -"""""""""""" - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - id - - -- - - Human readable identifier - - * - operator - - -- - - - - * - operationTime - - -- - - Timely restriction of operation - - * - nodeA - - -- - - Higher voltage node - - * - nodeB - - -- - - Intermediate voltage node - - * - nodeC - - -- - - Lowest voltage node - - * - parallelDevices - - -- - - | overall amount of parallel transformers to automatically - | construct (e.g. parallelDevices = 2 will build a - | total of two transformers using the specified parameters) - - * - type - - -- - - - - * - tapPos - - -- - - Current position of the tap changer - - * - autoTap - - -- - - true, if there is a tap regulation apparent and active - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - -.. [Gremmel1999] Gremmel, H., Ed., Schaltanlagen. Cornelsen Verlag, 1999, Vol. 10, isbn: 3-464-48235-9. diff --git a/docs/readthedocs/models/input/operator.rst b/docs/readthedocs/models/input/operator.rst deleted file mode 100644 index 2a272d32b..000000000 --- a/docs/readthedocs/models/input/operator.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _operator_model: - -Operator --------- -This is a simple identifier object, representing a natural or legal person that is the owner or responsible person -having control over one or more physical entitites. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - - - * - id - - -- - - Human readable identifier - - -.. _operator_example: - -Application example -^^^^^^^^^^^^^^^^^^^ -.. code-block:: java - :linenos: - - OperatorInput profBroccoli = new OperatorInput( - UUID.fromString("f15105c4-a2de-4ab8-a621-4bc98e372d92"), - "Univ.-Prof. Dr. rer. hort. Klaus-Dieter Brokkoli" - ) - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/bm.rst b/docs/readthedocs/models/input/participant/bm.rst deleted file mode 100644 index 5314251e4..000000000 --- a/docs/readthedocs/models/input/participant/bm.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. _bm_model: - -Biomass plant -------------- -Model of a biomass power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+---------------------+---------+------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+============================================================+ -| uuid | -- | | -+---------------------+---------+------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+------------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+---------------------+---------+------------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+---------------------+---------+------------------------------------------------------------+ -| activePowerGradient | % / h | Maximum permissible rate of change of power | -+---------------------+---------+------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+---------------------+---------+------------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| costControlled | -- | | Whether to adapt output based on the difference | -| | | | between production costs and fixed feed in tariff or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| feedInTariff | € / MWh | Fixed feed in tariff | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/chp.rst b/docs/readthedocs/models/input/participant/chp.rst deleted file mode 100644 index 14cd2fd46..000000000 --- a/docs/readthedocs/models/input/participant/chp.rst +++ /dev/null @@ -1,69 +0,0 @@ -.. _chp_model: - -Combined Heat and Power Plant ------------------------------ -Combined heat and power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+-------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+=========+=========================================================+ -| uuid | -- | | -+-------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+---------+---------------------------------------------------------+ -| etaEl | % | Efficiency of the electrical inverter | -+-------------+---------+---------------------------------------------------------+ -| etaThermal | % | Thermal efficiency of the system | -+-------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+---------+---------------------------------------------------------+ -| pThermal | kW | Rated thermal power (at rated electrical power) | -+-------------+---------+---------------------------------------------------------+ -| pOwn | kW | Needed self-consumption | -+-------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalStorage | -- | Reference to thermal storage | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/cylindricalstorage.rst b/docs/readthedocs/models/input/participant/cylindricalstorage.rst deleted file mode 100644 index feaed6c3d..000000000 --- a/docs/readthedocs/models/input/participant/cylindricalstorage.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. _cylindricalstorage_model: - -Cylindrical Thermal Storage --------------------------------- -Model of a cylindrical thermal storage using a fluent to store thermal energy. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------------+----------------------------+----------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+============================+==============================================+ -| uuid | -- | | -+---------------------+----------------------------+----------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+----------------------------+----------------------------------------------+ -| operator | -- | | -+---------------------+----------------------------+----------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------------+----------------------------+----------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+---------------------+----------------------------+----------------------------------------------+ -| storageVolumeLvl | m³ | Overall available storage volume | -+---------------------+----------------------------+----------------------------------------------+ -| storageVolumeLvlMin | m³ | Minimum permissible storage volume | -+---------------------+----------------------------+----------------------------------------------+ -| inletTemp | °C | Temperature of the inlet | -+---------------------+----------------------------+----------------------------------------------+ -| returnTemp | °C | Temperature of the outlet | -+---------------------+----------------------------+----------------------------------------------+ -| c | kWh / (K :math:`\cdot` m³) | Specific heat capacity of the storage medium | -+---------------------+----------------------------+----------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/ev.rst b/docs/readthedocs/models/input/participant/ev.rst deleted file mode 100644 index cd98d6d86..000000000 --- a/docs/readthedocs/models/input/participant/ev.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _ev_model: - -Electric Vehicle ------------------------------ -Model of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging system`. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" -+-------------+----------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+==========+=========================================================+ -| uuid | -- | | -+-------------+----------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+----------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+----------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+----------+---------------------------------------------------------+ -| eStorage | kWh | Available battery capacity | -+-------------+----------+---------------------------------------------------------+ -| eCons | kWh / km | Energy consumption per driven kilometre | -+-------------+----------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+----------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+----------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+---------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+=================================+ -| uuid | -- | | -+------------------+---------+---------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+---------------------------------+ -| operator | -- | | -+------------------+---------+---------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+---------------------------------+ -| node | -- | | -+------------------+---------+---------------------------------+ -| type | -- | | -+------------------+---------+---------------------------------+ - -Caveats -^^^^^^^ -The :code:`node` attribute only marks the vehicles home connection point. -The actual connection to the grid is always given through :code:`EvcsInput`'s relation. diff --git a/docs/readthedocs/models/input/participant/evcs.rst b/docs/readthedocs/models/input/participant/evcs.rst deleted file mode 100644 index 251003c20..000000000 --- a/docs/readthedocs/models/input/participant/evcs.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. _evcs_model: - -Electric Vehicle Charging Station ---------------------------------- -Model of a charging station for electric vehicles. This model only covers the basic characteristics of a charging -station and has some limitations outlined below. - -Model Definition -^^^^^^^^^^^^^^^^ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | :ref:`Charging point type` (valid for all installed points) | -+------------------+---------+--------------------------------------------------------------------------------------+ -| chargingPoints | -- | no of installed charging points @ the specific station | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosPhiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ -| locationType | -- | :ref:`Charging station location types` | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Type Model -"""""""""""" -In contrast to other models, electric vehicle charging station types are not configured via separate type file or table, -but 'inline' of a charging station entry. This is justified by the fact, that the station type (in contrast to e.g. -the type of a wind energy converter) only consists of a few, more or less standardized parameters, that are (most of the -time) equal for all manufacturers. Hence, to simplify the type model handling, types are provided either by a string -literal of their id or by providing a custom one. See :ref:`Charging point types` for details of on -available standard types and how to use custom types. - -The actual model definition for charging point types looks as follows: - -+------------------------+---------+--------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+========================+=========+================================================================================+ -| id | -- | Human readable identifier | -+------------------------+---------+--------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------------+---------+--------------------------------------------------------------------------------+ -| electricCurrentType | -- | Electric current type | -+------------------------+---------+--------------------------------------------------------------------------------+ -|synonymousIds | -- | Set of alternative human readable identifiers | -+------------------------+---------+--------------------------------------------------------------------------------+ - -.. _evcs_point_types: - -Charging Point Types -^^^^^^^^^^^^^^^^^^^^ -Available Standard Types -"""""""""""""""""""""""" -To simplify the application of electric vehicle charging stations, some common standard types are available out-of-the-box. -They can either by used code wise or directly from database or file input by referencing their id or one of their -synonymous ids. All standard types can be found in :code:`edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils`. - -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| id | synonymous ids | sRated in kVA | electric current type | -+===============================+===============================================+===============+=======================+ -| HouseholdSocket | household, hhs, schuko-simple | 2.3 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| BlueHouseholdSocket | bluehousehold, bhs, schuko-camping | 3.6 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| Cee16ASocket | cee16 | 11 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| Cee32ASocket | cee32 | 22 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| Cee63ASocket | cee63 | 43 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationType1 | cst1, stationtype1, cstype1 | 7.2 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationType2 | cst2, stationtype2, cstype2 | 43 | AC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationCcsComboType1 | csccs1, csccscombo1 | 11 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| ChargingStationCcsComboType2 | csccs2, csccscombo2 | 50 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| TeslaSuperChargerV1 | tesla1, teslav1, supercharger1, supercharger | 135 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| TeslaSuperChargerV2 | tesla2, teslav2, supercharger2 | 150 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ -| TeslaSuperChargerV3 | tesla3, teslav3, supercharger3 | 250 | DC | -+-------------------------------+-----------------------------------------------+---------------+-----------------------+ - - -Custom Types -"""""""""""" -While the provided standard types should be suitable for most scenarios, providing an individual type for a specific -scenario might be necessary. To do so, a custom type can be provided instead of a common id. This custom type is tested -against the following regex :code:`(\w+\d*)\s*\(\s*(\d+\.?\d+)\s*\|\s*(AC|DC)\s*\)`, or more generally, the custom -type string has to be in the following syntax:: - - (|) e.g. FastCharger(50|DC) or SlowCharger(2.5|AC) - -Please note, that in accordance with :code:`edu.ie3.datamodel.models.StandardUnits` the apparent power is expected to -be in kVA! - -Limitations -""""""""""" - -- the available charging types are currently limited to only some common standard charging point types and not configurable - via a type file or table. Nevertheless, providing custom types is possible using the syntax explained above. - If there is additional need for a more granular type configuration via type file please contact us. -- each charging station can hold one or more charging points. If more than one charging point is available - all attributes (e.g. :code:`sRated` or :code:`connectionType`) are considered to be equal for all connection - points - -.. _location_types: - -Location types -^^^^^^^^^^^^^^ - -Evcs location types describe the type of charging location of a charging station. Parsing of these types is case-insensitive -and underscores and minuses are ignored, that means "charginghubtown" is parsed as type :code:`CHARGING_HUB_TOWN`. - -+-------------------------------+-------------------+----------------------------------+ -| type name | public/private | description | -+===============================+===================+==================================+ -| HOME | private | Charging at home | -+-------------------------------+-------------------+----------------------------------+ -| WORK | private | Charging at work | -+-------------------------------+-------------------+----------------------------------+ -| CUSTOMER_PARKING | public | Charging at store parking lots | -+-------------------------------+-------------------+----------------------------------+ -| STREET | public | Charging at street side | -+-------------------------------+-------------------+----------------------------------+ -| CHARGING_HUB_TOWN | public | Charging at hub in town | -+-------------------------------+-------------------+----------------------------------+ -| CHARGING_HUB_HIGHWAY | public | Charging at hub out of town | -+-------------------------------+-------------------+----------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.rst b/docs/readthedocs/models/input/participant/fixedfeedin.rst deleted file mode 100644 index f317d5534..000000000 --- a/docs/readthedocs/models/input/participant/fixedfeedin.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _fixed_feed_in_model: - -Fixed Feed In Facility ----------------------- -Model of a facility, that provides constant power feed in, as no further information about the actual behaviour of the -model can be derived. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/general.rst b/docs/readthedocs/models/input/participant/general.rst deleted file mode 100644 index 6ebb861ea..000000000 --- a/docs/readthedocs/models/input/participant/general.rst +++ /dev/null @@ -1,42 +0,0 @@ -General Remarks on Participant Models -------------------------------------- - -.. _participant_general_q_characteristic: - -Reactive Power Characteristics -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Reactive power characteristics are designed to describe reactive power control behaviour of the models. -In Germany, system operators can require system participants to follow certain characteristics specified in the -operators technical requirements and individually selected per connected asset. - -Currently three different characteristics are implemented: - -Fixed Power Factor -"""""""""""""""""" -Active and reactive power are coupled by a time-independent power factor. -It can be parsed from :code:`cosPhiFixed:{(0.0, 0.95)}` (exemplary). - -Active Power Dependent Power Factor -""""""""""""""""""""""""""""""""""" -The power factor is determined based on the current active power feed in or consumption. -The characteristic in the figure below would be described by the three coordinates (0.0, 1.0), (0.9,1.0) and (1.0, 0.95). -Alternatively it can be parsed from :code:`cosPhiP:{(0.0, 1.0),(0.9,1.0),(1.0, 0.95)}`. - -.. figure:: ../../../_static/figures/cosPhiP.png - :align: center - :alt: Active power dependent power factor - - Exemplary active power dependent power factor - -Reactive Power as Function of Nodal Voltage Magnitude -""""""""""""""""""""""""""""""""""""""""""""""""""""" -The reactive power is directly derived in accordance to the nodal voltage magnitude. -The characteristic in the figure below would be described by the three coordinates (0.92, -1), (0.97, 0.0), (1.03, 0.0) -and (1.08, 1.0). -Alternatively it can be parsed from :code:`qV:{(0.92, -1),(0.97, 0.0),(1.03, 0.0),(1.08, 1.0)}`. - -.. figure:: ../../../_static/figures/qv.png - :align: center - :alt: Reactive power as function of nodal voltage magnitude - - Exemplary reactive power as function of nodal voltage magnitude \ No newline at end of file diff --git a/docs/readthedocs/models/input/participant/hp.rst b/docs/readthedocs/models/input/participant/hp.rst deleted file mode 100644 index e28cc3c52..000000000 --- a/docs/readthedocs/models/input/participant/hp.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. _hp_model: - -Heat Pump ---------- -Model of a heat pump. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+-------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+=========+=========================================================+ -| uuid | -- | | -+-------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+---------+---------------------------------------------------------+ -| pThermal | kW | Rated thermal power (at rated electrical power) | -+-------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/load.rst b/docs/readthedocs/models/input/participant/load.rst deleted file mode 100644 index f2aa5aa23..000000000 --- a/docs/readthedocs/models/input/participant/load.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. _load_model: - -Load ----- -Model of (mainly) domestic loads. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+======================================================================================+ -| uuid | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| loadProfile | -- | :ref:`Load profile` as model behaviour | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| dsm | -- | Whether the load is able to follow demand side management signals | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| eConsAnnual | kWh | Annual energy consumption | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - -.. _load_lp: - -Load Profiles -^^^^^^^^^^^^^^^^^^^^^^ -The :code:`LoadProfile` is an interface, that forces it's implementing classes to have a :code:`String` *key* -and being able to parse a :code:`String` to a :code:`LoadProfile`. -Its only purpose is to give note, which load profile has to be used by the simulation. -The actual profile has to be provided by the simulation itself. -If no matching standard load profile is known, :code:`LoadProfile#NO_LOAD_PROFILE` can be used. - -To assist the user in marking the desired load profile, the enum :code:`BdewLoadProfile` provides a collection of -commonly known German standard electricity load profiles, defined by the bdew (Bundesverband der Energie- und -Wasserwirtschaft; engl. Federal Association of the Energy and Water Industry). For more details see -`the corresponding website (German only) `_. - -Furthermore there are :code:`TemperatureDependantLoadProfiles` which can be used to note usage of load profiles for night heating storages or heat pumps for example. -The profiles rely on the VDN description for interruptable loads. -For more details see `here (German only) `_. -:code:`NbwTemperatureDependantLoadProfiles` provides sample temperature dependant load profiles that can be used. -The `NbwTemperatureDependantLoadProfiles` consists of load profiles "ep1" for heat pumps and "ez2" for night storage heating. diff --git a/docs/readthedocs/models/input/participant/pv.rst b/docs/readthedocs/models/input/participant/pv.rst deleted file mode 100644 index 3308f9c6b..000000000 --- a/docs/readthedocs/models/input/participant/pv.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _pv_model: - -Photovoltaic Power Plant ------------------------- -Detailed model of a photovoltaic power plant. - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| albedo | -- | `Albedo `_ of the plant's surrounding | -+------------------+---------+--------------------------------------------------------------------------------------+ -| azimuth | ° | | Inclination in a compass direction | -| | | | South = 0°, West = 90°, East = -90° | -+------------------+---------+--------------------------------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+------------------+---------+--------------------------------------------------------------------------------------+ -| elevationAngle | ° | Tilted inclination from horizontal [0°, 90°] | -+------------------+---------+--------------------------------------------------------------------------------------+ -| kG | -- | Generator correction factor merging technical influences | -+------------------+---------+--------------------------------------------------------------------------------------+ -| kT | -- | Temperature correction factor merging thermal influences | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/storage.rst b/docs/readthedocs/models/input/participant/storage.rst deleted file mode 100644 index 19d768a30..000000000 --- a/docs/readthedocs/models/input/participant/storage.rst +++ /dev/null @@ -1,74 +0,0 @@ -.. _storage_model: - -Electrical Energy Storage -------------------------- -Model of an ideal electrical battery energy storage. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+---------------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+=========================================================+ -| uuid | -- | | -+---------------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+---------------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+---------------------+---------+---------------------------------------------------------+ -| eStorage | kWh | Battery capacity | -+---------------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+---------------------------------------------------------+ -| pMax | kW | | Maximum permissible active power | -| | | | infeed or consumption | -+---------------------+---------+---------------------------------------------------------+ -| activePowerGradient | % / h | Maximum permissible rate of change of power | -+---------------------+---------+---------------------------------------------------------+ -| eta | % | Efficiency of the electrical inverter | -+---------------------+---------+---------------------------------------------------------+ -| dod | % | | Maximum permissible depth of discharge. 80 % dod | -| | | | is equivalent to a state of charge of 20 %. | -+---------------------+---------+---------------------------------------------------------+ -| lifeTime | h | Permissible hours of full use | -+---------------------+---------+---------------------------------------------------------+ -| lifeCycle | -- | Permissible amount of full cycles | -+---------------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| behaviour | -- | | Foreseen operation strategy of the storage. | -| | | | Eligible input: *"market"*, *"grid"*, *"self"* | -+------------------+---------+--------------------------------------------------------------------------------------+ - - -Caveats -^^^^^^^ -The field :code:`behaviour` will be removed in version 1.x, as this is an information, that is only important to a -smaller sub set of simulation applications. diff --git a/docs/readthedocs/models/input/participant/thermalbus.rst b/docs/readthedocs/models/input/participant/thermalbus.rst deleted file mode 100644 index 8b0a6300e..000000000 --- a/docs/readthedocs/models/input/participant/thermalbus.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. _thermal_bus_model: - -Thermal Bus ------------ -A coupling point to thermal system - equivalent to :ref:`electrical node `. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+---------------+------+----------------------------------------+ -| Attribute | Unit | Remarks | -+===============+======+========================================+ -| uuid | -- | | -+---------------+------+----------------------------------------+ -| id | -- | Human readable identifier | -+---------------+------+----------------------------------------+ -| operator | -- | | -+---------------+------+----------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------+------+----------------------------------------+ -| bus | -- | Connection point to the thermal system | -+---------------+------+----------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/thermalhouse.rst b/docs/readthedocs/models/input/participant/thermalhouse.rst deleted file mode 100644 index c5ff9b947..000000000 --- a/docs/readthedocs/models/input/participant/thermalhouse.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. _thermal_house_model: - -Thermal House Model -------------------- -Model for the thermal behaviour of a building. -This reflects a simple shoe box with transmission losses - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -+-----------------------+---------+---------------------------------+ -| Attribute | Unit | Remarks | -+=======================+=========+=================================+ -| uuid | -- | | -+-----------------------+---------+---------------------------------+ -| id | -- | Human readable identifier | -+-----------------------+---------+---------------------------------+ -| operator | -- | | -+-----------------------+---------+---------------------------------+ -| operationTime | -- | Timely restriction of operation | -+-----------------------+---------+---------------------------------+ -| ethLosses | kW / K | Thermal losses | -+-----------------------+---------+---------------------------------+ -| ethCapa | kWh / K | Thermal capacity | -+-----------------------+---------+---------------------------------+ -| targetTemperature | °C | Desired target temperature | -+-----------------------+---------+---------------------------------+ -| upperTemperatureLimit | °C | Upper temperature boundary | -+-----------------------+---------+---------------------------------+ -| lowerTemperatureLimit | °C | Lower temperature boundary | -+-----------------------+---------+---------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/wec.rst b/docs/readthedocs/models/input/participant/wec.rst deleted file mode 100644 index d0769d92e..000000000 --- a/docs/readthedocs/models/input/participant/wec.rst +++ /dev/null @@ -1,72 +0,0 @@ -.. _wec_model: - -Wind Energy Converter ---------------------- -Model of a wind energy converter. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+------------------+---------+----------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================+ -| uuid | -- | | -+------------------+---------+----------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+----------------------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+------------------+---------+----------------------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+------------------+---------+----------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+----------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+----------------------------------------------------------------------+ -| cpCharacteristic | -- | Wind velocity dependent :ref:`Betz factors`. | -+------------------+---------+----------------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+------------------+---------+----------------------------------------------------------------------+ -| rotorArea | m² | Area the rotor covers | -+------------------+---------+----------------------------------------------------------------------+ -| hubHeight | m | Height of the rotor hub | -+------------------+---------+----------------------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - -.. _wec_cp_characteristic: - -Betz Characteristic -^^^^^^^^^^^^^^^^^^^ -A collection of wind velocity to Betz factor pairs to be applied in -`Betz's law `_ to determine the wind energy coming onto the rotor area. diff --git a/docs/readthedocs/models/models.md b/docs/readthedocs/models/models.md deleted file mode 100644 index c0e70ab78..000000000 --- a/docs/readthedocs/models/models.md +++ /dev/null @@ -1,193 +0,0 @@ -# Available models -This page gives an overview about all available models in *PowerSystemDataModel*. -They are basically grouped into two groups: - -1. [Input](#input) models may be used to describe input data for a power system simulation -2. [Result](#result) models denote results of such a simulation - -All those models are designed with some assumptions and goals in mind. -To assist you in applying them as intended, we will give you some general remarks: - -**Uniqueness**
    -All models have a `uuid` field as universal unique identifier. -There shouldn't be any two elements with the same `uuid` in your grid data set, better in your whole collection -of data sets. - -**Immutability**
    -We designed the models in a way, that does not allow for adaptions of the represented data after instantiation of the -objects. -Thereby you can be sure, that your models are *thread-safe* and no unwanted or unobserved changes are made. - -**Copyable**
    -With the general design principle of immutability, entity modifications (e.g. updates of field values) can become -hard and annoying. To avoid generating methods to update each field value, we provide an adapted version of the -[Builder pattern](https://en.wikipedia.org/wiki/Builder_pattern/) to make entity modifications as easy as possible. -Each entity holds it's own copy builder class, which follows the same inheritance as the entity class itself. With a -call of `.copy()` on an entity instance a builder instance is returned, that allows for modification of fields and -can be terminated with `.build()` which will return an instance of the entity with modified field values as required. -For the moment, this pattern is only implemented for a small amount of `AssetInput` entities (all entities held by a -`GridContainer` except thermal units to be precise), but we plan to extend this capability to all input entities in the -future. - -**Single Point of Truth**
    -Throughout all models you can be sure, that no information is given twice, reducing the possibility to have ambiguous -information in your simulation set up. -"Missing" information can be received through the grids relational information - e.g. if you intend to model a wind -energy converter in detail, you may find information of it's geographical location in the model of it's common -coupling point ([node](/models/input/grid/node)). - -**Harmonized Units System**
    -As our models are representations of physical elements, we introduced a harmonized system of units. -The standard units, the models are served with, is given on each element's page. -Thereby you can be sure, that all information are treated the same. -As most (database) sources do not support physical units, make sure, you have your input data transferred to correct -units before. -Same applies for interpreting the obtained results. -In all models physical values are transferred to standard units on instantiation. - -**Equality Checks**
    -To represent quantities in the models within an acceptable accuracy, the JSR 385 reference implementation -[Indriya](https://github.com/unitsofmeasurement/indriya) is used. Comparing quantity objects or objects holding quantity -instances is not as trivial as it might seem, because there might be different understandings about the equality of -quantities (e.g. there is a big difference between two instances being equal or equivalent). After long discussions how to -treat quantities in the entity `equals()` method, we agreed on the following rules to be applied: - -- equality check is done by calling `Objects.equals(, )` or - `.equals()`. - Using `Objects.equals(, )` is necessary especially for time series data. - As in contrast to all other places, quantity time series from real world data sometimes are not complete and - hence contain missing values. To represent missing values this is the only place where the usage of `null` - is a valid choice and hence needs to be treated accordingly. Please remember that this is only allowed in very few - places and you should try to avoid using `null` for quantities or any other constructor parameter whenever possible! -- equality is given if, and only if, the quantities value object and unit are exactly equal. Value objects can become - e.g. `BigDecimal` or `Double` instances. It is important, that the object type is also the same, otherwise - the entities `equals()` method returns false. This behavior is in sync with the equals implementation - of the indriya library. Hence, you should ensure that your code always pass in the same kind of a quantity instance - with the same underlying number format and type. For this purpose you should especially be aware of the unit conversion - method `AbstractQuantity.to(Quantity)` which may return seemingly unexpected types, e.g. if called on a quantity - with a `double` typed value, it may return a quantity with a value of either `Double` type or `BigDecimal` type. -- for now, there is no default way to compare entities in a 'number equality' way provided. E.g. a line with a length - of 1km compared to a line with a length of 1000m is actually of the same length, but calling `LineA.equals(LineB)` - would return `false` as the equality check does NOT convert units. If you want to compare two entity instances - based on their equivalence you have (for now) check for each quantity manually using their `isEquivalentTo()` - method. If you think you would benefit from a standard method that allows entity equivalence check, please consider - handing in an issue [Issues](https://github.com/ie3-institute/PowerSystemDataModel/issues). - Furthermore, the current existing implementation of `isEquivalentTo()` in indriya does not allow the provision of - a tolerance threshold that might be necessary when comparing values from floating point operations. We consider - providing such a method in our [PowerSystemUtils](https://github.com/ie3-institute/PowerSystemUtils) library. - If you think you would benefit from such a method, please consider handing in an issue - [Issues](https://github.com/ie3-institute/PowerSystemUtils/issues). - -**Conditional Parameters**
    -Some of the models have conditional parameters. When reading model data from a data source, their respective factories for building these -models can handle nulls and empty Strings (as well as any combination of those) safely. E.g.: When given parameters for a line's -`operationTime` where `operationStartTime` and `operationEndTime` are both `null` or `""`, the -factory will build an always-on line model. - -**Validation**
    -Information regarding validation of models can be found [here](/io/ValidationUtils). - - -## Input -Model classes you can use to describe a data set as input to power system simulations. - -```{toctree} ---- -maxdepth: 1 ---- -input/operator -``` - -### Grid Related Models - -```{toctree} ---- -maxdepth: 1 ---- -input/grid/node -input/grid/nodegraphic -input/grid/line -input/grid/linegraphic -input/grid/switch -input/grid/transformer2w -input/grid/transformer3w -input/grid/measurementunit -input/grid/gridcontainer -``` - -### Participant Related Models - -```{toctree} ---- -maxdepth: 1 ---- -input/participant/general -input/participant/bm -input/participant/chp -input/participant/ev -input/participant/evcs -input/participant/fixedfeedin -input/participant/hp -input/participant/load -input/participant/pv -input/participant/storage -input/participant/wec -input/participant/thermalbus -input/participant/thermalhouse -input/participant/cylindricalstorage -``` - -### Additional Data -Some models can use additional data for their calculations. - -```{toctree} ---- -maxdepth: 1 ---- -input/additionaldata/timeseries -input/additionaldata/idcoordinatesource -``` - -## Result -Model classes you can use to describe the outcome of a power system simulation. - -### Grid Related Models - -```{toctree} ---- -maxdepth: 1 ---- -result/grid/node -result/grid/connector -result/grid/line -result/grid/switch -result/grid/transformer -result/grid/transformer2w -result/grid/transformer3w -``` - -### Participant Related Models - -```{toctree} ---- -maxdepth: 1 ---- -result/participant/bm -result/participant/chp -result/participant/ev -result/participant/evcs -result/participant/fixedfeedin -result/participant/hp -result/participant/load -result/participant/pv -result/participant/storage -result/participant/wec -result/participant/thermalsink -result/participant/thermalstorage -result/participant/thermalunit -result/participant/thermalhouse -result/participant/cylindricalstorage -result/participant/systemparticipant -result/participant/flexoption -result/participant/em -``` diff --git a/docs/readthedocs/models/result/grid/connector.rst b/docs/readthedocs/models/result/grid/connector.rst deleted file mode 100644 index 1d1ab9af8..000000000 --- a/docs/readthedocs/models/result/grid/connector.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. _connector_result: - -Connector ---------- -Representation of all kinds of connectors. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - iAMag - - ampere - - A stands for sending node - - * - iAAng - - degree - - - - * - iBMag - - ampere - - B stands for receiving node - - * - iBAng - - degree - - - - -Caveats -^^^^^^^ -Groups all available connectors i.e. lines, switches and transformers - diff --git a/docs/readthedocs/models/result/grid/line.rst b/docs/readthedocs/models/result/grid/line.rst deleted file mode 100644 index aba108b38..000000000 --- a/docs/readthedocs/models/result/grid/line.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. _line_result: - -Line ----- -Representation of an AC line. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - iAMag - - ampere - - A stands for sending node - - * - iAAng - - degree - - - - * - iBMag - - ampere - - B stands for receiving node - - * - iBAng - - degree - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/grid/node.rst b/docs/readthedocs/models/result/grid/node.rst deleted file mode 100644 index 4e2edc4a0..000000000 --- a/docs/readthedocs/models/result/grid/node.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _node_result: - -Node ----- -Representation of an electrical node, with no further distinction into bus bar, auxiliary node or others. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - vMag - - p.u. - - - - * - vAng - - degree - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/grid/switch.rst b/docs/readthedocs/models/result/grid/switch.rst deleted file mode 100644 index bb6a2b1e7..000000000 --- a/docs/readthedocs/models/result/grid/switch.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. _switch_result: - -Switch ------- -Representation of electrical switches. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - closed - - boolean - - status of the switching device - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/grid/transformer.rst b/docs/readthedocs/models/result/grid/transformer.rst deleted file mode 100644 index 635c5d4a5..000000000 --- a/docs/readthedocs/models/result/grid/transformer.rst +++ /dev/null @@ -1,54 +0,0 @@ -.. _transformer_result: - -Transformer ------------ -Representation of transformers. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - iAMag - - ampere - - A stands for sending node - - * - iAAng - - degree - - - - * - iBMag - - ampere - - B stands for receiving node - - * - iBAng - - degree - - - - * - tapPos - - -- - - - - -Caveats -^^^^^^^ -Groups common information to both 2W and 3W transformers. diff --git a/docs/readthedocs/models/result/grid/transformer2w.rst b/docs/readthedocs/models/result/grid/transformer2w.rst deleted file mode 100644 index a4be89a9a..000000000 --- a/docs/readthedocs/models/result/grid/transformer2w.rst +++ /dev/null @@ -1,54 +0,0 @@ -.. _transformer2W_result: - -Two Winding Transformer ------------------------ -Representation of two winding transformers. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - iAMag - - ampere - - A stands for sending node - - * - iAAng - - degree - - - - * - iBMag - - ampere - - B stands for receiving node - - * - iBAng - - degree - - - - * - tapPos - - -- - - - - -Caveats -^^^^^^^ -Assumption: Node A is the node at higher voltage. diff --git a/docs/readthedocs/models/result/grid/transformer3w.rst b/docs/readthedocs/models/result/grid/transformer3w.rst deleted file mode 100644 index e9552b751..000000000 --- a/docs/readthedocs/models/result/grid/transformer3w.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. _transformer3W_result: - -Three Winding Transformer -------------------------- -Representation of three winding transformers. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - ZonedDateTime - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - iAMag - - ampere - - A stands for sending node - - * - iAAng - - degree - - - - * - iBMag - - ampere - - B stands for receiving node - - * - iBAng - - degree - - - - * - iCMag - - ampere - - B stands for receiving node - - * - iCAng - - degree - - - - * - tapPos - - -- - - - - -Caveats -^^^^^^^ -Assumption: Node A is the node at highest voltage and Node B is at intermediate voltage. -For model specifications please check corresponding input model documentation. diff --git a/docs/readthedocs/models/result/participant/bm.rst b/docs/readthedocs/models/result/participant/bm.rst deleted file mode 100644 index 75b6b78b3..000000000 --- a/docs/readthedocs/models/result/participant/bm.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _bm_result: - -Biomass plant -------------- -Result of a biomass power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/chp.rst b/docs/readthedocs/models/result/participant/chp.rst deleted file mode 100644 index 1a54fa6d8..000000000 --- a/docs/readthedocs/models/result/participant/chp.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _chp_result: - -Combined Heat and Power Plant ------------------------------ -Result of a combined heat and power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - qDot - - MW - - Thermal power - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/cylindricalstorage.rst b/docs/readthedocs/models/result/participant/cylindricalstorage.rst deleted file mode 100644 index bba4d321f..000000000 --- a/docs/readthedocs/models/result/participant/cylindricalstorage.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _cylindricalstorage_result: - -Cylindrical Thermal Storage ---------------------------- -Result of a cylindrical thermal storage using a fluent to store thermal energy. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - energy - - MWh - - - - * - qDot - - MW - - heat demand of the sink - - * - fillLevel - - -- - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/ev.rst b/docs/readthedocs/models/result/participant/ev.rst deleted file mode 100644 index 71c771c50..000000000 --- a/docs/readthedocs/models/result/participant/ev.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _ev_result: - -Electric Vehicle ----------------- -Result of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging station`. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - soc - - % - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/evcs.rst b/docs/readthedocs/models/result/participant/evcs.rst deleted file mode 100644 index d4313287a..000000000 --- a/docs/readthedocs/models/result/participant/evcs.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _evcs_result: - -Electric Vehicle Charging Station ---------------------------------- -This model is currently only a dummy implementation of an electric vehicle charging station. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/fixedfeedin.rst b/docs/readthedocs/models/result/participant/fixedfeedin.rst deleted file mode 100644 index edb3e9975..000000000 --- a/docs/readthedocs/models/result/participant/fixedfeedin.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _fixed_feed_in_result: - -Fixed Feed In Facility ----------------------- -Result of a facility, that provides constant power feed in, as no further information about the actual behaviour of the -model can be derived. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/hp.rst b/docs/readthedocs/models/result/participant/hp.rst deleted file mode 100644 index a8ee1591b..000000000 --- a/docs/readthedocs/models/result/participant/hp.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _hp_result: - -Heat Pump ---------- -Result of a heat pump. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - qDot - - MW - - Thermal power - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/load.rst b/docs/readthedocs/models/result/participant/load.rst deleted file mode 100644 index 8ee6fbdcd..000000000 --- a/docs/readthedocs/models/result/participant/load.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _load_result: - -Load ----- -Result of (mainly) domestic loads. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/result/participant/pv.rst b/docs/readthedocs/models/result/participant/pv.rst deleted file mode 100644 index b4ad76b61..000000000 --- a/docs/readthedocs/models/result/participant/pv.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _pv_result: - -Photovoltaic Power Plant ------------------------- -Result of a photovoltaic power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/storage.rst b/docs/readthedocs/models/result/participant/storage.rst deleted file mode 100644 index b4947c3b4..000000000 --- a/docs/readthedocs/models/result/participant/storage.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. _storage_result: - -Electrical Energy Storage -------------------------- -Result of an electrochemical storage - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - * - soc - - -- - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalhouse.rst b/docs/readthedocs/models/result/participant/thermalhouse.rst deleted file mode 100644 index c90215f63..000000000 --- a/docs/readthedocs/models/result/participant/thermalhouse.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _thermal_house_result: - -Thermal House -------------- -Model for the thermal behaviour of a building. -This reflects a simple shoe box with transmission losses - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - qDot - - MW - - thermal heat demand of the sink - - * - indoorTemperature - - °C - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/wec.rst b/docs/readthedocs/models/result/participant/wec.rst deleted file mode 100644 index 429b45ea1..000000000 --- a/docs/readthedocs/models/result/participant/wec.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. _wec_result: - -Wind Energy Converter ---------------------- -Result of a wind turbine. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - p - - MW - - - - * - q - - MVAr - - - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/requirements.txt b/docs/readthedocs/requirements.txt deleted file mode 100644 index cb581e840..000000000 --- a/docs/readthedocs/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -commonmark==0.9.1 -recommonmark==0.7.1 -Sphinx==7.2.6 -sphinx-rtd-theme==2.0.0 -myst-parser==2.0.0 -markdown-it-py==3.0.0 diff --git a/docs/test/complexTopology.drawio b/docs/test/complexTopology.drawio deleted file mode 100644 index 0c6a274f4..000000000 --- a/docs/test/complexTopology.drawio +++ /dev/null @@ -1 +0,0 @@ -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 diff --git a/docs/test/complexTopology.pdf b/docs/test/complexTopology.pdf deleted file mode 100644 index 483549919ae0382d5d374386e7af12f8cadf9fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26417 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 -+ void persistTimeSeries(TimeSeries) -} - -interface InputDataSink { -+ void persistIgnoreNested(InputEntity) -+ void persistAllIgnoreNested(Collection) -+ void persistIncludeNested(InputEntity) -+ void persistAllIncludeNested(Collection) -+ void persistJointGrid(JointGridContainer) -} -InputDataSink --|> DataSink - -interface OutputDataSink -OutputDataSink --|> DataSink - -' Implementations -class CsvFileSink { -+ CsvFileSink(String, ProcessorProvider, EntityPersistenceNamingStrategy, boolean, String) -+ CsvFileSink(String, EntityPersistenceNamingStrategy, boolean, String) -+ CsvFileSink(String) -- void initFiles(ProcessorProvider, EntityPersistenceNamingStrategy) -- void write(UniqueEntity) -} -CsvFileSink ..|> InputDataSink -CsvFileSink ..|> OutputDataSink - - -class InfluxDBFileSink { -+ InfluxDbSink(InfluxDbConnector, EntityPersistenceNamingStrategy) -+ InfluxDbSink(InfluxDbConnector) -- Set extractPoints(UniqueEntity) -- String transformToMeasurementName(String) -- transformToPoint(UniqueEntity) -- transformToPoint(UniqueEntity, String) -- transformToPoints(TimeSeries) -- transformToPoints(TimeSeries, String) -} -InfluxDBFileSink ..|> OutputDataSink -@enduml \ No newline at end of file diff --git a/docs/uml/main/DataSourceClassDiagram.puml b/docs/uml/main/DataSourceClassDiagram.puml deleted file mode 100644 index 5f05c566f..000000000 --- a/docs/uml/main/DataSourceClassDiagram.puml +++ /dev/null @@ -1,181 +0,0 @@ -@startuml - -note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes - -interface DataSource { - {abstract} Stream> getSourceData(Class entityClass) -} - -DataSource <|-- CsvDataSource -DataSource <|-- SqlDataSource - -' Implementations - -class CsvDataSource { - - String csvSep - # CsvFileConnector connector - + CsvDataSource(String, String, FileNamingStrategy) -} - -class SqlDataSource { - - String schemaName - # SqlConnector connector - # DatabaseNamingStrategy databaseNamingStrategy - + SqlDataSource(String, String, DatabaseNamingStrategy) -} - -abstract class WeatherSource { - - TimeBasedWeatherValueFactory weatherFactory - - Map> coordinateToTimeSeries - - IdCoordinateSource idCoordinateSource - - {abstract} Map> getWeather(ClosedInterval) - - {abstract} Map> getWeather(ClosedInterval, Collection) - - {abstract} Optional> getWeather(ZonedDateTime, Point) -} - -WeatherSource <|-- CsvWeatherSource -WeatherSource <|-- SqlWeatherSource -WeatherSource <|-- InfluxDbWeatherSource -WeatherSource <|-- CouchbaseWeatherSource - -class CsvWeatherSource { - - CsvDataSource dataSource - - CsvWeatherSource(String, String, FileNamingStrategy, IdCoordinateSource, TimeBasedWeatherValueFactory) -} -class SqlWeatherSource { - - SqlDataSource dataSource - - String factoryCoordinateFieldName - - SqlWeatherSource(SqlConnector, IdCoordinateSource, String, String, TimeBasedWeatherValueFactory) -} -class InfluxDbWeatherSource { - - InfluxDbConnector connector - - InfluxDbWeatherSource(InfluxDbConnector, IdCoordinateSource, TimeBasedWeatherValueFactory) - - IndividualTimeSeries getWeather(ClosedInterval, Point) -} -class CouchbaseWeatherSource { - - CouchbaseConnector connector, - - CouchbaseWeatherSource(CouchbaseConnector, IdCoordinateSource, String, TimeBasedWeatherValueFactory, String) - - CouchbaseWeatherSource(CouchbaseConnector, IdCoordinateSource, String, String, TimeBasedWeatherValueFactory, String) - - String generateWeatherKey(ZonedDateTime, Integer) - - String createQueryStringForIntervalAndCoordinate(ClosedInterval, int) -} - -abstract class TimeSeriesMappingSource { - - Map getMapping() - - Optional getTimeSeriesUuid(UUID) - {abstract} Stream> getMappingSourceData() -} - -TimeSeriesMappingSource <|-- CsvTimeSeriesMappingSource -TimeSeriesMappingSource <|-- SqlTimeSeriesMappingSource - -class CsvTimeSeriesMappingSource { - - CsvDataSource dataSource - - CsvTimeSeriesMappingSource(String, String, FileNamingStrategy) -} - -class SqlTimeSeriesMappingSource { - - EntityPersistenceNamingStrategy entityPersistenceNamingStrategy - - SqlDataSource dataSource - - SqlTimeSeriesMappingSource(SqlConnector, String, EntityPersistenceNamingStrategy) -} - -interface TimeSeriesSource { - {abstract} IndividualTimeSeries getTimeSeries() - {abstract} IndividualTimeSeries getTimeSeries(ClosedInterval)) - {abstract} Optional getValue(ZonedDateTime) -} - -TimeSeriesSource <|-- CsvTimeSeriesSource -TimeSeriesSource <|-- SqlTimeSeriesSource - -class CsvTimeSeriesSource { - - IndividualTimeSeries timeSeries - - CsvDataSource dataSource - + {static} CsvTimeSeriesSource getSource(\n\tString,\n\tString,\n\tEntityPersistenceNamingStrategy,\n\tCsvFileConnector.CsvIndividualTimeSeriesMetaInformation) - - CsvTimeSeriesSource(\n\tString,\n\tString,\n\tFileNamingStrategy,\n\tUUID,\n\tString,\n\tClass,\n\tTimeBasedSimpleValueFactory) -} - -class SqlTimeSeriesSource { - - SqlDataSource dataSource - - UUID timeSeriesUuid - - Class valueClass - - TimeBasedSimpleValueFactory valueFactory - - SqlTimeSeriesSource(SqlDataSource, UUID, Class, TimeBasedSimpleValueFactory) - - SqlTimeSeriesSource(SqlConnector, String, DatabaseNamingStrategy, UUID, Class, TimeBasedSimpleValueFactory) - + {static} SqlTimeSeriesSource createSource(SqlConnector, String, DatabaseNamingStrategy, IndividualTimeSeriesMetaInformation, String) - + {static} SqlTimeSeriesSource create(SqlConnector, String, DatabaseNamingStrategy, UUID, Class, String) -} - -interface TimeSeriesMetaInformationSource { - - {abstract} Map getTimeSeriesMetaInformation() - - {abstract} Optional getTimeSeriesMetaInformation(UUID) -} - -TimeSeriesMetaInformationSource <|.. CsvTimeSeriesMetaInformationSource -TimeSeriesMetaInformationSource <|.. SqlTimeSeriesMetaInformationSource - -class CsvTimeSeriesMetaInformationSource { - - CsvDataSource dataSource - - Map timeSeriesMetaInformation - - CsvTimeSeriesMetaInformationSource(String, String, FileNamingStrategy) -} - -class SqlTimeSeriesMetaInformationSource { - - DatabaseNamingStrategy namingStrategy - - Map mapping - - SqlDataSource dataSource - - SqlTimeSeriesMetaInformationSource(SqlConnector, String, DatabaseNamingStrategy) -} - - - - - - -interface IdCoordinateSource { - {abstract} Optional getCoordinate(int) - {abstract} Collection getCoordinates(int...) - {abstract} Optional getId(Point) - {abstract} Collection getAllCoordinates() - {abstract} List getNearestCoordinates(Point, int) - {abstract} List getClosestCoordinates(Point, int, ComparableQuantity) -} - -IdCoordinateSource <|.. CsvIdCoordinateSource -IdCoordinateSource <|.. SqlIdCoordinateSource - -class CsvIdCoordinateSource { - - Map idToCoordinate - - Map coordinateToId - - CsvDataSource dataSource - - IdCoordinateFactory factory - - CsvIdCoordinateSource(IdCoordinateFactory, CsvDataSource) -} - -class SqlIdCoordinateSource { - - SqlDataSource dataSource - - SqlIdCoordinateFactory factory - - SqlIdCoordinateSource(SqlIdCoordinateFactory, String, SqlDataSource) -} - -interface DataConnector { - {abstract} shutdown() -} - -Class CsvFileConnector { - - Map, BufferedCsvWriter> entityWriters - - Map timeSeriesWriters - - EntityPersistenceNamingStrategy entityPersistenceNamingStrategy - - String baseDirectoryName - - {static} String FILE_ENDING - + CsvFileConnector(String, EntityPersistenceNamingStrategy) - + BufferedCsvWriter getOrInitWriter(Class, String[], String) - + BufferedCsvWriter getOrInitWriter(T, String[], String) - + BufferedCsvWriter initWriter(String, CsvFileDefinition) - + BufferedReader initReader(Class) - - CsvFileDefinition buildFileDefinition(T, String[], String) - - CsvFileDefinition buildFileDefinition(Class, String[], String) -} -DataConnector <|.. CsvFileConnector -@enduml \ No newline at end of file diff --git a/docs/uml/main/DataSourceClassDiagram_draft.puml b/docs/uml/main/DataSourceClassDiagram_draft.puml deleted file mode 100644 index 3d359fc5a..000000000 --- a/docs/uml/main/DataSourceClassDiagram_draft.puml +++ /dev/null @@ -1,123 +0,0 @@ -@startuml - -note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes - -interface Publisher - -interface DataConnector { -{static}{abstract}DataConnector buildConnector(String json) -{abstract}Boolean validateConnection() -} - -interface Neo4JDataConnector { -- neo4jDriver driver -+ Session getSession() -+ Object runStatement(String query) -} -Neo4JDataConnector --|> DataConnector - -interface JDBCDataConnector { -- DriverManager driverManager -+ Connection getConnection() -+ ResultSet runStatement(String query) -} -JDBCDataConnector --|> DataConnector - -interface CSVDataConnector { -- Path path -} -CSVDataConnector --|> DataConnector - -interface DataSource { -- DataConnector connector -} - -interface GridDataSource { -{abstract}Future fetchGridData() -{abstract}Future> fetchNodes() -{abstract}Future> fetchLines() -} -GridDataSource --|> DataSource - -class Neo4JGridDataSource { -} -Neo4JGridDataSource --|> GridDataSource -Neo4JGridDataSource --> Neo4JDataConnector - -class JDBCGridDataSource { -} -JDBCGridDataSource --|> GridDataSource -JDBCGridDataSource --> JDBCDataConnector - -class CSVGridDataSource { -} -CSVGridDataSource ..|> GridDataSource -CSVGridDataSource ..|> CSVDataConnector - -interface AssetDataSource { -{abstract}Set fetchEvs() -{abstract}Set fetchWecPlants() -{abstract}Set<...> fetch...() -} -AssetDataSource ..|> DataSource - -interface TypeDataSource { -{abstract}Future fetchTypeData() -{abstract}Future> fetchEvTypes() -{abstract}Future> fetch...() -} -TypeDataSource ..|> DataSource - -interface GraphicDataSource { -{abstract}Future fetchGraphicData() -{abstract}Future> fetch...() -} -GraphicDataSource ..|> DataSource - -interface WeatherDataSource { -{abstract}Future fetchWeatherData() -{abstract}Future getWeather(Date, Coordinate) -{abstract}Boolean subscribeToWeatherEvents(ActorRef) -} -WeatherDataSource --|> DataSource -WeatherDataSource --|> Publisher - -interface WholesaleDataSource { -{abstract}Future fetchWholesaleData() -{abstract}Future getWholesale(Date) -{abstract}Boolean subscribeToWholesaleEvents(ActorRef) -} -WholesaleDataSource --|> DataSource -WholesaleDataSource --|> Publisher - -Class InputAccumulator { -+ InputAccumulator InputAccumulator(SimulationModelConfig) -+ Future importSimulationModel() -+ SimulationModel getSimulationModel() -} -InputAccumulator --> GridDataSource -InputAccumulator --> AssetDataSource -InputAccumulator --> TypeDataSource -InputAccumulator --> GraphicDataSource -InputAccumulator --> WeatherDataSource -InputAccumulator --> WholesaleDataSource -InputAccumulator --> SimulationModel - -Class SimulationModel { -+ List gridData -+ List assetData -+ List<...Data> ...Data -+ WeatherDataSource weatherProvider -+ WholesaleDataSource wholesaleProvider -} - -Class MainController { -+ SimulationModel loadSimulationModel() -} -MainController --> InputAccumulator -MainController --> SimulationModel - - - - -@enduml \ No newline at end of file diff --git a/docs/uml/main/EntitySourceClassDiagram.puml b/docs/uml/main/EntitySourceClassDiagram.puml deleted file mode 100644 index a160bc739..000000000 --- a/docs/uml/main/EntitySourceClassDiagram.puml +++ /dev/null @@ -1,157 +0,0 @@ -@startuml - -note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes - -abstract class EntitySource { - - DataSource dataSource - - Set buildNodeAssetEntities(Class, EntityFactory, Collection, Collection, ConcurrentMap, LongAdder>) - - Set buildNodeAssetEntities(Class, EntityFactory, Collection, Collection) - - Set buildAssetInputEntities(Class, EntityFactory, Collection) - - Set buildAssetInputEntities(Class, EntityFactory) -} -EntitySource <|-- GraphicSource -EntitySource <|-- RawGridSource -EntitySource <|-- ResultEntitySource -EntitySource <|-- SystemParticipantSource -EntitySource <|-- ThermalSource -EntitySource <|-- TypeSource - -class GraphicSource { - - TypeSource typeSource - - RawGridSource rawGridSource - - LineGraphicInputFactory lineGraphicInputFactory - - NodeGraphicInputFactory nodeGraphicInputFactory - - GraphicSource(TypeSource, RawGridSource, DataSource) - - Optional getGraphicElements() - - Set getNodeGraphicInput() - - Set getNodeGraphicInput(Set) - - Set getLineGraphicInput() - - Set getLineGraphicInput(Set) -} - -class RawGridSource { - - TypeSource typeSource - - NodeInputFactory nodeInputFactory - - LineInputFactory lineInputFactory - - Transformer2WInputFactory transformer2WInputFactory - - Transformer3WInputFactory transformer3WInputFactory - - SwitchInputFactory switchInputFactory - - MeasurementUnitInputFactory measurementUnitInputFactory - - Optional getGridData() - - Set getNodes() - - Set getNodes(Set) - - Set getLines() - - Set getLines(Set, Set, Set) - - Set get2WTransformers() - - Set get2WTransformers(Set, Set, Set) - - Set get3WTransformers() - - Set get3WTransformers(Set, Set, Set) - - Set getSwitches() - - Set getSwitches(Set, Set) - - Set getMeasurementUnits() - - Set getMeasurementUnits(Set, Set) -} - -class ResultEntitySource { - - SystemParticipantResultFactory systemParticipantResultFactory - - ThermalResultFactory thermalResultFactory - - SwitchResultFactory switchResultFactory - - NodeResultFactory nodeResultFactory - - ConnectorResultFactory connectorResultFactory - - FlexOptionsResultFactory flexOptionsResultFactory - - ResultEntitySource(DataSource) - - ResultEntitySource(DataSource, String) - - Set getNodeResults() - - Set getSwitchResults() - - Set getLineResults() - - Set getTransformer2WResultResults() - - Set getTransformer3WResultResults() - - Set getFlexOptionsResults() - - Set getLoadResults() - - Set getPvResults() - - Set getFixedFeedInResults() - - Set getBmResults() - - Set getChpResults() - - Set getWecResults() - - Set getStorageResults() - - Set getEvcsResults() - - Set getEvResults() - - Set getHpResults() - - Set getCylindricalStorageResult() - - Set getThermalHouseResults() - - Set getEmResults() -} - -class SystemParticipantSource{ - - TypeSource typeSource - - RawGridSource rawGridSource - - ThermalSource thermalSource - - BmInputFactory bmInputFactory - - ChpInputFactory chpInputFactory - - EvInputFactory evInputFactory - - FixedFeedInInputFactory fixedFeedInInputFactory - - HpInputFactory hpInputFactory - - LoadInputFactory loadInputFactory - - PvInputFactory pvInputFactory - - StorageInputFactory storageInputFactory - - WecInputFactory wecInputFactory - - EvcsInputFactory evcsInputFactory - - SystemParticipantSource(TypeSource, ThermalSource, RawGridSource, DataSource) - - Optional getSystemParticipants() - - Set getBmPlants() - - Set getBmPlants(Set, Set, Set) - - Set getChpPlants() - - Set getChpPlants(Set, Set, Set, Set, Set) - - Set getEvs() - - Set getEvs(Set, Set, Set) - - Set getEvCS() - - Set getEvCS(Set, Set) - - Set getFixedFeedIns() - - Set getFixedFeedIns(Set, Set) - - Set getHeatPumps() - - Set getHeatPumps(Set, Set, Set, Set) - - Set getLoads() - - Set getLoads(Set, Set) - - Set getPvPlants() - - Set getPvPlants(Set, Set) - - Set getStorages() - - Set getStorages(Set, Set, Set) - - Set getWecPlants() - - Set getWecPlants(Set, Set, Set) -} - -class ThermalSource { - - TypeSource typeSource - - ThermalBusInputFactory thermalBusInputFactory - - CylindricalStorageInputFactory cylindricalStorageInputFactory - - ThermalHouseInputFactory thermalHouseInputFactory - - ThermalSource(TypeSource, DataSource) - - Set getThermalBuses() - - Set getThermalBuses(Set) - - Set getThermalStorages() - - Set getThermalStorages(Set, Set) - - Set getThermalHouses() - - Set getThermalHouses(Set, Set) - - Set getCylindricStorages() - - Set getCylindricStorages(Set, Set) -} - -class TypeSource { - - OperatorInputFactory operatorInputFactory - - Transformer2WTypeInputFactory transformer2WTypeInputFactory - - LineTypeInputFactory lineTypeInputFactory - - Transformer3WTypeInputFactory transformer3WTypeInputFactory - - SystemParticipantTypeInputFactory systemParticipantTypeInputFactory - - TypeSource(DataSource) - - Set getTransformer2WTypes() - - Set getTransformer3WTypes() - - Set getOperators() - - Set getLineTypes() - - Set getBmTypes() - - Set getChpTypes() - - Set getHpTypes() - - Set getStorageTypes() - - Set getWecTypes() - - Set getEvTypes() -} -@enduml \ No newline at end of file diff --git a/docs/uml/main/FunctionalDataSourceClassDiagram.puml b/docs/uml/main/FunctionalDataSourceClassDiagram.puml deleted file mode 100644 index 5504656ec..000000000 --- a/docs/uml/main/FunctionalDataSourceClassDiagram.puml +++ /dev/null @@ -1,26 +0,0 @@ -@startuml - -note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes - -interface DataSource { - {abstract} Stream> getSourceData(Class entityClass) -} - -DataSource <|-- CsvDataSource -DataSource <|-- SqlDataSource - -' Implementations - -class CsvDataSource { - - String csvSep - # CsvFileConnector connector - + CsvDataSource(String, String, FileNamingStrategy) -} - -class SqlDataSource { - - String schemaName - # SqlConnector connector - # DatabaseNamingStrategy databaseNamingStrategy - + SqlDataSource(String, String, DatabaseNamingStrategy) -} -@enduml \ No newline at end of file diff --git a/docs/uml/main/InputDataDeployment.puml b/docs/uml/main/InputDataDeployment.puml deleted file mode 100644 index 56a5afcf1..000000000 --- a/docs/uml/main/InputDataDeployment.puml +++ /dev/null @@ -1,108 +0,0 @@ -@startuml -scale 2048 width -scale 1538 height - -database psql [ - PostgreSQL - == - grid - -- - assets - -- - types - -- - graphics - -- - weather - __ - time series -] -database influxdb [ - InfluxDB - == - weather - -- - time series -] - -'Not yet implemented -'database neo4j [ -' Neo4J -' == -' grid -' -- -' assets -'] -folder projName.tar.gz { -folder assets { -file ev.csv -file pv.csv -file wec.csv -file asset_xyz.csv -} -folder grid -folder types -folder graphics -} -folder resources { -file projName_model.conf -file projName_simulation.conf -file load_parameter -file load_profiles -file wholesale_prices -} -'Not yet implemented -'cloud streams [ -'streams -'== -'weather -'] -interface grid_source -interface assets_source -interface types_source -interface thermal_source -interface graphics_source -interface weather_source -interface time_series_source -interface config_source -agent inputAccumulator -node "Simulation" - -grid_source --> psql -grid_source --> grid - -assets_source --> psql -assets_source --> assets - -types_source --> psql -types_source --> types - -thermal_source --> psql -thermal_source --> types - -graphics_source --> psql -graphics_source --> graphics - -weather_source --> psql -weather_source --> influxdb - -time_series_source --> psql -time_series_source --> influxdb - -config_source --> inputAccumulator - -inputAccumulator --> grid_source -inputAccumulator --> assets_source -inputAccumulator --> types_source -inputAccumulator --> graphics_source -inputAccumulator --> weather_source -inputAccumulator --> time_series_source -inputAccumulator --> thermal_source - -projName_model.conf --> config_source - -config_source --> Simulation - -inputAccumulator --> Simulation - -@enduml \ No newline at end of file diff --git a/docs/uml/main/OutputDatamodelConcept.puml b/docs/uml/main/OutputDatamodelConcept.puml deleted file mode 100644 index de0b7c745..000000000 --- a/docs/uml/main/OutputDatamodelConcept.puml +++ /dev/null @@ -1,141 +0,0 @@ -@startuml - -package models { - - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - + uuid: UUID - } - - package timeseries {} - package value {} - package input {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. input - childNote .. timeseries - childNote .. value - - package result { - abstract class ResultEntity{ - + time: ZonedDateTime - + inputModel: UUID - } - UniqueEntity <|-- ResultEntity - - class NodeResult{ - + vMag: ComparableQuantity - + vAng: ComparableQuantity - } - ResultEntity <|-- NodeResult - - package connector { - - abstract class ConnectorResult{ - + iAMag: ComparableQuantity - + iAAng: ComparableQuantity - + iBMag: ComparableQuantity - + iBAng: ComparableQuantity - } - ResultEntity <|-- ConnectorResult - - abstract class TransformerResult{ - + tapPos: int - } - ConnectorResult <|-- TransformerResult - - class Transformer2wResult - TransformerResult <|-- Transformer2wResult - - class Transformer3wResult{ - + iCMag: ComparableQuantity - + iCAng: ComparableQuantity - } - TransformerResult <|-- Transformer3wResult - - class LineResult - ConnectorResult <|-- LineResult - - class SwitchResult{ - + closed: boolean - } - ResultEntity <|-- SwitchResult - } - - package system { - - abstract class SystemParticipantResult{ - + p: ComparableQuantity - + q: ComparableQuantity - } - ResultEntity <|-- SystemParticipantResult - - class LoadResult - SystemParticipantResult <|-- LoadResult - - class FixedFeedInResult - SystemParticipantResult <|-- FixedFeedInResult - - class BmResult - SystemParticipantResult <|-- BmResult - - class PvResult - SystemParticipantResult <|-- PvResult - - abstract class SystemParticipantWithHeatResult{ - - qDot: ComparableQuantity - } - SystemParticipantResult <|-- SystemParticipantWithHeatResult - - class ChpResult - SystemParticipantWithHeatResult <|-- ChpResult - - class HpResult - SystemParticipantWithHeatResult <|-- HpResult - - class WecResult - SystemParticipantResult <|-- WecResult - - class EvcsResult - SystemParticipantResult <|-- EvcsResult - - class EvResult{ - + soc: ComparableQuantity - } - SystemParticipantResult <|-- EvResult - - class StorageResult{ - + soc: ComparableQuantity - } - SystemParticipantResult <|-- StorageResult - } - - package thermal { - - Abstract class ThermalUnitResult { - - qDot: ComparableQuantity [MW] - } - ResultEntity <|-- ThermalUnitResult - - Abstract class ThermalSinkResult - ThermalUnitResult <|-- ThermalSinkResult - - class ThermalHouseResult { - - indoorTemperature: ComparableQuantity [°C] - } - ThermalSinkResult <|-- ThermalHouseResult - - Abstract class ThermalStorageResult { - - energy: ComparableQuantity [MWh] - } - ThermalUnitResult <|-- ThermalStorageResult - - class CylindricalStorageResult { - - fillLevel: ComparableQuantity [%] - } - ThermalStorageResult <|-- CylindricalStorageResult - } - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/TimeSeriesDatamodelConcept.puml b/docs/uml/main/TimeSeriesDatamodelConcept.puml deleted file mode 100644 index 370f3b2e8..000000000 --- a/docs/uml/main/TimeSeriesDatamodelConcept.puml +++ /dev/null @@ -1,150 +0,0 @@ -@startuml -scale 2048 width -scale 1538 height - -note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote - -interface Comparable - -package models { - - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - - uuid: UUID - } - - package result {} - package input {} - package voltagelevels {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. result - childNote .. input - childNote .. voltagelevels - - interface StandardLoadProfile { - + getKey: String - + enum DefaultLoadProfiles - + {static} parse(String): StandardLoadProfile - } - - enum BdewLoadProfile { - - key: String - + {static} get(String): BdewLoadProfile - } - BdewLoadProfile ..|> StandardLoadProfile - - package value { - interface Value - - class EnergyPriceValue { - - price: ComparableQuantity [€/MWh] - } - EnergyPriceValue ..|> Value - - class HeatDemandValue { - - heatDemand : ComparableQuantity [kW] - } - HeatDemandValue ..|> Value - - class PValue { - - p: ComparableQuantity [kW] - } - PValue ..|> Value - - class HeatAndPValue { - - heatDemand: ComparableQuantity [kW] - } - HeatAndPValue --|> PValue - - class SValue { - - q: ComparableQuantity [kVAr] - } - SValue --|> PValue - - class HeatAndSValue { - - heatDemand: ComparableQuantity [kW] - } - HeatAndSValue --|> SValue - - class SolarIrradianceValue { - - directIrradiance: ComparableQuantity [W/m²] - - diffuseIrradiance: ComparableQuantity [W/m²] - } - SolarIrradianceValue ..|> Value - - class TemperatureValue { - - temperature: ComparableQuantity [°C] - } - TemperatureValue ..|> Value - - class WindValue { - - direction: ComparableQuantity [°] - - velocity: ComparableQuantity [m/s] - } - WindValue ..|> Value - - class WeatherValue { - - coordinate: Point - - solarIrradiance: SolarIrradianceValue - - temperature: TemperatureValue - - wind: WindValue - } - WeatherValue ..|> Value - WeatherValue *-- SolarIrradianceValue - WeatherValue *-- TemperatureValue - WeatherValue *-- WindValue - } - - package timeseries { - abstract class TimeSeries, V extends Value> { - # entries: Set - + Optional> getTimeBasedValue(ZonedDateTime) - + Optional getValue(ZonedDateTime) - + Set getEntries() - + Optional> getPreviousTimeBasedValue(ZonedDateTime) - + Optional> getNextTimeBasedValue(ZonedDateTime) - # Optional getPreviousDateTime() - # Optional getNextDateTime() - } - TimeSeries --|> UniqueEntity - TimeSeries "1" *-- "n" TimeSeriesEntry - - class IndividualTimeSeries { - - Map> timeToValue - } - IndividualTimeSeries --|> TimeSeries: <>:TimeBasedValue - - abstract class RepetitiveTimeSeries, V extends Value> { - # calc(ZonedDateTime): T - } - RepetitiveTimeSeries --|> TimeSeries - - class LoadProfileInput { - - type: StandardLoadProfile - - dayOfWeekToHourlyValues: Map> - } - LoadProfileInput --|> RepetitiveTimeSeries - LoadProfileInput *-- StandardLoadProfile - - abstract class TimeSeriesEntry { - # value: V - } - TimeSeriesEntry --|> UniqueEntity - TimeSeriesEntry *-- Value - - abstract class TimeBasedValue{ - - time: ZonedDateTime - } - TimeBasedValue --|> TimeSeriesEntry - TimeBasedValue ..|> Comparable: <>: - - class LoadProfileEntry { - - dayOfWeek: DayOfWeek - - quarterHourOfDay: int - } - LoadProfileEntry --|> TimeSeriesEntry: <>:PValue - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/TimeSeriesSourceClassDiagram.puml b/docs/uml/main/TimeSeriesSourceClassDiagram.puml deleted file mode 100644 index 56d66b729..000000000 --- a/docs/uml/main/TimeSeriesSourceClassDiagram.puml +++ /dev/null @@ -1,73 +0,0 @@ -@startuml - -note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes - -abstract class TimeSeriesSource { - - Class valueClass - - TimeBasedSimpleValueFactory valueFactory - - {abstract} IndividualTimeSeries getTimeSeries() - - {abstract} IndividualTimeSeries getTimeSeries(ClosedInterval)) - - {abstract} Optional getValue(ZonedDateTime) -} - -TimeSeriesSource <|-- CsvTimeSeriesSource -TimeSeriesSource <|-- SqlTimeSeriesSource - -class CsvTimeSeriesSource { - - IndividualTimeSeries timeSeries - - CsvDataSource dataSource - + {static} CsvTimeSeriesSource getSource(\n\tString,\n\tString,\n\tEntityPersistenceNamingStrategy,\n\tCsvFileConnector.CsvIndividualTimeSeriesMetaInformation) - - CsvTimeSeriesSource(\n\tString,\n\tString,\n\tFileNamingStrategy,\n\tUUID,\n\tString,\n\tClass,\n\tTimeBasedSimpleValueFactory) -} - -class SqlTimeSeriesSource { - - SqlDataSource dataSource - - UUID timeSeriesUuid - - SqlTimeSeriesSource(SqlDataSource, UUID, Class, TimeBasedSimpleValueFactory) - - SqlTimeSeriesSource(SqlConnector, String, DatabaseNamingStrategy, UUID, Class, TimeBasedSimpleValueFactory) - + {static} SqlTimeSeriesSource createSource(SqlConnector, String, DatabaseNamingStrategy, IndividualTimeSeriesMetaInformation, String) - + {static} SqlTimeSeriesSource create(SqlConnector, String, DatabaseNamingStrategy, UUID, Class, String) -} - -abstract class TimeSeriesMappingSource { - - TimeSeriesMappingFactory mappingFactory - - Map getMapping() - - Optional getTimeSeriesUuid(UUID) - {abstract} Stream> getMappingSourceData() -} - -TimeSeriesMappingSource <|-- CsvTimeSeriesMappingSource -TimeSeriesMappingSource <|-- SqlTimeSeriesMappingSource - -class CsvTimeSeriesMappingSource { - - CsvDataSource dataSource - - CsvTimeSeriesMappingSource(String, String, FileNamingStrategy) -} - -class SqlTimeSeriesMappingSource { - - EntityPersistenceNamingStrategy entityPersistenceNamingStrategy - - SqlDataSource dataSource - - SqlTimeSeriesMappingSource(SqlConnector, String, EntityPersistenceNamingStrategy) -} - -interface TimeSeriesMetaInformationSource { - - {abstract} Map getTimeSeriesMetaInformation() - - {abstract} Optional getTimeSeriesMetaInformation(UUID) -} - -TimeSeriesMetaInformationSource <|.. CsvTimeSeriesMetaInformationSource -TimeSeriesMetaInformationSource <|.. SqlTimeSeriesMetaInformationSource - -class CsvTimeSeriesMetaInformationSource { - - CsvDataSource dataSource - - Map timeSeriesMetaInformation - - CsvTimeSeriesMetaInformationSource(String, String, FileNamingStrategy) -} - -class SqlTimeSeriesMetaInformationSource { - - DatabaseNamingStrategy namingStrategy - - Map mapping - - SqlDataSource dataSource - - SqlTimeSeriesMetaInformationSource(SqlConnector, String, DatabaseNamingStrategy) -} -@enduml \ No newline at end of file diff --git a/docs/uml/main/WeatherCoordinateSourceClassDiagram.puml b/docs/uml/main/WeatherCoordinateSourceClassDiagram.puml deleted file mode 100644 index 60716fb34..000000000 --- a/docs/uml/main/WeatherCoordinateSourceClassDiagram.puml +++ /dev/null @@ -1,67 +0,0 @@ -@startuml - -note "Assuming all classes to implement \nthe abstract methods of their interfaces\n\n" as generalNotes - -abstract class WeatherSource { - - TimeBasedWeatherValueFactory weatherFactory - - Map> coordinateToTimeSeries - - IdCoordinateSource idCoordinateSource - - {abstract} Map> getWeather(ClosedInterval) - - {abstract} Map> getWeather(ClosedInterval, Collection) - - {abstract} Optional> getWeather(ZonedDateTime, Point) -} - -WeatherSource <|-- CsvWeatherSource -WeatherSource <|-- SqlWeatherSource -WeatherSource <|-- InfluxDbWeatherSource -WeatherSource <|-- CouchbaseWeatherSource - -class CsvWeatherSource { - - CsvDataSource dataSource - - CsvWeatherSource(String, String, FileNamingStrategy, IdCoordinateSource, TimeBasedWeatherValueFactory) -} -class SqlWeatherSource { - - SqlDataSource dataSource - - String factoryCoordinateFieldName - - SqlWeatherSource(SqlConnector, IdCoordinateSource, String, String, TimeBasedWeatherValueFactory) -} -class InfluxDbWeatherSource { - - InfluxDbConnector connector - - InfluxDbWeatherSource(InfluxDbConnector, IdCoordinateSource, TimeBasedWeatherValueFactory) - - IndividualTimeSeries getWeather(ClosedInterval, Point) -} -class CouchbaseWeatherSource { - - CouchbaseConnector connector, - - CouchbaseWeatherSource(CouchbaseConnector, IdCoordinateSource, String, TimeBasedWeatherValueFactory, String) - - CouchbaseWeatherSource(CouchbaseConnector, IdCoordinateSource, String, String, TimeBasedWeatherValueFactory, String) - - String generateWeatherKey(ZonedDateTime, Integer) - - String createQueryStringForIntervalAndCoordinate(ClosedInterval, int) -} - -interface IdCoordinateSource { - {abstract} Optional getCoordinate(int) - {abstract} Collection getCoordinates(int...) - {abstract} Optional getId(Point) - {abstract} Collection getAllCoordinates() - {abstract} List getNearestCoordinates(Point, int) - {abstract} List getClosestCoordinates(Point, int, ComparableQuantity) -} - -IdCoordinateSource <|.. CsvIdCoordinateSource -IdCoordinateSource <|.. SqlIdCoordinateSource - -class CsvIdCoordinateSource { - - Map idToCoordinate - - Map coordinateToId - - CsvDataSource dataSource - - IdCoordinateFactory factory - - CsvIdCoordinateSource(IdCoordinateFactory, CsvDataSource) -} - -class SqlIdCoordinateSource { - - SqlDataSource dataSource - - SqlIdCoordinateFactory factory - - SqlIdCoordinateSource(SqlIdCoordinateFactory, String, SqlDataSource) -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/CharacteristicDatamodelConcept.puml b/docs/uml/main/input/CharacteristicDatamodelConcept.puml deleted file mode 100644 index 9d3737dfb..000000000 --- a/docs/uml/main/input/CharacteristicDatamodelConcept.puml +++ /dev/null @@ -1,97 +0,0 @@ -@startuml -note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote - -interface Comparable - -package models { - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - - uuid: UUID - } - - package result {} - package timeseries {} - package value {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. result - childNote .. timeseries - childNote .. value - childNote .. connector - childNote .. graphics - childNote .. thermal - childNote .. type - - package input { - package graphics {} - - package connector {} - - package system { - package characteristic { - class CharacteristicPoint
    , O extends Quantity> { - + {static} REQUIRED_FORMAT: String - - x: ComparableQuantity - - y: ComparableQuantity - + serialize(): String - - {static} buildExceptionMessage(String): String - - {static} buildExceptionMessage(String, String): String - } - CharacteristicPoint ..|> Comparable: <>:CharacteristicPoint - - abstract class CharacteristicInput , O extends Quantity> { - # characteristicPrefix: String - # decimalPlaces: int - # points: SortedSet> - + serialize(): String - + {static} buildStartingRegex(String): String - - extractCoordinateList(String): String - - buildCoordinatesFromString(String, Unit, Unit): SortedSet> - } - CharacteristicInput "1" *-- "n" CharacteristicPoint - - class OlmCharacteristicInput { - + {static} CONSTANT_CHARACTERISTIC: OlmCharacteristicInput - - {static} buildConstantCharacteristic(): OlmCharacteristicInput - } - OlmCharacteristicInput --|> CharacteristicInput: <>A::Speed,O::Dimensionless - - class WecCharacteristicInput - WecCharacteristicInput --|> CharacteristicInput: <>A::Power,O::Dimensionless - - class EvCharacteristicInput - EvCharacteristicInput --|> CharacteristicInput: <>A::Speed,O::Dimensionless - - abstract class ReactivePowerCharacteristic { - + {static} parse(String): ReactivePowerCharacteristic - } - ReactivePowerCharacteristic --|> CharacteristicInput: <>A::Dimensionless,O::Dimensionless - - class CosPhiFixed { - + {static} PREFIX: String - + {static} STARTING_REGEX: String - + {static} CONSTANT_CHARACTERISTIC: CosPhiFixed - } - CosPhiFixed --|> ReactivePowerCharacteristic - - class CosPhiP { - + {static} PREFIX: String - + {static} STARTING_REGEX: String - } - CosPhiP --|> ReactivePowerCharacteristic - - class QV { - + {static} PREFIX: String - + {static} STARTING_REGEX: String - } - QV --|> ReactivePowerCharacteristic: <>A::Power - } - - package type {} - } - - package thermal {} - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/ConnectorDatamodelConcept.puml b/docs/uml/main/input/ConnectorDatamodelConcept.puml deleted file mode 100644 index bc7c2135d..000000000 --- a/docs/uml/main/input/ConnectorDatamodelConcept.puml +++ /dev/null @@ -1,196 +0,0 @@ -@startuml -scale 1024 width -scale 768 height - -note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote - -package io.extractor { - interface NestedEntity - - interface HasNodes { - + allNodes(): List - } - HasNodes --|> NestedEntity - - interface HasThermalBus { - + getThermalBus(): ThermalBusInput - } - HasThermalBus --|> NestedEntity - - interface HasThermalStorage { - + getThermalStorage(): ThermalStorageInput - } - HasThermalStorage --|> NestedEntity - - interface HasType { - + getType(): AssetTypeInput - } - HasType --|> NestedEntity - - interface HasLine { - + getLine(): LineInput - } - HasLine --|> NestedEntity -} - -package models { - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - - uuid: UUID - } - - class OperationTime { - cf. other uml diagram for details - } - - interface Operable { - + getOperationTime(): OperationTime - + getOperator(): OperatorInput - + inOperationOn(ZonedDateTime): boolean - } - Operable --|> NestedEntity - - package result {} - package timeseries {} - package value {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. result - childNote .. timeseries - childNote .. value - childNote .. system - childNote .. thermal - - package input { - abstract class InputEntity - InputEntity --|> UniqueEntity - - class OperatorInput { - cf. other uml diagram for details - } - OperatorInput --|> InputEntity - - abstract class AssetInput { - - id: String - - operationTime: OperationTime - - operator: OperatorInput - } - AssetInput --|> InputEntity - AssetInput ..|> Operable - AssetInput *-- OperationTime - AssetInput *-- OperatorInput - - class NodeInput { - cf. other uml diagram for details - } - - abstract class AssetTypeInput { - - id: String - } - AssetTypeInput --|> InputEntity - - package connector { - package type { - class LineTypeInput { - - r: ComparableQuantity [Ohm/km] - - x: ComparableQuantity [Ohm/km] - - g: ComparableQuantity [µS/km] - - b: ComparableQuantity [µS/km] - - iMax: ComparableQuantity [A] - - vRated: ComparableQuantity [kV] - } - LineTypeInput --|> AssetTypeInput - - class Transformer2WTypeInput { - - sRated: ComparableQuantity [MVA] - - vRatedA: ComparableQuantity [kV] - - vRatedB: ComparableQuantity [kV] - - rSc: ComparableQuantity [Ohm] - - xSc: ComparableQuantity [Ohm] - - gM: ComparableQuantity [nS] - - bM: ComparableQuantity [nS] - - dV: ComparableQuantity [%] - - dPhi: ComparableQuantity [°] - - tapSide: boolean - - tapNeutr: int - - tapMin: int - - tapMax: int - } - Transformer2WTypeInput --|> AssetTypeInput - - class Transformer3WTypeInput { - - vRatedA: ComparableQuantity [kV] - - vRatedB: ComparableQuantity [kV] - - vRatedC: ComparableQuantity [kV] - - rScA: ComparableQuantity [Ohm] - - rScB: ComparableQuantity [Ohm] - - rScC: ComparableQuantity [Ohm] - - xScA: ComparableQuantity [Ohm] - - xScB: ComparableQuantity [Ohm] - - xScC: ComparableQuantity [Ohm] - - gM: ComparableQuantity [nS] - - bM: ComparableQuantity [nS] - - sRatedA: ComparableQuantity [MVA] - - sRatedB: ComparableQuantity [MVA] - - sRatedC: ComparableQuantity [MVA] - - dV: ComparableQuantity [%] - - dPhi: ComparableQuantity [°] - - tapNeutr: int - - tapMin: int - - tapMax: int - } - Transformer3WTypeInput --|> AssetTypeInput - } - - abstract class ConnectorInput { - - nodeA: NodeInput - - nodeB: NodeInput - - parallelDevices: int - } - ConnectorInput --|> AssetInput - ConnectorInput ..|> HasNodes - ConnectorInput "1" *-- "2" NodeInput - - class SwitchInput { - - closed: Boolean - } - SwitchInput --|> ConnectorInput - - class LineInput { - - type: LineTypeInput - - length: ComparableQuantity [km] - - olm: OlmCharacteristicInput - - geoPosition: LineString - } - LineInput --|> ConnectorInput - LineInput ..|> HasType - - abstract TransformerInput { - - tapPos: int - - autoTap: Boolean - } - TransformerInput --|> ConnectorInput - - class Transformer2WInput { - - type: Transformer2WTypeInput - } - Transformer2WInput --|> TransformerInput - Transformer2WInput ..|> HasType - - class Transformer3WInput { - - nodeC: NodeInput - - nodeInternal: NodeInput - - type: Transformer3WTypeInput - } - Transformer3WInput --|> TransformerInput - Transformer3WInput ..|> HasType - Transformer3WInput *-- NodeInput - } - - package system {} - - package thermal {} - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/DefaultInputDirectoryHierarchy.puml b/docs/uml/main/input/DefaultInputDirectoryHierarchy.puml deleted file mode 100644 index f9bb14f35..000000000 --- a/docs/uml/main/input/DefaultInputDirectoryHierarchy.puml +++ /dev/null @@ -1,30 +0,0 @@ -@startuml - -package (.tar.gz) { - package input { - package global { - label "//bm_type.csv//\n//chp_type.csv//\n//ev_type.csv//\n//hp_type.csv//\nline_type.csv\n//operator_input.csv//\n//storage_type.csv//\ntransformer_2w_type.csv\n//transformer_3w_type.csv//\n//wec_type.csv//\n//wec_characteristic_input.csv//" - } - package grid { - label "line_input.csv\n//measurement_unit_input.csv//\nnode_input.csv\n//switch_input.csv//\ntransformer_2_w_input.csv\n//transformer_3_w_input.csv//" - } - package "//thermal//" as th { - label "//cylindrical_storage_input.csv//\n//thermal_bus_input.csv//\n//thermal_house_input.csv//" - } - package participants { - label "//bm_input.csv//\n//chp_input.csv//\n//ev_input.csv//\n//evcs_input.csv//\n//fixed_feed_in_input.csv//\n//hp_input.csv//\n//load_input.csv//\n//pv_input.csv//\n//storage_input.csv//\n//wec_input.csv//" - package //time_series// { - label "//its_.csv//\n...\n//its_.csv//\n//rts_.csv//\n...\n//rts_.csv//\n\n//participant_to_time_series.csv//" - } - } - package //graphics// as gr { - label "//line_graphic_input.csv//\n//node_graphic_input.csv//" - } - - grid -[hidden]- global - participants -[hidden]- th - th -[hidden]- gr - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/DefaultResultDirectoryHierarchy.puml b/docs/uml/main/input/DefaultResultDirectoryHierarchy.puml deleted file mode 100644 index ee194e413..000000000 --- a/docs/uml/main/input/DefaultResultDirectoryHierarchy.puml +++ /dev/null @@ -1,17 +0,0 @@ -@startuml - -package (.tar.gz) { - package //results// { - package //grid// { - label "//line_result.csv//\n//node_result.csv//\n//switch_result.csv//\n//transformer_2_w_result.csv//\n//transformer_3_w_result.csv//" - } - package "//thermal//" { - label "//cylindrical_storage_result.csv//\n//thermal_bus_result.csv//\n//thermal_house_result.csv//" - } - package "//participants//" { - label "//bm_result.csv//\n//chp_result.csv//\n//ev_result.csv//\n//evcs_result.csv//\n//fixed_feed_in_result.csv//\n//hp_result.csv//\n//load_result.csv//\n//pv_result.csv//\n//storage_result.csv//\n//wec_result.csv//" - } - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/GraphicDatamodelConcept.puml b/docs/uml/main/input/GraphicDatamodelConcept.puml deleted file mode 100644 index bec83c833..000000000 --- a/docs/uml/main/input/GraphicDatamodelConcept.puml +++ /dev/null @@ -1,102 +0,0 @@ -@startuml -note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote - -package io.extractor { - interface NestedEntity - - interface HasNodes { - + allNodes(): List - } - HasNodes --|> NestedEntity - - interface HasThermalBus { - + getThermalBus(): ThermalBusInput - } - HasThermalBus --|> NestedEntity - - interface HasThermalStorage { - + getThermalStorage(): ThermalStorageInput - } - HasThermalStorage --|> NestedEntity - - interface HasType { - + getType(): AssetTypeInput - } - HasType --|> NestedEntity - - interface HasLine { - + getLine(): LineInput - } - HasLine --|> NestedEntity -} - -package models { - - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - - uuid: UUID - } - - interface Operable { - + getOperationTime(): OperationTime - + getOperator(): OperatorInput - + inOperationOn(ZonedDateTime): boolean - } - Operable --|> NestedEntity - - package result {} - package timeseries {} - package value {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. result - childNote .. timeseries - childNote .. value - childNote .. connector - childNote .. system - childNote .. thermal - - package input { - abstract class InputEntity - InputEntity --|> UniqueEntity - - class NodeInput { - cf. other uml diagram for details - } - - package connector { - class LineInput { - cf. other uml diagram for details - } - } - - package graphics { - abstract class GraphicInput { - - graphicLayer: String - - path: LineString - } - GraphicInput --|> InputEntity - - class NodeGraphicInput { - - node: NodeInput - - point: Point - } - NodeGraphicInput --|> GraphicInput - NodeGraphicInput ..|> HasNodes - NodeGraphicInput *-- NodeInput - - class LineGraphicInput { - - line: LineInput - } - LineGraphicInput --|> GraphicInput - LineGraphicInput ..|> HasLine - LineGraphicInput *-- LineInput - } - - package system {} - - package thermal {} - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/InputDatamodelConcept.puml b/docs/uml/main/input/InputDatamodelConcept.puml deleted file mode 100644 index 91f11c107..000000000 --- a/docs/uml/main/input/InputDatamodelConcept.puml +++ /dev/null @@ -1,172 +0,0 @@ -@startuml -note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote - -package io.extractor { - interface NestedEntity - - interface HasNodes { - + allNodes(): List - } - HasNodes --|> NestedEntity - - interface HasThermalBus { - + getThermalBus(): ThermalBusInput - } - HasThermalBus --|> NestedEntity - - interface HasThermalStorage { - + getThermalStorage(): ThermalStorageInput - } - HasThermalStorage --|> NestedEntity - - interface HasType { - + getType(): AssetTypeInput - } - HasType --|> NestedEntity - - interface HasLine { - + getLine(): LineInput - } - HasLine --|> NestedEntity -} - -package models { - - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - - uuid: UUID - } - - class OperationTime { - - startDate: ZonedDateTime - - endDate: ZonedDateTime - - isLimited: boolean - + {static} notLimited(): OperationTime - + {static} builder(): OperationTimeBuilder - + getOperationLimit(): Optional> - + includes(ZonedDateTime): boolean - } - - interface Operable { - + getOperationTime(): OperationTime - + getOperator(): OperatorInput - + inOperationOn(ZonedDateTime): boolean - } - Operable --|> NestedEntity - - package result {} - package timeseries {} - package value {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. result - childNote .. timeseries - childNote .. value - childNote .. connector - childNote .. graphics - childNote .. thermal - childNote .. system - - package voltagelevels { - class VoltageLevel { - # id: String - # nominalVoltage: ComparableQuantity [kV] - } - - class CommonVoltageLevel { - # synonymousIds: Set - # voltageRange: RightOpenInterval> - + covers(ComparableQuantity): boolean - + covers(String, ComparableQuantity): boolean - } - CommonVoltageLevel --|> VoltageLevel - - class GermanVoltageLevelUtils { - + {static} LV: CommonVoltageLevel - + {static} MV_10KV: CommonVoltageLevel - + {static} MV_20KV: CommonVoltageLevel - + {static} MV_30KV: CommonVoltageLevel - + {static} HV: CommonVoltageLevel - + {static} EHV_220KV: CommonVoltageLevel - + {static} EHV_380KV: CommonVoltageLevel - - {static} germanVoltageLevels: Set - + {static} parse(ComparableQuantity): CommonVoltageLevel - + {static} parse(String, ComparableQuantity): CommonVoltageLevel - } - } - - package input { - abstract class InputEntity - InputEntity --|> UniqueEntity - - class OperatorInput { - + {static} NO_OPERATOR_ASSIGNED: OperatorInput - - name: String - } - OperatorInput --|> InputEntity - - package graphics {} - - abstract class AssetInput { - - id: String - - operationTime: OperationTime - - operator: OperatorInput - } - AssetInput --|> InputEntity - AssetInput ..|> Operable - AssetInput *-- OperationTime - AssetInput *-- OperatorInput - - class EvcsInput { - ??? - } - EvcsInput --|> AssetInput - - class NodeInput { - - vTarget: ComparableQuantity [pU] - - slack: Boolean - - geoPosition: Point - - voltLvl: VoltageLevel - - subnet: int - } - NodeInput --|> AssetInput - NodeInput *-- VoltageLevel - - class MeasurementUnitInput { - - node: NodeInput - - vMag: Boolean [default f] - - vAng: Boolean [default f] - - p: Boolean [default f] - - q: Boolean [default f] - } - MeasurementUnitInput --|> AssetInput - MeasurementUnitInput ..|> HasNodes - - class RandomLoadParameter { - - quarterHour: int - - kWd: Double - - kSa: Double - - kSu: Double - - myWd: Double - - mySa: Double - - mySu: Double - - sigmaWd: Double - - sigmaSa: Double - - sigmaSu: Double - } - RandomLoadParameter --|> InputEntity - - abstract class AssetTypeInput { - - id: String - } - AssetTypeInput --|> InputEntity - - package connector {} - - package system {} - - package thermal {} - } -} - -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/ModelContainerConcept.puml b/docs/uml/main/input/ModelContainerConcept.puml deleted file mode 100644 index 2583a8fc9..000000000 --- a/docs/uml/main/input/ModelContainerConcept.puml +++ /dev/null @@ -1,80 +0,0 @@ -@startuml - -package org.jgrapht.graph { - class AsUnmodifiableGraph -} - -package graph { - class SubGridGate { - - link: TransformerInput - - superiorNode: NodeInput - - superiorNode: NodeInput - } - - class SubGridTopologyGraph { - } - SubGridTopologyGraph --|> AsUnmodifiableGraph: <>V:SubGridContainer,E:SubGridGate - SubGridTopologyGraph "1" *-- "n" SubGridGate -} - -package models.input.container { - interface InputContainer { - + allEntitiesAsList(): List - + validate(): void - } - - class GraphicElements { - - nodeGraphics: Set - - lineGraphics: Set - } - GraphicElements ..|> InputContainer - - class RawGridElements { - - nodes: Set - - lines: Set - - transformer2Ws: Set - - transformer3Ws: Set - - switches: Set - - measurementUnits: Set - } - RawGridElements ..|> InputContainer - - class SystemParticipants { - - bmPlants: Set - - chpPlants: Set - - evcs: Set - - evs: Set - - fixedFeedIns: Set - - heatPumps: Set - - loads: Set - - pvPlants: Set - - storages: Set - - wecPlants: Set - } - SystemParticipants ..|> InputContainer - - abstract class GridContainer { - # gridName: String - # rawGrid: RawGridElements - # systemParticipants: SystemParticipants - # graphics: GraphicElements - } - GridContainer ..|> InputContainer - GridContainer *-- RawGridElements - GridContainer *-- SystemParticipants - GridContainer *-- GraphicElements - - class JointGridContainer { - - subGridTopologyGraph: SubGridTopologyGraph - - checkSubGridTopologyGraph(): SubGridTopologyGraph - } - JointGridContainer --|> GridContainer - JointGridContainer *-- SubGridTopologyGraph - - class SubGridContainer { - - subnet: int - - predominantVoltageLevel: VoltageLevel - } - SubGridContainer --|> GridContainer -} -@enduml \ No newline at end of file diff --git a/docs/uml/main/input/SystemDatamodelConcept.puml b/docs/uml/main/input/SystemDatamodelConcept.puml deleted file mode 100644 index 5e666732f..000000000 --- a/docs/uml/main/input/SystemDatamodelConcept.puml +++ /dev/null @@ -1,262 +0,0 @@ -@startuml -note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote - -package io.extractor { - interface NestedEntity - - interface HasNodes { - + allNodes(): List - } - HasNodes --|> NestedEntity - - interface HasThermalBus { - + getThermalBus(): ThermalBusInput - } - HasThermalBus --|> NestedEntity - - interface HasThermalStorage { - + getThermalStorage(): ThermalStorageInput - } - HasThermalStorage --|> NestedEntity - - interface HasType { - + getType(): AssetTypeInput - } - HasType --|> NestedEntity - - interface HasLine { - + getLine(): LineInput - } - HasLine --|> NestedEntity -} - -package models { - interface StandardLoadProfile { - + getKey: String - + enum DefaultLoadProfiles - + {static} parse(String): StandardLoadProfile - } - - enum BdewLoadProfile { - - key: String - + {static} get(String): BdewLoadProfile - } - BdewLoadProfile ..|> StandardLoadProfile - - abstract class UniqueEntity { - + {static} UUID_FIELD_NAME: String - - uuid: UUID - } - - class OperationTime { - cf. other uml diagram for details - } - - interface Operable { - cf. other uml diagram for details - } - Operable --|> NestedEntity - - package result {} - package timeseries {} - package value {} - note "Has also children in these packages.\ncf. separate uml diagrams" as childNote - UniqueEntity .. childNote - childNote .. result - childNote .. timeseries - childNote .. value - childNote .. connector - childNote .. graphics - childNote .. thermal - - package input { - abstract class InputEntity - InputEntity --|> UniqueEntity - - class OperatorInput { - + {static} NO_OPERATOR_ASSIGNED: OperatorInput - - name: String - } - OperatorInput --|> InputEntity - - package graphics {} - - abstract class AssetInput { - - id: String - - operationTime: OperationTime - - operator: OperatorInput - } - AssetInput --|> InputEntity - AssetInput ..|> Operable - AssetInput *-- OperationTime - AssetInput *-- OperatorInput - - class NodeInput { - cf. other uml diagram for details - } - - abstract class AssetTypeInput { - - id: String - } - AssetTypeInput --|> InputEntity - - package connector {} - - package thermal { - class ThermalBusInput { - cf. other uml diagram for details - } - class ThermalStorageInput { - cf. other uml diagram for details - } - } - - package system { - package characteristic {} - - package type { - abstract class SystemParticipantTypeInput { - - capex: ComparableQuantity [€] - - opex: ComparableQuantity [€/MWh] - - sRated: ComparableQuantity [kVA] - - cosphiRated: Double - } - SystemParticipantTypeInput --|> AssetTypeInput - - class BmTypeInput { - - etaConv: ComparableQuantity [%] - - activePowerGradient: ComparableQuantity [%/h] - } - BmTypeInput --|> SystemParticipantTypeInput - - class ChpTypeInput { - - etaEl: ComparableQuantity [%] - - etaTh: ComparableQuantity [%] - - pThermal: ComparableQuantity [kW] - - pOwn: ComparableQuantity [kW] - } - ChpTypeInput --|> SystemParticipantTypeInput - - class EvTypeInput { - - eStorage: ComparableQuantity [kWh] - - eCons: ComparableQuantity [kWh/km] - } - EvTypeInput --|> SystemParticipantTypeInput - - class HpTypeInput { - - pThermal: ComparableQuantity [kW] - } - HpTypeInput --|> SystemParticipantTypeInput - - class StorageTypeInput { - - eStorage: ComparableQuantity [kWh] - - pMax: ComparableQuantity [kW] - - activePowerGradient: ComparableQuantity [%/h] - - eta: ComparableQuantity [%] - - dod: ComparableQuantity [%] - - lifeTime: ComparableQuantity, O extends Quantity> { + + {static} REQUIRED_FORMAT: String + - x: ComparableQuantity + - y: ComparableQuantity + + serialize(): String + - {static} buildExceptionMessage(String): String + - {static} buildExceptionMessage(String, String): String + } + CharacteristicPoint ..|> Comparable: <>:CharacteristicPoint + + abstract class CharacteristicInput , O extends Quantity> { + # characteristicPrefix: String + # decimalPlaces: int + # points: SortedSet> + + serialize(): String + + {static} buildStartingRegex(String): String + - extractCoordinateList(String): String + - buildCoordinatesFromString(String, Unit, Unit): SortedSet> + } + CharacteristicInput "1" *-- "n" CharacteristicPoint + + class OlmCharacteristicInput { + + {static} CONSTANT_CHARACTERISTIC: OlmCharacteristicInput + - {static} buildConstantCharacteristic(): OlmCharacteristicInput + } + OlmCharacteristicInput --|> CharacteristicInput: <>A::Speed,O::Dimensionless + + class WecCharacteristicInput + WecCharacteristicInput --|> CharacteristicInput: <>A::Power,O::Dimensionless + + class EvCharacteristicInput + EvCharacteristicInput --|> CharacteristicInput: <>A::Speed,O::Dimensionless + + abstract class ReactivePowerCharacteristic { + + {static} parse(String): ReactivePowerCharacteristic + } + ReactivePowerCharacteristic --|> CharacteristicInput: <>A::Dimensionless,O::Dimensionless + + class CosPhiFixed { + + {static} PREFIX: String + + {static} STARTING_REGEX: String + + {static} CONSTANT_CHARACTERISTIC: CosPhiFixed + } + CosPhiFixed --|> ReactivePowerCharacteristic + + class CosPhiP { + + {static} PREFIX: String + + {static} STARTING_REGEX: String + } + CosPhiP --|> ReactivePowerCharacteristic + + class QV { + + {static} PREFIX: String + + {static} STARTING_REGEX: String + } + QV --|> ReactivePowerCharacteristic: <>A::Power + } + + package type {} + } + + package thermal {} + } +} + +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/ConnectorDatamodelConcept.puml b/docs/uml/main/input/ConnectorDatamodelConcept.puml new file mode 100644 index 000000000..bc7c2135d --- /dev/null +++ b/docs/uml/main/input/ConnectorDatamodelConcept.puml @@ -0,0 +1,196 @@ +@startuml +scale 1024 width +scale 768 height + +note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote + +package io.extractor { + interface NestedEntity + + interface HasNodes { + + allNodes(): List + } + HasNodes --|> NestedEntity + + interface HasThermalBus { + + getThermalBus(): ThermalBusInput + } + HasThermalBus --|> NestedEntity + + interface HasThermalStorage { + + getThermalStorage(): ThermalStorageInput + } + HasThermalStorage --|> NestedEntity + + interface HasType { + + getType(): AssetTypeInput + } + HasType --|> NestedEntity + + interface HasLine { + + getLine(): LineInput + } + HasLine --|> NestedEntity +} + +package models { + abstract class UniqueEntity { + + {static} UUID_FIELD_NAME: String + - uuid: UUID + } + + class OperationTime { + cf. other uml diagram for details + } + + interface Operable { + + getOperationTime(): OperationTime + + getOperator(): OperatorInput + + inOperationOn(ZonedDateTime): boolean + } + Operable --|> NestedEntity + + package result {} + package timeseries {} + package value {} + note "Has also children in these packages.\ncf. separate uml diagrams" as childNote + UniqueEntity .. childNote + childNote .. result + childNote .. timeseries + childNote .. value + childNote .. system + childNote .. thermal + + package input { + abstract class InputEntity + InputEntity --|> UniqueEntity + + class OperatorInput { + cf. other uml diagram for details + } + OperatorInput --|> InputEntity + + abstract class AssetInput { + - id: String + - operationTime: OperationTime + - operator: OperatorInput + } + AssetInput --|> InputEntity + AssetInput ..|> Operable + AssetInput *-- OperationTime + AssetInput *-- OperatorInput + + class NodeInput { + cf. other uml diagram for details + } + + abstract class AssetTypeInput { + - id: String + } + AssetTypeInput --|> InputEntity + + package connector { + package type { + class LineTypeInput { + - r: ComparableQuantity [Ohm/km] + - x: ComparableQuantity [Ohm/km] + - g: ComparableQuantity [µS/km] + - b: ComparableQuantity [µS/km] + - iMax: ComparableQuantity [A] + - vRated: ComparableQuantity [kV] + } + LineTypeInput --|> AssetTypeInput + + class Transformer2WTypeInput { + - sRated: ComparableQuantity [MVA] + - vRatedA: ComparableQuantity [kV] + - vRatedB: ComparableQuantity [kV] + - rSc: ComparableQuantity [Ohm] + - xSc: ComparableQuantity [Ohm] + - gM: ComparableQuantity [nS] + - bM: ComparableQuantity [nS] + - dV: ComparableQuantity [%] + - dPhi: ComparableQuantity [°] + - tapSide: boolean + - tapNeutr: int + - tapMin: int + - tapMax: int + } + Transformer2WTypeInput --|> AssetTypeInput + + class Transformer3WTypeInput { + - vRatedA: ComparableQuantity [kV] + - vRatedB: ComparableQuantity [kV] + - vRatedC: ComparableQuantity [kV] + - rScA: ComparableQuantity [Ohm] + - rScB: ComparableQuantity [Ohm] + - rScC: ComparableQuantity [Ohm] + - xScA: ComparableQuantity [Ohm] + - xScB: ComparableQuantity [Ohm] + - xScC: ComparableQuantity [Ohm] + - gM: ComparableQuantity [nS] + - bM: ComparableQuantity [nS] + - sRatedA: ComparableQuantity [MVA] + - sRatedB: ComparableQuantity [MVA] + - sRatedC: ComparableQuantity [MVA] + - dV: ComparableQuantity [%] + - dPhi: ComparableQuantity [°] + - tapNeutr: int + - tapMin: int + - tapMax: int + } + Transformer3WTypeInput --|> AssetTypeInput + } + + abstract class ConnectorInput { + - nodeA: NodeInput + - nodeB: NodeInput + - parallelDevices: int + } + ConnectorInput --|> AssetInput + ConnectorInput ..|> HasNodes + ConnectorInput "1" *-- "2" NodeInput + + class SwitchInput { + - closed: Boolean + } + SwitchInput --|> ConnectorInput + + class LineInput { + - type: LineTypeInput + - length: ComparableQuantity [km] + - olm: OlmCharacteristicInput + - geoPosition: LineString + } + LineInput --|> ConnectorInput + LineInput ..|> HasType + + abstract TransformerInput { + - tapPos: int + - autoTap: Boolean + } + TransformerInput --|> ConnectorInput + + class Transformer2WInput { + - type: Transformer2WTypeInput + } + Transformer2WInput --|> TransformerInput + Transformer2WInput ..|> HasType + + class Transformer3WInput { + - nodeC: NodeInput + - nodeInternal: NodeInput + - type: Transformer3WTypeInput + } + Transformer3WInput --|> TransformerInput + Transformer3WInput ..|> HasType + Transformer3WInput *-- NodeInput + } + + package system {} + + package thermal {} + } +} + +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/DefaultInputDirectoryHierarchy.puml b/docs/uml/main/input/DefaultInputDirectoryHierarchy.puml new file mode 100644 index 000000000..f9bb14f35 --- /dev/null +++ b/docs/uml/main/input/DefaultInputDirectoryHierarchy.puml @@ -0,0 +1,30 @@ +@startuml + +package (.tar.gz) { + package input { + package global { + label "//bm_type.csv//\n//chp_type.csv//\n//ev_type.csv//\n//hp_type.csv//\nline_type.csv\n//operator_input.csv//\n//storage_type.csv//\ntransformer_2w_type.csv\n//transformer_3w_type.csv//\n//wec_type.csv//\n//wec_characteristic_input.csv//" + } + package grid { + label "line_input.csv\n//measurement_unit_input.csv//\nnode_input.csv\n//switch_input.csv//\ntransformer_2_w_input.csv\n//transformer_3_w_input.csv//" + } + package "//thermal//" as th { + label "//cylindrical_storage_input.csv//\n//thermal_bus_input.csv//\n//thermal_house_input.csv//" + } + package participants { + label "//bm_input.csv//\n//chp_input.csv//\n//ev_input.csv//\n//evcs_input.csv//\n//fixed_feed_in_input.csv//\n//hp_input.csv//\n//load_input.csv//\n//pv_input.csv//\n//storage_input.csv//\n//wec_input.csv//" + package //time_series// { + label "//its_.csv//\n...\n//its_.csv//\n//rts_.csv//\n...\n//rts_.csv//\n\n//participant_to_time_series.csv//" + } + } + package //graphics// as gr { + label "//line_graphic_input.csv//\n//node_graphic_input.csv//" + } + + grid -[hidden]- global + participants -[hidden]- th + th -[hidden]- gr + } +} + +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/DefaultResultDirectoryHierarchy.puml b/docs/uml/main/input/DefaultResultDirectoryHierarchy.puml new file mode 100644 index 000000000..ee194e413 --- /dev/null +++ b/docs/uml/main/input/DefaultResultDirectoryHierarchy.puml @@ -0,0 +1,17 @@ +@startuml + +package (.tar.gz) { + package //results// { + package //grid// { + label "//line_result.csv//\n//node_result.csv//\n//switch_result.csv//\n//transformer_2_w_result.csv//\n//transformer_3_w_result.csv//" + } + package "//thermal//" { + label "//cylindrical_storage_result.csv//\n//thermal_bus_result.csv//\n//thermal_house_result.csv//" + } + package "//participants//" { + label "//bm_result.csv//\n//chp_result.csv//\n//ev_result.csv//\n//evcs_result.csv//\n//fixed_feed_in_result.csv//\n//hp_result.csv//\n//load_result.csv//\n//pv_result.csv//\n//storage_result.csv//\n//wec_result.csv//" + } + } +} + +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/GraphicDatamodelConcept.puml b/docs/uml/main/input/GraphicDatamodelConcept.puml new file mode 100644 index 000000000..bec83c833 --- /dev/null +++ b/docs/uml/main/input/GraphicDatamodelConcept.puml @@ -0,0 +1,102 @@ +@startuml +note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote + +package io.extractor { + interface NestedEntity + + interface HasNodes { + + allNodes(): List + } + HasNodes --|> NestedEntity + + interface HasThermalBus { + + getThermalBus(): ThermalBusInput + } + HasThermalBus --|> NestedEntity + + interface HasThermalStorage { + + getThermalStorage(): ThermalStorageInput + } + HasThermalStorage --|> NestedEntity + + interface HasType { + + getType(): AssetTypeInput + } + HasType --|> NestedEntity + + interface HasLine { + + getLine(): LineInput + } + HasLine --|> NestedEntity +} + +package models { + + abstract class UniqueEntity { + + {static} UUID_FIELD_NAME: String + - uuid: UUID + } + + interface Operable { + + getOperationTime(): OperationTime + + getOperator(): OperatorInput + + inOperationOn(ZonedDateTime): boolean + } + Operable --|> NestedEntity + + package result {} + package timeseries {} + package value {} + note "Has also children in these packages.\ncf. separate uml diagrams" as childNote + UniqueEntity .. childNote + childNote .. result + childNote .. timeseries + childNote .. value + childNote .. connector + childNote .. system + childNote .. thermal + + package input { + abstract class InputEntity + InputEntity --|> UniqueEntity + + class NodeInput { + cf. other uml diagram for details + } + + package connector { + class LineInput { + cf. other uml diagram for details + } + } + + package graphics { + abstract class GraphicInput { + - graphicLayer: String + - path: LineString + } + GraphicInput --|> InputEntity + + class NodeGraphicInput { + - node: NodeInput + - point: Point + } + NodeGraphicInput --|> GraphicInput + NodeGraphicInput ..|> HasNodes + NodeGraphicInput *-- NodeInput + + class LineGraphicInput { + - line: LineInput + } + LineGraphicInput --|> GraphicInput + LineGraphicInput ..|> HasLine + LineGraphicInput *-- LineInput + } + + package system {} + + package thermal {} + } +} + +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/InputDatamodelConcept.puml b/docs/uml/main/input/InputDatamodelConcept.puml new file mode 100644 index 000000000..91f11c107 --- /dev/null +++ b/docs/uml/main/input/InputDatamodelConcept.puml @@ -0,0 +1,172 @@ +@startuml +note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote + +package io.extractor { + interface NestedEntity + + interface HasNodes { + + allNodes(): List + } + HasNodes --|> NestedEntity + + interface HasThermalBus { + + getThermalBus(): ThermalBusInput + } + HasThermalBus --|> NestedEntity + + interface HasThermalStorage { + + getThermalStorage(): ThermalStorageInput + } + HasThermalStorage --|> NestedEntity + + interface HasType { + + getType(): AssetTypeInput + } + HasType --|> NestedEntity + + interface HasLine { + + getLine(): LineInput + } + HasLine --|> NestedEntity +} + +package models { + + abstract class UniqueEntity { + + {static} UUID_FIELD_NAME: String + - uuid: UUID + } + + class OperationTime { + - startDate: ZonedDateTime + - endDate: ZonedDateTime + - isLimited: boolean + + {static} notLimited(): OperationTime + + {static} builder(): OperationTimeBuilder + + getOperationLimit(): Optional> + + includes(ZonedDateTime): boolean + } + + interface Operable { + + getOperationTime(): OperationTime + + getOperator(): OperatorInput + + inOperationOn(ZonedDateTime): boolean + } + Operable --|> NestedEntity + + package result {} + package timeseries {} + package value {} + note "Has also children in these packages.\ncf. separate uml diagrams" as childNote + UniqueEntity .. childNote + childNote .. result + childNote .. timeseries + childNote .. value + childNote .. connector + childNote .. graphics + childNote .. thermal + childNote .. system + + package voltagelevels { + class VoltageLevel { + # id: String + # nominalVoltage: ComparableQuantity [kV] + } + + class CommonVoltageLevel { + # synonymousIds: Set + # voltageRange: RightOpenInterval> + + covers(ComparableQuantity): boolean + + covers(String, ComparableQuantity): boolean + } + CommonVoltageLevel --|> VoltageLevel + + class GermanVoltageLevelUtils { + + {static} LV: CommonVoltageLevel + + {static} MV_10KV: CommonVoltageLevel + + {static} MV_20KV: CommonVoltageLevel + + {static} MV_30KV: CommonVoltageLevel + + {static} HV: CommonVoltageLevel + + {static} EHV_220KV: CommonVoltageLevel + + {static} EHV_380KV: CommonVoltageLevel + - {static} germanVoltageLevels: Set + + {static} parse(ComparableQuantity): CommonVoltageLevel + + {static} parse(String, ComparableQuantity): CommonVoltageLevel + } + } + + package input { + abstract class InputEntity + InputEntity --|> UniqueEntity + + class OperatorInput { + + {static} NO_OPERATOR_ASSIGNED: OperatorInput + - name: String + } + OperatorInput --|> InputEntity + + package graphics {} + + abstract class AssetInput { + - id: String + - operationTime: OperationTime + - operator: OperatorInput + } + AssetInput --|> InputEntity + AssetInput ..|> Operable + AssetInput *-- OperationTime + AssetInput *-- OperatorInput + + class EvcsInput { + ??? + } + EvcsInput --|> AssetInput + + class NodeInput { + - vTarget: ComparableQuantity [pU] + - slack: Boolean + - geoPosition: Point + - voltLvl: VoltageLevel + - subnet: int + } + NodeInput --|> AssetInput + NodeInput *-- VoltageLevel + + class MeasurementUnitInput { + - node: NodeInput + - vMag: Boolean [default f] + - vAng: Boolean [default f] + - p: Boolean [default f] + - q: Boolean [default f] + } + MeasurementUnitInput --|> AssetInput + MeasurementUnitInput ..|> HasNodes + + class RandomLoadParameter { + - quarterHour: int + - kWd: Double + - kSa: Double + - kSu: Double + - myWd: Double + - mySa: Double + - mySu: Double + - sigmaWd: Double + - sigmaSa: Double + - sigmaSu: Double + } + RandomLoadParameter --|> InputEntity + + abstract class AssetTypeInput { + - id: String + } + AssetTypeInput --|> InputEntity + + package connector {} + + package system {} + + package thermal {} + } +} + +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/ModelContainerConcept.puml b/docs/uml/main/input/ModelContainerConcept.puml new file mode 100644 index 000000000..2583a8fc9 --- /dev/null +++ b/docs/uml/main/input/ModelContainerConcept.puml @@ -0,0 +1,80 @@ +@startuml + +package org.jgrapht.graph { + class AsUnmodifiableGraph +} + +package graph { + class SubGridGate { + - link: TransformerInput + - superiorNode: NodeInput + - superiorNode: NodeInput + } + + class SubGridTopologyGraph { + } + SubGridTopologyGraph --|> AsUnmodifiableGraph: <>V:SubGridContainer,E:SubGridGate + SubGridTopologyGraph "1" *-- "n" SubGridGate +} + +package models.input.container { + interface InputContainer { + + allEntitiesAsList(): List + + validate(): void + } + + class GraphicElements { + - nodeGraphics: Set + - lineGraphics: Set + } + GraphicElements ..|> InputContainer + + class RawGridElements { + - nodes: Set + - lines: Set + - transformer2Ws: Set + - transformer3Ws: Set + - switches: Set + - measurementUnits: Set + } + RawGridElements ..|> InputContainer + + class SystemParticipants { + - bmPlants: Set + - chpPlants: Set + - evcs: Set + - evs: Set + - fixedFeedIns: Set + - heatPumps: Set + - loads: Set + - pvPlants: Set + - storages: Set + - wecPlants: Set + } + SystemParticipants ..|> InputContainer + + abstract class GridContainer { + # gridName: String + # rawGrid: RawGridElements + # systemParticipants: SystemParticipants + # graphics: GraphicElements + } + GridContainer ..|> InputContainer + GridContainer *-- RawGridElements + GridContainer *-- SystemParticipants + GridContainer *-- GraphicElements + + class JointGridContainer { + - subGridTopologyGraph: SubGridTopologyGraph + - checkSubGridTopologyGraph(): SubGridTopologyGraph + } + JointGridContainer --|> GridContainer + JointGridContainer *-- SubGridTopologyGraph + + class SubGridContainer { + - subnet: int + - predominantVoltageLevel: VoltageLevel + } + SubGridContainer --|> GridContainer +} +@enduml \ No newline at end of file diff --git a/docs/uml/main/input/SystemDatamodelConcept.puml b/docs/uml/main/input/SystemDatamodelConcept.puml new file mode 100644 index 000000000..5e666732f --- /dev/null +++ b/docs/uml/main/input/SystemDatamodelConcept.puml @@ -0,0 +1,262 @@ +@startuml +note "For better readability no getters are shown in the classes. Also the final attributes are not marked especially." as generalNote + +package io.extractor { + interface NestedEntity + + interface HasNodes { + + allNodes(): List + } + HasNodes --|> NestedEntity + + interface HasThermalBus { + + getThermalBus(): ThermalBusInput + } + HasThermalBus --|> NestedEntity + + interface HasThermalStorage { + + getThermalStorage(): ThermalStorageInput + } + HasThermalStorage --|> NestedEntity + + interface HasType { + + getType(): AssetTypeInput + } + HasType --|> NestedEntity + + interface HasLine { + + getLine(): LineInput + } + HasLine --|> NestedEntity +} + +package models { + interface StandardLoadProfile { + + getKey: String + + enum DefaultLoadProfiles + + {static} parse(String): StandardLoadProfile + } + + enum BdewLoadProfile { + - key: String + + {static} get(String): BdewLoadProfile + } + BdewLoadProfile ..|> StandardLoadProfile + + abstract class UniqueEntity { + + {static} UUID_FIELD_NAME: String + - uuid: UUID + } + + class OperationTime { + cf. other uml diagram for details + } + + interface Operable { + cf. other uml diagram for details + } + Operable --|> NestedEntity + + package result {} + package timeseries {} + package value {} + note "Has also children in these packages.\ncf. separate uml diagrams" as childNote + UniqueEntity .. childNote + childNote .. result + childNote .. timeseries + childNote .. value + childNote .. connector + childNote .. graphics + childNote .. thermal + + package input { + abstract class InputEntity + InputEntity --|> UniqueEntity + + class OperatorInput { + + {static} NO_OPERATOR_ASSIGNED: OperatorInput + - name: String + } + OperatorInput --|> InputEntity + + package graphics {} + + abstract class AssetInput { + - id: String + - operationTime: OperationTime + - operator: OperatorInput + } + AssetInput --|> InputEntity + AssetInput ..|> Operable + AssetInput *-- OperationTime + AssetInput *-- OperatorInput + + class NodeInput { + cf. other uml diagram for details + } + + abstract class AssetTypeInput { + - id: String + } + AssetTypeInput --|> InputEntity + + package connector {} + + package thermal { + class ThermalBusInput { + cf. other uml diagram for details + } + class ThermalStorageInput { + cf. other uml diagram for details + } + } + + package system { + package characteristic {} + + package type { + abstract class SystemParticipantTypeInput { + - capex: ComparableQuantity [€] + - opex: ComparableQuantity [€/MWh] + - sRated: ComparableQuantity [kVA] + - cosphiRated: Double + } + SystemParticipantTypeInput --|> AssetTypeInput + + class BmTypeInput { + - etaConv: ComparableQuantity [%] + - activePowerGradient: ComparableQuantity [%/h] + } + BmTypeInput --|> SystemParticipantTypeInput + + class ChpTypeInput { + - etaEl: ComparableQuantity [%] + - etaTh: ComparableQuantity [%] + - pThermal: ComparableQuantity [kW] + - pOwn: ComparableQuantity [kW] + } + ChpTypeInput --|> SystemParticipantTypeInput + + class EvTypeInput { + - eStorage: ComparableQuantity [kWh] + - eCons: ComparableQuantity [kWh/km] + } + EvTypeInput --|> SystemParticipantTypeInput + + class HpTypeInput { + - pThermal: ComparableQuantity [kW] + } + HpTypeInput --|> SystemParticipantTypeInput + + class StorageTypeInput { + - eStorage: ComparableQuantity [kWh] + - pMax: ComparableQuantity [kW] + - activePowerGradient: ComparableQuantity [%/h] + - eta: ComparableQuantity [%] + - dod: ComparableQuantity [%] + - lifeTime: ComparableQuantity

    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 z

    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 z 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] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); + } + }, + din ylabel/.style 2 args={ + yticklabel style={ + name=ylabel\ticknum, + append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastyticknum-1)} + \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); + } + }, + din zlabel/.style 2 args={ + zticklabel style={ + name=zlabel\ticknum, + append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastzticknum-1)} + \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); + } + } +} + +\usepgfplotslibrary{groupplots} +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfsetlayers{background,main,foreground} + +% === SIunitx === +\sisetup{ + load-configurations = abbreviations, % load units with abbreviations + range-phrase = \ldots, + list-final-separator = { \translate{und} }, + list-pair-separator = { \translate{und} }, + output-decimal-marker = {,}, + group-minimum-digits = 3, + group-separator = {.}, + exponent-product = \cdot, + per-mode = symbol-or-fraction +} +\DeclareSIUnit{\Wp}{Wp} +\DeclareSIUnit{\kWp}{kWp} +\DeclareSIUnit{\kWh}{kWh} +\DeclareSIUnit{\GWh}{GWh} +\DeclareSIUnit{\TWh}{TWh} +\DeclareSIUnit{\pu}{p.u.} +\DeclareSIUnit{\VA}{VA} +\DeclareSIUnit{\VAr}{VAr} + +% Command for printing the complex j +\newcommand{\cj}{\text{j}} + +\begin{document} + \begin{tikzpicture} + \begin{axis}[ + width = 300pt, + height = 150pt, + cycle list name = TUDefault, + xmin = -0.1, xmax = 1.1, + xtick = {0, 0.2, ..., 1.2}, + ytick = {0.95, 0.975, 1.0}, + y tick label style={ + /pgf/number format/fixed, + /pgf/number format/fixed zerofill, + /pgf/number format/precision=2}, + din xlabel={Active power $p$}{\si{\pu}}, + din ylabel={Power factor $cos \varphi$}{--} + ] + \addplot+[tuOrange, mark = *, mark options = {fill = tuOrange}] coordinates { + (0,1) + (0.9,1) + (1,0.95) + }; + \end{axis} + \end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/ecdTransformer3w.png b/docs/readthedocs/_static/figures/ecdTransformer3w.png new file mode 100644 index 0000000000000000000000000000000000000000..746736c3db5ce96553bb46ca866aa318b3260835 GIT binary patch literal 30876 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 literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/ecdTransformer3w.tex b/docs/readthedocs/_static/figures/ecdTransformer3w.tex new file mode 100644 index 000000000..a101df0c1 --- /dev/null +++ b/docs/readthedocs/_static/figures/ecdTransformer3w.tex @@ -0,0 +1,193 @@ +% \documentclass{article} +\documentclass[border=0mm, convert={density=300, quality=90, outext=.png}]{standalone} +% ===== Loading all packages ===== +% === input, languages, layout === +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[ngerman]{babel} +\usepackage{textcomp} +\usepackage{url} +\usepackage{printlen} +\usepackage{lmodern} % Latin Modern, bessere Fonts + +% === mathematics, numbers, units === +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{siunitx} +\usepackage{calc} % enables the calculation of distances etc. + +% === figures, plots, drawing, ... === +\usepackage[cmyk]{xcolor} +\usepackage{graphicx} +\usepackage{tikz} +\usepackage{pgfplots} +\usepackage{pgfplotstable} + +% === other stuff === +\usepackage{multirow} % Table entries reaching over more than one line +\usepackage[ + layout = inline, + final]{fixme} % comments +\usepackage{ifthen} + +% === setspace === +\linespread{1.15} + +% === tikz === +\usetikzlibrary{ + fit, + positioning, + shapes, + calc, + pgfplots.groupplots, + plotmarks, + backgrounds, + matrix, + fadings, + external, + decorations.markings, + patterns, + arrows.meta, + intersections} + +% === xcolor === +% Color set "strong" of TU Dortmund university +\definecolor{tuGreen}{cmyk}{0.57, 0, 1, 0} +\definecolor{tuOrange}{cmyk}{0, 0.55, 1, 0} +\definecolor{tuBlue}{cmyk}{1, 0, 0.36, 0} +\definecolor{tuViolette}{cmyk}{0.25, 1, 0, 0} +\definecolor{tuYellow}{cmyk}{0.05, 0.08, 1, 0} +\definecolor{tuBrown}{cmyk}{0.05, 0.69, 1, 0} + +% === pgfplots === +% Definition of cycle lists +\pgfplotscreateplotcyclelist{TUDefault}{% + {plain plot set = {none}{tuGreen}},% + {plain plot set = {none}{tuOrange}},% + {plain plot set = {none}{tuBlue}},% + {plain plot set = {none}{tuViolette}},% + {plain plot set = {none}{tuYellow}},% + {plain plot set = {none}{tuBrown}}% +} + +\pgfplotsset{ + compat = newest, + scale only axis, + width = 0.85\textwidth, + height = 0.25\textheight, + every axis legend/.append style = {nodes={right}}, + xmajorgrids, + ymajorgrids, + legend style = {font = \tiny, at = {(0.5,1.025)}, anchor = south, legend columns = 6}, + % Custom plot style (https://tex.stackexchange.com/questions/193589/pgfplots-how-can-i-define-one-cycle-list-for-all-graphs-or-the-least-amount-p/193596) + plain plot set/.style 2 args = { + #2, + mark = #1, + every mark/.append style = {fill = #2} + }, + % Axis labels according to DIN 461 (based on https://tex.stackexchange.com/questions/391332/get-the-auto-generated-tick-distance-of-a-pgfplot-din-461/391430#391430) + % Argument 1: Axis description + % Argument 2: Axis unit + din xlabel/.style 2 args={ + xticklabel style={ + name=xlabel\ticknum, + append after command=\pgfextra{\xdef\lastxticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastxticknum-1)} + \path (xlabel\lastxticknum.base) -- (xlabel\pgfmathresult.base) node (xAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east] (xAxDescr) at ($(xlabel\lastxticknum.base) + (-5mm,-3mm)$) {#1}; + \draw[->] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); + } + }, + din ylabel/.style 2 args={ + yticklabel style={ + name=ylabel\ticknum, + append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastyticknum-1)} + \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); + } + }, + din zlabel/.style 2 args={ + zticklabel style={ + name=zlabel\ticknum, + append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastzticknum-1)} + \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); + } + } +} + +\usepgfplotslibrary{groupplots} +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfsetlayers{background,main,foreground} + +% === SIunitx === +\sisetup{ + load-configurations = abbreviations, % load units with abbreviations + range-phrase = \ldots, + list-final-separator = { \translate{und} }, + list-pair-separator = { \translate{und} }, + output-decimal-marker = {,}, + group-minimum-digits = 3, + group-separator = {.}, + exponent-product = \cdot, + per-mode = symbol-or-fraction +} +\DeclareSIUnit{\Wp}{Wp} +\DeclareSIUnit{\kWp}{kWp} +\DeclareSIUnit{\kWh}{kWh} +\DeclareSIUnit{\GWh}{GWh} +\DeclareSIUnit{\TWh}{TWh} +\DeclareSIUnit{\pu}{p.u.} +\DeclareSIUnit{\VA}{VA} +\DeclareSIUnit{\VAr}{VAr} + +% Command for printing the complex j +\newcommand{\cj}{\text{j}} + +\begin{document} + \begin{tikzpicture} + % === Anschlüsse === + \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_a_+) at (0,0){}; + \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_a_-) at (0,-15mm){}; + \node[circle, draw = black, fill = black, inner sep = 0, minimum height = 0.75mm] (port_h_+) at (30mm,0){}; + \node[circle, draw = black, fill = black, inner sep = 0, minimum height = 0.75mm] (port_h_-) at (30mm,-15mm){}; + \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_c_+) at (60mm,0){}; + \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_c_-) at (60mm,-15mm){}; + \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_b_+) at (75mm,15mm){}; + \node[circle, draw = black, inner sep = 0, minimum height = 1.5mm] (port_b_-) at (75mm,-15mm){}; + \coordinate (port_b2_+) at ($(port_h_+) + (0,15mm)$); + + % === Bauteile === + % Passive Elemente + \node[rectangle, draw = black, inner sep = 0, minimum height = 3.5mm, minimum width = 10mm, label={90:\texttt{rScA, xScA}}] (yka) at ($(port_a_+)!0.6!(port_h_+)$){}; + \node[rectangle, draw = black, inner sep = 0, minimum width = 3.5mm, minimum height = 10mm, label={[label distance = 1.5mm, anchor = east]180:\texttt{gM, bM}}] (yh) at ($(port_h_+)!0.5!(port_h_-)$){}; + \node[rectangle, draw = black, inner sep = 0, minimum height = 3.5mm, minimum width = 10mm, label={90:\texttt{rScB, xScB}}] (ykb) at ($(port_b2_+)!0.5!(port_b_+)$){}; + \node[rectangle, draw = black, inner sep = 0, minimum height = 3.5mm, minimum width = 10mm, label={90:\texttt{rScC, xScC}}] (ykc) at ($(port_h_+)!0.4!(port_c_+)$){}; + + % Verbindungen + \draw (port_a_+.east) -- (yka.west) (yka.east) -- (port_h_+.west); + \draw (port_h_+.south) -- (yh.north) (yh.south) -- (port_h_-.north); + \draw (port_h_+.east) -- (ykc.west) (ykc.east) -- (port_c_+.west); + \draw (port_h_+.east) -| (port_b2_+) |- (ykb.west) (ykb.east) -- (port_b_+.west); + \draw (port_a_-.east) -- (port_h_-) -- (port_c_-.west) (port_c_-.east) -- (port_b_-.west); + + % Erde + \draw (port_h_-) -- ++(0,-2.5mm) ++(-2mm,0) -- ++(4mm,0) ++(-0.5mm,-1mm) -- ++(-3mm,0) ++(0.5mm,-1mm) -- ++(2mm,0); + + % Spannungs- und Strompfeile + \node[anchor = east, inner sep = 2mm] at (port_a_+.west) {\texttt{nodeA}}; + \node[anchor = west, inner sep = 2mm] at (port_b_+.east) {\texttt{nodeB}}; + \node[anchor = west, inner sep = 2mm] at (port_c_+.east) {\texttt{nodeC}}; + \end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/qv.png b/docs/readthedocs/_static/figures/qv.png new file mode 100644 index 0000000000000000000000000000000000000000..2cac0e0e952953591a23fdb7598ae6c25825087a GIT binary patch literal 80063 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%0DZkFu?y4lUNyOB zxs<5Ab-}M2LB;`#Dt7%YRn9hSAe<2BJ4xhsI9k0T9}L|~i_kVr90lj%Z);`_6B!xh zL-1PoE4mN9=LDeyHDkz1nw*I!?ZwNgA{|vvVQ>%68#-<^;uX@#-)>{GIKgf`2P>@eF9%4= z`aS4_Ri%otT=T_9F?wYq5}bzKR3qqh6II?CE{4!;9_NO=KPASpV-EZtw9$7a@i zCIv*??f^^sm8oy1#-4G={Q*@M11O(0Nd`M`*9dZxoR9<%#g?m15qq%1UwT`k#81vJG0%wYVBhU3yr2PM%h5-6LjB zH}klE^BPSbr7vzajRv6PX!6Vc2fsA%X5s}b48^TlMi*Nv9MW=QY3jmslwTaLD-kEy zCu->q)5d`k+-mw|u4pNt_+5<1X`&82j{~3xY+3c>>_ziOU}p16c*DHj(ID_N^?uOZ zlio0VW@50Cvm6iX@@DC2am3 z;PV;ev^Eaodh0HmVOO|EOP%EN=VmY`Nr3`;U$*5CK3!Ez5T0hP^>*!|(h4aGZizR{w}bkA`7Ok*FHwQ{^z&7@q-^JA{?TW)Z`~_ki=JI1N&ETR{lW z*+WiinI#=5zpY!(69DLKETX$>l$s<3YIm2xVOgtU0 zO9`Zjj~8X$WXyfAV+@mwDbh^RN>NTxPOVO|NjV5{Mvd8K)p5Vi{q&eGDj^wiQ{-Clze`{b7y z%bhbyNK+02g`MjLzH87RG-7IdkO4N-R5keaeD^T7NqI;p|8IQR&$?fPXt0TtbA$U& zVmV4$T1C*BlqQPnf|Uh+v+j%J381oDQpzXTP-M{(#Ql2wx?NtR-0%i?_qmU6J@|&i z4+KCHLr=!9`gYagDYV^^TxEg$wRcU#r(+H;)%S_G2|Sa(Ai6*q5rB`v@53W�m_J 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] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); + } + }, + din ylabel/.style 2 args={ + yticklabel style={ + name=ylabel\ticknum, + append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastyticknum-1)} + \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); + } + }, + din zlabel/.style 2 args={ + zticklabel style={ + name=zlabel\ticknum, + append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastzticknum-1)} + \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); + } + } +} + +\usepgfplotslibrary{groupplots} +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfsetlayers{background,main,foreground} + +% === SIunitx === +\sisetup{ + load-configurations = abbreviations, % load units with abbreviations + range-phrase = \ldots, + list-final-separator = { \translate{und} }, + list-pair-separator = { \translate{und} }, + output-decimal-marker = {,}, + group-minimum-digits = 3, + group-separator = {.}, + exponent-product = \cdot, + per-mode = symbol-or-fraction +} +\DeclareSIUnit{\Wp}{Wp} +\DeclareSIUnit{\kWp}{kWp} +\DeclareSIUnit{\kWh}{kWh} +\DeclareSIUnit{\GWh}{GWh} +\DeclareSIUnit{\TWh}{TWh} +\DeclareSIUnit{\pu}{p.u.} +\DeclareSIUnit{\VA}{VA} +\DeclareSIUnit{\VAr}{VAr} + +% Command for printing the complex j +\newcommand{\cj}{\text{j}} + +\begin{document} + \begin{tikzpicture} + \begin{axis}[ + width = 300pt, + height = 150pt, + cycle list name = TUDefault, + xmin = 0.9, xmax = 1.1, + xtick = {0.9, 0.95, ..., 1.1}, + ytick = {-1, -0.5, ..., 1}, + y tick label style={ + /pgf/number format/fixed, + /pgf/number format/fixed zerofill, + /pgf/number format/precision=1}, + x tick label style={ + /pgf/number format/fixed, + /pgf/number format/fixed zerofill, + /pgf/number format/precision=2}, + din xlabel={Nodal voltage magnitude $v$}{\si{\pu}}, + din ylabel={Reactive power $q$}{\si{\pu}} + ] + \addplot+[tuOrange, mark = *, mark options = {fill = tuOrange}] coordinates { + (0.92, -1) + (0.97, 0) + (1.03, 0) + (1.08, 1) + }; + \end{axis} + \end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/transformerWithSwitchGear.png b/docs/readthedocs/_static/figures/transformerWithSwitchGear.png new file mode 100644 index 0000000000000000000000000000000000000000..310ccf99f4d3b223570b7ac18c9f976c8b58d5c8 GIT binary patch literal 19186 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 Xb93-%@auoac0o=?`FWAF>AU{}+M8cI literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/transformerWithSwitchGear.tex b/docs/readthedocs/_static/figures/transformerWithSwitchGear.tex new file mode 100644 index 000000000..8ca4ed98a --- /dev/null +++ b/docs/readthedocs/_static/figures/transformerWithSwitchGear.tex @@ -0,0 +1,184 @@ +% \documentclass{article} +\documentclass[border=0mm, convert={density=300, quality=90, outext=.png}]{standalone} +% ===== Loading all packages ===== +% === input, languages, layout === +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[ngerman]{babel} +\usepackage{textcomp} +\usepackage{url} +\usepackage{printlen} +\usepackage{lmodern} % Latin Modern, bessere Fonts + +% === mathematics, numbers, units === +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{siunitx} +\usepackage{calc} % enables the calculation of distances etc. + +% === figures, plots, drawing, ... === +\usepackage[cmyk]{xcolor} +\usepackage{graphicx} +\usepackage{tikz} +\usepackage{pgfplots} +\usepackage{pgfplotstable} + +% === other stuff === +\usepackage{multirow} % Table entries reaching over more than one line +\usepackage[ + layout = inline, + final]{fixme} % comments +\usepackage{ifthen} + +% === setspace === +\linespread{1.15} + +% === tikz === +\usetikzlibrary{ + fit, + positioning, + shapes, + calc, + pgfplots.groupplots, + plotmarks, + backgrounds, + matrix, + fadings, + external, + decorations.markings, + patterns, + arrows.meta, + intersections} + +% === xcolor === +% Color set "strong" of TU Dortmund university +\definecolor{tuGreen}{cmyk}{0.57, 0, 1, 0} +\definecolor{tuOrange}{cmyk}{0, 0.55, 1, 0} +\definecolor{tuBlue}{cmyk}{1, 0, 0.36, 0} +\definecolor{tuViolette}{cmyk}{0.25, 1, 0, 0} +\definecolor{tuYellow}{cmyk}{0.05, 0.08, 1, 0} +\definecolor{tuBrown}{cmyk}{0.05, 0.69, 1, 0} + +% === pgfplots === +% Definition of cycle lists +\pgfplotscreateplotcyclelist{TUDefault}{% + {plain plot set = {none}{tuGreen}},% + {plain plot set = {none}{tuOrange}},% + {plain plot set = {none}{tuBlue}},% + {plain plot set = {none}{tuViolette}},% + {plain plot set = {none}{tuYellow}},% + {plain plot set = {none}{tuBrown}}% +} + +\pgfplotsset{ + compat = newest, + scale only axis, + width = 0.85\textwidth, + height = 0.25\textheight, + every axis legend/.append style = {nodes={right}}, + xmajorgrids, + ymajorgrids, + legend style = {font = \tiny, at = {(0.5,1.025)}, anchor = south, legend columns = 6}, + % Custom plot style (https://tex.stackexchange.com/questions/193589/pgfplots-how-can-i-define-one-cycle-list-for-all-graphs-or-the-least-amount-p/193596) + plain plot set/.style 2 args = { + #2, + mark = #1, + every mark/.append style = {fill = #2} + }, + % Axis labels according to DIN 461 (based on https://tex.stackexchange.com/questions/391332/get-the-auto-generated-tick-distance-of-a-pgfplot-din-461/391430#391430) + % Argument 1: Axis description + % Argument 2: Axis unit + din xlabel/.style 2 args={ + xticklabel style={ + name=xlabel\ticknum, + append after command=\pgfextra{\xdef\lastxticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastxticknum-1)} + \path (xlabel\lastxticknum.base) -- (xlabel\pgfmathresult.base) node (xAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east] (xAxDescr) at ($(xlabel\lastxticknum.base) + (-5mm,-3mm)$) {#1}; + \draw[->] (xAxDescr.east) -- ($(xlabel\lastxticknum.base) + (0,-3mm)$); + } + }, + din ylabel/.style 2 args={ + yticklabel style={ + name=ylabel\ticknum, + append after command=\pgfextra{\xdef\lastyticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastyticknum-1)} + \path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node (yAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (yAxDescr) at ($(ylabel\lastyticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (yAxDescr.east) -- ($(ylabel\lastyticknum.west) + (-3mm,0)$); + } + }, + din zlabel/.style 2 args={ + zticklabel style={ + name=zlabel\ticknum, + append after command=\pgfextra{\xdef\lastzticknum{\ticknum}} + }, + after end axis/.append code={ + \pgfmathparse{int(\lastzticknum-1)} + \path (zlabel\lastzticknum.base) -- (zlabel\pgfmathresult.base) node (zAxUnit) [midway, anchor=base] {#2}; + \node[anchor = east, rotate = 90] (zAxDescr) at ($(zlabel\lastzticknum.west) + (-3mm,-5mm)$) {#1}; + \draw[->] (zAxDescr.east) -- ($(zlabel\lastzticknum.west) + (-3mm,0)$); + } + } +} + +\usepgfplotslibrary{groupplots} +\pgfdeclarelayer{background} +\pgfdeclarelayer{foreground} +\pgfsetlayers{background,main,foreground} + +% === SIunitx === +\sisetup{ + load-configurations = abbreviations, % load units with abbreviations + range-phrase = \ldots, + list-final-separator = { \translate{und} }, + list-pair-separator = { \translate{und} }, + output-decimal-marker = {,}, + group-minimum-digits = 3, + group-separator = {.}, + exponent-product = \cdot, + per-mode = symbol-or-fraction +} +\DeclareSIUnit{\Wp}{Wp} +\DeclareSIUnit{\kWp}{kWp} +\DeclareSIUnit{\kWh}{kWh} +\DeclareSIUnit{\GWh}{GWh} +\DeclareSIUnit{\TWh}{TWh} +\DeclareSIUnit{\pu}{p.u.} +\DeclareSIUnit{\VA}{VA} +\DeclareSIUnit{\VAr}{VAr} + +% Command for printing the complex j +\newcommand{\cj}{\text{j}} + +\begin{document} + \begin{tikzpicture} + % === Anschlüsse === + \node[circle, draw = tuGreen, fill = tuGreen, inner sep = 0, minimum height = 1.5mm] (port_a) at (0,0){}; + \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_b) at (15mm,0){}; + \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_c) at (30mm,0){}; + \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_d) at (45mm,0){}; + \node[circle, draw = tuOrange, fill = tuOrange, inner sep = 0, minimum height = 1.5mm] (port_e) at (62.5mm,0){}; + + \draw (port_a.west) -- ++(-3mm, -1mm) -- ++(0mm, -2mm) edge[densely dotted] ++(0mm, -1.8mm); + \draw (port_a.west) -- ++(-3mm, 1mm) -- ++(0mm, 2mm) edge[densely dotted] ++(0mm, 1.8mm); + \draw (port_a.east) -- ++(4.5mm,0) -- ++(4.5mm, 1.5mm) ++(0,-1.5mm) -- (port_b.west); + \draw (port_b.east) -- ++(4.5mm,0) -- ++(4.5mm, 1.5mm) ++(0,-1.5mm) -- (port_c.west); + \draw (port_c.east) -- ++(4.5mm,0) -- ++(4.5mm, 1.5mm) ++(0,-1.5mm) -- (port_d.west); + + \node[circle, draw = black, inner sep = 0mm, minimum height = 5mm, anchor = west] (winding_a) at (50mm,0){}; + \node[circle, draw = black, inner sep = 0mm, minimum height = 5mm, anchor = west] (winding_b) at (52.5mm,0){}; + + \draw (port_d.east) -- (winding_a.west) (winding_b.east) -- (port_e.west); + + \node[tuGreen, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_a.south) {A \\ \SI{110}{\kV} \\ 1}; + \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_b.south) {B \\ \SI{110}{\kV} \\ 2}; + \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_c.south) {C \\ \SI{110}{\kV} \\ 2}; + \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_d.south) {D \\ \SI{110}{\kV} \\ 2}; + \node[tuOrange, anchor = north, inner sep = 2mm, text width = 10mm, align = center] at (port_e.south) {E \\ \SI{10}{\kV} \\ 2}; + \end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/docs/readthedocs/_static/figures/uml/CharacteristicDatamodelConcept.png b/docs/readthedocs/_static/figures/uml/CharacteristicDatamodelConcept.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb8fd092ac0a2fa66d6475b2e7130918f15224a GIT binary patch literal 206145 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 z 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
  • _5YIbqsJi;1OCM^(0Dq9PLWndAv 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

    SAnz9P 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%0AU*u&AIA%YkfxF3RS1?F!(fBfuO_2Icg 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%0A{ArDDJG+}o@#nPr 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%0Amv@e7Q`GNd>U5QPO2pO55rnYp%IR!a%- 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 Ot*v$GT;`b@5B~@07Sg@| literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/DefaultInputDirectoryHierarchy.png b/docs/readthedocs/_static/figures/uml/DefaultInputDirectoryHierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..19f324809555f899251e46996853e305964b15ac GIT binary patch literal 56218 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 `v4Cf#)L6Y3ep| z(FDF8P<|n^n~nw~LYtp{e%Io*v#B;$fnK#`o7M77Ksni#5OGbKZAZ)zCJC-) z`r?y3BYUj@SRRhqZ{bXzsk5ivs;-mH{FY_w;_J}*^jB?YP&RMf*sylO&dN8!yV^uvDzj~S+Pyd=hoWmvXNi;^pMW%#1{J(A3m7w%D-}7_$??f3YjOrvu@oQP|tCQq((Gj zUm~oF(n3s8?SSmo`T!*6pD3!89?=waf2J0dy;e_K!^4Qp#^l`QbyMd3GFD3-<|K!;x%2gu>f(+S=j!{XP_G?bSVj| z_bq&oU?|^FD5{D;o)4*I+v3HIhneW>kt;xEvjPB$4(}n=s1ww9_gg+5#!l~_JzJ|; z4@%*ypC}pLzyJ0ZQ~9U1zB{`H5~rK~?|mEk?i?Hv?IZ6cv2%@!oUA~ekiB*+Z){U; z^=#vf*Cp4T){BM+2Vm1RjodkvPnQ+@#AlS(G{VTWb@03uo3ylhOM-;^mMAAU0+Qcv zE^?3Lh;p)i_t&Kv6-lY>msB*q1h1=EGxxZ-y8YmZ{Nn<5$Uk#xXmv67(6@@JhjhkO z+yCNubgt2{B&JnYKYDwVQ^uO$w>ABO$O(737{;DPCWdyJ-aFFR`}^D8{)iPZ7T!nG zx;?y7BVNQ_C|1}|NX04mAD7yeQkYrzzCwL8PI`Tq>4`#}e&R(7ZXSqD9j8TqE@mkT zO*UWlu?fR3MimDGBL8)*V3)d0wed>8!c37l-y-K4F2p36U_>T;I)$mh&Ny3i-Q3h%CU zT^S-VW-Pb=oNnPL0VIXU9v8hy=64FFOytLY6gyF%f^?Fakh~noc%35tA$vvNi+)i+ zjME<0GlPvg9<@AtDADyDsmgDdb>tq&8~*y$pMn)WE7*_1EYWT|_Aj{6>-oNP^xfb@ zo#94OEfdwP=N3`QLNpqQy6RP=> zBYDd6s;cCYlxnRo9GSVrKGsvedC9C+zxR@9ZxyQ!N~gBW2XMbZsm~IX)E)HvgE(Ny z?^p3+_~at1pR*I6bLlH6QwJQrhVSzQsx#VM(iHAA_W8O;fkp24qx|ttvZort0j*l5 zG4L6&t-D>V=ce=Mzdz^srr#0Y+}+|Q!?y5en~t-B@uk3&J<##1)L}>d@~eb$Wy{&L z!zQMtVJ3s`-X(ZA7#em>O*yzQ=|?S?E1Q*v zHSxwxKFXi@bm8Jf!AoSo2K_dPUPfor(@UppCsU58}IAV}i`RQ%SlrCX> z^w{nXqY=6F2D&Zx`F|3(-KOQhJUr&SY!b}CkioGQ#w^Ce!J&{~@#v@B2l^LtCWdad zs#noYv^aO}7+^hi#p?;OSGpS;hwvmw_3$L#|MN-ku91tBuj8(GNl)c!n?>9T!rAGk z>m#JNAUzP0(Ytr=LU=YeH}`u$(8J|QOxgygWq^<{izSy}h*UqTQa zZ!f;{J}1ez;z<}|%B1sZQHTAnK%leB6&`^Cuau6D8Xg0!T1up{Ak{~&TcP^KTLXeU zIgq#;7jgrN6_i}dO7!`Scu+NEgkAad1*N@&%KLTJ5+!>L9n1(n{&6n6VXJZ&1}K)D zci&=lzcnC=J@x)Xh8h)B)wH$0c-d>n^f&8M=|{ro8dwE-{BR5TIs4;ekqmfGy$3tP zC!GwTOd$|q!g}DJOg@wAu#>h2P^WFEmbId3*D=v34XRCEWlcig4v);jk`fygjaKyPo~TGCr>}W4N=i# zew�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 z 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 PIn?)S?@QQgdinnVYMs>? literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/DefaultInputFolderStructure.png b/docs/readthedocs/_static/figures/uml/DefaultInputFolderStructure.png new file mode 100644 index 0000000000000000000000000000000000000000..58edf339518290e4c9f4fe97e18d285a292828e2 GIT binary patch literal 54794 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 literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/DefaultResultDirectoryHierarchy.png b/docs/readthedocs/_static/figures/uml/DefaultResultDirectoryHierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..4626f0115b9a4b536fcec639bd94dc6f84b7b284 GIT binary patch literal 22796 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 literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/EntitySourceClassDiagram.png b/docs/readthedocs/_static/figures/uml/EntitySourceClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..19a94ff8ecbd25026e4805f1d9075ee3dab09391 GIT binary patch literal 263496 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

    LDrQYZ*x~W9dvz=idpOutUR?pa?Vb?}D z6QP2(5Qb0dDOd~Q1k=Apc-vt>U3lSvvQKI<6|9PSZ6S|+;Y|pdW|O*l%gAdD_IHJZ z1@`*&KwN*KK%WM_9rjM4 zGNvm8OYVen*d1ON;-YPZmtHKjuGZQtaCBZsNx!wXfS$W$u~v!60-m|(8awS@5`q>y z@(PMtxDgh)&Zn^YKwG$)!1w;rB{_J!fXGKG&S}|#D?KF157to8Yta1Zm&^q za_Sg2N@Mu=tzI2SA-pVruP(dFGa>Ji?p?)CgC(Sgd&>bgtraXH{l)p1Qp0hvwmLTjw6`Y^GX8>I13Pq)kFQ4lVUu%v_xXZ{ z7zd=5wag0#u_CKX@#(Z0@!f%@G^EJNkvA|HhxS0RufLYLnc0oV$lK)bo>)h=I7!_L z&qO!4JZ2m(Z-pU7Vu33)PrdnxTI(Zlbf~9NRtSN1NJ~m`;Uau1@p#!zRCzH6L?=hJ zGJf*&Ab*urSX-wJof|6QY`Ee*v22E)CdR4=mTG?EAco<2qV8JecXEwVpZV5}qr1TI zacTj`>uhcu0h;S{f!dP*q;>8>m50Z2qAOO%xUW!C@?CM}(j2`UVv%FG0xE&vfB-Wj zt)cZq1kCHMG0*t`RMz>@nWavqd>FZ4A{&nuZwh~WwIK)1X(JFKC2x!TY$d7=dCmY| z)7&|LuS?m7xU=Cs=&0GyAj&0ByoWnQSrefRxCD@~1izPx&(1zkc%J>9uobtFJgP46 z?wxvO=~i3z@4rdD&zQLU8%CVfAZ4~qkDT%bB%Bg~k&a#noN0XnqnOiZwyuSPvUm0TOVfe%V8IMgdM0*}P+p zy3^#!`C6o%?w&}pM|~kSB*{3bRG{7=b^PA~_jab_{5#uwF`umNpE`nCU0JB~(4%h- z5cE2G6X^J9TWjq49lJt#))$J2<5BxUc;gr_C>TN^#?=7(ryBgh1L53^z~Gj7r| zE%q&?sdf@hPA%-7y`jhR#W8nO)5QniDmqW2@V zENrhQe17iX%``l547O8N>b{26TZPv2AFe-Xc-Ioz%3+)K@@wGt@k$T#s%`Ezuqh5Q zVu?NXf2pCK*z`l&GflWNKaLpSIv{=_6>87n{xP*J>w1IaVWO^pb|J}HLko?i(;CiQ<%S#%dOfdLf zl}}hW>c)*+&xun*1CK2Slx{S=mOGi5y)!1_*FgzNNKt>tnbs3xzmoKHDAv{PbgWQQ zXni1W{MGrHf`VsOq&}majV*TOe<=afp`)!WZ(Mp7TuJ-8cY>+0WeIf**we~~iik$k zIXL(H z84On_-!=Os emjCT*O!e1rh0z?(UYhKtj4plx}3v{f-6h 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 literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/InputDataDeployment.png b/docs/readthedocs/_static/figures/uml/InputDataDeployment.png new file mode 100644 index 0000000000000000000000000000000000000000..a03505402ef320911d1c683b10a31e4ede3c8f46 GIT binary patch literal 210868 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 r^l$V5VyqozoiRS~wWhT{I;F6)F8nM#V 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

    #H^ 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

  • Qhz+T*{gSzEgrnAlL_*ChgtiaCbFbSK;f8O-9d>UnCCD9xm`z zmmN1W%%ikCT&dihRBy|AUG!c>8HxGqNGmDTetszF1&J8rhw&5LCL{v(J^zFGEfJuC za%kd~TM_IqtBqRdK=$X3T^2s{Zyqtw07ui~tXm%XC{%NLTTBU3htYc zUp-c_li>!?JE)~l7pl1j>r_DKpwT3Onxr*PUxzUu!y@+wx9aQ_Lax%)_9t&L(pTqg z`LmW|)Pfi|X z=AhO$Ewfm;B)1)3Mj+qSxq(uOUBVP;fpPh9@E+>swW>c~Q#;9}++tkv@Cz+<{l03# zv_#Vc7z586e{--eQeW$io~tLyJujVUoSI&lLu|~;Yi{OWYTJGTa*$D;k0~@d4>DQ- z9~A@dO@QE%%-lC_Ujw;32h1-M!|LFZ45RlWkiirO|FiqwczEOtW`M>|b46TeoYFj9 z-@mlGx;fzO;FQC^vUo<&Gcotm1||^8XQFU`&cxDAY%%@z`dGuVZcVZ8!0jT%T$Cao_2=br){seU?;g|-SUc$AxJ3E;vl=H8^c-cO0*! zH_130wIg#Opswodl#GpONJyS2DP?7QOqoV*Vbm&`zkSPF(yQN}gkbp^R@J2Fxh7j3 z)HQDNqYha(mKmF$Lk7~OK>+>jSM*~yQ7zc<-efU3c$-p&VNG?c!yS-glaGZ%j z^ZF=|YKMBe5bn4%R&e08S2ax`=2-Ia=&G>LDmU9h&FKDiBavHx@2>fAg-Q|=7b-Ic zQBVfKJIZc@d`<#4=JB2$+xdYy9#!jS6KI$rdM__GgCIZI5fe+lHX5Edh+PAX}7Oic9M z_w$(fOn59U`SlFuiY<<{@Q&S$hB7+BLJg7LFJ6qAi%D(DJMYjb-S!LTDB*2kgn{avi z8~-nyqgw;$$J+>Wf;8_Fx9>*`&e=5FRI-LQ%KYXGnZt3YmVOwmdrJ63lT-#y`?yuz z>HaQMD7ZH4FFR_^sf2`RjBbctTT?3vnmBd`-HyZ+jqeu;@0|QMiE(;4a z2Y3X=&7Zrzf}?0Pd-;J=Qwk3CH_u;2(gj=Q-%8U3f$D;??}7?^Ij!nh27NtX1gbQ- z<}WWpz3wL6L>H&khb!!thKG4A@bDOvF!Q2}P3X$$^oK_d%#5Aqn~8HJem+Oi_`H_p zwm%MEUfx`kKFFV(9lCXE(8s@}KR;b)TqZTw8#X^L!Jum1Slf#>MtP3S7rM09!ijMi z%Hy~*lpjPSfaf6an6&RpjL~lZX_{W+t|wmJDUDETjxQz|ukQ(?=l^&98EG#tcRzO_ zq^v$>ZC``T>|$(ZZj(Gosby*WJ)Cfo}a_7hEOb><*gzk}Ubvjm&L_ohF) zYOK6&TYcP-+f&7*Q!{7k+fGk!Qi8>UTYawnLkb`UL0>7>jp@j7;cwTg#F}9^pEz+e zU(gTJjO&(>*%;?Qm>q>BHHrj7>>3H3FV`BoeP%`1f z{Zpl6zUik-eLhkRP_f_(%wmrnn~Q*he_6`!zOOL-cDv-h z`dTBh|ME2uYMPJxX;SKXEnZ!K&Wbdg90}OPw*RGupnSX^>v5|;n(F?j`U@U?upBzw zTIOM?0bLsFh3)%=-D&8p4Mt%tGJp2d-p(r`b8urgTd2&Z4PeQ@-RIvl+f3-(X3N}e z1@fP6S>09@!QT%n3RG-~?|nbq9=n+NzPC3+;Tle%eHpz1bjNjY^H-N%kYM4zw=` zFSg#2KWcNp1+900?!zEL61o>>2#`hzXC{t za@aT1KTlQhv00PY0qC?3mK_Su@Vb!SWyzmV`DJ|=$OiZ8HY^MHlmheqPiI#e)YKJ) zZ(^o^T9oRzkwQvzsGtyQR4PKKQsWAPN)>_uQ3ix!Kr2g=NED~Er4Vb2Fybu0%>}ZFcuvDwD0eG_sqTLp7ZW^&-cA|?|r`Xey!`n zwnC=YmQZQvil2VVRmINrZMh&=XOX|q-es-Sa4nu`iZsnMntYekBKw8E49J&Oe#e3! z!8qemUbkb&_|hYW#Z}t4s-{U9(=E=x{PCA9SCs@|8Ys=uC*XR#%hOec33{ zhY*ek%r^q&(^5UOGoGj3s?n^em=*nYIQ_dw&tV@+Z$m=q@_es7LQzlbq2e}8n(l>n zW9Q&GhU&~ZNN8VMLemdM5Zp8(^Zh&L7xpXEvn3;M`|6ArLz&at*h^DuyWZ;WL%_t= zmiw2=a#sd0#xTBDVOD4XW1%>K`eeYZi~HH?3(GUBa2GdCN;cVcAal=Vj7IHLoyecUXq2&yXbsen9hJVYvFwKP>eD&9#f-A0N)2OZOO98OuH*hO93x`Q4GY zi)2Sw{WXqJj9Y!Q%FHpb)8i6plX)Gh-P1i&zbpBXo|R0`e;t@YQgHKY=VWlXW?+Ps zjDb^$Ug<Aou1#Do)q7?DvM)^mug$X_Isqn^w?4F z$=&-Uu7IQOXqbP~lDwtowwuRvv>z1yBgQgKh51gY?p(H8CAFO8e*{j*5Zc*3I}k@0&`T4X zF!O(zXy4rOO>@66&Z5g@Tl)3vK<$_2H>RtDp)EoGj-|#suR3va!54jzbq>%E+T_W= zUnnap1D##G@)`WiT&4MF*l*WNw5SFf>|tp^)NV+RRmInO;e^7Bi4Yu;SLlPZ$d&KLQ zQy;!FDJF*J6Hg(hTxzNcI4Yh3QI5{UAXkO$^0= ztK-qGT)7e@ltG*Z5keq;tk;QFz~l}H;UJ+%uMRXDo;Il)Rr&tvdh>9X#`Xvb5;P25 z?Sha;&@(i)94Z~~`GXuJ9B}cT>Ou)Q>oM^(`@&7v#Auy%-kD3pqRB<&{}Zqm}|MwbWCr(zwzskVA0x` GWB&kUT{gP_ literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/DataSinkClassDiagram.png b/docs/readthedocs/_static/figures/uml/DataSinkClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c18ff4343e17924ee5bed6abe01f431fedd59333 GIT binary patch literal 39304 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 z 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%0AaOvx>k_+>4+W_a9R%Oo zE!ZMM!+kr*!q4PX78{ai3JVQ2UbwKYg7YEG;AgqHx3_)_5L>GA2>F3XMUfO@A3nl* z7#J9A-#(>P4u5J-EV2dH&+ZA)A7(&RUUIKSaYcYjWUMS-oH56BIo2lLd?a8%N-{Dq zxJp<@^(O=mL4)9tK!=`hWiU?}MHGzZe#68R{AhW`sll=p`F-x(xl}g2#r?!@UL!BR z17*)FU0qPqz7l@vr$O8X`c(GwenhQ;Ba9sxp?W4 z62do%JI%BBDxJO%SszPE&Ld=~sc|QO;`xa?Yu}Kn5v-Pi&Qv52r%s(>$h*J;$$D%9 zwDzRQlc98B3PmHlf??gHE;7KR$3rN!-DjA1?A9$eI$()C1oaR=bm@XR>q=Ny#oM>n z08MY-TH~aM{?my2L+AMgojW(0tiXp4>%2UrOL2&!4}Jy5x!FAD$B&NrmBX@j(0J0{;Y*LA^k*3IqDdg>FJsvmC$fv^BB#wp<`nRJ_1g^p$^fIj-CVh0}Txg@^|oM5LK_^HqF4W zNS-ce88DdFVq(UP9!>e;=A}#hCjKUUGK0w1*Vo_r;YD8s&$kciJO-;f+7GIeHU>)gO57K~K zA!>doGVcJ3onrUfVzpghBdwJq*F(u5v6QivHg|hzyN~F3m&6Ok{ris}NHBH921vR? zh7D`ex-|hbHPh4%196hOiv$T-Wz>nPl45_5zLixAod0&BBl*so6%01_p` zK6AhYfi_wy&VVt>OitGEf4pBV^9ZIC+a~mN!T{Cv@A(=9#G{pC5TwS%O%%T5U;e;z zuXkS6;X!Tqw-Atr4MuJCQ(XM+n`t~p^Yq=jcWIktV{5C=&=f7Lr3d6B``}BL(u#_v z4H+`Ko#$@Rwvfi!$RPyEy%@`@bH%{)bVw$I5TO80yh7NR4hPv|>T9f(?S_h^y=2^b-KHRysT$akeR7$fxGFT* z6*6COzCGU(K8apE*kJOGf+qx3S<77TK%`Wpu*u%G`?ULioi`rjyp=1C+9`}%j3o7! z5#g7;D=+sT#RuHluweu7Yv&bYo|wmwf_~%G%Qrpg1c8nNGNl8%EA7HmlaW6LRY(&A z0kKu38G?kZX@lWro-yKJS;du zMY_v@eDSSar%atXc;3lA!Z)ei=NnOQ5jlJ;D|4!^vEcoKr;GdSL9Kcc9>`j`E|Z9o z_(yO&o-;-JMo}zmaTCGTelc#P%P^vPHlGVmqKX^_uVK)mefz^;GB3m8ooyfbA=X1}5hxki5^Kwi z5Tb|s|DhVbx4_+?@BrAU2KIu6#RJ{xdX~R)Fa&8BR1wF9lBBm@Yxr^npR;GR>0*hl z1_95n12!a|*M%1(>gubIr28YqlB%1eq?X?Tmw#_)*f)^B7VAI|_j%(tA8MLt?SPSx zmzTFa{zu>x+5URqiB2e;PaRg7k)A%B%P9MBIZ8B(?%uV=B*M6(H(^_cjvQ%uZRI|= zAp&JB)e`GWZ66&kpcoD!W)KsJ>FntRI)g+0|b1g|^)-RJ@)6H<@WtDTs3FR0uUsxoarn@-)j(RD57IyYuvcnHczi_=KPMTDNzhs*gZBed}jDj(< z{^TM)MA8}CiRy!1&u;Gn+Ht*I(FH-av100fh-=&O3@s4pgMEfWW`jjwHDz$*7L{+J zqb8>9;NinvVbi4{vvD*yNBw#85L|8%3T!1oczA5%`Ae?J0kMqO84lPQkW%T2D>$=o00T_dTrhfed}k=y9e@$82f}jt{&3 z>YaS6_Q0yW!v&1&k|llmdi_*44kMBijNq=UO))S|n`J0@&DO2;Bso}!YyvL8kc>Gh znrmvBPs__yYu5Ne2(RWv4Mav?$oTi=*Je_ z1|d~d@*fOZ(s?;&Pdten5sP4V_4RYIvW5{v3NxH|j$GfISw`6ZcfE}GAByh?AE1EH zBW$KryOo9XNojpi;>)b8Yt2?80pB`(dzDS?Q9j0UbzsT$ERBAfKBhO%4m)`N%wqdp2)oob5Rd%UEIjhs1CMcoW0R zLCcpI89`~2=@QOavZOnaE6gkDzc}}%1YsQli^x5I!!JYqQJQt&Ks#P1u`Rp?L0p$` zdoQsh(VIWc_xtD2&un|E#-y6wwuu4f+`;E@Okc7Lo8Dcro8tcS#nYz?pi(F}jl6UT zAZGJLT=8Hrw~GM5%TV(qRXGg%29@HUN-+%=!o$0F>9T~tPi)P_Se%(tMV9Dl!0677 zV_`I|(VhtiBOJ4{85rW?Vbmi}R^OjCyeU9CwPixf?6r>7xrX`w#ywLI(&?z$k%{+w zKP#P8le&a=RFmvTf1QVgf~z4I=`vQb$rmqG3Oz3BYaUi7c7MiGq3Z<0%AZJ2ad)(f zKXLTv!tL7=e=QJsgo(?NB@P|@BR;dZFrM1M8#kQj+pC%_FE*7m}g{|a6XnUp)Nt%2~3 zP?F$|*+@NUG%FufTV~qyc56~&p;hx2UqY3+y&t{}G``e0=0bJ$oWCRIzy7N*)aapE z8|mZR^W4%Gx7}`%SP2bX)3@9}&SskIGZ8|5AZc&(ESdWk%Ua4XfEBLVKR&(zdaz*? zrpNOx2N}^ig#zoD28P}jWBu`vW?MkPX2vS3X15ogxZ>KYbDn@1^+#egyKt;M4x zFYt)(XQ#?(F@F^;lAMjz;^m6V*F1Q`iDN4e#q2pLr{n#%ILcv{E)9c!uc<2h4win2 zK3Mh*lZf1jsAAk2odn|5Y2pAn^S*F6uuR(!yknn>V&JVG)5GI(uCV=;_p%GNZ2CUt zO?2})@7=L>IhEQi-_G{ZyLBV=qj|h`bf{Y-inZBQT-5#Dn_{$^KOe?9#I(0BOsJzR z<5&DP*57fa^6E8fJm@ZlYlkUn@A3T}DkY+JRKtcQ<)XYq` zY{&rrpyM=XnR`j^Rr|JW>FC|~>UHy=^>)~W7%-- zt@QPU&S#vXt#ZXUF>D24&fWBjg{BnAk#uV=(QcmcV;_QywZ@k%Xt>)D+43VYiKd#zwDZ3ghd0_s+w&XQ|S90g}bvrMjwPuN#-X z%B$Rdw`S<}N8Obq`_RwaZ1aRIVGy8L(j+n<>`P}+U@#;MuZ+JnyBzd}3;-UFB$1ae zG49O`6i(0t`f5~EylZ`g>Sj%79a`s+Uv`}~Q`<&1hTORJ_3h#6=q1^8nmdnXC5-9m7x&ESd1fX9o73sZRLPQX zo-et@ZEyIp{NC<4ZP}0BC_%ZZWK(Ga^~yiGrlE@Dz|w>*woXo5+B9lhE|lhv=H}1W z)1z;A4jVXRy}nD9ztg|v6Z$=3bRs)vczr}qJ<5hBf>KRW^YTP%#Wv?sPW#W3cm4S4alug=!NI2UN#79R ziV9wu+qmP4F~FGaC5vGXKZ@Z~ljqHvHF(gVnWo<#Xg5bOs3_m%U_yChcQv(;(9pbT zmtCJUp$2Mu*5baU>1{+3>n%)#jTnd zZ(41C^YqKL2|c8uCzIDn7muDgRRvGAY#A9=ci=*Z(1aL}o44hXWA&^(XD&1_2n-21 z@k`DmrCmZ1geH{;k}Q$;uSEn)qfbY{iu%9*YEJHXBtX!ZOl#>N|HnCmN^Ul3(E&;F z$sgV8Z*p$eC-oVxFr{UdsWDik;QeM|U2^(_4=mWXMylEwRXmJ*mS{0NZp~SKXsxYn zPCKRc?R^6*Tqcq;fxgV?QWcQY%sGrP>`7K;d9|wTshD)~H!Nq((u&r>C#BUt&iLKR;m1f z&eR@D%A6kBh%oNa@PI2ytq>8b(-=^ld>9u_E zP0AiGy(=rbjR75(?r7|*kht!;#?Pge-*(FyY| z^-#5@;m)HQZa=41Fy&x#zE}xrHuCqdHZ2WjTb5qm4*MhiFR}%Xmd4kp#q1tr(^BSp z+oy|tAFV`Ta>dQ0YS)@_21KQ5)iNUJ8O0NJC$My1uNhj#EhW-Q*xKph!mVvFdzY7< zuoR6O&9DCqd1?~dygzn{vGD}v3a)M-uh4t@r|B6Eg*j9ewA{@QzGd4>nQN&4Lm!z| zPrhTtx^;A?8onCQBawhKcMTF0_yi8sll=T25QPFl>-g>5waa$xT8MWUkS)r^Pp-o< zu3N`b26HJx1`i!N$6xI=d8&3@_6yJ|a%hjDuXCbuuTNg$m~A@s!PT|1map`Uu(+VU zw|mpL2@@tja}asL009yUQ6(TQh_R)Lg+@QHQA^Dh8XLp*uAmN;RA}?3J=)n_#F;of z)%8YMwiw?+I(Ra9CYSe&BqkE@AAQAgi<5g{X@c%_&Kn(AzH$*Ubb7rDHOzu*(k~uN zymgD_zyq$_1dnkg{jCetRaI3*QM1dPEVI5%iR0?>w%^a+<9POmvb`CHac65eO=<2OKp#k|2i!1234MqPbKMQXY#Badw`#HQ;y8)o*Y+zdURw zd0i4%I&Q?PTdG&rT+doC@w)bu<-R4g&+yL8-$S+CKfP(SKKs?AxP!;`J3bg;-gV{j z<$c#rFL)nGxbg7SD=}IJC(=xxcTFM<&Q5j+Ce(&=4Ar!j9%Q3QcL?~h_Q}%7p+6cL znkv9Vhg-h4w*|3yU}9S8TbixH06d#n5C72`Q!0{bz6@8BkXvhNYKqG{cflQ`mY%!+bBi!trzrx~OeVOw&$RBf1^Uz`+xqS(5+uFmRfx3#@<-71X}gR@SRR961L z+Sb{7G`?bx1G-f6#lA&zDw@P7BIpdnJU_05y8hR{%zwU4`rhzTF0r=aQe9 ze-0TrQU#84acO1cBnG)gwl99oXFoP(Z9nIc(YrCJ*O+xkeJ*YfG!w;$oY6hIc0Kw>S(x1cCz7JW zqN8gW+x!ifO{GO?JE^8M{wjGlSoRT&E-3+}jc0pkyPN+Um8`K+yle^XuftPqZi0_s zFbXE!veZVS2$MjW?wlu*bfTJY34RpW)QKHGh_XE=uhCRPu{mwor{r-r?SHyT)ASmx zA6`8N^zGpKs8xb4vIO zNZZ{h<8&~v=MZi*Ry}whb<3gVp5^zSj&c&xv zu2i+ul~!iP-gWs_IdswJSw)JH=c$l$tPz^MR4WhI#Aj7?4hmA8P`X`J<~8(i4H&ml zsooIZdid}Ha%Ut*B@-_)(v1xbS4^V*QsTcidbLxyN9r4$`X}-dkGfF-MiGOnher$g z0WH}##@)mKQWd}mF#(VHhoZ~Rp{ic{FM2I0g19p~7q8&iVs6&*6~MGO^!XL5B+Dmc zKV*ly-^7U%r%khrxcl2H>-*C%BECMJe7%r{$6@gqq{U@8_SrFDo-bl-ug6 zL>NZ(;Rtng*%?(2C;52jkjTim4+5V8H#)zyi@5t|GiE@ei;`;rZ(oG@*AlTaVP zrUw;@k8RmP zrG+d$g9HZP31D4X93XxnpJokZ+!Ft-dor#Xa9t-Rsqk&1#RdC8 zu#Petn1PPv@VO zi%MW1^If_wv{cq+P@k|@fqwvV-5Fs^6-3`w{EoQRY}{*@=`)s6qnRVy^~aIx&Kgk$Au|6afOT! zoEc;3V(%DYie@c{&vG^QZ^3CDwjc0lslb}J&5ADbrkFn`mBf&U%wvi_Z@CbbO9mWO2@i1 z(%w+0sEj|h`p?PFEtLA;VMNs(!+;hoTzHgE$`B6f^2^Onr`FR8InB`Isz+0m6`2Fs z7pYWmcA!<<=qpM=I!8~E9C`RpCUn3ckswVqIV30LBjm_t>&O9V#q}0|L-O2h;wJA& zKa5`8y1nFPaK6N?{$0GS9fC2!tgEVeW+{h9lTRXo6bFCV@>&-+q_5?V{T7q&;08+< zk(})jBMa${0~N>RNgjqqdv56SefHlSHl7uh4>CWBTu>^K7V>m0xn}l=;xMq;`^14a zrOX9n<{f_3nO)y|@Su-u1;qe0{Lb5RT$*AdA75WlWQ;|n!xEd63wpCAV@!~Hu1A5k zrc`i=>y}RTO)40Eulm#RnfHaP6`)_(p6i;9+>HtIhyPF)HWdg|=Kv zqt&ZJI5Z^vhlx{o@j2!;3$M#5QfsGx{V+KS@p6lffFyMsHntQjm)F_h|IoWebf3b~ zp_2YkU5(y@#aW@LRywEt1m*hX31d~95Ayp|(nH{vkqCqliGmn4I6|gkadK^;v>0s_ zWWH-=Ev-_^LIr@X)fU9bha&J!cWTdwBjOb zuFB~+Zp~{7N1iX_E?C;`2k!%5Y3H)w)Oh`XE%t?V!()=y{?3}4jDI2Z5mI`VkPFml z!2#^gYH=>AYN^_%Pu*b$Wwj`3p*((;^mZVaDt3Pb#X3KV5LN0*p=XDYf?v1a7Xhj>L2*jh{-<7(lI}k@@cS9CLm}5i?8J%3 zgR6Un?*nR~e{bSx32PW)MN(^rZF-fu|&Hl*|4 zlHEdc^C|o+dgZp}t=m9Fa%r=$8tTUCI-Ir%mrou$ae)qtR1z;N1V&cCBj`owZ{E6f z0h*xnbRa4*MbMbORCGXwMdlGwGMQ=K0iOi=&!8M8iS05Z2lRwew=VB*U0p^M%?-epWsfL(toE2EX=!$}sv8rrV$)9!ban#mvMPoTvzx5AxKi%QcQw{}#EF9wq(8N^ zw5Z>sjP5{Ocd=u#+cR@Y16s*5l#nU~4uyKBJM@W$kDT%3+{+d>bDuu_$m^m? z-JSFa`$s#INO6I(IaE*{l*_zJ9+SOTUWa5Yr_(3(J=t@WtvY9%XlJ*|+`u3++II1( z0w zVTtCF|NA8>iqc;w#GRc*d6s))^#m-7Fu6Z26U{T9gli`nI|`agn1KQ_sFb5zGXdB5 z3Ta#e(Fp~?5I^aYCrh5yVDTz|H)S>NlCAj$&r#6UT`irbw__OIOLRCxbw{gH*xHTF zoUElav;?2(A7LIT=2+!S$hObD?3Xa{Hr5+zE$v0^yp-Rcr+&7x*y!ZMXudI5ju#Zz zp6vC&G_oTvY5hzJ{6S;aEt3iuDMc ziW4;ot7x^Y)Q1sa^xqT)HHH!?b|BqQZ;^+h1g2V>A6-E$$2Xi8qaBCnj;L(o+N9JjNN|sN1!Mx6|ISIMMmmK|2gYO6dab#skD(swHz7jH_Be>u)AHi zEVBG0x5AZ2UtwLKFDT|XL#fBfz--vvB9|)lg^!;+q2uR!;MJn8o6+r4;(Y~WR}U=| z5?WLl4Kz)3-bC?Av;W156t8LoZy<4h@+7?vsR!0MjuJ^6826VwgC0mk#vSZl>|diSW$J0Jc4Q_M{VY zd;aL!ySM1DPho=$Z`KLsN8djix(c5NP)N@2)=q%{D7_`)am+Z}uUdDB+{u7SBK^g~ zt%a@J{?4CMd+Fl>t0hY`sZQC`%jMy(u77Ox;>wxlH=%1L{|IqMsV8GjRVEk}u0qO( zz{Z}*MFh3XObpCMCtdyF1Jf33-=9B>g}A{NyWDEV5jkzyQv3PyOB~ap%X~C)=KawW zbf<+FTK4B7QiJ3IXNu+m^Fuo?*ykW64-%+1_ujHmaW`*%Z49_9>aa<;(22F5IH7gu zZ4TwM@NX0PLq?($!QaC8V{EQE;q{4Dt!U@f!zAElj%0A2RFEhviC(ngtY^r}yE2=r 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

    we?35C_(Hos!o*@I>J{xnhbcH*8 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 QO}z6yxdXC^yN{guKZgWsLjV8( diff --git a/docs/readthedocs/_static/figures/uml/WeatherCoordinateSourceClassDiagram.png b/docs/readthedocs/_static/figures/uml/WeatherCoordinateSourceClassDiagram.png deleted file mode 100644 index 7f657673ab943320073b9050e8c59b7ea8d3c086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108069 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%0D5ATYw5VBaB42O%Y5grZ6-R_u2siD;zp;5d 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 Tb|cn7mfbt{Zx7q5=l1^qnCb{X literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/TestDataHierarchy.png b/docs/readthedocs/_static/figures/uml/TestDataHierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..d64f77de2a7b0328f1fd73295b838ef623a503b0 GIT binary patch literal 9192 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 literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/ThermalDatamodelConcept.png b/docs/readthedocs/_static/figures/uml/ThermalDatamodelConcept.png new file mode 100644 index 0000000000000000000000000000000000000000..ca7b86373bd361052e3c5e5d4a3ddc239328a76b GIT binary patch literal 152046 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 Y4=(yn^-d1jU`AF0SwQ!-MLk&#h9d~jc#jO>&r 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 R@4pk4E+G?A&oe8 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

    I01y<4 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 literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/InputDatamodelConcept.png b/docs/readthedocs/_static/figures/uml/InputDatamodelConcept.png new file mode 100644 index 0000000000000000000000000000000000000000..05a66894072999d5892bca522d7ad2891abbb342 GIT binary patch literal 200291 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

    -hc*DsK( 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

    aaN?eqk=dW0Ayn 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 v 17 + +## Where to get + +Checkout latest from [GitHub](https://github.com/ie3-institute/PowerSystemDataModel) or use maven for dependency +management: + +### Stable releases + +On [Maven central](https://search.maven.org/artifact/com.github.ie3-institute/PowerSystemDataModel): + +```xml + + com.github.ie3-institute + PowerSystemDataModel + 2.1.0 + +``` + +### Snapshot releases + +Available on [OSS Sonatype](https://s01.oss.sonatype.org/). +Add the correct repository: + +```xml + + https://s01.oss.sonatype.org/content/repositories/snapshots + +``` + +and add the dependency: + +```xml + + com.github.ie3-institute + PowerSystemDataModel + 3.0-SNAPSHOT + +``` diff --git a/docs/readthedocs/index.md b/docs/readthedocs/index.md new file mode 100644 index 000000000..f73b866a1 --- /dev/null +++ b/docs/readthedocs/index.md @@ -0,0 +1,34 @@ +# Documentation of the PowerSystemDataModel + +Welcome to the documentation of the PowerSystemDataModel. +It provides an extensive data model capable of modelling energy systems with high granularity e.g. for bottom-up simulations. +Additionally, useful functions to process, augment and furnish model i/o information is provided. +Effective handling of geographic information related to power grids is also possible. + +```{toctree} +:caption: 'Contents:' +:maxdepth: 2 + +gettingstarted +models/models +io/basiciousage +``` + +## Contact the (Main) Maintainers + +If you feel, something this missing, wrong or misleading, please contact one of our main contributors: + +> - [@sensarmad](https://github.com/sensarmad) +> - [@t-ober](https://github.com/t-ober) +> - [@danielfeismann](https://github.com/danielfeismann) +> - [@sebastian-peter](https://github.com/sebastian-peter) +> - [@jo-bao](https://github.com/jo-bao) +> - [@julianhohmann](https://github.com/julianhohmann) + +Hat tip to all other contributors! + +# Indices and tables + +- {ref}`genindex` +- {ref}`modindex` +- {ref}`search` diff --git a/docs/readthedocs/io/ValidationUtils.md b/docs/readthedocs/io/ValidationUtils.md new file mode 100644 index 000000000..d0c38d9e6 --- /dev/null +++ b/docs/readthedocs/io/ValidationUtils.md @@ -0,0 +1,80 @@ +# Validation Utils +This page gives an overview about the ValidationUtils in the *PowerSystemDataModel*. + +## What are the ValidationUtils? +The methods in ValidationUtils and subclasses can be used to check that objects are valid, meaning their parameters have valid values and they are correctly connected. + +## What is checked? +- The check methods include checks that assigned values are valid, e.g. lines are not allowed to have negative lengths or the rated power factor of any unit must be between 0 and 1. +- Furthermore, several connections are checked, e.g. that lines only connect nodes of the same voltage level or that the voltage levels indicated for the transformer sides match the voltage levels of the nodes they are connected to. + +## How does it work? +- The method `ValidationUtils.check(Object)` is the only method that should be called by the user. +- This check method identifies the object class and forwards it to a specific check method for the given object +- The overall structure of the ValidationUtils methods follows a cascading scheme, orientated along the class tree +- Example: A `LineInput lineInput` should be checked + 1. `ValidationUtils.check(lineInput)` is called + 2. `ValidationUtils.check(lineInput)` identifies the class of the object as `AssetInput` and calls `ValidationUtils.checkAsset(lineInput)` + 3. `ValidationUtils.checkAsset(lineInput)`, if applicable, checks those parameters that all `AssetInput` have in common (e.g. operation time) and further identifies the object, more specifically, as a `ConnectorInput` and calls `ConnectorValidationUtils.check(lineInput)` + 4. `ConnectorValidationUtils.check(lineInput)`, if applicable, checks those parameters that all `ConnectorInput` have in common and further identifies the object, more specifically, as a `LineInput` and calls `ConnectorValidationUtils.checkLine(lineInput)` + 5. `ConnectorValidationUtils.checkLine(lineInput)` checks all specific parameters of a `LineInput` +- ValidationUtils furthermore contains several utils methods used in the subclasses + +## Which objects are checked? +The ValidationUtils include validation checks for... + +- NodeValidationUtils + - NodeInput + - VoltageLevel +- ConnectorValidationUtils: + - ConnectorInput + - LineInput + - Transformer2WInput + - Transformer3WInput + - SwitchInput + - ConnectorTypeInput + - LineTypeInput + - Transformer2WTypeInput + - Transformer3WTypeInput +- MeasurementUnitValidationUtils + - MeasurementUnitInput +- SystemParticipantValidationUtils + - SystemParticipantInput + - BmInput + - ChpInput + - EvInput + - FixedFeedInInput + - HpInput + - LoadInput + - PvInput + - StorageInput + - WecInput + - (missing: EvcsInput) + - SystemParticipantTypeInput + - BmTypeInput + - ChpTypeInput + - EvTypeInput + - HpTypeInput + - StorageTypeInput + - WecTypeInput + - (missing: EvcsTypeInput/ChargingPointType) +- ThermalUnitValidationUtils + - ThermalUnitInput + - ThermalSinkInput + - ThermalHouseInput + - ThermalStorageInput + - CylindricalStorageInput +- GraphicValidationUtils + - GraphicInput + - LineGraphicInput + - NodeGraphicInput +- GridContainerValidationUtils + - GraphicElements + - GridContainer + - RawGridElements + - SystemParticipants + +## What should be considered? +- Due to many checks with if-conditions, the usage of the ValidationUtils for many objects might be runtime relevant. +- The check for a GridContainer includes the interplay of the contained entities as well as the checks of all contained entities. +- If new classes are introduced to the *PowerSystemDataModel*, make sure to follow the forwarding structure of the ValidationUtils methods when writing the check methods! diff --git a/docs/readthedocs/io/basiciousage.md b/docs/readthedocs/io/basiciousage.md new file mode 100644 index 000000000..64ce498df --- /dev/null +++ b/docs/readthedocs/io/basiciousage.md @@ -0,0 +1,40 @@ +# I/O + +The PowerSystemDataModel library additionally offers I/O-capabilities. +In the long run, it is our aim to provide many different source and sink technologies. +Therefore, the I/O-package is structured as highly modular. + +```{toctree} +--- +maxdepth: 2 +--- +csvfiles +sql +influxdb +ValidationUtils.md +``` + +## Data sink structure + +[![Class diagram of data sink classes](../_static/figures/uml/DataSinkClassDiagram.png)](../_static/figures/uml/DataSinkClassDiagram.png) + +## Data source structure + +The sources are divided in three blocks: +1. InputEntities and ResultEntities +2. TimeSeries related sources +3. Weather and Coordinate sources + +[![Class diagram of entity sources](../_static/figures/uml/EntitySourceClassDiagram.png)](../_static/figures/uml/EntitySourceClassDiagram.png) + +[![Class diagram of time series sources](../_static/figures/uml/TimeSeriesSourceClassDiagram.png)](../_static/figures/uml/TimeSeriesSourceClassDiagram.png) + +[![Class diagram of weather and coordinate sources](../_static/figures/uml/WeatherCoordinateSourceClassDiagram.png)](../_static/figures/uml/WeatherCoordinateSourceClassDiagram.png) + +The function to read the sources are implemented in the DataSource classes. + +[![Class diagram of data sources](../_static/figures/uml/FunctionalDataSourceClassDiagram.png)](../_static/figures/uml/FunctionalDataSourceClassDiagram.png) + +## Data deployment + +[![Diagram of input data deployment](../_static/figures/uml/InputDataDeployment.png)](../_static/figures/uml/InputDataDeployment.png) diff --git a/docs/readthedocs/io/csvfiles.md b/docs/readthedocs/io/csvfiles.md new file mode 100644 index 000000000..e022918ad --- /dev/null +++ b/docs/readthedocs/io/csvfiles.md @@ -0,0 +1,212 @@ +# CSV files + +## Naming of files + +A naming strategy provides a mapping between model classes and the human readable names of those entities to be used +within e.g. the data sinks, in which the serialized representation of several objects of this class can be found. +Currently we offer two different, pre-defined naming strategies, which you might extend to fit your needs: + +1. **EntityPersistenceNamingStrategy**: + A basic naming strategy that is able to add prefix and suffix to the names of the entities. A flat folder structure + is considered. For more details see [Default naming strategy](#default-naming-strategy). +2. **HierarchicFileNamingStrategy**: + An extended version of the EntityPersistenceNamingStrategy. Additionally, the [Default directory hierarchy](#default-directory-hierarchy) is taken + into account. Please note, that this directory hierarchy is only meant to be used in conjunction with input models. + +However, you can control the behaviour of serialization and de-serialization of models by injecting the desired naming +strategy you like into `CsvDataSource` and `CsvFileSink`. + +## Default naming strategy + +There is a default mapping from model class to naming of entities in the case you would like to use csv files for +(de-)serialization of models. +You may extend / alter the naming with pre- or suffix by calling `new EntityPersistenceNamingStrategy("prefix","suffix")`. + +### Input + +| Model | File Name | +|:----------------------------------|:------------------------------------------------------------------------------------------| +| operator | *prefix_* operator_input *_suffix* | +| node | *prefix_* node_input *_suffix* | +| line | *prefix_* line_input *_suffix*
    *prefix_* line_type_input *_suffix* | +| switch | *prefix_* switch_input *_suffix* | +| two winding transformer | *prefix_* transformer2w_input *_suffix*
    *prefix_* transformer2w_type_input *_suffix* | +| three winding transformer | *prefix_* transformer3w_input *_suffix*
    *prefix_* transformer3w_type_input *_suffix* | +| measurement unit | *prefix_* measurement_unit_input *_suffix* | +| biomass plant | *prefix_* bm_input *_suffix*
    *prefix_* bm_type_input *_suffix* | +| combined heat and power plant | *prefix_* chp_input *_suffix*
    *prefix_* chp_type_input *_suffix* | +| electric vehicle | *prefix_* ev_input *_suffix*
    *prefix_* ev_type_input *_suffix* | +| electric vehicle charging station | *prefix_* evcs_input *_suffix* | +| fixed feed in facility | *prefix_* fixed_feed_in_input *_suffix* | +| heat pump | *prefix_* hp_input *_suffix*
    *prefix_* hp_type_input *_suffix* | +| load | *prefix_* load_input *_suffix* | +| photovoltaic power plant | *prefix_* pc_input *_suffix* | +| electrical energy storage | *prefix_* storage_input *_suffix*
    *prefix_* storage_type_input *_suffix* | +| wind energy converter | *prefix_* wec_input *_suffix*
    *prefix_* wec_type_input *_suffix* | +| schematic node graphic | *prefix_* node_graphic_input *_suffix* | +| schematic line graphic | *prefix_* line_graphic_input *_suffix* | + + +### Time Series + +| Model | File Name | +|:-----------------------|:------------------------------------------| +| individual time series | *prefix_* its *_columnScheme_UUID_suffix* | +| load profile input | *prefix_* rts *_profileKey_UUID_suffix* | + + +Let's spend a few more words on the individual time series: +Those files are meant to carry different types of content - one might give information about wholesale market prices, +the other is a record of power values provided by a real system. +To be able to understand, what's inside of the file, the *columnScheme* part of the file name gives insight of it's +content. +The following keys are supported until now: + +| Key | Information and supported head line | +|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------| +| c | An energy price (e.g. in €/MWh; c stands for charge).
    Permissible head line: ``uuid,time,price`` | +| p | Active power
    Permissible head line: ``uuid,time,p`` | +| pq | Active and reactive power
    Permissible head line: ``uuid,time,p,q`` | +| h | Heat power demand
    Permissible head line: ``uuid,time,h`` | +| ph | Active and heat power
    Permissible head line: ``uuid,time,p,h`` | +| pqh | Active, reactive and heat power
    Permissible head line: ``uuid,time,p,q,h`` | +| weather | Weather information
    Permissible head line: ``uuid,time,coordinate,direct_irradiation,diffuse_irradiation,temperature,wind_velocity,wind_direction`` | + + +As the ``uuid`` and ``time`` field are mandatory, they are not mentioned explicitly, here. + +### Results + + +| Model | File Name | +|:----------------------------------|:--------------------------------------------| +| node | *prefix_* node_res *_suffix* | +| line | *prefix_* line_res *_suffix* | +| switch | *prefix_* switch_res *_suffix* | +| two winding transformer | *prefix_* transformer2w_res *_suffix* | +| three winding transformer | *prefix_* transformer3w_res *_suffix* | +| biomass plant | *prefix_* bm_res *_suffix* | +| combined heat and power plant | *prefix_* chp_res *_suffix* | +| electric vehicle | *prefix_* ev_res *_suffix* | +| electric vehicle charging station | *prefix_* evcs_res\*_suffix* | +| fixed feed in | *prefix_* fixed_feed_in_res *_suffix* | +| heat pump | *prefix_* hp_res *_suffix* | +| load | *prefix_* load_res *_suffix* | +| photovoltaic power plant | *prefix_* pv_res *_suffix* | +| storage | *prefix_* storage_res *_suffix* | +| wind energy converter | *prefix_* wec_res *_suffix* | +| thermal house model | *prefix_* thermal_house_res *_suffix* | +| cylindrical thermal storage | *prefix_* cylindrical_storage_res *_suffix* | + + +## Default directory hierarchy + +Although there is no fixed structure of files mandatory, there is something, we consider to be a good idea of +structuring things. +You may either ship your csv files directly in this structure or compress everything in a .tar.gz file. +However, following this form, we are able to provide you some helpful tools in obtaining and saving your models a bit +easier. + +![Default directory hierarchy for input classes](../_static/figures/uml/DefaultInputDirectoryHierarchy.png) +Default directory hierarchy for input classes + +![Default directory hierarchy for result classes](../_static/figures/uml/DefaultResultDirectoryHierarchy.png) +Default directory hierarchy for result classes + +The italic parts are optional and the others are mandatory. +As you see, this still is a pretty flexible approach, as you only need to provide, what you really need. +However, note that this hierarchy is only meant to be used in conjunction with input models, yet. + +The class `DefaultInputHierarchy` offers some helpful methods to validate and create a default input file +hierarchy. + +## De-serialization (loading models) + +Having an instance of [Grid Container](/models/input/grid/gridcontainer) is most of the time the target whenever you load your +grid. It consists of the three main blocks: + +1. [Raw grid elements](/models/input/grid/gridcontainer) +2. [System participants](/models/input/grid/gridcontainer) +3. [Graphics](/models/input/grid/gridcontainer) + +Those blocks are also reflected in the structure of data source interface definitions. +There is one source for each of the containers, respectively. + +As a full data set has references among the models (e.g. a line model points to its' nodes it connects), there is a +hierarchical structure, in which models have to be loaded. +Therefore, the different sources have also references among themselves. +An application example to load an *exampleGrid* from csv files located in `./exampleGrid` could look like this: + + +``` java + /* Parameterization */ + String gridName = "exampleGrid"; + String csvSep = ","; + String folderPath = "./exampleGrid"; + EntityPersistenceNamingStrategy namingStrategy = new EntityPersistenceNamingStrategy(); // Default naming strategy + + /* Instantiating sources */ + TypeSource typeSource = new CsvTypeSource(csvSep, folderPath, namingStrategy); + RawGridSource rawGridSource = new CsvRawGridSource(csvSep, folderPath, namingStrategy, typeSource); + ThermalSource thermalSource = new CsvThermalSource(csvSep, folderPath, namingStrategy, typeSource); + SystemParticipantSource systemParticipantSource = new CsvSystemParticipantSource( + csvSep, + folderPath, + namingStrategy, + typeSource, + thermalSource, + rawGridSource + ); + GraphicSource graphicsSource = new CsvGraphicSource( + csvSep, + folderPath, + namingStrategy, + typeSource, + rawGridSource + ); + + /* Loading models */ + RawGridElements rawGridElements = rawGridSource.getGridData().orElseThrow( + () -> new SourceException("Error during reading of raw grid data.")); + SystemParticipants systemParticipants = systemParticipantSource.getSystemParticipants().orElseThrow( + () -> new SourceException("Error during reading of system participant data.")); + GraphicElements graphicElements = graphicsSource.getGraphicElements().orElseThrow( + () -> new SourceException("Error during reading of graphic elements.")); + JointGridContainer fullGrid = new JointGridContainer( + gridName, + rawGridElements, + systemParticipants, + graphicElements + ); +``` + +As observable from the code, it doesn't play a role, where the different parts come from. +It is also a valid solution, to receive types from file, but participants and raw grid elements from a data base. +Only prerequisite is an implementation of the different interfaces for the desired data source. + +## Serialization (writing models) + +Serializing models is a bit easier: + +``` java + /* Parameterization */ + String csvSep = ","; + String folderPath = "./exampleGrid"; + EntityPersistenceNamingStrategy namingStrategy = new EntityPersistenceNamingStrategy(); + boolean initEmptyFiles = false; + + /* Instantiating the sink */ + CsvFileSink sink = new CsvFileSink(folderPath, namingStrategy, initEmptyFiles, csvSep); + sink.persistJointGridContainer(grid); +``` + +The sink takes a collection of model suitable for serialization and handles the rest (e.g. unboxing of nested models) +on its own. +But caveat: As the (csv) writers are implemented in a concurrent, non-blocking way, duplicates of nested models could +occur. + +## Compression and extraction of files + +We consider either regular directories or compressed [tarball archives](https://en.wikipedia.org/wiki/Tar_(computing)) +(`*.tar.gz`) as source of input files. +The class `TarballUtils` offers some helpful functions to compress or extract input data files for easier shipping. \ No newline at end of file diff --git a/docs/readthedocs/io/influxdb.md b/docs/readthedocs/io/influxdb.md new file mode 100644 index 000000000..630705ffe --- /dev/null +++ b/docs/readthedocs/io/influxdb.md @@ -0,0 +1,32 @@ +# InfluxDB + +[InfluxDB](https://www.influxdata.com/products/influxdb-overview/) is a time series database. As such, it can only +handle time based data like weather data or results. +The PowerSystemDataModel offers two interface implementations for InfluxDB 1.x: WeatherSource and OutputDataSink. + +## Introduction to InfluxDB + +InfluxDB is a NoSQL database as it is neither relational nor able to handle SQL queries, even though InfluxDB's own +QueryLanguage, [InfluxQL](https://docs.influxdata.com/influxdb/v1.8/query_language/) is very similar to SQL. +InfluxDB persists data in *measurements*. A measurement is comparable to a table in a relational data model. It consists +of a *measurement name*, *fields*, *tags* and a *time column*. The measurement name is the equivalent of a table name. Fields +and tags are similar as they both hold data like columns in relational data. But while fields are supposed to hold +the actual data, tags should only hold metadata, which is why tag values can only be strings. Under default +configuration, one tag key can only hold 10 000 distinct tag values. This choice was made as tags are indexed and +supposed to be queried. Fields should only be queried if not avoidable. The time column is automatically provided, it +holds timestamps in [RFC3339 UTC](https://www.ietf.org/rfc/rfc3339.txt), which for example looks like +"2020-06-22T10:14:50.52Z". The equivalent to a table row is a measurement point. It holds field and tag values as well +as the time. While the data values are optional, a timestamp is not. If no time is provided when persisting, the current +system time is used. + +## Instantiating an InfluxDB DataConnector + +To instantiate an InfluxDbConnector a connection url, a database name and a scenario name should be provided. The +scenario name is used to build measurement names for results. +If none of those are provided, default values are used. + +```java +InfluxDbConnector unparameterizedInfluxDb = new InfluxDbConnector(); +InfluxDbConnector defaultInfluxDb = new InfluxDbConnector(""http://localhost:8086/", "ie3_in", null); +unparameterizedInfluxDb.equals(defaultInfluxDb); //true +``` diff --git a/docs/readthedocs/io/sql.md b/docs/readthedocs/io/sql.md new file mode 100644 index 000000000..71edba1a3 --- /dev/null +++ b/docs/readthedocs/io/sql.md @@ -0,0 +1,8 @@ +# SQL + + +## Id Coordinate Source +The sql implementation of id coordinate source uses [PostgreSql](https://www.postgresql.org/) with the +addon [PostGis](https://postgis.net/). `PostGis` is used to improve the querying of geographical data. +The `Coordinate` attribute is stored as a [Geography](http://postgis.net/workshops/postgis-intro/geography.html) with +the type [Point](https://postgis.net/docs/ST_Point.html) and the default SRID 4326. diff --git a/docs/readthedocs/make.bat b/docs/readthedocs/make.bat new file mode 100644 index 000000000..922152e96 --- /dev/null +++ b/docs/readthedocs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/readthedocs/requirements.txt b/docs/readthedocs/requirements.txt new file mode 100644 index 000000000..cb581e840 --- /dev/null +++ b/docs/readthedocs/requirements.txt @@ -0,0 +1,6 @@ +commonmark==0.9.1 +recommonmark==0.7.1 +Sphinx==7.2.6 +sphinx-rtd-theme==2.0.0 +myst-parser==2.0.0 +markdown-it-py==3.0.0 From 9f4121161c1399922eafa748202be5a2b8bc8298 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 8 Jan 2024 22:00:33 +0100 Subject: [PATCH 124/228] Add files via upload --- .../additionaldata/idcoordinatesource.md | 92 +++++++++ .../models/input/additionaldata/timeseries.md | 30 +++ .../models/input/grid/gridcontainer.md | 92 +++++++++ docs/readthedocs/models/input/grid/line.md | 102 +++++++++ .../models/input/grid/linegraphic.md | 41 ++++ .../models/input/grid/measurementunit.md | 62 ++++++ docs/readthedocs/models/input/grid/node.md | 62 ++++++ .../models/input/grid/nodegraphic.md | 45 ++++ docs/readthedocs/models/input/grid/switch.md | 53 +++++ .../models/input/grid/transformer2w.md | 77 +++++++ .../models/input/grid/transformer3w.md | 185 +++++++++++++++++ docs/readthedocs/models/input/operator.md | 46 +++++ .../models/input/participant/bm.md | 40 ++++ .../models/input/participant/chp.md | 42 ++++ .../input/participant/cylindricalstorage.md | 25 +++ .../models/input/participant/ev.md | 36 ++++ .../models/input/participant/evcs.md | 110 ++++++++++ .../models/input/participant/fixedfeedin.md | 24 +++ .../models/input/participant/general.md | 43 ++++ .../models/input/participant/hp.md | 37 ++++ .../models/input/participant/load.md | 47 +++++ .../models/input/participant/pv.md | 28 +++ .../models/input/participant/storage.md | 43 ++++ .../models/input/participant/thermalbus.md | 20 ++ .../models/input/participant/thermalhouse.md | 25 +++ .../models/input/participant/wec.md | 47 +++++ docs/readthedocs/models/models.md | 193 ++++++++++++++++++ .../models/result/grid/connector.md | 51 +++++ docs/readthedocs/models/result/grid/line.md | 52 +++++ docs/readthedocs/models/result/grid/node.md | 44 ++++ docs/readthedocs/models/result/grid/switch.md | 40 ++++ .../models/result/grid/transformer.md | 55 +++++ .../models/result/grid/transformer2w.md | 55 +++++ .../models/result/grid/transformer3w.md | 64 ++++++ .../models/result/participant/bm.md | 44 ++++ .../models/result/participant/chp.md | 48 +++++ .../result/participant/cylindricalstorage.md | 48 +++++ .../models/result/participant/ev.md | 48 +++++ .../models/result/participant/evcs.md | 44 ++++ .../models/result/participant/fixedfeedin.md | 45 ++++ .../models/result/participant/hp.md | 48 +++++ .../models/result/participant/load.md | 44 ++++ .../models/result/participant/pv.md | 44 ++++ .../models/result/participant/storage.md | 48 +++++ .../models/result/participant/thermalhouse.md | 45 ++++ .../models/result/participant/wec.md | 44 ++++ 46 files changed, 2558 insertions(+) create mode 100644 docs/readthedocs/models/input/additionaldata/idcoordinatesource.md create mode 100644 docs/readthedocs/models/input/additionaldata/timeseries.md create mode 100644 docs/readthedocs/models/input/grid/gridcontainer.md create mode 100644 docs/readthedocs/models/input/grid/line.md create mode 100644 docs/readthedocs/models/input/grid/linegraphic.md create mode 100644 docs/readthedocs/models/input/grid/measurementunit.md create mode 100644 docs/readthedocs/models/input/grid/node.md create mode 100644 docs/readthedocs/models/input/grid/nodegraphic.md create mode 100644 docs/readthedocs/models/input/grid/switch.md create mode 100644 docs/readthedocs/models/input/grid/transformer2w.md create mode 100644 docs/readthedocs/models/input/grid/transformer3w.md create mode 100644 docs/readthedocs/models/input/operator.md create mode 100644 docs/readthedocs/models/input/participant/bm.md create mode 100644 docs/readthedocs/models/input/participant/chp.md create mode 100644 docs/readthedocs/models/input/participant/cylindricalstorage.md create mode 100644 docs/readthedocs/models/input/participant/ev.md create mode 100644 docs/readthedocs/models/input/participant/evcs.md create mode 100644 docs/readthedocs/models/input/participant/fixedfeedin.md create mode 100644 docs/readthedocs/models/input/participant/general.md create mode 100644 docs/readthedocs/models/input/participant/hp.md create mode 100644 docs/readthedocs/models/input/participant/load.md create mode 100644 docs/readthedocs/models/input/participant/pv.md create mode 100644 docs/readthedocs/models/input/participant/storage.md create mode 100644 docs/readthedocs/models/input/participant/thermalbus.md create mode 100644 docs/readthedocs/models/input/participant/thermalhouse.md create mode 100644 docs/readthedocs/models/input/participant/wec.md create mode 100644 docs/readthedocs/models/models.md create mode 100644 docs/readthedocs/models/result/grid/connector.md create mode 100644 docs/readthedocs/models/result/grid/line.md create mode 100644 docs/readthedocs/models/result/grid/node.md create mode 100644 docs/readthedocs/models/result/grid/switch.md create mode 100644 docs/readthedocs/models/result/grid/transformer.md create mode 100644 docs/readthedocs/models/result/grid/transformer2w.md create mode 100644 docs/readthedocs/models/result/grid/transformer3w.md create mode 100644 docs/readthedocs/models/result/participant/bm.md create mode 100644 docs/readthedocs/models/result/participant/chp.md create mode 100644 docs/readthedocs/models/result/participant/cylindricalstorage.md create mode 100644 docs/readthedocs/models/result/participant/ev.md create mode 100644 docs/readthedocs/models/result/participant/evcs.md create mode 100644 docs/readthedocs/models/result/participant/fixedfeedin.md create mode 100644 docs/readthedocs/models/result/participant/hp.md create mode 100644 docs/readthedocs/models/result/participant/load.md create mode 100644 docs/readthedocs/models/result/participant/pv.md create mode 100644 docs/readthedocs/models/result/participant/storage.md create mode 100644 docs/readthedocs/models/result/participant/thermalhouse.md create mode 100644 docs/readthedocs/models/result/participant/wec.md diff --git a/docs/readthedocs/models/input/additionaldata/idcoordinatesource.md b/docs/readthedocs/models/input/additionaldata/idcoordinatesource.md new file mode 100644 index 000000000..665490477 --- /dev/null +++ b/docs/readthedocs/models/input/additionaldata/idcoordinatesource.md @@ -0,0 +1,92 @@ +# IdCoordinateSource +An id coordinate source provides a mapping between ids of a coordinate and the actual coordinates +latitude and longitude values. The id coordinate source itself is an interface that provides some +methods to get coordinates, ids of coordinates or the distance between a given coordinate and other +coordinates. + + +## Information + +| Attribute | Remarks | +|:-------------|:---------------------------------------------------------------| +| `Id` | An integer value for identifying the coordinate. | +| `Coordiante` | Geographical information presented as `Lat/long` of a `Point`. | + + + +## Known implementations: +The following implementations are currently known: + +- [Csv Id Coordinate Source](/io/csvfiles) +- [Sql Id Coordinate Source](/io/sql) + + +## Method for coordinates: +The IdCoordinateSource contains method for returning coordinates for given ids. + +``` java + Optional getCoordinate(int id) + Collection getCoordinates(int... ids) + Collection getAllCoordinates() +``` + +1. This method is used to return the coordinate of a given id. If no coordinate is found for +the given id, an empty optional is returned. + +2. This method is used to return the coordinates of a given set of ids. The method will only return +coordinates for existing ids. + +3. This method is used to return all available coordinates. + + +## Method for ids: +The IdCoordinateSource contains a method for retrieving the id of a given coordinate. + +``` java + Optional getId(Point coordinate) +``` + +This method is used to return the id of a given coordinate. If no id is found for the given +coordinate, an empty optional is returned. + + +## Method for retrieving near coordinates: +The IdCoordinateSource also contains methods for retrieving coordinates/points that are near a given coordinate. +All implementations of these methods in this project will use the method ``restrictToBoundingBox`` for finding and +returning four corner points. + +``` java + List getNearestCoordinates(Point coordinatem int n) + List getClosestCoordinates(Point coordinate, int n, ComparableQuantity distance) + List calculateCoordinateDistances(Point coordinate, int n, Collection coordinates) +``` + +1. This method will return the nearest n coordinates for a given coordinate. The method works by having a default radius +that is increased with every iteration until n coordinates are found. + +2. This method will return the closest n coordinates for a given coordinate. Unlike the first method, this method has a +defined radius, that won't be increased. Therefor this method can only consider the coordinates inside the bounding box +around this radius. + +3. This method is used to calculate the distances to a set of give coordinates. After the calculation +the method will return the closest n coordinates. If the number of distances is less than n, this method will +return less than n coordinates. + + +## Finding and returning the closest corner coordinates: +In most cases we need four corner coordinates for our given coordinate. Therefor the +IdCoordinateSource contains a method that will use the calculated distances to find the closest +corner coordinates for the given coordinate. + +``` java + List restrictToBoundingBox( + Point coordinate, + Collection distances, + int numberOfPoints + ) +``` + +For a given set of coordinates, the closest four corner coordinates plus more close points if n > 4 +are returned. If n < 4 the method will return the closest n corner coordinates. If the set of +coordinates contains a coordinate that matches the given coordinate, only this one coordinate is +returned. If n > number of coordinates in the set, all coordinates are returned. \ No newline at end of file diff --git a/docs/readthedocs/models/input/additionaldata/timeseries.md b/docs/readthedocs/models/input/additionaldata/timeseries.md new file mode 100644 index 000000000..9590a8404 --- /dev/null +++ b/docs/readthedocs/models/input/additionaldata/timeseries.md @@ -0,0 +1,30 @@ +# Time Series +Time series are meant to represent a timely ordered series of values. +Those can either be electrical or non-electrical depending on what one may need for power system simulations. +Our time series models are divided into two subtypes: + +## Individual Time Series +Each time instance in this time series has its own value (random duplicates may occur obviously). +They are only applicable for the time frame that is defined by the content of the time series. + +## Repetitive Time Series +Those time series do have repetitive values, e.g. each day or at any other period. +Therefore, they can be applied to any time frame, as the mapping from time instant to value is made by information +reduction. +In addition to actual data, a mapping function has to be known. + +## Available Classes +To be as flexible, as possible, the actual content of the time series is given as children of the `Value` class. +The following different values are available: + +| Value Class | Purpose | +|:-----------------------|:--------------------------------------------------------------------------------------------------------------| +| `PValue` | Electrical active power | +| `SValue` | Electrical active and reactive power | +| `HeatAndPValue` | Combination of thermal power (e.g. in kW)
    and electrical active power (e.g. in kW) | +| `HeatAndSValue` | Combination of thermal power (e.g. in kW)
    and electrical active and reactive power (e.g. in kW and kVAr) | +| `EnergyPriceValue` | Wholesale market price (e.g. in € / MWh) | +| `SolarIrradianceValue` | Combination of diffuse and direct solar irradiance | +| `TemperatureValue` | Temperature information | +| `WindValue` | Combination of wind direction and wind velocity | +| `WeatherValue` | Combination of irradiance, temperature and wind information | diff --git a/docs/readthedocs/models/input/grid/gridcontainer.md b/docs/readthedocs/models/input/grid/gridcontainer.md new file mode 100644 index 000000000..e40d20c5c --- /dev/null +++ b/docs/readthedocs/models/input/grid/gridcontainer.md @@ -0,0 +1,92 @@ +# Grid Container + +The grid container groups all entities that are able to form a full grid model. +Two types of grid containers are available: + +**JointGridContainer**
    +This one is able to hold a grid model spanning several voltage levels. +On instantiation, a sub grid topology graph is built. +This graph holds `SubGridContainers` as vertices and transformer models as edges. +Thereby, you are able to discover the topology of galvanically separated sub grids and access those sub models +directly. + +and + +**SubGridContainer**
    +This one is meant to hold all models, that form a galvanically separated sub grid. +In contrast to the `JointGridContainer` it only covers one voltage level and therefore has an additional field +for the predominant voltage level apparent in the container. +Why predominant? +As of convention, the `SubGridContainers` hold also reference to the transformers leading to higher sub grids +and their higher voltage coupling point. + +![Sub grid boundary definition for transformers with upstream switchgear](../../../_static/figures/transformerWithSwitchGear.png) + +Let's shed a more detailed light on the boundaries of a sub grid as of our definition. +This especially is important, if the switchgear of the transformer is modeled in detail. +We defined, that all nodes in upstream direction of the transformer, that are connected by switches *only* (therefore +are within the switchgear) are counted towards the inferior sub grid structure (here "2"), although they belong to a +different voltage level. +This decision is taken, because we assume, that the interest to operate on the given switchgear will most likely be +placed in the inferior grid structure. + +The "real" coupling node A is not comprised in the sub grids node collection, but obviously has reference through the +switch between nodes A and B. + +A synoptic overview of both classes' attributes is given here: + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +|:------------------------|:-----|:--------------------------------------------------| +| gridName | -- | Human readable identifier | +| rawGrid | -- | see below | +| systemParticipants | -- | see below | +| graphics | -- | see below | +| subGridTopologyGraph | -- | topology of sub grids - only `JointGridContainer` | +| predominantVoltageLevel | -- | main voltage level - only `SubGridContainer` | +| subnet | -- | sub grid number - only `SubGridContainer` | + + +### RawGridElements +This sub container simply holds: + +* [nodes](/models/input/grid/node) +* [lines](/models/input/grid/line) +* [switches](/models/input/grid/switch) +* [two winding transformers](/models/input/grid/transformer2w) +* [three winding transformers](/models/input/grid/transformer3w) +* [measurement units](/models/input/grid/measurementunit) + + +### SystemParticipants +This sub container simply holds: + +* [biomass plant](/models/input/participant/bm) +* [combined heat and power plant](/models/input/participant/chp) +- [electric vehicles](/models/input/participant/ev) +- [electric vehicle charging stations](/models/input/participant/evcs) +- [fixed feed in facilities](/models/input/participant/fixedfeedin) +- [heat pumps](/models/input/participant/hp) +- [loads](/models/input/participant/load) +- [photovoltaic power plants](/models/input/participant/pv) +- [electrical energy storages](/models/input/participant/storage) +- [wind energy converters](/models/input/participant/wec) + +and the needed nested thermal models. + + +### Graphics +This sub container simply holds: + +* [schematic node graphics](/models/input/grid/nodegraphic) +* [schematic line graphics](/models/input/grid/linegraphic) + + +## Container Concept + +![Model container concept](../../../_static/figures/uml/ModelContainerConcept.png) + +## Caveats +Nothing - at least not known. +If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md new file mode 100644 index 000000000..a7d23fe29 --- /dev/null +++ b/docs/readthedocs/models/input/grid/line.md @@ -0,0 +1,102 @@ +# Line + +Representation of an AC line. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +|:----------|:--------|:--------------------------------------------| +| uuid | -- | | +| id | -- | Human readable identifier | +| r | Ω / km | Phase resistance per length | +| x | Ω / km | Phase reactance per length | +| g | µS / km | Phase-to-ground conductance per length | +| b | µS / km | Phase-to-ground susceptance per length | +| iMax | A | Maximum permissible current | +| vRated | kV | Rated voltage | + + +A list with some standard line types can be found here: `Standard Line Types`_ + + +### Entity Model + +| Attribute | Unit | Remarks | +|:------------------|:-----|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| nodeA | -- | | +| nodeB | -- | | +| parallelDevices | -- | overall amount of parallel lines to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two lines using the specified parameters) | +| type | -- | | +| length | km | | +| geoPosition | -- | Line string of geographical locations describing the
    position of the line | +| olmCharacteristic | -- | Characteristic of possible overhead line monitoring
    Can be given in the form of `olm:{}`.
    The pairs are wind velocity in x and permissible
    loading in y. | + + + +## Standard Line Types + +Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found +`here `_. This file can be used directly +for any simulation with ``simona``. +The lines which source is ``simBench`` are from `here `_. + + +### Overhead Lines + +Some standard overhead lines. + +| uuid | b | g | iMax | id | r | vRated | x | source | +|:--------------------------------------|--------:|----:|--------:|--------------------:|---------:|-------:|---------:|:---------| +| 91617ab8-3de2-4fba-be45-a54473ba09a9 | 3.61283 | 0.0 | 1300.0 | LineType_1 | 0.08 | 380.0 | 0.32 | simBench | +| b3b231ae-a971-4432-80d7-4ce2f2a56a32 | 3.22799 | 0.0 | 1950.0 | LineType_4 | 0.033333 | 380.0 | 0.333333 | simBench | +| 24595f91-8295-41f8-a3d8-c9418d860d9c | 1.076 | 0.0 | 650.0 | LineType_6 | 0.1 | 380.0 | 1.0 | simBench | +| f0fc57ec-aa5a-4484-b870-be70a5428cbd | 6.45597 | 0.0 | 3900.0 | LineType_9 | 0.016667 | 380.0 | 0.166667 | simBench | +| ba70d8e7-b082-49bc-8c45-3c10e1236c3e | 8.60796 | 0.0 | 5200.0 | LineType_10 | 0.0125 | 380.0 | 0.125 | simBench | +| veee8eeed-62c9-4345-aa5a-3743fe32007d | 12.9119 | 0.0 | 7800.0 | LineType_11 | 0.008333 | 380.0 | 0.083333 | simBench | +| d2b16935-dcd7-44d2-8623-cec4c703ccdc | 17.2159 | 0.0 | 10400.0 | LineType_12 | 0.00625 | 380.0 | 0.0625 | simBench | +| a490c96e-6e90-485a-b0d7-adeb81fa09cd | 4.30398 | 0.0 | 2600.0 | LineType_2 | 0.025 | 220.0 | 0.25 | simBench | +| 5272bcbc-7d0e-4759-85fa-27943fd8d19c | 2.15199 | 0.0 | 1300.0 | LineType_3 | 0.05 | 220.0 | 0.5 | simBench | +| dd0bac07-de8d-4608-af36-b8ff2819f55a | 7.22566 | 0.0 | 2600.0 | LineType_5 | 0.04 | 220.0 | 0.16 | simBench | +| 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 | 1.80642 | 0.0 | 650.0 | LineType_7 | 0.16 | 220.0 | 0.64 | simBench | +| bdc83a85-c796-4bcb-8b79-8988dc2804f8 | 5.41925 | 0.0 | 1950.0 | LineType_8 | 0.053333 | 220.0 | 0.213333 | simBench | +| 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 | 2.8274 | 0.0 | 680.0 | Al/St_265/35 | 0.1095 | 110.0 | 0.296 | simBench | +| 5b542a50-b0c2-4497-ba90-b2b31aafaa0b | 2.87456 | 0.0 | 170.0 | 34-AL1/6-ST1A 20.0 | 0.8342 | 20.0 | 0.382 | simBench | +| d594cd67-4459-44bc-9594-db710372db71 | 2.98451 | 0.0 | 210.0 | 48-AL1/8-ST1A 20.0 | 0.5939 | 20.0 | 0.372 | simBench | +| 305e60ad-cfd2-4127-9d83-8d9b21942d93 | 3.04734 | 0.0 | 290.0 | 70-AL1/11-ST1A 20.0 | 0.4132 | 20.0 | 0.36 | simBench | +| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 0.4 | 1.8769 | 0.4 | 0.409 | simBench | +| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 0.4 | 1.2012 | 0.4 | 0.394 | simBench | + + +### Cables + +Some standard cables. + +| uuid | b | g | iMax | id | r | vRated | x | source | +|:-------------------------------------|--------:|----:|------:|-----------------------------:|-------:|-------:|----------:|:---------| +| cc59abd4-770b-45d2-98c8-919c91f1ca4b | 58.7478 | 0.0 | 652.0 | 1x630_RM/50 | 0.122 | 110.0 | 0.122522 | simBench | +| 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 | 59.3761 | 0.0 | 158.0 | NA2XS2Y 1x50 RM/25 12/20 kV | 0.64 | 20.0 | 0.145 | simBench | +| 4adef9e6-5e40-416d-8bd2-b6768d156c54 | 59.6903 | 0.0 | 220.0 | NA2XS2Y 1x70 RM/25 12/20 kV | 0.443 | 20.0 | 0.132 | simBench | +| d5c03484-59c2-44d5-a2ee-63a5a0d623b4 | 67.8584 | 0.0 | 252.0 | NA2XS2Y 1x95 RM/25 12/20 kV | 0.313 | 20.0 | 0.132 | simBench | +| 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 | 72.2566 | 0.0 | 283.0 | NA2XS2Y 1x120 RM/25 12/20 kV | 0.253 | 20.0 | 0.119 | simBench | +| 36243493-eb31-4e81-bd13-b54ef59c4cbe | 78.5398 | 0.0 | 319.0 | NA2XS2Y 1x150 RM/25 12/20 kV | 0.206 | 20.0 | 0.116 | simBench | +| 437689f8-366d-4b04-b42d-d7a754db074b | 85.7655 | 0.0 | 362.0 | NA2XS2Y 1x185 RM/25 12/20 kV | 0.161 | 20.0 | 0.117 | simBench | +| b459115d-d4eb-47d4-b7ec-625339ee0dcc | 95.5044 | 0.0 | 421.0 | NA2XS2Y 1x240 RM/25 12/20 kV | 0.122 | 20.0 | 0.112 | simBench | +| 9aed5818-c037-4033-8d15-806c62d70b8f | 113.097 | 0.0 | 315.0 | NA2XS2Y 1x150 RM/25 6/10 kV | 0.206 | 10.0 | 0.11 | simBench | +| 60d37bc7-157a-4c32-b1b5-e74c10d70531 | 127.549 | 0.0 | 358.0 | NA2XS2Y 1x185 RM/25 6/10 kV | 0.161 | 10.0 | 0.11 | simBench | +| a3ced617-2ffd-4593-b8e9-bcad9a521aab | 143.257 | 0.0 | 416.0 | NA2XS2Y 1x240 RM/25 6/10 kV | 0.122 | 10.0 | 0.105 | simBench | +| f0484bb6-9d0d-4d13-bfbe-b83783b8352a | 150.796 | 0.0 | 471.0 | NA2XS2Y 1x300 RM/25 6/10 kV | 0.1 | 10.0 | 0.0974 | simBench | +| 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 | 169.646 | 0.0 | 535.0 | NA2XS2Y 1x400 RM/25 6/10 kV | 0.078 | 10.0 | 0.0942 | simBench | +| 65181464-230a-487b-978f-81e406e9eb22 | 260.752 | 0.0 | 270.0 | NAYY 4x150SE 0.6/1kV | 0.2067 | 0.4 | 0.0804248 | simBench | +| 1200d9eb-6d10-47f3-8543-abea43b128d3 | 273.319 | 0.0 | 357.0 | NAYY 4x240SE 0.6/1kV | 0.1267 | 0.4 | 0.0797965 | simBench | + + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/linegraphic.md b/docs/readthedocs/models/input/grid/linegraphic.md new file mode 100644 index 000000000..d97d695ab --- /dev/null +++ b/docs/readthedocs/models/input/grid/linegraphic.md @@ -0,0 +1,41 @@ +(line-graphic-model)= + +# Schematic Line Graphic + +Schematic drawing information for a line model. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - graphicLayer + - -- + - | Human readable identifier of the graphic layer to draw + | this element on + + * - path + - -- + - Line string of coordinates describing the drawing + + * - line + - -- + - Reference to the physical line model + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/measurementunit.md b/docs/readthedocs/models/input/grid/measurementunit.md new file mode 100644 index 000000000..0d00d0f3a --- /dev/null +++ b/docs/readthedocs/models/input/grid/measurementunit.md @@ -0,0 +1,62 @@ +(measurement-unit-model)= + +# Measurement Unit + +Representation of a measurement unit placed at a node. +It can be used to mark restrictive access to simulation results to e.g. control algorithms. +The measured information are indicated by boolean fields. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - vMag + - -- + - Voltage magnitude measurements are available + + * - vAng + - -- + - Voltage angle measurements are available + + * - p + - -- + - Active power measurements are available + + * - q + - -- + - Reactive power measurements are available + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/node.md b/docs/readthedocs/models/input/grid/node.md new file mode 100644 index 000000000..f60c0d21a --- /dev/null +++ b/docs/readthedocs/models/input/grid/node.md @@ -0,0 +1,62 @@ +(node-model)= + +# Node + +Representation of an electrical node, with no further distinction into bus bar, auxiliary node or others. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - vTarget + - p.u. + - Target voltage magnitude to be used by voltage regulation entities + + * - slack + - -- + - | Boolean indicator, if this nodes serves as a slack node in power + | flow calculation + + * - geoPosition + - -- + - Geographical location + + * - voltLvl + - -- + - Information of the voltage level (id and nominal voltage) + + * - subnet + - -- + - Sub grid number + +``` + +## Caveats + +System participants, that need to have geographical locations, inherit the position from the node. +If the overall location does not play a big role, you are able to use the default location with +{code}`NodeInput#DEFAULT_GEO_POSITION` being located on TU Dortmund university's campus ([See on OpenStreetMaps](https://www.openstreetmap.org/search?query=51.4843281%2C%207.4116482#map=15/51.4843/7.4117)). diff --git a/docs/readthedocs/models/input/grid/nodegraphic.md b/docs/readthedocs/models/input/grid/nodegraphic.md new file mode 100644 index 000000000..6bb73c0ef --- /dev/null +++ b/docs/readthedocs/models/input/grid/nodegraphic.md @@ -0,0 +1,45 @@ +(node-graphic-model)= + +# Schematic Node Graphic + +Schematic drawing information for a node model. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - graphicLayer + - -- + - | Human readable identifier of the graphic layer to draw + | this element on + + * - path + - -- + - Line string of coordinates describing the drawing, e.g. for bus bars + + * - point + - -- + - Alternative to line string, only drawing a point coordinate + + * - node + - -- + - Reference to the physical node model + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/switch.md b/docs/readthedocs/models/input/grid/switch.md new file mode 100644 index 000000000..a4ab706cc --- /dev/null +++ b/docs/readthedocs/models/input/grid/switch.md @@ -0,0 +1,53 @@ +(switch-model)= + +# Switch + +Model of an ideal switch connecting two node models of the same voltage level + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - nodeA + - -- + - + + * - nodeB + - -- + - + + * - closed + - -- + - true, if the switch is closed + + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md new file mode 100644 index 000000000..a213b09dc --- /dev/null +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -0,0 +1,77 @@ +# Two Winding Transformer + +Model of a two winding transformer. +It is assumed, that node A is the node with higher voltage. + +## Attributes, Units and Remarks + +### Type Model + +All impedances and admittances are given with respect to the higher voltage side. +As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit representations. + +| Attribute | Unit | Remarks | +|:----------|:-----|:--------------------------------------------------------| +| id | | Human readable identifier | +| rSc | Ω | Short circuit resistance | +| xSc | Ω | Short circuit reactance | +| gM | nS | No load conductance | +| bM | nS | No load susceptance | +| sRated | kVA | Rated apparent power | +| vRatedA | kV | Rated voltage at higher voltage terminal | +| vRatedB | kV | Rated voltage at lower voltage terminal | +| dV | % | Voltage magnitude increase per tap position | +| dPhi | ° | Voltage angle increase per tap position | +| tapSide | | true, if tap changer is installed on lower voltage side | +| tapNeutr | | Neutral tap position | +| tapMin | | Minimum tap position | +| tapMax | | Maximum tap position | + +A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ + + +### Entity Model + +| Attribute | Unit | Remarks | +|:----------------|:-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| nodeA | -- | Higher voltage node | +| nodeB | -- | Lower voltage node | +| parallelDevices | -- | overall amount of parallel transformers to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two transformers using the specified parameters) | +| type | -- | | +| tapPos | -- | Current position of the tap changer | +| autoTap | -- | true, if there is a tap regulation apparent and active | + + +## Standard Two Winding Transformer Types + + +Following there are some standard two winding transformer types with their source. A ``csv file`` containing the types listed +below can be found `here `_. This +file can be used directly for any simulation with ``simona``. +The transformers which source is ``simBench`` are from `here `_. + + +| uuid | bM | dPhi | dV | gM | id | rSc | sRated | tapMax | tapMin | tapNeutr | tapSide | vRatedA | vRatedB | xSc | source | +|:-------------------------------------|--------------------:|-----:|----:|-------------------:|------------------------------------:|--------------------:|---------:|-------:|-------:|---------:|--------:|--------:|--------:|-------------------:|:---------| +| 5a890aae-b9c9-4ebf-8a49-8850ae9df402 | 219.43184927638458 | 0.0 | 1.0 | 1731.3019390581715 | Typ_x_380/220 | 0.6016666666666666 | 600000.0 | 16 | -16 | 0 | false | 380.0 | 220.0 | 44.51926783240413 | simBench | +| 03159c0d-126e-47cc-9871-066870df3a3f | 1193.4686938790917 | 0.0 | 1.0 | 831.0249307479223 | 350MVA_380/110 | 1.0608979591836734 | 350000.0 | 16 | -16 | 0 | false | 380.0 | 110.0 | 9 0.75951402093402 | simBench | +| 7cb289cb-e6af-4470-9c68-e5a91978a5e7 | 2013.800484464662 | 0.0 | 1.0 | 1446.280991735537 | 300MVA_220/110 | 0.20704444444444442 | 300000.0 | 16 | -16 | 0 | false | 220.0 | 110.0 | 19.358892855688435 | simBench | +| 73644bc6-78cf-4882-9837-e6508cab092d | 867.7685950413226 | 0.0 | 1.5 | 1157.0247933884295 | 25 MVA 110/20 kV YNd5 | 1.9843999999999997 | 25000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 58.04608993412045 | simBench | +| 6935ae26-374a-4c24-aeee-6d5760d6ddf3 | 720.4791642215993 | 0.0 | 1.5 | 1487.603305785124 | 40 MVA 110/20 kV YNd5 | 1.0285 | 40000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 48.994205909984906 | simBench | +| b49db20f-b8b5-4265-8318-f669b9d121e9 | 1015.6886939330394 | 0.0 | 1.5 | 1818.181818181818 | 63 MVA 110/10 kV YNd5 | .6146031746031745 | 63000.0 | 9 | -9 | 0 | false | 110.0 | 10.0 | 34.56596500037509 | simBench | +| 0843b836-cee4-4a8c-81a4-098400fe91cf | 24.495101551166183 | 0.0 | 2.5 | 2999.9999999999995 | 0.4 MVA 20/0.4 kV Dyn5 ASEA | 11.999999999999998 | 400.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 58.787753826796276 | simBench | +| a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 | 9.591746452043322 | 0.0 | 2.5 | 1149.9999999999998 | 0.16 MVA 20/0.4 kV DOTE 160/20 SGB | 36.71874999999999 | 160.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.01469452961452 | simBench | +| 0644c120-a247-425f-bbe4-31b153f7f440 | 16.583241729259253 | 0.0 | 2.5 | 2199.9999999999995 | 0.25 MVA 20/0.4 kV Dyn5 ASEA | 21.119999999999997 | 250.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.6479876986153 | simBench | +| bdf22ee4-deba-41f4-a187-ae00638a6880 | 36.47380569074435 | 0.0 | 2.5 | 4125.0 | 0.63 MVA 20/0.4 kV Dyn5 ASEA | 6.953892668178382 | 630.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 37.45518044666632 | simBench | +| a0cbd90a-4e9f-47db-8dca-041d3a288f77 | 145.8952227629774 | 0.0 | 2.5 | 16500.0 | 0.63 MVA 10/0.4 kV Dyn5 ASEA | 1.7384731670445954 | 630.0 | 2 | -2 | 0 | false | 10.0 | 0.4 | 9.36379511166658 | simBench | + + + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/transformer3w.md b/docs/readthedocs/models/input/grid/transformer3w.md new file mode 100644 index 000000000..6de1897f1 --- /dev/null +++ b/docs/readthedocs/models/input/grid/transformer3w.md @@ -0,0 +1,185 @@ +(transformer3w-model)= + +# Three Winding Transformer + +Model of a three winding transformer. +It is assumed, that node A is the node with highest, node B with intermediate and node C with lowest voltage. + +The assumed mathematical model is inspired by *ABB Schaltanlagenhanbuch* [^cite_gremmel1999], but with the addition of a +central phase-to-ground admittance, cf. following picture. + +:::{figure} ../../../_static/figures/ecdTransformer3w.png +:align: center +:alt: Equivalent circuit diagram of a three winding transformer + +"Star like" T-equivalent circuit diagram of a three winding transformer +::: + +## Attributes, Units and Remarks + +### Type Model + +All impedances and admittances are given with respect to the higher voltage side. + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - + - + + * - id + - + - Human readable identifier + + * - rScA + - Ω + - Short circuit resistance in branch A + + * - rScB + - Ω + - Short circuit resistance in branch B + + * - rScC + - Ω + - Short circuit resistance in branch C + + * - xScA + - Ω + - Short circuit reactance in branch A + + * - xScB + - Ω + - Short circuit reactance in branch B + + * - xScC + - Ω + - Short circuit reactance in branch C + + * - gM + - nS + - No load conductance + + * - bM + - nS + - No load susceptance + + * - sRatedA + - kVA + - Rated apparent power of branch A + + * - sRatedB + - kVA + - Rated apparent power of branch B + + * - sRatedC + - kVA + - Rated apparent power of branch C + + * - vRatedA + - kV + - Rated voltage at higher node A + + * - vRatedB + - kV + - Rated voltage at higher node B + + * - vRatedC + - kV + - Rated voltage at higher node C + + * - dV + - % + - Voltage magnitude increase per tap position + + * - dPhi + - ° + - Voltage angle increase per tap position + + * - tapNeutr + - + - Neutral tap position + + * - tapMin + - + - Minimum tap position + + * - tapMax + - + - Maximum tap position + +``` + +### Entity Model + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - nodeA + - -- + - Higher voltage node + + * - nodeB + - -- + - Intermediate voltage node + + * - nodeC + - -- + - Lowest voltage node + + * - parallelDevices + - -- + - | overall amount of parallel transformers to automatically + | construct (e.g. parallelDevices = 2 will build a + | total of two transformers using the specified parameters) + + * - type + - -- + - + + * - tapPos + - -- + - Current position of the tap changer + + * - autoTap + - -- + - true, if there is a tap regulation apparent and active + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! + +[^cite_gremmel1999]: Gremmel, H., Ed., Schaltanlagen. Cornelsen Verlag, 1999, Vol. 10, isbn: 3-464-48235-9. diff --git a/docs/readthedocs/models/input/operator.md b/docs/readthedocs/models/input/operator.md new file mode 100644 index 000000000..dc560f18d --- /dev/null +++ b/docs/readthedocs/models/input/operator.md @@ -0,0 +1,46 @@ +(operator-model)= + +# Operator + +This is a simple identifier object, representing a natural or legal person that is the owner or responsible person +having control over one or more physical entitites. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + +``` + +(operator-example)= + +## Application example + +```{code-block} java +:linenos: true + +OperatorInput profBroccoli = new OperatorInput( + UUID.fromString("f15105c4-a2de-4ab8-a621-4bc98e372d92"), + "Univ.-Prof. Dr. rer. hort. Klaus-Dieter Brokkoli" + ) +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md new file mode 100644 index 000000000..50902a98a --- /dev/null +++ b/docs/readthedocs/models/input/participant/bm.md @@ -0,0 +1,40 @@ +(bm-model)= + +# Biomass plant + +Model of a biomass power plant. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| ------------------- | ------- | --------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| activePowerGradient | % / h | Maximum permissible rate of change of power | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | +| etaConv | % | Efficiency of the assets inverter | + +### Entity Model + +| Attribute | Unit | Remarks | +| ---------------- | ------- | ------------------------------------------------------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| type | -- | | +| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | +| costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | +| feedInTariff | € / MWh | Fixed feed in tariff | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/chp.md b/docs/readthedocs/models/input/participant/chp.md new file mode 100644 index 000000000..0c0a2b6c4 --- /dev/null +++ b/docs/readthedocs/models/input/participant/chp.md @@ -0,0 +1,42 @@ +(chp-model)= + +# Combined Heat and Power Plant + +Combined heat and power plant. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| ----------- | ------- | --------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| etaEl | % | Efficiency of the electrical inverter | +| etaThermal | % | Thermal efficiency of the system | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | +| pThermal | kW | Rated thermal power (at rated electrical power) | +| pOwn | kW | Needed self-consumption | + +### Entity Model + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| thermalBus | -- | Connection point to the thermal system | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| type | -- | | +| thermalStorage | -- | Reference to thermal storage | +| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/cylindricalstorage.md b/docs/readthedocs/models/input/participant/cylindricalstorage.md new file mode 100644 index 000000000..598d6c52a --- /dev/null +++ b/docs/readthedocs/models/input/participant/cylindricalstorage.md @@ -0,0 +1,25 @@ +(cylindricalstorage-model)= + +# Cylindrical Thermal Storage + +Model of a cylindrical thermal storage using a fluent to store thermal energy. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ------------------- | -------------------- | -------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| thermalBus | -- | Connection point to the thermal system | +| storageVolumeLvl | m³ | Overall available storage volume | +| storageVolumeLvlMin | m³ | Minimum permissible storage volume | +| inletTemp | °C | Temperature of the inlet | +| returnTemp | °C | Temperature of the outlet | +| c | kWh / (K $\cdot$ m³) | Specific heat capacity of the storage medium | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md new file mode 100644 index 000000000..a4f60a32d --- /dev/null +++ b/docs/readthedocs/models/input/participant/ev.md @@ -0,0 +1,36 @@ +(ev-model)= + +# Electric Vehicle + +Model of an electric vehicle, that is occasionally connected to the grid via an {ref}`electric vehicle charging system`. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| ----------- | -------- | --------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| eStorage | kWh | Available battery capacity | +| eCons | kWh / km | Energy consumption per driven kilometre | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | + +### Entity Model + +| Attribute | Unit | Remarks | +| ------------- | ---- | ------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| type | -- | | + +## Caveats + +The {code}`node` attribute only marks the vehicles home connection point. +The actual connection to the grid is always given through {code}`EvcsInput`'s relation. diff --git a/docs/readthedocs/models/input/participant/evcs.md b/docs/readthedocs/models/input/participant/evcs.md new file mode 100644 index 000000000..666f3882c --- /dev/null +++ b/docs/readthedocs/models/input/participant/evcs.md @@ -0,0 +1,110 @@ +(evcs-model)= + +# Electric Vehicle Charging Station + +Model of a charging station for electric vehicles. This model only covers the basic characteristics of a charging +station and has some limitations outlined below. + +## Model Definition + +### Entity Model + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| type | -- | {ref}`Charging point type` (valid for all installed points) | +| chargingPoints | -- | no of installed charging points @ the specific station | +| cosPhiRated | -- | Rated power factor | +| locationType | -- | {ref}`Charging station location types` | + +### Type Model + +In contrast to other models, electric vehicle charging station types are not configured via separate type file or table, +but 'inline' of a charging station entry. This is justified by the fact, that the station type (in contrast to e.g. +the type of a wind energy converter) only consists of a few, more or less standardized parameters, that are (most of the +time) equal for all manufacturers. Hence, to simplify the type model handling, types are provided either by a string +literal of their id or by providing a custom one. See {ref}`Charging point types` for details of on +available standard types and how to use custom types. + +The actual model definition for charging point types looks as follows: + +| Attribute | Unit | Remarks | +| ------------------- | ---- | --------------------------------------------- | +| id | -- | Human readable identifier | +| sRated | kVA | Rated apparent power | +| electricCurrentType | -- | Electric current type | +| synonymousIds | -- | Set of alternative human readable identifiers | + +(evcs-point-types)= + +## Charging Point Types + +### Available Standard Types + +To simplify the application of electric vehicle charging stations, some common standard types are available out-of-the-box. +They can either by used code wise or directly from database or file input by referencing their id or one of their +synonymous ids. All standard types can be found in {code}`edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils`. + +| id | synonymous ids | sRated in kVA | electric current type | +| ---------------------------- | -------------------------------------------- | ------------- | --------------------- | +| HouseholdSocket | household, hhs, schuko-simple | 2.3 | AC | +| BlueHouseholdSocket | bluehousehold, bhs, schuko-camping | 3.6 | AC | +| Cee16ASocket | cee16 | 11 | AC | +| Cee32ASocket | cee32 | 22 | AC | +| Cee63ASocket | cee63 | 43 | AC | +| ChargingStationType1 | cst1, stationtype1, cstype1 | 7.2 | AC | +| ChargingStationType2 | cst2, stationtype2, cstype2 | 43 | AC | +| ChargingStationCcsComboType1 | csccs1, csccscombo1 | 11 | DC | +| ChargingStationCcsComboType2 | csccs2, csccscombo2 | 50 | DC | +| TeslaSuperChargerV1 | tesla1, teslav1, supercharger1, supercharger | 135 | DC | +| TeslaSuperChargerV2 | tesla2, teslav2, supercharger2 | 150 | DC | +| TeslaSuperChargerV3 | tesla3, teslav3, supercharger3 | 250 | DC | + +### Custom Types + +While the provided standard types should be suitable for most scenarios, providing an individual type for a specific +scenario might be necessary. To do so, a custom type can be provided instead of a common id. This custom type is tested +against the following regex {code}`(\w+\d*)\s*\(\s*(\d+\.?\d+)\s*\|\s*(AC|DC)\s*\)`, or more generally, the custom +type string has to be in the following syntax: + +``` +(|) e.g. FastCharger(50|DC) or SlowCharger(2.5|AC) +``` + +Please note, that in accordance with {code}`edu.ie3.datamodel.models.StandardUnits` the apparent power is expected to +be in kVA! + +### Limitations + +- the available charging types are currently limited to only some common standard charging point types and not configurable + via a type file or table. Nevertheless, providing custom types is possible using the syntax explained above. + If there is additional need for a more granular type configuration via type file please contact us. +- each charging station can hold one or more charging points. If more than one charging point is available + all attributes (e.g. {code}`sRated` or {code}`connectionType`) are considered to be equal for all connection + points + +(location-types)= + +## Location types + +Evcs location types describe the type of charging location of a charging station. Parsing of these types is case-insensitive +and underscores and minuses are ignored, that means "charginghubtown" is parsed as type {code}`CHARGING_HUB_TOWN`. + +| type name | public/private | description | +| -------------------- | -------------- | ------------------------------ | +| HOME | private | Charging at home | +| WORK | private | Charging at work | +| CUSTOMER_PARKING | public | Charging at store parking lots | +| STREET | public | Charging at street side | +| CHARGING_HUB_TOWN | public | Charging at hub in town | +| CHARGING_HUB_HIGHWAY | public | Charging at hub out of town | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.md b/docs/readthedocs/models/input/participant/fixedfeedin.md new file mode 100644 index 000000000..5a5119131 --- /dev/null +++ b/docs/readthedocs/models/input/participant/fixedfeedin.md @@ -0,0 +1,24 @@ +(fixed-feed-in-model)= + +# Fixed Feed In Facility + +Model of a facility, that provides constant power feed in, as no further information about the actual behaviour of the +model can be derived. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/general.md b/docs/readthedocs/models/input/participant/general.md new file mode 100644 index 000000000..7ef4b81a0 --- /dev/null +++ b/docs/readthedocs/models/input/participant/general.md @@ -0,0 +1,43 @@ +# General Remarks on Participant Models + +(participant-general-q-characteristic)= + +## Reactive Power Characteristics + +Reactive power characteristics are designed to describe reactive power control behaviour of the models. +In Germany, system operators can require system participants to follow certain characteristics specified in the +operators technical requirements and individually selected per connected asset. + +Currently three different characteristics are implemented: + +### Fixed Power Factor + +Active and reactive power are coupled by a time-independent power factor. +It can be parsed from {code}`cosPhiFixed:{(0.0, 0.95)}` (exemplary). + +### Active Power Dependent Power Factor + +The power factor is determined based on the current active power feed in or consumption. +The characteristic in the figure below would be described by the three coordinates (0.0, 1.0), (0.9,1.0) and (1.0, 0.95). +Alternatively it can be parsed from {code}`cosPhiP:{(0.0, 1.0),(0.9,1.0),(1.0, 0.95)}`. + +:::{figure} ../../../_static/figures/cosPhiP.png +:align: center +:alt: Active power dependent power factor + +Exemplary active power dependent power factor +::: + +### Reactive Power as Function of Nodal Voltage Magnitude + +The reactive power is directly derived in accordance to the nodal voltage magnitude. +The characteristic in the figure below would be described by the three coordinates (0.92, -1), (0.97, 0.0), (1.03, 0.0) +and (1.08, 1.0). +Alternatively it can be parsed from {code}`qV:{(0.92, -1),(0.97, 0.0),(1.03, 0.0),(1.08, 1.0)}`. + +:::{figure} ../../../_static/figures/qv.png +:align: center +:alt: Reactive power as function of nodal voltage magnitude + +Exemplary reactive power as function of nodal voltage magnitude +::: diff --git a/docs/readthedocs/models/input/participant/hp.md b/docs/readthedocs/models/input/participant/hp.md new file mode 100644 index 000000000..f1d248272 --- /dev/null +++ b/docs/readthedocs/models/input/participant/hp.md @@ -0,0 +1,37 @@ +(hp-model)= + +# Heat Pump + +Model of a heat pump. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| ----------- | ------- | --------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | +| pThermal | kW | Rated thermal power (at rated electrical power) | + +### Entity Model + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| thermalBus | -- | Connection point to the thermal system | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| type | -- | | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/load.md b/docs/readthedocs/models/input/participant/load.md new file mode 100644 index 000000000..95736ac34 --- /dev/null +++ b/docs/readthedocs/models/input/participant/load.md @@ -0,0 +1,47 @@ +(load-model)= + +# Load + +Model of (mainly) domestic loads. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| loadProfile | -- | {ref}`Load profile` as model behaviour | +| dsm | -- | Whether the load is able to follow demand side management signals | +| eConsAnnual | kWh | Annual energy consumption | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! + +(load-lp)= + +## Load Profiles + +The {code}`LoadProfile` is an interface, that forces it's implementing classes to have a {code}`String` *key* +and being able to parse a {code}`String` to a {code}`LoadProfile`. +Its only purpose is to give note, which load profile has to be used by the simulation. +The actual profile has to be provided by the simulation itself. +If no matching standard load profile is known, {code}`LoadProfile#NO_LOAD_PROFILE` can be used. + +To assist the user in marking the desired load profile, the enum {code}`BdewLoadProfile` provides a collection of +commonly known German standard electricity load profiles, defined by the bdew (Bundesverband der Energie- und +Wasserwirtschaft; engl. Federal Association of the Energy and Water Industry). For more details see +[the corresponding website (German only)](https://www.bdew.de/energie/standardlastprofile-strom/). + +Furthermore there are {code}`TemperatureDependantLoadProfiles` which can be used to note usage of load profiles for night heating storages or heat pumps for example. +The profiles rely on the VDN description for interruptable loads. +For more details see [here (German only)](https://www.bdew.de/media/documents/LPuVe-Praxisleitfaden.pdf/). +{code}`NbwTemperatureDependantLoadProfiles` provides sample temperature dependant load profiles that can be used. +The `NbwTemperatureDependantLoadProfiles` consists of load profiles "ep1" for heat pumps and "ez2" for night storage heating. diff --git a/docs/readthedocs/models/input/participant/pv.md b/docs/readthedocs/models/input/participant/pv.md new file mode 100644 index 000000000..2bb2d4662 --- /dev/null +++ b/docs/readthedocs/models/input/participant/pv.md @@ -0,0 +1,28 @@ +(pv-model)= + +# Photovoltaic Power Plant + +Detailed model of a photovoltaic power plant. + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| albedo | -- | [Albedo](https://en.wikipedia.org/wiki/Albedo) of the plant's surrounding | +| azimuth | ° | Inclination in a compass directionSouth = 0°, West = 90°, East = -90° | +| etaConv | % | Efficiency of the assets inverter | +| elevationAngle | ° | Tilted inclination from horizontal \[0°, 90°\] | +| kG | -- | Generator correction factor merging technical influences | +| kT | -- | Temperature correction factor merging thermal influences | +| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/storage.md b/docs/readthedocs/models/input/participant/storage.md new file mode 100644 index 000000000..a24c8f430 --- /dev/null +++ b/docs/readthedocs/models/input/participant/storage.md @@ -0,0 +1,43 @@ +(storage-model)= + +# Electrical Energy Storage + +Model of an ideal electrical battery energy storage. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| ------------------- | ------- | ------------------------------------------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| eStorage | kWh | Battery capacity | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | +| pMax | kW | Maximum permissible active powerinfeed or consumption | +| activePowerGradient | % / h | Maximum permissible rate of change of power | +| eta | % | Efficiency of the electrical inverter | +| dod | % | Maximum permissible depth of discharge. 80 % dodis equivalent to a state of charge of 20 %. | +| lifeTime | h | Permissible hours of full use | +| lifeCycle | -- | Permissible amount of full cycles | + +### Entity Model + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ----------------------------------------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| type | -- | | +| behaviour | -- | Foreseen operation strategy of the storage.Eligible input: *"market"*, *"grid"*, *"self"* | + +## Caveats + +The field {code}`behaviour` will be removed in version 1.x, as this is an information, that is only important to a +smaller sub set of simulation applications. diff --git a/docs/readthedocs/models/input/participant/thermalbus.md b/docs/readthedocs/models/input/participant/thermalbus.md new file mode 100644 index 000000000..03dde023c --- /dev/null +++ b/docs/readthedocs/models/input/participant/thermalbus.md @@ -0,0 +1,20 @@ +(thermal-bus-model)= + +# Thermal Bus + +A coupling point to thermal system - equivalent to {ref}`electrical node `. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ------------- | ---- | -------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| bus | -- | Connection point to the thermal system | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/thermalhouse.md b/docs/readthedocs/models/input/participant/thermalhouse.md new file mode 100644 index 000000000..d6da0148d --- /dev/null +++ b/docs/readthedocs/models/input/participant/thermalhouse.md @@ -0,0 +1,25 @@ +(thermal-house-model)= + +# Thermal House Model + +Model for the thermal behaviour of a building. +This reflects a simple shoe box with transmission losses + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| --------------------- | ------- | ------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| ethLosses | kW / K | Thermal losses | +| ethCapa | kWh / K | Thermal capacity | +| targetTemperature | °C | Desired target temperature | +| upperTemperatureLimit | °C | Upper temperature boundary | +| lowerTemperatureLimit | °C | Lower temperature boundary | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/wec.md b/docs/readthedocs/models/input/participant/wec.md new file mode 100644 index 000000000..d67776f38 --- /dev/null +++ b/docs/readthedocs/models/input/participant/wec.md @@ -0,0 +1,47 @@ +(wec-model)= + +# Wind Energy Converter + +Model of a wind energy converter. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| ---------------- | ------- | ------------------------------------------------------------------- | +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | +| cpCharacteristic | -- | Wind velocity dependent {ref}`Betz factors`. | +| etaConv | % | Efficiency of the assets inverter | +| rotorArea | m² | Area the rotor covers | +| hubHeight | m | Height of the rotor hub | + +### Entity Model + +| Attribute | Unit | Remarks | +| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| type | -- | | +| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! + +(wec-cp-characteristic)= + +## Betz Characteristic + +A collection of wind velocity to Betz factor pairs to be applied in +[Betz's law](https://en.wikipedia.org/wiki/Betz's_law) to determine the wind energy coming onto the rotor area. diff --git a/docs/readthedocs/models/models.md b/docs/readthedocs/models/models.md new file mode 100644 index 000000000..c0e70ab78 --- /dev/null +++ b/docs/readthedocs/models/models.md @@ -0,0 +1,193 @@ +# Available models +This page gives an overview about all available models in *PowerSystemDataModel*. +They are basically grouped into two groups: + +1. [Input](#input) models may be used to describe input data for a power system simulation +2. [Result](#result) models denote results of such a simulation + +All those models are designed with some assumptions and goals in mind. +To assist you in applying them as intended, we will give you some general remarks: + +**Uniqueness**
    +All models have a `uuid` field as universal unique identifier. +There shouldn't be any two elements with the same `uuid` in your grid data set, better in your whole collection +of data sets. + +**Immutability**
    +We designed the models in a way, that does not allow for adaptions of the represented data after instantiation of the +objects. +Thereby you can be sure, that your models are *thread-safe* and no unwanted or unobserved changes are made. + +**Copyable**
    +With the general design principle of immutability, entity modifications (e.g. updates of field values) can become +hard and annoying. To avoid generating methods to update each field value, we provide an adapted version of the +[Builder pattern](https://en.wikipedia.org/wiki/Builder_pattern/) to make entity modifications as easy as possible. +Each entity holds it's own copy builder class, which follows the same inheritance as the entity class itself. With a +call of `.copy()` on an entity instance a builder instance is returned, that allows for modification of fields and +can be terminated with `.build()` which will return an instance of the entity with modified field values as required. +For the moment, this pattern is only implemented for a small amount of `AssetInput` entities (all entities held by a +`GridContainer` except thermal units to be precise), but we plan to extend this capability to all input entities in the +future. + +**Single Point of Truth**
    +Throughout all models you can be sure, that no information is given twice, reducing the possibility to have ambiguous +information in your simulation set up. +"Missing" information can be received through the grids relational information - e.g. if you intend to model a wind +energy converter in detail, you may find information of it's geographical location in the model of it's common +coupling point ([node](/models/input/grid/node)). + +**Harmonized Units System**
    +As our models are representations of physical elements, we introduced a harmonized system of units. +The standard units, the models are served with, is given on each element's page. +Thereby you can be sure, that all information are treated the same. +As most (database) sources do not support physical units, make sure, you have your input data transferred to correct +units before. +Same applies for interpreting the obtained results. +In all models physical values are transferred to standard units on instantiation. + +**Equality Checks**
    +To represent quantities in the models within an acceptable accuracy, the JSR 385 reference implementation +[Indriya](https://github.com/unitsofmeasurement/indriya) is used. Comparing quantity objects or objects holding quantity +instances is not as trivial as it might seem, because there might be different understandings about the equality of +quantities (e.g. there is a big difference between two instances being equal or equivalent). After long discussions how to +treat quantities in the entity `equals()` method, we agreed on the following rules to be applied: + +- equality check is done by calling `Objects.equals(, )` or + `.equals()`. + Using `Objects.equals(, )` is necessary especially for time series data. + As in contrast to all other places, quantity time series from real world data sometimes are not complete and + hence contain missing values. To represent missing values this is the only place where the usage of `null` + is a valid choice and hence needs to be treated accordingly. Please remember that this is only allowed in very few + places and you should try to avoid using `null` for quantities or any other constructor parameter whenever possible! +- equality is given if, and only if, the quantities value object and unit are exactly equal. Value objects can become + e.g. `BigDecimal` or `Double` instances. It is important, that the object type is also the same, otherwise + the entities `equals()` method returns false. This behavior is in sync with the equals implementation + of the indriya library. Hence, you should ensure that your code always pass in the same kind of a quantity instance + with the same underlying number format and type. For this purpose you should especially be aware of the unit conversion + method `AbstractQuantity.to(Quantity)` which may return seemingly unexpected types, e.g. if called on a quantity + with a `double` typed value, it may return a quantity with a value of either `Double` type or `BigDecimal` type. +- for now, there is no default way to compare entities in a 'number equality' way provided. E.g. a line with a length + of 1km compared to a line with a length of 1000m is actually of the same length, but calling `LineA.equals(LineB)` + would return `false` as the equality check does NOT convert units. If you want to compare two entity instances + based on their equivalence you have (for now) check for each quantity manually using their `isEquivalentTo()` + method. If you think you would benefit from a standard method that allows entity equivalence check, please consider + handing in an issue [Issues](https://github.com/ie3-institute/PowerSystemDataModel/issues). + Furthermore, the current existing implementation of `isEquivalentTo()` in indriya does not allow the provision of + a tolerance threshold that might be necessary when comparing values from floating point operations. We consider + providing such a method in our [PowerSystemUtils](https://github.com/ie3-institute/PowerSystemUtils) library. + If you think you would benefit from such a method, please consider handing in an issue + [Issues](https://github.com/ie3-institute/PowerSystemUtils/issues). + +**Conditional Parameters**
    +Some of the models have conditional parameters. When reading model data from a data source, their respective factories for building these +models can handle nulls and empty Strings (as well as any combination of those) safely. E.g.: When given parameters for a line's +`operationTime` where `operationStartTime` and `operationEndTime` are both `null` or `""`, the +factory will build an always-on line model. + +**Validation**
    +Information regarding validation of models can be found [here](/io/ValidationUtils). + + +## Input +Model classes you can use to describe a data set as input to power system simulations. + +```{toctree} +--- +maxdepth: 1 +--- +input/operator +``` + +### Grid Related Models + +```{toctree} +--- +maxdepth: 1 +--- +input/grid/node +input/grid/nodegraphic +input/grid/line +input/grid/linegraphic +input/grid/switch +input/grid/transformer2w +input/grid/transformer3w +input/grid/measurementunit +input/grid/gridcontainer +``` + +### Participant Related Models + +```{toctree} +--- +maxdepth: 1 +--- +input/participant/general +input/participant/bm +input/participant/chp +input/participant/ev +input/participant/evcs +input/participant/fixedfeedin +input/participant/hp +input/participant/load +input/participant/pv +input/participant/storage +input/participant/wec +input/participant/thermalbus +input/participant/thermalhouse +input/participant/cylindricalstorage +``` + +### Additional Data +Some models can use additional data for their calculations. + +```{toctree} +--- +maxdepth: 1 +--- +input/additionaldata/timeseries +input/additionaldata/idcoordinatesource +``` + +## Result +Model classes you can use to describe the outcome of a power system simulation. + +### Grid Related Models + +```{toctree} +--- +maxdepth: 1 +--- +result/grid/node +result/grid/connector +result/grid/line +result/grid/switch +result/grid/transformer +result/grid/transformer2w +result/grid/transformer3w +``` + +### Participant Related Models + +```{toctree} +--- +maxdepth: 1 +--- +result/participant/bm +result/participant/chp +result/participant/ev +result/participant/evcs +result/participant/fixedfeedin +result/participant/hp +result/participant/load +result/participant/pv +result/participant/storage +result/participant/wec +result/participant/thermalsink +result/participant/thermalstorage +result/participant/thermalunit +result/participant/thermalhouse +result/participant/cylindricalstorage +result/participant/systemparticipant +result/participant/flexoption +result/participant/em +``` diff --git a/docs/readthedocs/models/result/grid/connector.md b/docs/readthedocs/models/result/grid/connector.md new file mode 100644 index 000000000..6417c5a14 --- /dev/null +++ b/docs/readthedocs/models/result/grid/connector.md @@ -0,0 +1,51 @@ +(connector-result)= + +# Connector + +Representation of all kinds of connectors. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + +``` + +## Caveats + +Groups all available connectors i.e. lines, switches and transformers diff --git a/docs/readthedocs/models/result/grid/line.md b/docs/readthedocs/models/result/grid/line.md new file mode 100644 index 000000000..21efaa9d6 --- /dev/null +++ b/docs/readthedocs/models/result/grid/line.md @@ -0,0 +1,52 @@ +(line-result)= + +# Line + +Representation of an AC line. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/grid/node.md b/docs/readthedocs/models/result/grid/node.md new file mode 100644 index 000000000..0e7049baf --- /dev/null +++ b/docs/readthedocs/models/result/grid/node.md @@ -0,0 +1,44 @@ +(node-result)= + +# Node + +Representation of an electrical node, with no further distinction into bus bar, auxiliary node or others. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - vMag + - p.u. + - + + * - vAng + - degree + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/grid/switch.md b/docs/readthedocs/models/result/grid/switch.md new file mode 100644 index 000000000..c17342691 --- /dev/null +++ b/docs/readthedocs/models/result/grid/switch.md @@ -0,0 +1,40 @@ +(switch-result)= + +# Switch + +Representation of electrical switches. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - closed + - boolean + - status of the switching device + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/grid/transformer.md b/docs/readthedocs/models/result/grid/transformer.md new file mode 100644 index 000000000..c75bfa2f6 --- /dev/null +++ b/docs/readthedocs/models/result/grid/transformer.md @@ -0,0 +1,55 @@ +(transformer-result)= + +# Transformer + +Representation of transformers. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + + * - tapPos + - -- + - + +``` + +## Caveats + +Groups common information to both 2W and 3W transformers. diff --git a/docs/readthedocs/models/result/grid/transformer2w.md b/docs/readthedocs/models/result/grid/transformer2w.md new file mode 100644 index 000000000..58201162c --- /dev/null +++ b/docs/readthedocs/models/result/grid/transformer2w.md @@ -0,0 +1,55 @@ +(transformer2w-result)= + +# Two Winding Transformer + +Representation of two winding transformers. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + + * - tapPos + - -- + - + +``` + +## Caveats + +Assumption: Node A is the node at higher voltage. diff --git a/docs/readthedocs/models/result/grid/transformer3w.md b/docs/readthedocs/models/result/grid/transformer3w.md new file mode 100644 index 000000000..917bc59e7 --- /dev/null +++ b/docs/readthedocs/models/result/grid/transformer3w.md @@ -0,0 +1,64 @@ +(transformer3w-result)= + +# Three Winding Transformer + +Representation of three winding transformers. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - ZonedDateTime + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - iAMag + - ampere + - A stands for sending node + + * - iAAng + - degree + - + + * - iBMag + - ampere + - B stands for receiving node + + * - iBAng + - degree + - + + * - iCMag + - ampere + - B stands for receiving node + + * - iCAng + - degree + - + + * - tapPos + - -- + - + +``` + +## Caveats + +Assumption: Node A is the node at highest voltage and Node B is at intermediate voltage. +For model specifications please check corresponding input model documentation. diff --git a/docs/readthedocs/models/result/participant/bm.md b/docs/readthedocs/models/result/participant/bm.md new file mode 100644 index 000000000..39d9554f0 --- /dev/null +++ b/docs/readthedocs/models/result/participant/bm.md @@ -0,0 +1,44 @@ +(bm-result)= + +# Biomass plant + +Result of a biomass power plant. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/chp.md b/docs/readthedocs/models/result/participant/chp.md new file mode 100644 index 000000000..1f3dba2a5 --- /dev/null +++ b/docs/readthedocs/models/result/participant/chp.md @@ -0,0 +1,48 @@ +(chp-result)= + +# Combined Heat and Power Plant + +Result of a combined heat and power plant. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - qDot + - MW + - Thermal power + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/cylindricalstorage.md b/docs/readthedocs/models/result/participant/cylindricalstorage.md new file mode 100644 index 000000000..c028628c2 --- /dev/null +++ b/docs/readthedocs/models/result/participant/cylindricalstorage.md @@ -0,0 +1,48 @@ +(cylindricalstorage-result)= + +# Cylindrical Thermal Storage + +Result of a cylindrical thermal storage using a fluent to store thermal energy. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - energy + - MWh + - + + * - qDot + - MW + - heat demand of the sink + + * - fillLevel + - -- + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/ev.md b/docs/readthedocs/models/result/participant/ev.md new file mode 100644 index 000000000..5270599d4 --- /dev/null +++ b/docs/readthedocs/models/result/participant/ev.md @@ -0,0 +1,48 @@ +(ev-result)= + +# Electric Vehicle + +Result of an electric vehicle, that is occasionally connected to the grid via an {ref}`electric vehicle charging station`. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - soc + - % + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/evcs.md b/docs/readthedocs/models/result/participant/evcs.md new file mode 100644 index 000000000..48af32b5a --- /dev/null +++ b/docs/readthedocs/models/result/participant/evcs.md @@ -0,0 +1,44 @@ +(evcs-result)= + +# Electric Vehicle Charging Station + +This model is currently only a dummy implementation of an electric vehicle charging station. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/fixedfeedin.md b/docs/readthedocs/models/result/participant/fixedfeedin.md new file mode 100644 index 000000000..9cf5f64de --- /dev/null +++ b/docs/readthedocs/models/result/participant/fixedfeedin.md @@ -0,0 +1,45 @@ +(fixed-feed-in-result)= + +# Fixed Feed In Facility + +Result of a facility, that provides constant power feed in, as no further information about the actual behaviour of the +model can be derived. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/hp.md b/docs/readthedocs/models/result/participant/hp.md new file mode 100644 index 000000000..437dde0cb --- /dev/null +++ b/docs/readthedocs/models/result/participant/hp.md @@ -0,0 +1,48 @@ +(hp-result)= + +# Heat Pump + +Result of a heat pump. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - qDot + - MW + - Thermal power + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/load.md b/docs/readthedocs/models/result/participant/load.md new file mode 100644 index 000000000..8e0f40912 --- /dev/null +++ b/docs/readthedocs/models/result/participant/load.md @@ -0,0 +1,44 @@ +(load-result)= + +# Load + +Result of (mainly) domestic loads. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/pv.md b/docs/readthedocs/models/result/participant/pv.md new file mode 100644 index 000000000..38df0239d --- /dev/null +++ b/docs/readthedocs/models/result/participant/pv.md @@ -0,0 +1,44 @@ +(pv-result)= + +# Photovoltaic Power Plant + +Result of a photovoltaic power plant. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/storage.md b/docs/readthedocs/models/result/participant/storage.md new file mode 100644 index 000000000..cb2d8ded0 --- /dev/null +++ b/docs/readthedocs/models/result/participant/storage.md @@ -0,0 +1,48 @@ +(storage-result)= + +# Electrical Energy Storage + +Result of an electrochemical storage + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + * - soc + - -- + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalhouse.md b/docs/readthedocs/models/result/participant/thermalhouse.md new file mode 100644 index 000000000..db740a771 --- /dev/null +++ b/docs/readthedocs/models/result/participant/thermalhouse.md @@ -0,0 +1,45 @@ +(thermal-house-result)= + +# Thermal House + +Model for the thermal behaviour of a building. +This reflects a simple shoe box with transmission losses + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - qDot + - MW + - thermal heat demand of the sink + + * - indoorTemperature + - °C + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/wec.md b/docs/readthedocs/models/result/participant/wec.md new file mode 100644 index 000000000..cc04169b7 --- /dev/null +++ b/docs/readthedocs/models/result/participant/wec.md @@ -0,0 +1,44 @@ +(wec-result)= + +# Wind Energy Converter + +Result of a wind turbine. + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + +``` + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! From 7cc7f1ba250c8e1a253f4b3f52704bed908a69e0 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 17:57:19 +0100 Subject: [PATCH 125/228] Update line.md --- docs/readthedocs/models/input/grid/line.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index a7d23fe29..6f5b3c6fe 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -18,7 +18,7 @@ Representation of an AC line. | vRated | kV | Rated voltage | -A list with some standard line types can be found here: `Standard Line Types`_ +A list with some standard line types can be found here: `Standard Line Types` ### Entity Model @@ -42,9 +42,9 @@ A list with some standard line types can be found here: `Standard Line Types`_ ## Standard Line Types Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found -`here `_. This file can be used directly +`here `. This file can be used directly for any simulation with ``simona``. -The lines which source is ``simBench`` are from `here `_. +The lines which source is ``simBench`` are from `here `. ### Overhead Lines From 050d7f0de3ee739b6f2994befcb8605841ca1871 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:00:44 +0100 Subject: [PATCH 126/228] Update line.md --- docs/readthedocs/models/input/grid/line.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 6f5b3c6fe..365fb65fe 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -18,7 +18,7 @@ Representation of an AC line. | vRated | kV | Rated voltage | -A list with some standard line types can be found here: `Standard Line Types` +A list with some standard line types can be found here: [Standard Line Types](#standard-line-types) ### Entity Model @@ -42,9 +42,9 @@ A list with some standard line types can be found here: `Standard Line Types` ## Standard Line Types Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found -`here `. This file can be used directly +[here](https://github.com/ie3-institute/PowerSystemDataModel/tree/dev/input/StandardAssetTypes). This file can be used directly for any simulation with ``simona``. -The lines which source is ``simBench`` are from `here `. +The lines which source is ``simBench`` are from [here](https://simbench.de/en/download/datasets/). ### Overhead Lines From f76072a2b230531dc9535476b1f3756e2be55cc1 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:38:15 +0100 Subject: [PATCH 127/228] Update bm.md --- docs/readthedocs/models/input/participant/bm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 50902a98a..575f4e12c 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -28,7 +28,7 @@ Model of a biomass power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | From 904b33469baa3d808cf008e7c750d46c74149a05 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:39:06 +0100 Subject: [PATCH 128/228] Update chp.md --- docs/readthedocs/models/input/participant/chp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/chp.md b/docs/readthedocs/models/input/participant/chp.md index 0c0a2b6c4..ca64a6a8e 100644 --- a/docs/readthedocs/models/input/participant/chp.md +++ b/docs/readthedocs/models/input/participant/chp.md @@ -31,7 +31,7 @@ Combined heat and power plant. | operationTime | -- | Timely restriction of operation | | node | -- | | | thermalBus | -- | Connection point to the thermal system | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | type | -- | | | thermalStorage | -- | Reference to thermal storage | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | From 90cb6db52786ab2cca0c773dfe59f1bcf8ccb6c1 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:40:13 +0100 Subject: [PATCH 129/228] Update ev.md --- docs/readthedocs/models/input/participant/ev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md index a4f60a32d..4bd9c5316 100644 --- a/docs/readthedocs/models/input/participant/ev.md +++ b/docs/readthedocs/models/input/participant/ev.md @@ -2,7 +2,7 @@ # Electric Vehicle -Model of an electric vehicle, that is occasionally connected to the grid via an {ref}`electric vehicle charging system`. +Model of an electric vehicle, that is occasionally connected to the grid via an [electric vehicle charging system](evcs_model). ## Attributes, Units and Remarks From e29d7fd8978dd991ef0e9cb054085a72cda8a0a4 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:51:17 +0100 Subject: [PATCH 130/228] Update evcs.md --- docs/readthedocs/models/input/participant/evcs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/participant/evcs.md b/docs/readthedocs/models/input/participant/evcs.md index 666f3882c..d6730877e 100644 --- a/docs/readthedocs/models/input/participant/evcs.md +++ b/docs/readthedocs/models/input/participant/evcs.md @@ -16,11 +16,11 @@ station and has some limitations outlined below. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | -| type | -- | {ref}`Charging point type` (valid for all installed points) | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| type | -- | [Charging point type](evcs_point_types) (valid for all installed points) | | chargingPoints | -- | no of installed charging points @ the specific station | | cosPhiRated | -- | Rated power factor | -| locationType | -- | {ref}`Charging station location types` | +| locationType | -- | [Charging station location types](location_types) | ### Type Model From 6d1a8f60a7bd176c6649ac93541bc776524ec61d Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:52:10 +0100 Subject: [PATCH 131/228] Update fixedfeedin.md --- docs/readthedocs/models/input/participant/fixedfeedin.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.md b/docs/readthedocs/models/input/participant/fixedfeedin.md index 5a5119131..f3670a21f 100644 --- a/docs/readthedocs/models/input/participant/fixedfeedin.md +++ b/docs/readthedocs/models/input/participant/fixedfeedin.md @@ -14,7 +14,7 @@ model can be derived. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | sRated | kVA | Rated apparent power | | cosphiRated | -- | Rated power factor | From 96b03b796d39013b81a6e36047fa246d35e42b5f Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:53:11 +0100 Subject: [PATCH 132/228] Update hp.md --- docs/readthedocs/models/input/participant/hp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/hp.md b/docs/readthedocs/models/input/participant/hp.md index f1d248272..445079a30 100644 --- a/docs/readthedocs/models/input/participant/hp.md +++ b/docs/readthedocs/models/input/participant/hp.md @@ -28,7 +28,7 @@ Model of a heat pump. | operationTime | -- | Timely restriction of operation | | node | -- | | | thermalBus | -- | Connection point to the thermal system | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | type | -- | | ## Caveats From d7a97cd43dca012497a6132c12a61d6b5d0d1e52 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:55:26 +0100 Subject: [PATCH 133/228] Update pv.md --- docs/readthedocs/models/input/participant/pv.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/pv.md b/docs/readthedocs/models/input/participant/pv.md index 2bb2d4662..40eb51871 100644 --- a/docs/readthedocs/models/input/participant/pv.md +++ b/docs/readthedocs/models/input/participant/pv.md @@ -11,7 +11,7 @@ Detailed model of a photovoltaic power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | albedo | -- | [Albedo](https://en.wikipedia.org/wiki/Albedo) of the plant's surrounding | | azimuth | ° | Inclination in a compass directionSouth = 0°, West = 90°, East = -90° | | etaConv | % | Efficiency of the assets inverter | From 57af5b284a8d7bf51165846dfee296f32b225a16 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:56:03 +0100 Subject: [PATCH 134/228] Update storage.md --- docs/readthedocs/models/input/participant/storage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/storage.md b/docs/readthedocs/models/input/participant/storage.md index a24c8f430..5c6916c50 100644 --- a/docs/readthedocs/models/input/participant/storage.md +++ b/docs/readthedocs/models/input/participant/storage.md @@ -33,7 +33,7 @@ Model of an ideal electrical battery energy storage. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | type | -- | | | behaviour | -- | Foreseen operation strategy of the storage.Eligible input: *"market"*, *"grid"*, *"self"* | From 12ecb29af9c93f2d2b64836e16bd87b97b3b9054 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:56:37 +0100 Subject: [PATCH 135/228] Update thermalbus.md --- docs/readthedocs/models/input/participant/thermalbus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/thermalbus.md b/docs/readthedocs/models/input/participant/thermalbus.md index 03dde023c..24b7801c7 100644 --- a/docs/readthedocs/models/input/participant/thermalbus.md +++ b/docs/readthedocs/models/input/participant/thermalbus.md @@ -2,7 +2,7 @@ # Thermal Bus -A coupling point to thermal system - equivalent to {ref}`electrical node `. +A coupling point to thermal system - equivalent to [electrical node](node_model). ## Attributes, Units and Remarks From 3f70a59e2fac5fb0858903fbcf09780b21b70c81 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:58:10 +0100 Subject: [PATCH 136/228] Update wec.md --- docs/readthedocs/models/input/participant/wec.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/readthedocs/models/input/participant/wec.md b/docs/readthedocs/models/input/participant/wec.md index d67776f38..c9e8e1e6d 100644 --- a/docs/readthedocs/models/input/participant/wec.md +++ b/docs/readthedocs/models/input/participant/wec.md @@ -16,7 +16,7 @@ Model of a wind energy converter. | opex | € / MWh | Operational expenditure to operate one entity ofthis type | | sRated | kVA | Rated apparent power | | cosphiRated | -- | Rated power factor | -| cpCharacteristic | -- | Wind velocity dependent {ref}`Betz factors`. | +| cpCharacteristic | -- | Wind velocity dependent [Betz factors](wec_cp_characteristic). | | etaConv | % | Efficiency of the assets inverter | | rotorArea | m² | Area the rotor covers | | hubHeight | m | Height of the rotor hub | @@ -30,7 +30,7 @@ Model of a wind energy converter. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | +| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | From dbb0ec242aa051ee3f6923a1c3b9c1e1b4c82c6f Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Tue, 9 Jan 2024 19:03:36 +0100 Subject: [PATCH 137/228] Update bm.md --- docs/readthedocs/models/input/participant/bm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 575f4e12c..038a1c9ad 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -28,7 +28,7 @@ Model of a biomass power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](#participant_general_q_characteristic) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | From 571b9f6a3dd9a2346996aae8e0585f4a47bb0dd9 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:43:44 +0100 Subject: [PATCH 138/228] Update bm.md --- docs/readthedocs/models/input/participant/bm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 038a1c9ad..0a05b4988 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -28,7 +28,7 @@ Model of a biomass power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](#participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#Reactive_Power_Characteristics) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | From 531c5717c2cf455fdd1d849801c42e5187cd3ae0 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:46:09 +0100 Subject: [PATCH 139/228] Update bm.md --- docs/readthedocs/models/input/participant/bm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 0a05b4988..d63500bd6 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -28,7 +28,7 @@ Model of a biomass power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#Reactive_Power_Characteristics) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md##_Reactive_Power_Characteristics) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | From 1a1c79397dd2721976201ac095088b7b844ebedb Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:51:42 +0100 Subject: [PATCH 140/228] Update bm.md --- docs/readthedocs/models/input/participant/bm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index d63500bd6..71320a21a 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -28,7 +28,7 @@ Model of a biomass power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md##_Reactive_Power_Characteristics) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#_reactive_power_characteristics) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | From 38837b355b47cd78849beca3216102beb733dbc8 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:53:37 +0100 Subject: [PATCH 141/228] Update bm.md --- docs/readthedocs/models/input/participant/bm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 71320a21a..4430eb78e 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -28,7 +28,7 @@ Model of a biomass power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#_reactive_power_characteristics) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive_power_characteristics) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | From e9f8d73d59dd4d73de90340377bcc0d8074f93f4 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 10 Jan 2024 10:07:34 +0100 Subject: [PATCH 142/228] Add files via upload --- .../models/result/participant/em.md | 20 ++++++++++ .../models/result/participant/flexoption.md | 21 ++++++++++ .../result/participant/systemparticipant.md | 20 ++++++++++ .../models/result/participant/thermalhouse.md | 38 ++++--------------- .../models/result/participant/thermalsink.md | 19 ++++++++++ .../result/participant/thermalstorage.md | 20 ++++++++++ .../models/result/participant/thermalunit.md | 19 ++++++++++ 7 files changed, 126 insertions(+), 31 deletions(-) create mode 100644 docs/readthedocs/models/result/participant/em.md create mode 100644 docs/readthedocs/models/result/participant/flexoption.md create mode 100644 docs/readthedocs/models/result/participant/systemparticipant.md create mode 100644 docs/readthedocs/models/result/participant/thermalsink.md create mode 100644 docs/readthedocs/models/result/participant/thermalstorage.md create mode 100644 docs/readthedocs/models/result/participant/thermalunit.md diff --git a/docs/readthedocs/models/result/participant/em.md b/docs/readthedocs/models/result/participant/em.md new file mode 100644 index 000000000..6e2598118 --- /dev/null +++ b/docs/readthedocs/models/result/participant/em.md @@ -0,0 +1,20 @@ +(em-result)= + +# Energy Management + +Result of an energy management entity. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------- | ---- | ------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| p | MW | active power output | +| q | MW | reactive power output | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/flexoption.md b/docs/readthedocs/models/result/participant/flexoption.md new file mode 100644 index 000000000..6922d5f8b --- /dev/null +++ b/docs/readthedocs/models/result/participant/flexoption.md @@ -0,0 +1,21 @@ +(flexoption-result)= + +# Flexibility Option + +Result of a flexibility option. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------- | ---- | --------------------------------------------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| pRef | MW | active power that was suggested for regular usage by the system participant | +| pMin | MW | active minimal power that was determined by the system participant | +| pMax | MW | active maximum power that was determined by the system participant | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/systemparticipant.md b/docs/readthedocs/models/result/participant/systemparticipant.md new file mode 100644 index 000000000..225673b36 --- /dev/null +++ b/docs/readthedocs/models/result/participant/systemparticipant.md @@ -0,0 +1,20 @@ +(system-participant-result)= + +# System Participant + +Groups together all system participants such as PV, Storage etc. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------- | ---- | ------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| p | MW | | +| q | MVAr | | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalhouse.md b/docs/readthedocs/models/result/participant/thermalhouse.md index db740a771..6ca4891da 100644 --- a/docs/readthedocs/models/result/participant/thermalhouse.md +++ b/docs/readthedocs/models/result/participant/thermalhouse.md @@ -7,37 +7,13 @@ This reflects a simple shoe box with transmission losses ## Attributes, Units and Remarks -```{eval-rst} -.. list-table:: - :widths: 33 33 33 - :header-rows: 0 - - - * - Attribute - - Unit - - Remarks - - * - uuid - - -- - - uuid for the result entity - - * - time - - -- - - date and time for the produced result - - * - inputModel - - -- - - uuid for the associated input model - - * - qDot - - MW - - thermal heat demand of the sink - - * - indoorTemperature - - °C - - - -``` +| Attribute | Unit | Remarks | +| ----------------- | ---- | ------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| qDot | MW | thermal heat demand of the sink | +| indoorTemperature | °C | | ## Caveats diff --git a/docs/readthedocs/models/result/participant/thermalsink.md b/docs/readthedocs/models/result/participant/thermalsink.md new file mode 100644 index 000000000..e612b54a6 --- /dev/null +++ b/docs/readthedocs/models/result/participant/thermalsink.md @@ -0,0 +1,19 @@ +(thermal-sink-result)= + +# Thermal Sink + +Result of a thermal sink. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------- | ---- | ------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| qDot | MW | thermal heat demand | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalstorage.md b/docs/readthedocs/models/result/participant/thermalstorage.md new file mode 100644 index 000000000..ef18e4e16 --- /dev/null +++ b/docs/readthedocs/models/result/participant/thermalstorage.md @@ -0,0 +1,20 @@ +(thermal-storage-result)= + +# Thermal Storage + +Result of a thermal storage. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------- | ---- | ------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| energy | MWh | | +| qDot | MW | heat flowing in | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/result/participant/thermalunit.md b/docs/readthedocs/models/result/participant/thermalunit.md new file mode 100644 index 000000000..25b7ee402 --- /dev/null +++ b/docs/readthedocs/models/result/participant/thermalunit.md @@ -0,0 +1,19 @@ +(thermal-unit-result)= + +# Thermal Unit + +Result of a thermal unit. + +## Attributes, Units and Remarks + +| Attribute | Unit | Remarks | +| ---------- | ---- | ------------------------------------- | +| uuid | -- | uuid for the result entity | +| time | -- | date and time for the produced result | +| inputModel | -- | uuid for the associated input model | +| qDot | MW | thermal power exchanged | + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! From aedafc19b46209c633e35562a73621c255e8e848 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 10 Jan 2024 13:02:21 +0100 Subject: [PATCH 143/228] !test --- .../models/input/participant/bm.md | 4 +-- .../models/input/participant/chp.md | 24 ++++++++--------- .../models/input/participant/ev.md | 2 +- .../models/input/participant/evcs.md | 10 +++---- .../models/input/participant/fixedfeedin.md | 2 +- .../models/input/participant/hp.md | 2 +- .../models/input/participant/load.md | 6 ++--- .../models/input/participant/pv.md | 2 +- .../models/input/participant/storage.md | 2 +- .../models/input/participant/thermalbus.md | 2 +- .../models/input/participant/wec.md | 26 +++++++++---------- .../models/result/participant/ev.md | 2 +- 12 files changed, 42 insertions(+), 42 deletions(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 4430eb78e..7c9890b74 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -22,13 +22,13 @@ Model of a biomass power plant. ### Entity Model | Attribute | Unit | Remarks | -| ---------------- | ------- | ------------------------------------------------------------------------------------------------------- | +| ---------------- | ------- |---------------------------------------------------------------------------------------------------------| | uuid | -- | | | id | -- | Human readable identifier | | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive_power_characteristics) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | | costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | diff --git a/docs/readthedocs/models/input/participant/chp.md b/docs/readthedocs/models/input/participant/chp.md index ca64a6a8e..d93b81be5 100644 --- a/docs/readthedocs/models/input/participant/chp.md +++ b/docs/readthedocs/models/input/participant/chp.md @@ -23,18 +23,18 @@ Combined heat and power plant. ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| thermalBus | -- | Connection point to the thermal system | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | -| type | -- | | -| thermalStorage | -- | Reference to thermal storage | -| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | +| Attribute | Unit | Remarks | +| ---------------- | ---- |----------------------------------------------------------------------------------------| +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| node | -- | | +| thermalBus | -- | Connection point to the thermal system | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | +| type | -- | | +| thermalStorage | -- | Reference to thermal storage | +| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | ## Caveats diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md index 4bd9c5316..9053e1b4c 100644 --- a/docs/readthedocs/models/input/participant/ev.md +++ b/docs/readthedocs/models/input/participant/ev.md @@ -2,7 +2,7 @@ # Electric Vehicle -Model of an electric vehicle, that is occasionally connected to the grid via an [electric vehicle charging system](evcs_model). +Model of an electric vehicle, that is occasionally connected to the grid via an [electric vehicle charging system](evcs.md#electric-vehicle-charging-station). ## Attributes, Units and Remarks diff --git a/docs/readthedocs/models/input/participant/evcs.md b/docs/readthedocs/models/input/participant/evcs.md index d6730877e..ca80e7e23 100644 --- a/docs/readthedocs/models/input/participant/evcs.md +++ b/docs/readthedocs/models/input/participant/evcs.md @@ -10,17 +10,17 @@ station and has some limitations outlined below. ### Entity Model | Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| ---------------- | ---- |--------------------------------------------------------------------------------------| | uuid | -- | | | id | -- | Human readable identifier | | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | -| type | -- | [Charging point type](evcs_point_types) (valid for all installed points) | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | +| type | -- | [Charging point type](#charging-point-types) (valid for all installed points) | | chargingPoints | -- | no of installed charging points @ the specific station | | cosPhiRated | -- | Rated power factor | -| locationType | -- | [Charging station location types](location_types) | +| locationType | -- | [Charging station location types](#location-types) | ### Type Model @@ -28,7 +28,7 @@ In contrast to other models, electric vehicle charging station types are not con but 'inline' of a charging station entry. This is justified by the fact, that the station type (in contrast to e.g. the type of a wind energy converter) only consists of a few, more or less standardized parameters, that are (most of the time) equal for all manufacturers. Hence, to simplify the type model handling, types are provided either by a string -literal of their id or by providing a custom one. See {ref}`Charging point types` for details of on +literal of their id or by providing a custom one. See [Charging point types](evcs.md#charging-point-types) for details of on available standard types and how to use custom types. The actual model definition for charging point types looks as follows: diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.md b/docs/readthedocs/models/input/participant/fixedfeedin.md index f3670a21f..31882cce2 100644 --- a/docs/readthedocs/models/input/participant/fixedfeedin.md +++ b/docs/readthedocs/models/input/participant/fixedfeedin.md @@ -14,7 +14,7 @@ model can be derived. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | | sRated | kVA | Rated apparent power | | cosphiRated | -- | Rated power factor | diff --git a/docs/readthedocs/models/input/participant/hp.md b/docs/readthedocs/models/input/participant/hp.md index 445079a30..bf5a95114 100644 --- a/docs/readthedocs/models/input/participant/hp.md +++ b/docs/readthedocs/models/input/participant/hp.md @@ -28,7 +28,7 @@ Model of a heat pump. | operationTime | -- | Timely restriction of operation | | node | -- | | | thermalBus | -- | Connection point to the thermal system | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | | type | -- | | ## Caveats diff --git a/docs/readthedocs/models/input/participant/load.md b/docs/readthedocs/models/input/participant/load.md index 95736ac34..2b8b0cdc0 100644 --- a/docs/readthedocs/models/input/participant/load.md +++ b/docs/readthedocs/models/input/participant/load.md @@ -7,14 +7,14 @@ Model of (mainly) domestic loads. ## Attributes, Units and Remarks | Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | +| ---------------- | ---- |--------------------------------------------------------------------------------------| | uuid | -- | | | id | -- | Human readable identifier | | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | {ref}`Reactive power characteristic` to follow | -| loadProfile | -- | {ref}`Load profile` as model behaviour | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | +| loadProfile | -- | [Load profile](#load-profiles) as model behaviour | | dsm | -- | Whether the load is able to follow demand side management signals | | eConsAnnual | kWh | Annual energy consumption | | sRated | kVA | Rated apparent power | diff --git a/docs/readthedocs/models/input/participant/pv.md b/docs/readthedocs/models/input/participant/pv.md index 40eb51871..f25569b7d 100644 --- a/docs/readthedocs/models/input/participant/pv.md +++ b/docs/readthedocs/models/input/participant/pv.md @@ -11,7 +11,7 @@ Detailed model of a photovoltaic power plant. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | | albedo | -- | [Albedo](https://en.wikipedia.org/wiki/Albedo) of the plant's surrounding | | azimuth | ° | Inclination in a compass directionSouth = 0°, West = 90°, East = -90° | | etaConv | % | Efficiency of the assets inverter | diff --git a/docs/readthedocs/models/input/participant/storage.md b/docs/readthedocs/models/input/participant/storage.md index 5c6916c50..53ebe0db0 100644 --- a/docs/readthedocs/models/input/participant/storage.md +++ b/docs/readthedocs/models/input/participant/storage.md @@ -33,7 +33,7 @@ Model of an ideal electrical battery energy storage. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | | type | -- | | | behaviour | -- | Foreseen operation strategy of the storage.Eligible input: *"market"*, *"grid"*, *"self"* | diff --git a/docs/readthedocs/models/input/participant/thermalbus.md b/docs/readthedocs/models/input/participant/thermalbus.md index 24b7801c7..52e41877e 100644 --- a/docs/readthedocs/models/input/participant/thermalbus.md +++ b/docs/readthedocs/models/input/participant/thermalbus.md @@ -2,7 +2,7 @@ # Thermal Bus -A coupling point to thermal system - equivalent to [electrical node](node_model). +A coupling point to thermal system - equivalent to [electrical node](https://powersystemdatamodel.readthedocs.io/en/latest/models.md/result.md/grid.md/node.md#node). ## Attributes, Units and Remarks diff --git a/docs/readthedocs/models/input/participant/wec.md b/docs/readthedocs/models/input/participant/wec.md index c9e8e1e6d..aeb2bb4ff 100644 --- a/docs/readthedocs/models/input/participant/wec.md +++ b/docs/readthedocs/models/input/participant/wec.md @@ -8,18 +8,18 @@ Model of a wind energy converter. ### Type Model -| Attribute | Unit | Remarks | -| ---------------- | ------- | ------------------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | -| cpCharacteristic | -- | Wind velocity dependent [Betz factors](wec_cp_characteristic). | -| etaConv | % | Efficiency of the assets inverter | -| rotorArea | m² | Area the rotor covers | -| hubHeight | m | Height of the rotor hub | +| Attribute | Unit | Remarks | +| ---------------- | ------- |---------------------------------------------------------------| +| uuid | -- | | +| id | -- | Human readable identifier | +| capex | € | Capital expenditure to purchase one entity of this type | +| opex | € / MWh | Operational expenditure to operate one entity ofthis type | +| sRated | kVA | Rated apparent power | +| cosphiRated | -- | Rated power factor | +| cpCharacteristic | -- | Wind velocity dependent [Betz factors](#betz-characteristic). | +| etaConv | % | Efficiency of the assets inverter | +| rotorArea | m² | Area the rotor covers | +| hubHeight | m | Height of the rotor hub | ### Entity Model @@ -30,7 +30,7 @@ Model of a wind energy converter. | operator | -- | | | operationTime | -- | Timely restriction of operation | | node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](participant_general_q_characteristic) to follow | +| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | | type | -- | | | marketReaction | -- | Whether to adapt output based on (volatile)market price or not | diff --git a/docs/readthedocs/models/result/participant/ev.md b/docs/readthedocs/models/result/participant/ev.md index 5270599d4..766096883 100644 --- a/docs/readthedocs/models/result/participant/ev.md +++ b/docs/readthedocs/models/result/participant/ev.md @@ -2,7 +2,7 @@ # Electric Vehicle -Result of an electric vehicle, that is occasionally connected to the grid via an {ref}`electric vehicle charging station`. +Result of an electric vehicle, that is occasionally connected to the grid via an [electric vehicle charging system](evcs.md#electric-vehicle-charging-station). ## Attributes, Units and Remarks From f90eeab667ddda09a1087d0fb0a814d2d098c1f7 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 10 Jan 2024 13:07:26 +0100 Subject: [PATCH 144/228] !test --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3bea51e7..2dbff7ad1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use nio paths instead of strings for file path [#723](https://github.com/ie3-institute/PowerSystemDataModel/issues/723) - Data source will throw an exceptions instead of returning an empty optionals [#707](https://github.com/ie3-institute/PowerSystemDataModel/issues/707) - Improving `ValidationUtils` [#758](https://github.com/ie3-institute/PowerSystemDataModel/issues/758) +- conversion from rst to markdown myst[#979](https://github.com/ie3-institute/PowerSystemDataModel/pull/985) ## [3.0.0] - 2023-02-16 From f813e5e1e4c5954b30d00c667496b03a1da4d37b Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Fri, 12 Jan 2024 18:49:05 +0100 Subject: [PATCH 145/228] !test --- .../models/input/participant/bm.rst | 66 ----------------- .../models/input/participant/chp.rst | 69 ----------------- .../models/input/participant/ev.rst | 55 -------------- .../models/input/participant/fixedfeedin.rst | 34 --------- .../models/input/participant/hp.rst | 59 --------------- .../models/input/participant/load.rst | 60 --------------- .../models/input/participant/pv.rst | 46 ------------ .../models/input/participant/storage.rst | 74 ------------------- .../models/input/participant/wec.rst | 72 ------------------ 9 files changed, 535 deletions(-) delete mode 100644 docs/readthedocs/models/input/participant/bm.rst delete mode 100644 docs/readthedocs/models/input/participant/chp.rst delete mode 100644 docs/readthedocs/models/input/participant/ev.rst delete mode 100644 docs/readthedocs/models/input/participant/fixedfeedin.rst delete mode 100644 docs/readthedocs/models/input/participant/hp.rst delete mode 100644 docs/readthedocs/models/input/participant/load.rst delete mode 100644 docs/readthedocs/models/input/participant/pv.rst delete mode 100644 docs/readthedocs/models/input/participant/storage.rst delete mode 100644 docs/readthedocs/models/input/participant/wec.rst diff --git a/docs/readthedocs/models/input/participant/bm.rst b/docs/readthedocs/models/input/participant/bm.rst deleted file mode 100644 index 5314251e4..000000000 --- a/docs/readthedocs/models/input/participant/bm.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. _bm_model: - -Biomass plant -------------- -Model of a biomass power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+---------------------+---------+------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+============================================================+ -| uuid | -- | | -+---------------------+---------+------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+------------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+---------------------+---------+------------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+---------------------+---------+------------------------------------------------------------+ -| activePowerGradient | % / h | Maximum permissible rate of change of power | -+---------------------+---------+------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+---------------------+---------+------------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| costControlled | -- | | Whether to adapt output based on the difference | -| | | | between production costs and fixed feed in tariff or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| feedInTariff | € / MWh | Fixed feed in tariff | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/chp.rst b/docs/readthedocs/models/input/participant/chp.rst deleted file mode 100644 index 14cd2fd46..000000000 --- a/docs/readthedocs/models/input/participant/chp.rst +++ /dev/null @@ -1,69 +0,0 @@ -.. _chp_model: - -Combined Heat and Power Plant ------------------------------ -Combined heat and power plant. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+-------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+=========+=========================================================+ -| uuid | -- | | -+-------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+---------+---------------------------------------------------------+ -| etaEl | % | Efficiency of the electrical inverter | -+-------------+---------+---------------------------------------------------------+ -| etaThermal | % | Thermal efficiency of the system | -+-------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+---------+---------------------------------------------------------+ -| pThermal | kW | Rated thermal power (at rated electrical power) | -+-------------+---------+---------------------------------------------------------+ -| pOwn | kW | Needed self-consumption | -+-------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalStorage | -- | Reference to thermal storage | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/ev.rst b/docs/readthedocs/models/input/participant/ev.rst deleted file mode 100644 index cd98d6d86..000000000 --- a/docs/readthedocs/models/input/participant/ev.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _ev_model: - -Electric Vehicle ------------------------------ -Model of an electric vehicle, that is occasionally connected to the grid via an :ref:`electric vehicle charging system`. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" -+-------------+----------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+==========+=========================================================+ -| uuid | -- | | -+-------------+----------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+----------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+----------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+----------+---------------------------------------------------------+ -| eStorage | kWh | Available battery capacity | -+-------------+----------+---------------------------------------------------------+ -| eCons | kWh / km | Energy consumption per driven kilometre | -+-------------+----------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+----------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+----------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+---------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+=================================+ -| uuid | -- | | -+------------------+---------+---------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+---------------------------------+ -| operator | -- | | -+------------------+---------+---------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+---------------------------------+ -| node | -- | | -+------------------+---------+---------------------------------+ -| type | -- | | -+------------------+---------+---------------------------------+ - -Caveats -^^^^^^^ -The :code:`node` attribute only marks the vehicles home connection point. -The actual connection to the grid is always given through :code:`EvcsInput`'s relation. diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.rst b/docs/readthedocs/models/input/participant/fixedfeedin.rst deleted file mode 100644 index f317d5534..000000000 --- a/docs/readthedocs/models/input/participant/fixedfeedin.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _fixed_feed_in_model: - -Fixed Feed In Facility ----------------------- -Model of a facility, that provides constant power feed in, as no further information about the actual behaviour of the -model can be derived. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/hp.rst b/docs/readthedocs/models/input/participant/hp.rst deleted file mode 100644 index e28cc3c52..000000000 --- a/docs/readthedocs/models/input/participant/hp.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. _hp_model: - -Heat Pump ---------- -Model of a heat pump. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+-------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=============+=========+=========================================================+ -| uuid | -- | | -+-------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+-------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+-------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+-------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+-------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+-------------+---------+---------------------------------------------------------+ -| pThermal | kW | Rated thermal power (at rated electrical power) | -+-------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| thermalBus | -- | Connection point to the thermal system | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ - - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/load.rst b/docs/readthedocs/models/input/participant/load.rst deleted file mode 100644 index f2aa5aa23..000000000 --- a/docs/readthedocs/models/input/participant/load.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. _load_model: - -Load ----- -Model of (mainly) domestic loads. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+---------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+======================================================================================+ -| uuid | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| loadProfile | -- | :ref:`Load profile` as model behaviour | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| dsm | -- | Whether the load is able to follow demand side management signals | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| eConsAnnual | kWh | Annual energy consumption | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - -.. _load_lp: - -Load Profiles -^^^^^^^^^^^^^^^^^^^^^^ -The :code:`LoadProfile` is an interface, that forces it's implementing classes to have a :code:`String` *key* -and being able to parse a :code:`String` to a :code:`LoadProfile`. -Its only purpose is to give note, which load profile has to be used by the simulation. -The actual profile has to be provided by the simulation itself. -If no matching standard load profile is known, :code:`LoadProfile#NO_LOAD_PROFILE` can be used. - -To assist the user in marking the desired load profile, the enum :code:`BdewLoadProfile` provides a collection of -commonly known German standard electricity load profiles, defined by the bdew (Bundesverband der Energie- und -Wasserwirtschaft; engl. Federal Association of the Energy and Water Industry). For more details see -`the corresponding website (German only) `_. - -Furthermore there are :code:`TemperatureDependantLoadProfiles` which can be used to note usage of load profiles for night heating storages or heat pumps for example. -The profiles rely on the VDN description for interruptable loads. -For more details see `here (German only) `_. -:code:`NbwTemperatureDependantLoadProfiles` provides sample temperature dependant load profiles that can be used. -The `NbwTemperatureDependantLoadProfiles` consists of load profiles "ep1" for heat pumps and "ez2" for night storage heating. diff --git a/docs/readthedocs/models/input/participant/pv.rst b/docs/readthedocs/models/input/participant/pv.rst deleted file mode 100644 index 3308f9c6b..000000000 --- a/docs/readthedocs/models/input/participant/pv.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _pv_model: - -Photovoltaic Power Plant ------------------------- -Detailed model of a photovoltaic power plant. - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| albedo | -- | `Albedo `_ of the plant's surrounding | -+------------------+---------+--------------------------------------------------------------------------------------+ -| azimuth | ° | | Inclination in a compass direction | -| | | | South = 0°, West = 90°, East = -90° | -+------------------+---------+--------------------------------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+------------------+---------+--------------------------------------------------------------------------------------+ -| elevationAngle | ° | Tilted inclination from horizontal [0°, 90°] | -+------------------+---------+--------------------------------------------------------------------------------------+ -| kG | -- | Generator correction factor merging technical influences | -+------------------+---------+--------------------------------------------------------------------------------------+ -| kT | -- | Temperature correction factor merging thermal influences | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+--------------------------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/participant/storage.rst b/docs/readthedocs/models/input/participant/storage.rst deleted file mode 100644 index 19d768a30..000000000 --- a/docs/readthedocs/models/input/participant/storage.rst +++ /dev/null @@ -1,74 +0,0 @@ -.. _storage_model: - -Electrical Energy Storage -------------------------- -Model of an ideal electrical battery energy storage. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+---------------------+---------+---------------------------------------------------------+ -| Attribute | Unit | Remarks | -+=====================+=========+=========================================================+ -| uuid | -- | | -+---------------------+---------+---------------------------------------------------------+ -| id | -- | Human readable identifier | -+---------------------+---------+---------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+---------------------+---------+---------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+---------------------+---------+---------------------------------------------------------+ -| eStorage | kWh | Battery capacity | -+---------------------+---------+---------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+---------------------+---------+---------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+---------------------+---------+---------------------------------------------------------+ -| pMax | kW | | Maximum permissible active power | -| | | | infeed or consumption | -+---------------------+---------+---------------------------------------------------------+ -| activePowerGradient | % / h | Maximum permissible rate of change of power | -+---------------------+---------+---------------------------------------------------------+ -| eta | % | Efficiency of the electrical inverter | -+---------------------+---------+---------------------------------------------------------+ -| dod | % | | Maximum permissible depth of discharge. 80 % dod | -| | | | is equivalent to a state of charge of 20 %. | -+---------------------+---------+---------------------------------------------------------+ -| lifeTime | h | Permissible hours of full use | -+---------------------+---------+---------------------------------------------------------+ -| lifeCycle | -- | Permissible amount of full cycles | -+---------------------+---------+---------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| behaviour | -- | | Foreseen operation strategy of the storage. | -| | | | Eligible input: *"market"*, *"grid"*, *"self"* | -+------------------+---------+--------------------------------------------------------------------------------------+ - - -Caveats -^^^^^^^ -The field :code:`behaviour` will be removed in version 1.x, as this is an information, that is only important to a -smaller sub set of simulation applications. diff --git a/docs/readthedocs/models/input/participant/wec.rst b/docs/readthedocs/models/input/participant/wec.rst deleted file mode 100644 index d0769d92e..000000000 --- a/docs/readthedocs/models/input/participant/wec.rst +++ /dev/null @@ -1,72 +0,0 @@ -.. _wec_model: - -Wind Energy Converter ---------------------- -Model of a wind energy converter. - -Attributes, Units and Remarks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Type Model -"""""""""" - -+------------------+---------+----------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================+ -| uuid | -- | | -+------------------+---------+----------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+----------------------------------------------------------------------+ -| capex | € | Capital expenditure to purchase one entity of this type | -+------------------+---------+----------------------------------------------------------------------+ -| opex | € / MWh | | Operational expenditure to operate one entity of | -| | | | this type | -+------------------+---------+----------------------------------------------------------------------+ -| sRated | kVA | Rated apparent power | -+------------------+---------+----------------------------------------------------------------------+ -| cosphiRated | -- | Rated power factor | -+------------------+---------+----------------------------------------------------------------------+ -| cpCharacteristic | -- | Wind velocity dependent :ref:`Betz factors`. | -+------------------+---------+----------------------------------------------------------------------+ -| etaConv | % | Efficiency of the assets inverter | -+------------------+---------+----------------------------------------------------------------------+ -| rotorArea | m² | Area the rotor covers | -+------------------+---------+----------------------------------------------------------------------+ -| hubHeight | m | Height of the rotor hub | -+------------------+---------+----------------------------------------------------------------------+ - -Entity Model -"""""""""""" - -+------------------+---------+--------------------------------------------------------------------------------------+ -| Attribute | Unit | Remarks | -+==================+=========+======================================================================================+ -| uuid | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| id | -- | Human readable identifier | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operator | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| operationTime | -- | Timely restriction of operation | -+------------------+---------+--------------------------------------------------------------------------------------+ -| node | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| qCharacteristics | -- | :ref:`Reactive power characteristic` to follow | -+------------------+---------+--------------------------------------------------------------------------------------+ -| type | -- | | -+------------------+---------+--------------------------------------------------------------------------------------+ -| marketReaction | -- | | Whether to adapt output based on (volatile) | -| | | | market price or not | -+------------------+---------+--------------------------------------------------------------------------------------+ - -Caveats -^^^^^^^ -Nothing - at least not known. -If you found something, please contact us! - -.. _wec_cp_characteristic: - -Betz Characteristic -^^^^^^^^^^^^^^^^^^^ -A collection of wind velocity to Betz factor pairs to be applied in -`Betz's law `_ to determine the wind energy coming onto the rotor area. From 59517a1c01e260f69f5b99c04bf61f30d66b37b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:54:08 +0000 Subject: [PATCH 146/228] Bump com.diffplug.spotless from 6.23.3 to 6.24.0 (#987) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 05cc7a2cf..47f0da787 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'maven-publish' id 'signing' id 'pmd' // code check, working on source code - id 'com.diffplug.spotless' version '6.23.3' //code format + id 'com.diffplug.spotless' version '6.24.0' //code format id 'com.github.spotbugs' version '5.2.5' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation From f9384e04a3a987aaa40f0a2d1d880568bbd1f5d2 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Mon, 15 Jan 2024 17:54:10 +0100 Subject: [PATCH 147/228] !test --- .../models/input/participant/bm.md | 119 +++++++-- .../models/input/participant/chp.md | 128 ++++++++-- .../input/participant/cylindricalstorage.md | 63 ++++- .../models/input/participant/ev.md | 97 ++++++-- .../models/input/participant/evcs.md | 226 ++++++++++++++---- .../models/input/participant/fixedfeedin.md | 53 +++- .../models/input/participant/hp.md | 103 ++++++-- .../models/input/participant/load.md | 68 +++++- .../models/input/participant/pv.md | 90 +++++-- .../models/input/participant/storage.md | 136 +++++++++-- .../models/input/participant/thermalbus.md | 38 ++- .../models/input/participant/thermalhouse.md | 58 ++++- .../models/input/participant/wec.md | 118 +++++++-- .../models/result/participant/em.md | 39 ++- .../models/result/participant/flexoption.md | 43 +++- .../result/participant/systemparticipant.md | 39 ++- .../models/result/participant/thermalhouse.md | 38 ++- .../models/result/participant/thermalsink.md | 33 ++- .../result/participant/thermalstorage.md | 38 ++- .../models/result/participant/thermalunit.md | 33 ++- 20 files changed, 1272 insertions(+), 288 deletions(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index 7c9890b74..f729dae28 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -8,31 +8,106 @@ Model of a biomass power plant. ### Type Model -| Attribute | Unit | Remarks | -| ------------------- | ------- | --------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| activePowerGradient | % / h | Maximum permissible rate of change of power | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | -| etaConv | % | Efficiency of the assets inverter | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - activePowerGradient + - % / h + - Maximum permissible rate of change of power + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + + * - etaConv + - % + - Efficiency of the assets inverter + +``` ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ------- |---------------------------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| type | -- | | -| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | -| costControlled | -- | Whether to adapt output based on the differencebetween production costs and fixed feed in tariff or not | -| feedInTariff | € / MWh | Fixed feed in tariff | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - type + - -- + - + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + + * - costControlled + - -- + - | Whether to adapt output based on the difference + | between production costs and fixed feed in tariff or not + + * - feedInTariff + - € / MWh + - Fixed feed in tariff + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/chp.md b/docs/readthedocs/models/input/participant/chp.md index d93b81be5..939cc455b 100644 --- a/docs/readthedocs/models/input/participant/chp.md +++ b/docs/readthedocs/models/input/participant/chp.md @@ -8,33 +8,113 @@ Combined heat and power plant. ### Type Model -| Attribute | Unit | Remarks | -| ----------- | ------- | --------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| etaEl | % | Efficiency of the electrical inverter | -| etaThermal | % | Thermal efficiency of the system | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | -| pThermal | kW | Rated thermal power (at rated electrical power) | -| pOwn | kW | Needed self-consumption | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - etaEl + - % + - Efficiency of the electrical inverter + + * - etaThermal + - % + - Thermal efficiency of the system + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + + * - pThermal + - kW + - Rated thermal power (at rated electrical power) + + * - pOwn + - kW + - Needed self-consumption + +``` ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ---- |----------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| thermalBus | -- | Connection point to the thermal system | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| type | -- | | -| thermalStorage | -- | Reference to thermal storage | -| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - thermalBus + - -- + - Connection point to the thermal system + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - type + - -- + - + + * - thermalStorage + - -- + - Reference to thermal storage + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/cylindricalstorage.md b/docs/readthedocs/models/input/participant/cylindricalstorage.md index 598d6c52a..5e3b8d40c 100644 --- a/docs/readthedocs/models/input/participant/cylindricalstorage.md +++ b/docs/readthedocs/models/input/participant/cylindricalstorage.md @@ -6,18 +6,57 @@ Model of a cylindrical thermal storage using a fluent to store thermal energy. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ------------------- | -------------------- | -------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| thermalBus | -- | Connection point to the thermal system | -| storageVolumeLvl | m³ | Overall available storage volume | -| storageVolumeLvlMin | m³ | Minimum permissible storage volume | -| inletTemp | °C | Temperature of the inlet | -| returnTemp | °C | Temperature of the outlet | -| c | kWh / (K $\cdot$ m³) | Specific heat capacity of the storage medium | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - thermalBus + - -- + - Connection point to the thermal system + + * - storageVolumeLvl + - m³ + - Overall available storage volume + + * - storageVolumeLvlMin + - m³ + - Minimum permissible storage volume + + * - inletTemp + - °C + - Temperature of the inlet + + * - returnTemp + - °C + - Temperature of the outlet + + * - c + - kWh / (K :math:`\cdot` m³) + - Specific heat capacity of the storage medium + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md index 9053e1b4c..ee2690d1c 100644 --- a/docs/readthedocs/models/input/participant/ev.md +++ b/docs/readthedocs/models/input/participant/ev.md @@ -8,27 +8,88 @@ Model of an electric vehicle, that is occasionally connected to the grid via an ### Type Model -| Attribute | Unit | Remarks | -| ----------- | -------- | --------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| eStorage | kWh | Available battery capacity | -| eCons | kWh / km | Energy consumption per driven kilometre | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - eStorage + - kWh + - Available battery capacity + + * - eCons + - kWh / km + - Energy consumption per driven kilometre + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + +``` ### Entity Model -| Attribute | Unit | Remarks | -| ------------- | ---- | ------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| type | -- | | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - type + - -- + - + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/evcs.md b/docs/readthedocs/models/input/participant/evcs.md index ca80e7e23..82d2585de 100644 --- a/docs/readthedocs/models/input/participant/evcs.md +++ b/docs/readthedocs/models/input/participant/evcs.md @@ -9,18 +9,57 @@ station and has some limitations outlined below. ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ---- |--------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| type | -- | [Charging point type](#charging-point-types) (valid for all installed points) | -| chargingPoints | -- | no of installed charging points @ the specific station | -| cosPhiRated | -- | Rated power factor | -| locationType | -- | [Charging station location types](#location-types) | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - type + - -- + - [Charging point type](#charging-point-types) (valid for all installed points) + + * - chargingPoints + - -- + - no of installed charging points @ the specific station + + * - cosPhiRated + - -- + - Rated power factor + + * - locationType + - -- + - [Charging station location types](#location-types) + +``` ### Type Model @@ -33,12 +72,33 @@ available standard types and how to use custom types. The actual model definition for charging point types looks as follows: -| Attribute | Unit | Remarks | -| ------------------- | ---- | --------------------------------------------- | -| id | -- | Human readable identifier | -| sRated | kVA | Rated apparent power | -| electricCurrentType | -- | Electric current type | -| synonymousIds | -- | Set of alternative human readable identifiers | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - id + - -- + - Human readable identifier + + * - sRated + - kVA + - Rated apparent power + + * - electricCurrentType + - -- + - Electric current type + + * - synonymousIds + - -- + - Set of alternative human readable identifiers + +``` (evcs-point-types)= @@ -50,20 +110,79 @@ To simplify the application of electric vehicle charging stations, some common s They can either by used code wise or directly from database or file input by referencing their id or one of their synonymous ids. All standard types can be found in {code}`edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointTypeUtils`. -| id | synonymous ids | sRated in kVA | electric current type | -| ---------------------------- | -------------------------------------------- | ------------- | --------------------- | -| HouseholdSocket | household, hhs, schuko-simple | 2.3 | AC | -| BlueHouseholdSocket | bluehousehold, bhs, schuko-camping | 3.6 | AC | -| Cee16ASocket | cee16 | 11 | AC | -| Cee32ASocket | cee32 | 22 | AC | -| Cee63ASocket | cee63 | 43 | AC | -| ChargingStationType1 | cst1, stationtype1, cstype1 | 7.2 | AC | -| ChargingStationType2 | cst2, stationtype2, cstype2 | 43 | AC | -| ChargingStationCcsComboType1 | csccs1, csccscombo1 | 11 | DC | -| ChargingStationCcsComboType2 | csccs2, csccscombo2 | 50 | DC | -| TeslaSuperChargerV1 | tesla1, teslav1, supercharger1, supercharger | 135 | DC | -| TeslaSuperChargerV2 | tesla2, teslav2, supercharger2 | 150 | DC | -| TeslaSuperChargerV3 | tesla3, teslav3, supercharger3 | 250 | DC | +```{eval-rst} +.. list-table:: + :widths: 25 25 25 25 + :header-rows: 0 + + + * - id + - synonymous ids + - sRated in kVA + - electric current type + + * - HouseholdSocket + - household, hhs, schuko-simple + - 2.3 + - AC + + * - BlueHouseholdSocket + - bluehousehold, bhs, schuko-camping + - 3.6 + - AC + + * - Cee16ASocket + - cee16 + - 11 + - AC + + * - Cee32ASocket + - cee32 + - 22 + - AC + + * - Cee63ASocket + - cee63 + - 43 + - AC + + * - ChargingStationType1 + - cst1, stationtype1, cstype1 + - 7.2 + - AC + + * - ChargingStationType2 + - cst2, stationtype2, cstype2 + - 43 + - AC + + * - ChargingStationCcsComboType1 + - csccs1, csccscombo1 + - 11 + - DC + + * - ChargingStationCcsComboType2 + - csccs2, csccscombo2 + - 50 + - DC + + * - TeslaSuperChargerV1 + - tesla1, teslav1, supercharger1, supercharger + - 135 + - DC + + * - TeslaSuperChargerV2 + - tesla2, teslav2, supercharger2 + - 150 + - DC + + * - TeslaSuperChargerV3 + - tesla3, teslav3, supercharger3 + - 250 + - DC + + +``` ### Custom Types @@ -95,14 +214,41 @@ be in kVA! Evcs location types describe the type of charging location of a charging station. Parsing of these types is case-insensitive and underscores and minuses are ignored, that means "charginghubtown" is parsed as type {code}`CHARGING_HUB_TOWN`. -| type name | public/private | description | -| -------------------- | -------------- | ------------------------------ | -| HOME | private | Charging at home | -| WORK | private | Charging at work | -| CUSTOMER_PARKING | public | Charging at store parking lots | -| STREET | public | Charging at street side | -| CHARGING_HUB_TOWN | public | Charging at hub in town | -| CHARGING_HUB_HIGHWAY | public | Charging at hub out of town | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - type name + - public/private + - description + + * - HOME + - private + - Charging at home + + * - WORK + - private + - Charging at work + + * - CUSTOMER_PARKING + - public + - Charging at store parking lots + + * - STREET + - public + - Charging at street side + + * - CHARGING_HUB_TOWN + - public + - Charging at hub in town + + * - CHARGING_HUB_HIGHWAY + - public + - Charging at hub out of town + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.md b/docs/readthedocs/models/input/participant/fixedfeedin.md index 31882cce2..65c1b2d2b 100644 --- a/docs/readthedocs/models/input/participant/fixedfeedin.md +++ b/docs/readthedocs/models/input/participant/fixedfeedin.md @@ -7,16 +7,49 @@ model can be derived. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/hp.md b/docs/readthedocs/models/input/participant/hp.md index bf5a95114..08bdf16c2 100644 --- a/docs/readthedocs/models/input/participant/hp.md +++ b/docs/readthedocs/models/input/participant/hp.md @@ -8,28 +8,93 @@ Model of a heat pump. ### Type Model -| Attribute | Unit | Remarks | -| ----------- | ------- | --------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | -| pThermal | kW | Rated thermal power (at rated electrical power) | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + + * - pThermal + - kW + - Rated thermal power (at rated electrical power) + +``` ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| thermalBus | -- | Connection point to the thermal system | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| type | -- | | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - thermalBus + - -- + - Connection point to the thermal system + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - type + - -- + - + + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/load.md b/docs/readthedocs/models/input/participant/load.md index 2b8b0cdc0..edc31f60d 100644 --- a/docs/readthedocs/models/input/participant/load.md +++ b/docs/readthedocs/models/input/participant/load.md @@ -6,19 +6,61 @@ Model of (mainly) domestic loads. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------------- | ---- |--------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| loadProfile | -- | [Load profile](#load-profiles) as model behaviour | -| dsm | -- | Whether the load is able to follow demand side management signals | -| eConsAnnual | kWh | Annual energy consumption | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - loadProfile + - -- + - [Load profile](#load-profiles) as model behaviour + + * - dsm + - -- + - Whether the load is able to follow demand side management signals + + * - eConsAnnual + - kWh + - Annual energy consumption + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/pv.md b/docs/readthedocs/models/input/participant/pv.md index f25569b7d..a7c1d7af6 100644 --- a/docs/readthedocs/models/input/participant/pv.md +++ b/docs/readthedocs/models/input/participant/pv.md @@ -4,23 +4,79 @@ Detailed model of a photovoltaic power plant. -| Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| albedo | -- | [Albedo](https://en.wikipedia.org/wiki/Albedo) of the plant's surrounding | -| azimuth | ° | Inclination in a compass directionSouth = 0°, West = 90°, East = -90° | -| etaConv | % | Efficiency of the assets inverter | -| elevationAngle | ° | Tilted inclination from horizontal \[0°, 90°\] | -| kG | -- | Generator correction factor merging technical influences | -| kT | -- | Temperature correction factor merging thermal influences | -| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - albedo + - -- + - `Albedo `_ of the plant's surrounding + + * - azimuth + - ° + - | Inclination in a compass direction + | South = 0°, West = 90°, East = -90° + + * - etaConv + - % + - Efficiency of the assets inverter + + * - elevationAngle + - ° + - Tilted inclination from horizontal [0°, 90°] + + * - kG + - -- + - Generator correction factor merging technical influences + + * - kT + - -- + - Temperature correction factor merging thermal influences + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/storage.md b/docs/readthedocs/models/input/participant/storage.md index 53ebe0db0..443248140 100644 --- a/docs/readthedocs/models/input/participant/storage.md +++ b/docs/readthedocs/models/input/participant/storage.md @@ -8,34 +8,120 @@ Model of an ideal electrical battery energy storage. ### Type Model -| Attribute | Unit | Remarks | -| ------------------- | ------- | ------------------------------------------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| eStorage | kWh | Battery capacity | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | -| pMax | kW | Maximum permissible active powerinfeed or consumption | -| activePowerGradient | % / h | Maximum permissible rate of change of power | -| eta | % | Efficiency of the electrical inverter | -| dod | % | Maximum permissible depth of discharge. 80 % dodis equivalent to a state of charge of 20 %. | -| lifeTime | h | Permissible hours of full use | -| lifeCycle | -- | Permissible amount of full cycles | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - eStorage + - kWh + - Battery capacity + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + + * - pMax + - kW + - | Maximum permissible active power + | infeed or consumption + + * - activePowerGradient + - % / h + - Maximum permissible rate of change of power + + * - eta + - % + - Efficiency of the electrical inverter + + * - dod + - % + - | Maximum permissible depth of discharge. 80 % dod + | is equivalent to a state of charge of 20 %. + + * - lifeTime + - h + - Permissible hours of full use + + * - lifeCycle + - -- + - Permissible amount of full cycles + +``` ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ---- | ----------------------------------------------------------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| type | -- | | -| behaviour | -- | Foreseen operation strategy of the storage.Eligible input: *"market"*, *"grid"*, *"self"* | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - type + - -- + - + + * - behaviour + - -- + - | Foreseen operation strategy of the storage. + | Eligible input: *"market"*, *"grid"*, *"self"* + + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/thermalbus.md b/docs/readthedocs/models/input/participant/thermalbus.md index 52e41877e..8fcdfd1af 100644 --- a/docs/readthedocs/models/input/participant/thermalbus.md +++ b/docs/readthedocs/models/input/participant/thermalbus.md @@ -6,13 +6,37 @@ A coupling point to thermal system - equivalent to [electrical node](https://pow ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ------------- | ---- | -------------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| bus | -- | Connection point to the thermal system | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - bus + - -- + - Connection point to the thermal system + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/thermalhouse.md b/docs/readthedocs/models/input/participant/thermalhouse.md index d6da0148d..c7a2bb6d6 100644 --- a/docs/readthedocs/models/input/participant/thermalhouse.md +++ b/docs/readthedocs/models/input/participant/thermalhouse.md @@ -7,17 +7,53 @@ This reflects a simple shoe box with transmission losses ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| --------------------- | ------- | ------------------------------- | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| ethLosses | kW / K | Thermal losses | -| ethCapa | kWh / K | Thermal capacity | -| targetTemperature | °C | Desired target temperature | -| upperTemperatureLimit | °C | Upper temperature boundary | -| lowerTemperatureLimit | °C | Lower temperature boundary | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - ethLosses + - kW / K + - Thermal losses + + * - ethCapa + - kWh / K + - Thermal capacity + + * - targetTemperature + - °C + - Desired target temperature + + * - upperTemperatureLimit + - °C + - Upper temperature boundary + + * - lowerTemperatureLimit + - °C + - Lower temperature boundary + +``` ## Caveats diff --git a/docs/readthedocs/models/input/participant/wec.md b/docs/readthedocs/models/input/participant/wec.md index aeb2bb4ff..600ad0f72 100644 --- a/docs/readthedocs/models/input/participant/wec.md +++ b/docs/readthedocs/models/input/participant/wec.md @@ -8,31 +8,105 @@ Model of a wind energy converter. ### Type Model -| Attribute | Unit | Remarks | -| ---------------- | ------- |---------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| capex | € | Capital expenditure to purchase one entity of this type | -| opex | € / MWh | Operational expenditure to operate one entity ofthis type | -| sRated | kVA | Rated apparent power | -| cosphiRated | -- | Rated power factor | -| cpCharacteristic | -- | Wind velocity dependent [Betz factors](#betz-characteristic). | -| etaConv | % | Efficiency of the assets inverter | -| rotorArea | m² | Area the rotor covers | -| hubHeight | m | Height of the rotor hub | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - capex + - € + - Capital expenditure to purchase one entity of this type + + * - opex + - € / MWh + - | Operational expenditure to operate one entity of + | this type + + * - sRated + - kVA + - Rated apparent power + + * - cosPhiRated + - -- + - Rated power factor + + * - cpCharacteristic + - -- + - Wind velocity dependent [Betz factors](#betz-characteristic). + + * - etaConv + - % + - Efficiency of the assets inverter + + * - rotorArea + - m² + - Area the rotor covers + + * - hubHeight + - m + - Height of the rotor hub + +``` ### Entity Model -| Attribute | Unit | Remarks | -| ---------------- | ---- | ------------------------------------------------------------------------------------ | -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| node | -- | | -| qCharacteristics | -- | [Reactive power characteristic](general.md#reactive-power-characteristics) to follow | -| type | -- | | -| marketReaction | -- | Whether to adapt output based on (volatile)market price or not | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - + + * - id + - -- + - Human readable identifier + + * - operator + - -- + - + + * - operationTime + - -- + - Timely restriction of operation + + * - node + - -- + - + + * - qCharacteristics + - -- + - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + + * - type + - -- + - + + * - marketReaction + - -- + - | Whether to adapt output based on (volatile) + | market price or not + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/em.md b/docs/readthedocs/models/result/participant/em.md index 6e2598118..7cc9977e3 100644 --- a/docs/readthedocs/models/result/participant/em.md +++ b/docs/readthedocs/models/result/participant/em.md @@ -6,13 +6,38 @@ Result of an energy management entity. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------- | ---- | ------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| p | MW | active power output | -| q | MW | reactive power output | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - active power output + + * - q + - MW + - reactive power output + + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/flexoption.md b/docs/readthedocs/models/result/participant/flexoption.md index 6922d5f8b..34039e082 100644 --- a/docs/readthedocs/models/result/participant/flexoption.md +++ b/docs/readthedocs/models/result/participant/flexoption.md @@ -6,14 +6,41 @@ Result of a flexibility option. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------- | ---- | --------------------------------------------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| pRef | MW | active power that was suggested for regular usage by the system participant | -| pMin | MW | active minimal power that was determined by the system participant | -| pMax | MW | active maximum power that was determined by the system participant | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - pRef + - MW + - active power that was suggested for regular usage by the system participant + + * - pMin + - MW + - active minimal power that was determined by the system participant + + * - pMax + - MW + - active maximum power that was determined by the system participant + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/systemparticipant.md b/docs/readthedocs/models/result/participant/systemparticipant.md index 225673b36..54dabb959 100644 --- a/docs/readthedocs/models/result/participant/systemparticipant.md +++ b/docs/readthedocs/models/result/participant/systemparticipant.md @@ -6,13 +6,38 @@ Groups together all system participants such as PV, Storage etc. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------- | ---- | ------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| p | MW | | -| q | MVAr | | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - p + - MW + - + + * - q + - MVAr + - + + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/thermalhouse.md b/docs/readthedocs/models/result/participant/thermalhouse.md index 6ca4891da..db740a771 100644 --- a/docs/readthedocs/models/result/participant/thermalhouse.md +++ b/docs/readthedocs/models/result/participant/thermalhouse.md @@ -7,13 +7,37 @@ This reflects a simple shoe box with transmission losses ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ----------------- | ---- | ------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| qDot | MW | thermal heat demand of the sink | -| indoorTemperature | °C | | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - qDot + - MW + - thermal heat demand of the sink + + * - indoorTemperature + - °C + - + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/thermalsink.md b/docs/readthedocs/models/result/participant/thermalsink.md index e612b54a6..26ae65631 100644 --- a/docs/readthedocs/models/result/participant/thermalsink.md +++ b/docs/readthedocs/models/result/participant/thermalsink.md @@ -6,12 +6,33 @@ Result of a thermal sink. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------- | ---- | ------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| qDot | MW | thermal heat demand | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - qDot + - MW + - thermal heat demand + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/thermalstorage.md b/docs/readthedocs/models/result/participant/thermalstorage.md index ef18e4e16..1ec9958e7 100644 --- a/docs/readthedocs/models/result/participant/thermalstorage.md +++ b/docs/readthedocs/models/result/participant/thermalstorage.md @@ -6,13 +6,37 @@ Result of a thermal storage. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------- | ---- | ------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| energy | MWh | | -| qDot | MW | heat flowing in | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - energy + - MWh + - + + * - qDot + - MW + - heat flowing in + +``` ## Caveats diff --git a/docs/readthedocs/models/result/participant/thermalunit.md b/docs/readthedocs/models/result/participant/thermalunit.md index 25b7ee402..624aeb38b 100644 --- a/docs/readthedocs/models/result/participant/thermalunit.md +++ b/docs/readthedocs/models/result/participant/thermalunit.md @@ -6,12 +6,33 @@ Result of a thermal unit. ## Attributes, Units and Remarks -| Attribute | Unit | Remarks | -| ---------- | ---- | ------------------------------------- | -| uuid | -- | uuid for the result entity | -| time | -- | date and time for the produced result | -| inputModel | -- | uuid for the associated input model | -| qDot | MW | thermal power exchanged | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Unit + - Remarks + + * - uuid + - -- + - uuid for the result entity + + * - time + - -- + - date and time for the produced result + + * - inputModel + - -- + - uuid for the associated input model + + * - qDot + - MW + - thermal power exchanged + +``` ## Caveats From 9c55a77f9c153cfe735eced441374944e42044d7 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Tue, 16 Jan 2024 16:52:50 +0100 Subject: [PATCH 148/228] !test --- .../models/input/grid/gridcontainer.md | 92 ---------------- docs/readthedocs/models/input/grid/line.md | 102 ------------------ .../models/input/grid/transformer2w.md | 77 ------------- 3 files changed, 271 deletions(-) delete mode 100644 docs/readthedocs/models/input/grid/gridcontainer.md delete mode 100644 docs/readthedocs/models/input/grid/line.md delete mode 100644 docs/readthedocs/models/input/grid/transformer2w.md diff --git a/docs/readthedocs/models/input/grid/gridcontainer.md b/docs/readthedocs/models/input/grid/gridcontainer.md deleted file mode 100644 index e40d20c5c..000000000 --- a/docs/readthedocs/models/input/grid/gridcontainer.md +++ /dev/null @@ -1,92 +0,0 @@ -# Grid Container - -The grid container groups all entities that are able to form a full grid model. -Two types of grid containers are available: - -**JointGridContainer**
    -This one is able to hold a grid model spanning several voltage levels. -On instantiation, a sub grid topology graph is built. -This graph holds `SubGridContainers` as vertices and transformer models as edges. -Thereby, you are able to discover the topology of galvanically separated sub grids and access those sub models -directly. - -and - -**SubGridContainer**
    -This one is meant to hold all models, that form a galvanically separated sub grid. -In contrast to the `JointGridContainer` it only covers one voltage level and therefore has an additional field -for the predominant voltage level apparent in the container. -Why predominant? -As of convention, the `SubGridContainers` hold also reference to the transformers leading to higher sub grids -and their higher voltage coupling point. - -![Sub grid boundary definition for transformers with upstream switchgear](../../../_static/figures/transformerWithSwitchGear.png) - -Let's shed a more detailed light on the boundaries of a sub grid as of our definition. -This especially is important, if the switchgear of the transformer is modeled in detail. -We defined, that all nodes in upstream direction of the transformer, that are connected by switches *only* (therefore -are within the switchgear) are counted towards the inferior sub grid structure (here "2"), although they belong to a -different voltage level. -This decision is taken, because we assume, that the interest to operate on the given switchgear will most likely be -placed in the inferior grid structure. - -The "real" coupling node A is not comprised in the sub grids node collection, but obviously has reference through the -switch between nodes A and B. - -A synoptic overview of both classes' attributes is given here: - -## Attributes, Units and Remarks - -| Attribute | Unit | Remarks | -|:------------------------|:-----|:--------------------------------------------------| -| gridName | -- | Human readable identifier | -| rawGrid | -- | see below | -| systemParticipants | -- | see below | -| graphics | -- | see below | -| subGridTopologyGraph | -- | topology of sub grids - only `JointGridContainer` | -| predominantVoltageLevel | -- | main voltage level - only `SubGridContainer` | -| subnet | -- | sub grid number - only `SubGridContainer` | - - -### RawGridElements -This sub container simply holds: - -* [nodes](/models/input/grid/node) -* [lines](/models/input/grid/line) -* [switches](/models/input/grid/switch) -* [two winding transformers](/models/input/grid/transformer2w) -* [three winding transformers](/models/input/grid/transformer3w) -* [measurement units](/models/input/grid/measurementunit) - - -### SystemParticipants -This sub container simply holds: - -* [biomass plant](/models/input/participant/bm) -* [combined heat and power plant](/models/input/participant/chp) -- [electric vehicles](/models/input/participant/ev) -- [electric vehicle charging stations](/models/input/participant/evcs) -- [fixed feed in facilities](/models/input/participant/fixedfeedin) -- [heat pumps](/models/input/participant/hp) -- [loads](/models/input/participant/load) -- [photovoltaic power plants](/models/input/participant/pv) -- [electrical energy storages](/models/input/participant/storage) -- [wind energy converters](/models/input/participant/wec) - -and the needed nested thermal models. - - -### Graphics -This sub container simply holds: - -* [schematic node graphics](/models/input/grid/nodegraphic) -* [schematic line graphics](/models/input/grid/linegraphic) - - -## Container Concept - -![Model container concept](../../../_static/figures/uml/ModelContainerConcept.png) - -## Caveats -Nothing - at least not known. -If you found something, please contact us! \ No newline at end of file diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md deleted file mode 100644 index 365fb65fe..000000000 --- a/docs/readthedocs/models/input/grid/line.md +++ /dev/null @@ -1,102 +0,0 @@ -# Line - -Representation of an AC line. - -## Attributes, Units and Remarks - -### Type Model - -| Attribute | Unit | Remarks | -|:----------|:--------|:--------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| r | Ω / km | Phase resistance per length | -| x | Ω / km | Phase reactance per length | -| g | µS / km | Phase-to-ground conductance per length | -| b | µS / km | Phase-to-ground susceptance per length | -| iMax | A | Maximum permissible current | -| vRated | kV | Rated voltage | - - -A list with some standard line types can be found here: [Standard Line Types](#standard-line-types) - - -### Entity Model - -| Attribute | Unit | Remarks | -|:------------------|:-----|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| nodeA | -- | | -| nodeB | -- | | -| parallelDevices | -- | overall amount of parallel lines to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two lines using the specified parameters) | -| type | -- | | -| length | km | | -| geoPosition | -- | Line string of geographical locations describing the
    position of the line | -| olmCharacteristic | -- | Characteristic of possible overhead line monitoring
    Can be given in the form of `olm:{}`.
    The pairs are wind velocity in x and permissible
    loading in y. | - - - -## Standard Line Types - -Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found -[here](https://github.com/ie3-institute/PowerSystemDataModel/tree/dev/input/StandardAssetTypes). This file can be used directly -for any simulation with ``simona``. -The lines which source is ``simBench`` are from [here](https://simbench.de/en/download/datasets/). - - -### Overhead Lines - -Some standard overhead lines. - -| uuid | b | g | iMax | id | r | vRated | x | source | -|:--------------------------------------|--------:|----:|--------:|--------------------:|---------:|-------:|---------:|:---------| -| 91617ab8-3de2-4fba-be45-a54473ba09a9 | 3.61283 | 0.0 | 1300.0 | LineType_1 | 0.08 | 380.0 | 0.32 | simBench | -| b3b231ae-a971-4432-80d7-4ce2f2a56a32 | 3.22799 | 0.0 | 1950.0 | LineType_4 | 0.033333 | 380.0 | 0.333333 | simBench | -| 24595f91-8295-41f8-a3d8-c9418d860d9c | 1.076 | 0.0 | 650.0 | LineType_6 | 0.1 | 380.0 | 1.0 | simBench | -| f0fc57ec-aa5a-4484-b870-be70a5428cbd | 6.45597 | 0.0 | 3900.0 | LineType_9 | 0.016667 | 380.0 | 0.166667 | simBench | -| ba70d8e7-b082-49bc-8c45-3c10e1236c3e | 8.60796 | 0.0 | 5200.0 | LineType_10 | 0.0125 | 380.0 | 0.125 | simBench | -| veee8eeed-62c9-4345-aa5a-3743fe32007d | 12.9119 | 0.0 | 7800.0 | LineType_11 | 0.008333 | 380.0 | 0.083333 | simBench | -| d2b16935-dcd7-44d2-8623-cec4c703ccdc | 17.2159 | 0.0 | 10400.0 | LineType_12 | 0.00625 | 380.0 | 0.0625 | simBench | -| a490c96e-6e90-485a-b0d7-adeb81fa09cd | 4.30398 | 0.0 | 2600.0 | LineType_2 | 0.025 | 220.0 | 0.25 | simBench | -| 5272bcbc-7d0e-4759-85fa-27943fd8d19c | 2.15199 | 0.0 | 1300.0 | LineType_3 | 0.05 | 220.0 | 0.5 | simBench | -| dd0bac07-de8d-4608-af36-b8ff2819f55a | 7.22566 | 0.0 | 2600.0 | LineType_5 | 0.04 | 220.0 | 0.16 | simBench | -| 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 | 1.80642 | 0.0 | 650.0 | LineType_7 | 0.16 | 220.0 | 0.64 | simBench | -| bdc83a85-c796-4bcb-8b79-8988dc2804f8 | 5.41925 | 0.0 | 1950.0 | LineType_8 | 0.053333 | 220.0 | 0.213333 | simBench | -| 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 | 2.8274 | 0.0 | 680.0 | Al/St_265/35 | 0.1095 | 110.0 | 0.296 | simBench | -| 5b542a50-b0c2-4497-ba90-b2b31aafaa0b | 2.87456 | 0.0 | 170.0 | 34-AL1/6-ST1A 20.0 | 0.8342 | 20.0 | 0.382 | simBench | -| d594cd67-4459-44bc-9594-db710372db71 | 2.98451 | 0.0 | 210.0 | 48-AL1/8-ST1A 20.0 | 0.5939 | 20.0 | 0.372 | simBench | -| 305e60ad-cfd2-4127-9d83-8d9b21942d93 | 3.04734 | 0.0 | 290.0 | 70-AL1/11-ST1A 20.0 | 0.4132 | 20.0 | 0.36 | simBench | -| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 0.4 | 1.8769 | 0.4 | 0.409 | simBench | -| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 0.4 | 1.2012 | 0.4 | 0.394 | simBench | - - -### Cables - -Some standard cables. - -| uuid | b | g | iMax | id | r | vRated | x | source | -|:-------------------------------------|--------:|----:|------:|-----------------------------:|-------:|-------:|----------:|:---------| -| cc59abd4-770b-45d2-98c8-919c91f1ca4b | 58.7478 | 0.0 | 652.0 | 1x630_RM/50 | 0.122 | 110.0 | 0.122522 | simBench | -| 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 | 59.3761 | 0.0 | 158.0 | NA2XS2Y 1x50 RM/25 12/20 kV | 0.64 | 20.0 | 0.145 | simBench | -| 4adef9e6-5e40-416d-8bd2-b6768d156c54 | 59.6903 | 0.0 | 220.0 | NA2XS2Y 1x70 RM/25 12/20 kV | 0.443 | 20.0 | 0.132 | simBench | -| d5c03484-59c2-44d5-a2ee-63a5a0d623b4 | 67.8584 | 0.0 | 252.0 | NA2XS2Y 1x95 RM/25 12/20 kV | 0.313 | 20.0 | 0.132 | simBench | -| 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 | 72.2566 | 0.0 | 283.0 | NA2XS2Y 1x120 RM/25 12/20 kV | 0.253 | 20.0 | 0.119 | simBench | -| 36243493-eb31-4e81-bd13-b54ef59c4cbe | 78.5398 | 0.0 | 319.0 | NA2XS2Y 1x150 RM/25 12/20 kV | 0.206 | 20.0 | 0.116 | simBench | -| 437689f8-366d-4b04-b42d-d7a754db074b | 85.7655 | 0.0 | 362.0 | NA2XS2Y 1x185 RM/25 12/20 kV | 0.161 | 20.0 | 0.117 | simBench | -| b459115d-d4eb-47d4-b7ec-625339ee0dcc | 95.5044 | 0.0 | 421.0 | NA2XS2Y 1x240 RM/25 12/20 kV | 0.122 | 20.0 | 0.112 | simBench | -| 9aed5818-c037-4033-8d15-806c62d70b8f | 113.097 | 0.0 | 315.0 | NA2XS2Y 1x150 RM/25 6/10 kV | 0.206 | 10.0 | 0.11 | simBench | -| 60d37bc7-157a-4c32-b1b5-e74c10d70531 | 127.549 | 0.0 | 358.0 | NA2XS2Y 1x185 RM/25 6/10 kV | 0.161 | 10.0 | 0.11 | simBench | -| a3ced617-2ffd-4593-b8e9-bcad9a521aab | 143.257 | 0.0 | 416.0 | NA2XS2Y 1x240 RM/25 6/10 kV | 0.122 | 10.0 | 0.105 | simBench | -| f0484bb6-9d0d-4d13-bfbe-b83783b8352a | 150.796 | 0.0 | 471.0 | NA2XS2Y 1x300 RM/25 6/10 kV | 0.1 | 10.0 | 0.0974 | simBench | -| 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 | 169.646 | 0.0 | 535.0 | NA2XS2Y 1x400 RM/25 6/10 kV | 0.078 | 10.0 | 0.0942 | simBench | -| 65181464-230a-487b-978f-81e406e9eb22 | 260.752 | 0.0 | 270.0 | NAYY 4x150SE 0.6/1kV | 0.2067 | 0.4 | 0.0804248 | simBench | -| 1200d9eb-6d10-47f3-8543-abea43b128d3 | 273.319 | 0.0 | 357.0 | NAYY 4x240SE 0.6/1kV | 0.1267 | 0.4 | 0.0797965 | simBench | - - -## Caveats - -Nothing - at least not known. -If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md deleted file mode 100644 index a213b09dc..000000000 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ /dev/null @@ -1,77 +0,0 @@ -# Two Winding Transformer - -Model of a two winding transformer. -It is assumed, that node A is the node with higher voltage. - -## Attributes, Units and Remarks - -### Type Model - -All impedances and admittances are given with respect to the higher voltage side. -As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit representations. - -| Attribute | Unit | Remarks | -|:----------|:-----|:--------------------------------------------------------| -| id | | Human readable identifier | -| rSc | Ω | Short circuit resistance | -| xSc | Ω | Short circuit reactance | -| gM | nS | No load conductance | -| bM | nS | No load susceptance | -| sRated | kVA | Rated apparent power | -| vRatedA | kV | Rated voltage at higher voltage terminal | -| vRatedB | kV | Rated voltage at lower voltage terminal | -| dV | % | Voltage magnitude increase per tap position | -| dPhi | ° | Voltage angle increase per tap position | -| tapSide | | true, if tap changer is installed on lower voltage side | -| tapNeutr | | Neutral tap position | -| tapMin | | Minimum tap position | -| tapMax | | Maximum tap position | - -A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ - - -### Entity Model - -| Attribute | Unit | Remarks | -|:----------------|:-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| nodeA | -- | Higher voltage node | -| nodeB | -- | Lower voltage node | -| parallelDevices | -- | overall amount of parallel transformers to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two transformers using the specified parameters) | -| type | -- | | -| tapPos | -- | Current position of the tap changer | -| autoTap | -- | true, if there is a tap regulation apparent and active | - - -## Standard Two Winding Transformer Types - - -Following there are some standard two winding transformer types with their source. A ``csv file`` containing the types listed -below can be found `here `_. This -file can be used directly for any simulation with ``simona``. -The transformers which source is ``simBench`` are from `here `_. - - -| uuid | bM | dPhi | dV | gM | id | rSc | sRated | tapMax | tapMin | tapNeutr | tapSide | vRatedA | vRatedB | xSc | source | -|:-------------------------------------|--------------------:|-----:|----:|-------------------:|------------------------------------:|--------------------:|---------:|-------:|-------:|---------:|--------:|--------:|--------:|-------------------:|:---------| -| 5a890aae-b9c9-4ebf-8a49-8850ae9df402 | 219.43184927638458 | 0.0 | 1.0 | 1731.3019390581715 | Typ_x_380/220 | 0.6016666666666666 | 600000.0 | 16 | -16 | 0 | false | 380.0 | 220.0 | 44.51926783240413 | simBench | -| 03159c0d-126e-47cc-9871-066870df3a3f | 1193.4686938790917 | 0.0 | 1.0 | 831.0249307479223 | 350MVA_380/110 | 1.0608979591836734 | 350000.0 | 16 | -16 | 0 | false | 380.0 | 110.0 | 9 0.75951402093402 | simBench | -| 7cb289cb-e6af-4470-9c68-e5a91978a5e7 | 2013.800484464662 | 0.0 | 1.0 | 1446.280991735537 | 300MVA_220/110 | 0.20704444444444442 | 300000.0 | 16 | -16 | 0 | false | 220.0 | 110.0 | 19.358892855688435 | simBench | -| 73644bc6-78cf-4882-9837-e6508cab092d | 867.7685950413226 | 0.0 | 1.5 | 1157.0247933884295 | 25 MVA 110/20 kV YNd5 | 1.9843999999999997 | 25000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 58.04608993412045 | simBench | -| 6935ae26-374a-4c24-aeee-6d5760d6ddf3 | 720.4791642215993 | 0.0 | 1.5 | 1487.603305785124 | 40 MVA 110/20 kV YNd5 | 1.0285 | 40000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 48.994205909984906 | simBench | -| b49db20f-b8b5-4265-8318-f669b9d121e9 | 1015.6886939330394 | 0.0 | 1.5 | 1818.181818181818 | 63 MVA 110/10 kV YNd5 | .6146031746031745 | 63000.0 | 9 | -9 | 0 | false | 110.0 | 10.0 | 34.56596500037509 | simBench | -| 0843b836-cee4-4a8c-81a4-098400fe91cf | 24.495101551166183 | 0.0 | 2.5 | 2999.9999999999995 | 0.4 MVA 20/0.4 kV Dyn5 ASEA | 11.999999999999998 | 400.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 58.787753826796276 | simBench | -| a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 | 9.591746452043322 | 0.0 | 2.5 | 1149.9999999999998 | 0.16 MVA 20/0.4 kV DOTE 160/20 SGB | 36.71874999999999 | 160.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.01469452961452 | simBench | -| 0644c120-a247-425f-bbe4-31b153f7f440 | 16.583241729259253 | 0.0 | 2.5 | 2199.9999999999995 | 0.25 MVA 20/0.4 kV Dyn5 ASEA | 21.119999999999997 | 250.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.6479876986153 | simBench | -| bdf22ee4-deba-41f4-a187-ae00638a6880 | 36.47380569074435 | 0.0 | 2.5 | 4125.0 | 0.63 MVA 20/0.4 kV Dyn5 ASEA | 6.953892668178382 | 630.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 37.45518044666632 | simBench | -| a0cbd90a-4e9f-47db-8dca-041d3a288f77 | 145.8952227629774 | 0.0 | 2.5 | 16500.0 | 0.63 MVA 10/0.4 kV Dyn5 ASEA | 1.7384731670445954 | 630.0 | 2 | -2 | 0 | false | 10.0 | 0.4 | 9.36379511166658 | simBench | - - - -## Caveats - -Nothing - at least not known. -If you found something, please contact us! From 883997b0e23a844b9662d718225ddb86486ca495 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Tue, 16 Jan 2024 17:20:45 +0100 Subject: [PATCH 149/228] !test --- .../models/input/grid/gridcontainer.md | 124 +++++++++++++++ docs/readthedocs/models/input/grid/line.md | 146 ++++++++++++++++++ .../models/input/grid/transformer2w.md | 77 +++++++++ 3 files changed, 347 insertions(+) create mode 100644 docs/readthedocs/models/input/grid/gridcontainer.md create mode 100644 docs/readthedocs/models/input/grid/line.md create mode 100644 docs/readthedocs/models/input/grid/transformer2w.md diff --git a/docs/readthedocs/models/input/grid/gridcontainer.md b/docs/readthedocs/models/input/grid/gridcontainer.md new file mode 100644 index 000000000..4a093beec --- /dev/null +++ b/docs/readthedocs/models/input/grid/gridcontainer.md @@ -0,0 +1,124 @@ +# Grid Container + +The grid container groups all entities that are able to form a full grid model. +Two types of grid containers are available: + +**JointGridContainer**
    +This one is able to hold a grid model spanning several voltage levels. +On instantiation, a sub grid topology graph is built. +This graph holds `SubGridContainers` as vertices and transformer models as edges. +Thereby, you are able to discover the topology of galvanically separated sub grids and access those sub models +directly. + +and + +**SubGridContainer**
    +This one is meant to hold all models, that form a galvanically separated sub grid. +In contrast to the `JointGridContainer` it only covers one voltage level and therefore has an additional field +for the predominant voltage level apparent in the container. +Why predominant? +As of convention, the `SubGridContainers` hold also reference to the transformers leading to higher sub grids +and their higher voltage coupling point. + +![Sub grid boundary definition for transformers with upstream switchgear](../../../_static/figures/transformerWithSwitchGear.png) + +Let's shed a more detailed light on the boundaries of a sub grid as of our definition. +This especially is important, if the switchgear of the transformer is modeled in detail. +We defined, that all nodes in upstream direction of the transformer, that are connected by switches *only* (therefore +are within the switchgear) are counted towards the inferior sub grid structure (here "2"), although they belong to a +different voltage level. +This decision is taken, because we assume, that the interest to operate on the given switchgear will most likely be +placed in the inferior grid structure. + +The "real" coupling node A is not comprised in the sub grids node collection, but obviously has reference through the +switch between nodes A and B. + +A synoptic overview of both classes' attributes is given here: + +## Attributes, Units and Remarks + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - Un it + - Remarks + + * - gridName + - – + - Human readable identifier + + * - rawGrid + - – + - see below + + * - systemParticipants + - – + - see below + + * - graphics + - – + - see below + + * - subGridTopologyGraph + - – + - topology of sub grids - only + ``JointGridContainer`` + + * - predominantVoltageLevel + - – + - main voltage level - only + ``SubGridContainer`` + + * - subnet + - – + - sub grid number - only + ``SubGridContainer`` + +``` + +### RawGridElements +This sub container simply holds: + +* [nodes](/models/input/grid/node) +* [lines](/models/input/grid/line) +* [switches](/models/input/grid/switch) +* [two winding transformers](/models/input/grid/transformer2w) +* [three winding transformers](/models/input/grid/transformer3w) +* [measurement units](/models/input/grid/measurementunit) + + +### SystemParticipants +This sub container simply holds: + +* [biomass plant](/models/input/participant/bm) +* [combined heat and power plant](/models/input/participant/chp) +- [electric vehicles](/models/input/participant/ev) +- [electric vehicle charging stations](/models/input/participant/evcs) +- [fixed feed in facilities](/models/input/participant/fixedfeedin) +- [heat pumps](/models/input/participant/hp) +- [loads](/models/input/participant/load) +- [photovoltaic power plants](/models/input/participant/pv) +- [electrical energy storages](/models/input/participant/storage) +- [wind energy converters](/models/input/participant/wec) + +and the needed nested thermal models. + + +### Graphics +This sub container simply holds: + +* [schematic node graphics](/models/input/grid/nodegraphic) +* [schematic line graphics](/models/input/grid/linegraphic) + + +## Container Concept + +![Model container concept](../../../_static/figures/uml/ModelContainerConcept.png) + +## Caveats +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md new file mode 100644 index 000000000..4305f7b2a --- /dev/null +++ b/docs/readthedocs/models/input/grid/line.md @@ -0,0 +1,146 @@ +# Line + +Representation of an AC line. + +## Attributes, Units and Remarks + +### Type Model + +| Attribute | Unit | Remarks | +| --------- | ------- | -------------------------------------- | +| uuid | – | | +| id | – | Human readable identifier | +| r | Ω / km | Phase resistance per length | +| x | Ω / km | Phase reactance per length | +| g | µS / km | Phase-to-ground conductance per length | +| b | µS / km | Phase-to-ground susceptance per length | +| iMax | A | Maximum permissible current | +| vRated | kV | Rated voltage | + +A list with some standard line types can be found here: [Standard Line +Types](#standard-line-types) + +### Entity Model + +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + + * - Attribute + - U n i t + - Remarks + + * - uuid + - – + - + + * - id + - – + - Human readable identifier + + * - operator + - – + - + + * - operationTime + - – + - Timely restriction of operation + + * - nodeA + - – + - + + * - nodeB + - – + - + + * - parallelDevices + - – + - overall amount of parallel lines to automatically construct + (e.g. parallelDevices = 2 will build a total of two lines + using the specified parameters) + + * - type + - – + - + + * - length + - k m + - + + * - geoPosition + - – + - Line string of geographical locations describing the + position of the line + + * - olmCharacteristic + - – + - Characteristic of possible overhead line monitoring Can be + given in the form of ``olm:{}``. The pairs + are wind velocity in x and permissible loading in y. + +``` + +## Standard Line Types + +Following there are some standard line types with their source. A ``csv file`` containing the types listed below can be found +[here](https://github.com/ie3-institute/PowerSystemDataModel/tree/dev/input/StandardAssetTypes). This file can be used directly +for any simulation with ``simona``. +The lines which source is ``simBench`` are from [here](https://simbench.de/en/download/datasets/). + + +### Overhead Lines + +Some standard overhead lines. + +| uuid | b | g | iMax | id | r | vRated | x | source | +|:--------------------------------------|--------:|----:|--------:|--------------------:|---------:|-------:|---------:|:---------| +| 91617ab8-3de2-4fba-be45-a54473ba09a9 | 3.61283 | 0.0 | 1300.0 | LineType_1 | 0.08 | 380.0 | 0.32 | simBench | +| b3b231ae-a971-4432-80d7-4ce2f2a56a32 | 3.22799 | 0.0 | 1950.0 | LineType_4 | 0.033333 | 380.0 | 0.333333 | simBench | +| 24595f91-8295-41f8-a3d8-c9418d860d9c | 1.076 | 0.0 | 650.0 | LineType_6 | 0.1 | 380.0 | 1.0 | simBench | +| f0fc57ec-aa5a-4484-b870-be70a5428cbd | 6.45597 | 0.0 | 3900.0 | LineType_9 | 0.016667 | 380.0 | 0.166667 | simBench | +| ba70d8e7-b082-49bc-8c45-3c10e1236c3e | 8.60796 | 0.0 | 5200.0 | LineType_10 | 0.0125 | 380.0 | 0.125 | simBench | +| veee8eeed-62c9-4345-aa5a-3743fe32007d | 12.9119 | 0.0 | 7800.0 | LineType_11 | 0.008333 | 380.0 | 0.083333 | simBench | +| d2b16935-dcd7-44d2-8623-cec4c703ccdc | 17.2159 | 0.0 | 10400.0 | LineType_12 | 0.00625 | 380.0 | 0.0625 | simBench | +| a490c96e-6e90-485a-b0d7-adeb81fa09cd | 4.30398 | 0.0 | 2600.0 | LineType_2 | 0.025 | 220.0 | 0.25 | simBench | +| 5272bcbc-7d0e-4759-85fa-27943fd8d19c | 2.15199 | 0.0 | 1300.0 | LineType_3 | 0.05 | 220.0 | 0.5 | simBench | +| dd0bac07-de8d-4608-af36-b8ff2819f55a | 7.22566 | 0.0 | 2600.0 | LineType_5 | 0.04 | 220.0 | 0.16 | simBench | +| 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 | 1.80642 | 0.0 | 650.0 | LineType_7 | 0.16 | 220.0 | 0.64 | simBench | +| bdc83a85-c796-4bcb-8b79-8988dc2804f8 | 5.41925 | 0.0 | 1950.0 | LineType_8 | 0.053333 | 220.0 | 0.213333 | simBench | +| 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 | 2.8274 | 0.0 | 680.0 | Al/St_265/35 | 0.1095 | 110.0 | 0.296 | simBench | +| 5b542a50-b0c2-4497-ba90-b2b31aafaa0b | 2.87456 | 0.0 | 170.0 | 34-AL1/6-ST1A 20.0 | 0.8342 | 20.0 | 0.382 | simBench | +| d594cd67-4459-44bc-9594-db710372db71 | 2.98451 | 0.0 | 210.0 | 48-AL1/8-ST1A 20.0 | 0.5939 | 20.0 | 0.372 | simBench | +| 305e60ad-cfd2-4127-9d83-8d9b21942d93 | 3.04734 | 0.0 | 290.0 | 70-AL1/11-ST1A 20.0 | 0.4132 | 20.0 | 0.36 | simBench | +| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 0.4 | 1.8769 | 0.4 | 0.409 | simBench | +| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 0.4 | 1.2012 | 0.4 | 0.394 | simBench | + + +### Cables + +Some standard cables. + +| uuid | b | g | iMax | id | r | vRated | x | source | +|:-------------------------------------|--------:|----:|------:|-----------------------------:|-------:|-------:|----------:|:---------| +| cc59abd4-770b-45d2-98c8-919c91f1ca4b | 58.7478 | 0.0 | 652.0 | 1x630_RM/50 | 0.122 | 110.0 | 0.122522 | simBench | +| 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 | 59.3761 | 0.0 | 158.0 | NA2XS2Y 1x50 RM/25 12/20 kV | 0.64 | 20.0 | 0.145 | simBench | +| 4adef9e6-5e40-416d-8bd2-b6768d156c54 | 59.6903 | 0.0 | 220.0 | NA2XS2Y 1x70 RM/25 12/20 kV | 0.443 | 20.0 | 0.132 | simBench | +| d5c03484-59c2-44d5-a2ee-63a5a0d623b4 | 67.8584 | 0.0 | 252.0 | NA2XS2Y 1x95 RM/25 12/20 kV | 0.313 | 20.0 | 0.132 | simBench | +| 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 | 72.2566 | 0.0 | 283.0 | NA2XS2Y 1x120 RM/25 12/20 kV | 0.253 | 20.0 | 0.119 | simBench | +| 36243493-eb31-4e81-bd13-b54ef59c4cbe | 78.5398 | 0.0 | 319.0 | NA2XS2Y 1x150 RM/25 12/20 kV | 0.206 | 20.0 | 0.116 | simBench | +| 437689f8-366d-4b04-b42d-d7a754db074b | 85.7655 | 0.0 | 362.0 | NA2XS2Y 1x185 RM/25 12/20 kV | 0.161 | 20.0 | 0.117 | simBench | +| b459115d-d4eb-47d4-b7ec-625339ee0dcc | 95.5044 | 0.0 | 421.0 | NA2XS2Y 1x240 RM/25 12/20 kV | 0.122 | 20.0 | 0.112 | simBench | +| 9aed5818-c037-4033-8d15-806c62d70b8f | 113.097 | 0.0 | 315.0 | NA2XS2Y 1x150 RM/25 6/10 kV | 0.206 | 10.0 | 0.11 | simBench | +| 60d37bc7-157a-4c32-b1b5-e74c10d70531 | 127.549 | 0.0 | 358.0 | NA2XS2Y 1x185 RM/25 6/10 kV | 0.161 | 10.0 | 0.11 | simBench | +| a3ced617-2ffd-4593-b8e9-bcad9a521aab | 143.257 | 0.0 | 416.0 | NA2XS2Y 1x240 RM/25 6/10 kV | 0.122 | 10.0 | 0.105 | simBench | +| f0484bb6-9d0d-4d13-bfbe-b83783b8352a | 150.796 | 0.0 | 471.0 | NA2XS2Y 1x300 RM/25 6/10 kV | 0.1 | 10.0 | 0.0974 | simBench | +| 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 | 169.646 | 0.0 | 535.0 | NA2XS2Y 1x400 RM/25 6/10 kV | 0.078 | 10.0 | 0.0942 | simBench | +| 65181464-230a-487b-978f-81e406e9eb22 | 260.752 | 0.0 | 270.0 | NAYY 4x150SE 0.6/1kV | 0.2067 | 0.4 | 0.0804248 | simBench | +| 1200d9eb-6d10-47f3-8543-abea43b128d3 | 273.319 | 0.0 | 357.0 | NAYY 4x240SE 0.6/1kV | 0.1267 | 0.4 | 0.0797965 | simBench | + + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md new file mode 100644 index 000000000..a213b09dc --- /dev/null +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -0,0 +1,77 @@ +# Two Winding Transformer + +Model of a two winding transformer. +It is assumed, that node A is the node with higher voltage. + +## Attributes, Units and Remarks + +### Type Model + +All impedances and admittances are given with respect to the higher voltage side. +As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit representations. + +| Attribute | Unit | Remarks | +|:----------|:-----|:--------------------------------------------------------| +| id | | Human readable identifier | +| rSc | Ω | Short circuit resistance | +| xSc | Ω | Short circuit reactance | +| gM | nS | No load conductance | +| bM | nS | No load susceptance | +| sRated | kVA | Rated apparent power | +| vRatedA | kV | Rated voltage at higher voltage terminal | +| vRatedB | kV | Rated voltage at lower voltage terminal | +| dV | % | Voltage magnitude increase per tap position | +| dPhi | ° | Voltage angle increase per tap position | +| tapSide | | true, if tap changer is installed on lower voltage side | +| tapNeutr | | Neutral tap position | +| tapMin | | Minimum tap position | +| tapMax | | Maximum tap position | + +A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ + + +### Entity Model + +| Attribute | Unit | Remarks | +|:----------------|:-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| uuid | -- | | +| id | -- | Human readable identifier | +| operator | -- | | +| operationTime | -- | Timely restriction of operation | +| nodeA | -- | Higher voltage node | +| nodeB | -- | Lower voltage node | +| parallelDevices | -- | overall amount of parallel transformers to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two transformers using the specified parameters) | +| type | -- | | +| tapPos | -- | Current position of the tap changer | +| autoTap | -- | true, if there is a tap regulation apparent and active | + + +## Standard Two Winding Transformer Types + + +Following there are some standard two winding transformer types with their source. A ``csv file`` containing the types listed +below can be found `here `_. This +file can be used directly for any simulation with ``simona``. +The transformers which source is ``simBench`` are from `here `_. + + +| uuid | bM | dPhi | dV | gM | id | rSc | sRated | tapMax | tapMin | tapNeutr | tapSide | vRatedA | vRatedB | xSc | source | +|:-------------------------------------|--------------------:|-----:|----:|-------------------:|------------------------------------:|--------------------:|---------:|-------:|-------:|---------:|--------:|--------:|--------:|-------------------:|:---------| +| 5a890aae-b9c9-4ebf-8a49-8850ae9df402 | 219.43184927638458 | 0.0 | 1.0 | 1731.3019390581715 | Typ_x_380/220 | 0.6016666666666666 | 600000.0 | 16 | -16 | 0 | false | 380.0 | 220.0 | 44.51926783240413 | simBench | +| 03159c0d-126e-47cc-9871-066870df3a3f | 1193.4686938790917 | 0.0 | 1.0 | 831.0249307479223 | 350MVA_380/110 | 1.0608979591836734 | 350000.0 | 16 | -16 | 0 | false | 380.0 | 110.0 | 9 0.75951402093402 | simBench | +| 7cb289cb-e6af-4470-9c68-e5a91978a5e7 | 2013.800484464662 | 0.0 | 1.0 | 1446.280991735537 | 300MVA_220/110 | 0.20704444444444442 | 300000.0 | 16 | -16 | 0 | false | 220.0 | 110.0 | 19.358892855688435 | simBench | +| 73644bc6-78cf-4882-9837-e6508cab092d | 867.7685950413226 | 0.0 | 1.5 | 1157.0247933884295 | 25 MVA 110/20 kV YNd5 | 1.9843999999999997 | 25000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 58.04608993412045 | simBench | +| 6935ae26-374a-4c24-aeee-6d5760d6ddf3 | 720.4791642215993 | 0.0 | 1.5 | 1487.603305785124 | 40 MVA 110/20 kV YNd5 | 1.0285 | 40000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 48.994205909984906 | simBench | +| b49db20f-b8b5-4265-8318-f669b9d121e9 | 1015.6886939330394 | 0.0 | 1.5 | 1818.181818181818 | 63 MVA 110/10 kV YNd5 | .6146031746031745 | 63000.0 | 9 | -9 | 0 | false | 110.0 | 10.0 | 34.56596500037509 | simBench | +| 0843b836-cee4-4a8c-81a4-098400fe91cf | 24.495101551166183 | 0.0 | 2.5 | 2999.9999999999995 | 0.4 MVA 20/0.4 kV Dyn5 ASEA | 11.999999999999998 | 400.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 58.787753826796276 | simBench | +| a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 | 9.591746452043322 | 0.0 | 2.5 | 1149.9999999999998 | 0.16 MVA 20/0.4 kV DOTE 160/20 SGB | 36.71874999999999 | 160.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.01469452961452 | simBench | +| 0644c120-a247-425f-bbe4-31b153f7f440 | 16.583241729259253 | 0.0 | 2.5 | 2199.9999999999995 | 0.25 MVA 20/0.4 kV Dyn5 ASEA | 21.119999999999997 | 250.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.6479876986153 | simBench | +| bdf22ee4-deba-41f4-a187-ae00638a6880 | 36.47380569074435 | 0.0 | 2.5 | 4125.0 | 0.63 MVA 20/0.4 kV Dyn5 ASEA | 6.953892668178382 | 630.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 37.45518044666632 | simBench | +| a0cbd90a-4e9f-47db-8dca-041d3a288f77 | 145.8952227629774 | 0.0 | 2.5 | 16500.0 | 0.63 MVA 10/0.4 kV Dyn5 ASEA | 1.7384731670445954 | 630.0 | 2 | -2 | 0 | false | 10.0 | 0.4 | 9.36379511166658 | simBench | + + + +## Caveats + +Nothing - at least not known. +If you found something, please contact us! From 70bbb685216e0baec75b2634a378e9b918556d69 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Tue, 16 Jan 2024 17:55:21 +0100 Subject: [PATCH 150/228] !test --- .../models/input/grid/transformer2w.md | 144 ++++++++++++++---- 1 file changed, 116 insertions(+), 28 deletions(-) diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index a213b09dc..60bd0e92a 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -10,40 +10,128 @@ It is assumed, that node A is the node with higher voltage. All impedances and admittances are given with respect to the higher voltage side. As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit representations. -| Attribute | Unit | Remarks | -|:----------|:-----|:--------------------------------------------------------| -| id | | Human readable identifier | -| rSc | Ω | Short circuit resistance | -| xSc | Ω | Short circuit reactance | -| gM | nS | No load conductance | -| bM | nS | No load susceptance | -| sRated | kVA | Rated apparent power | -| vRatedA | kV | Rated voltage at higher voltage terminal | -| vRatedB | kV | Rated voltage at lower voltage terminal | -| dV | % | Voltage magnitude increase per tap position | -| dPhi | ° | Voltage angle increase per tap position | -| tapSide | | true, if tap changer is installed on lower voltage side | -| tapNeutr | | Neutral tap position | -| tapMin | | Minimum tap position | -| tapMax | | Maximum tap position | +.. list-table:: +:widths: 33 33 33 +:header-rows: 0 + + +* - Attribute +- Un it +- Remarks + +* - id +- +- Human readable identifier + +* - rSc +- Ω +- Short circuit resistance + +* - xSc +- Ω +- Short circuit reactance + +* - gM +- nS +- No load conductance + +* - bM +- nS +- No load susceptance + +* - sRated +- k VA +- Rated apparent power + +* - vRatedA +- kV +- Rated voltage at higher voltage terminal + +* - vRatedB +- kV +- Rated voltage at lower voltage terminal + +* - dV +- % +- Voltage magnitude increase per tap position + +* - dPhi +- ° +- Voltage angle increase per tap position + +* - tapSide +- +- true, if tap changer is installed on lower voltage + side + +* - tapNeutr +- +- Neutral tap position + +* - tapMin +- +- Minimum tap position + +* - tapMax +- +- Maximum tap position + A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ ### Entity Model -| Attribute | Unit | Remarks | -|:----------------|:-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| uuid | -- | | -| id | -- | Human readable identifier | -| operator | -- | | -| operationTime | -- | Timely restriction of operation | -| nodeA | -- | Higher voltage node | -| nodeB | -- | Lower voltage node | -| parallelDevices | -- | overall amount of parallel transformers to automatically
    construct (e.g. parallelDevices = 2 will build a
    total of two transformers using the specified parameters) | -| type | -- | | -| tapPos | -- | Current position of the tap changer | -| autoTap | -- | true, if there is a tap regulation apparent and active | +.. list-table:: +:widths: 33 33 33 +:header-rows: 0 + + +* - Attribute +- U n i t +- Remarks + +* - uuid +- – +- + +* - id +- – +- Human readable identifier + +* - operator +- – +- + +* - operationTime +- – +- Timely restriction of operation + +* - nodeA +- – +- Higher voltage node + +* - nodeB +- – +- Lower voltage node + +* - parallelDevices +- – +- overall amount of parallel transformers to automatically + construct (e.g. parallelDevices = 2 will build a total of + two transformers using the specified parameters) + +* - type +- – +- + +* - tapPos +- – +- Current position of the tap changer + +* - autoTap +- – +- true, if there is a tap regulation apparent and active ## Standard Two Winding Transformer Types From a86beba7572a118c7c42080a5b6cda2637eb6b98 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Tue, 16 Jan 2024 19:10:43 +0100 Subject: [PATCH 151/228] !test --- docs/readthedocs/models/input/grid/line.md | 395 +++++++++++++++--- .../models/input/grid/transformer2w.md | 194 ++++++++- 2 files changed, 522 insertions(+), 67 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 4305f7b2a..8c734ace9 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -6,16 +6,48 @@ Representation of an AC line. ### Type Model -| Attribute | Unit | Remarks | -| --------- | ------- | -------------------------------------- | -| uuid | – | | -| id | – | Human readable identifier | -| r | Ω / km | Phase resistance per length | -| x | Ω / km | Phase reactance per length | -| g | µS / km | Phase-to-ground conductance per length | -| b | µS / km | Phase-to-ground susceptance per length | -| iMax | A | Maximum permissible current | -| vRated | kV | Rated voltage | +```{eval-rst} +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 + + * - Attribute + - U n i t + - Remarks + + * - uuid + - – + - + + * - id + - – + - Human readable identifier + + * - r + - Ω / km + - Phase resistance per length + + * - x + - Ω / km + - Phase resistance per length + + * - g + - µS / km + - Phase-to-ground conductance per length + + * - b + - µS / km + - Phase-to-ground conductance per length + + * - iMax + - A + - Maximum permissible current + + * - vRated + - kV + - Rated voltage + +``` A list with some standard line types can be found here: [Standard Line Types](#standard-line-types) @@ -95,49 +127,318 @@ The lines which source is ``simBench`` are from [here](https://simbench.de/en/do Some standard overhead lines. -| uuid | b | g | iMax | id | r | vRated | x | source | -|:--------------------------------------|--------:|----:|--------:|--------------------:|---------:|-------:|---------:|:---------| -| 91617ab8-3de2-4fba-be45-a54473ba09a9 | 3.61283 | 0.0 | 1300.0 | LineType_1 | 0.08 | 380.0 | 0.32 | simBench | -| b3b231ae-a971-4432-80d7-4ce2f2a56a32 | 3.22799 | 0.0 | 1950.0 | LineType_4 | 0.033333 | 380.0 | 0.333333 | simBench | -| 24595f91-8295-41f8-a3d8-c9418d860d9c | 1.076 | 0.0 | 650.0 | LineType_6 | 0.1 | 380.0 | 1.0 | simBench | -| f0fc57ec-aa5a-4484-b870-be70a5428cbd | 6.45597 | 0.0 | 3900.0 | LineType_9 | 0.016667 | 380.0 | 0.166667 | simBench | -| ba70d8e7-b082-49bc-8c45-3c10e1236c3e | 8.60796 | 0.0 | 5200.0 | LineType_10 | 0.0125 | 380.0 | 0.125 | simBench | -| veee8eeed-62c9-4345-aa5a-3743fe32007d | 12.9119 | 0.0 | 7800.0 | LineType_11 | 0.008333 | 380.0 | 0.083333 | simBench | -| d2b16935-dcd7-44d2-8623-cec4c703ccdc | 17.2159 | 0.0 | 10400.0 | LineType_12 | 0.00625 | 380.0 | 0.0625 | simBench | -| a490c96e-6e90-485a-b0d7-adeb81fa09cd | 4.30398 | 0.0 | 2600.0 | LineType_2 | 0.025 | 220.0 | 0.25 | simBench | -| 5272bcbc-7d0e-4759-85fa-27943fd8d19c | 2.15199 | 0.0 | 1300.0 | LineType_3 | 0.05 | 220.0 | 0.5 | simBench | -| dd0bac07-de8d-4608-af36-b8ff2819f55a | 7.22566 | 0.0 | 2600.0 | LineType_5 | 0.04 | 220.0 | 0.16 | simBench | -| 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 | 1.80642 | 0.0 | 650.0 | LineType_7 | 0.16 | 220.0 | 0.64 | simBench | -| bdc83a85-c796-4bcb-8b79-8988dc2804f8 | 5.41925 | 0.0 | 1950.0 | LineType_8 | 0.053333 | 220.0 | 0.213333 | simBench | -| 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 | 2.8274 | 0.0 | 680.0 | Al/St_265/35 | 0.1095 | 110.0 | 0.296 | simBench | -| 5b542a50-b0c2-4497-ba90-b2b31aafaa0b | 2.87456 | 0.0 | 170.0 | 34-AL1/6-ST1A 20.0 | 0.8342 | 20.0 | 0.382 | simBench | -| d594cd67-4459-44bc-9594-db710372db71 | 2.98451 | 0.0 | 210.0 | 48-AL1/8-ST1A 20.0 | 0.5939 | 20.0 | 0.372 | simBench | -| 305e60ad-cfd2-4127-9d83-8d9b21942d93 | 3.04734 | 0.0 | 290.0 | 70-AL1/11-ST1A 20.0 | 0.4132 | 20.0 | 0.36 | simBench | -| f5dcaf44-7a9a-4b85-89ba-5c15c04c5766 | 3.45575 | 0.0 | 105.0 | 15-AL1/3-ST1A 0.4 | 1.8769 | 0.4 | 0.409 | simBench | -| 9cbf484b-7256-4e7a-9c35-3e1049909aa0 | 3.53429 | 0.0 | 140.0 | 24-AL1/4-ST1A 0.4 | 1.2012 | 0.4 | 0.394 | simBench | +```{eval-rst} +list-table:: +:widths: 11 11 11 11 11 11 11 11 11 +:header-rows: 0 +* - uuid +- b +- g +- iMax +- id +- r +- vRated +- x +- source +* - 91617ab8-3de2-4fba-be45-a54473ba09a9 +- 3.61283 +- 0.0 +- 1300.0 +- LineType_1 +- 0.08 +- 380.0 +- 0.32 +- simBench +* - b3b231ae-a971-4432-80d7-4ce2f2a56a32 +- 3.22799 +- 0.0 +- 1950.0 +- LineType_4 +- 0.033333 +- 380.0 +- 0.333333 +- simBench +* - 24595f91-8295-41f8-a3d8-c9418d860d9c +- 1.076 +- 0.0 +- 650.0 +- LineType_6 +- 0.1 +- 380.0 +- 1.0 +- simBench +* - f0fc57ec-aa5a-4484-b870-be70a5428cbd +- 6.45597 +- 0.0 +- 3900.0 +- LineType_9 +- 0.016667 +- 380.0 +- 0.166667 +- simBench +* - ba70d8e7-b082-49bc-8c45-3c10e1236c3e +- 8.60796 +- 0.0 +- 5200.0 +- LineType_10 +- 0.0125 +- 380.0 +- 0.125 +- simBench +* - veee8eeed-62c9-4345-aa5a-3743fe32007d +- 12.9119 +- 0.0 +- 7800.0 +- LineType_11 +- 0.008333 +- 380.0 +- 0.083333 +- simBench +* - d2b16935-dcd7-44d2-8623-cec4c703ccdc +- 17.2159 +- 0.0 +- 10400.0 +- LineType_12 +- 0.00625 +- 380.0 +- 0.0625 +- simBench +* - a490c96e-6e90-485a-b0d7-adeb81fa09cd +- 4.30398 +- 0.0 +- 2600.0 +- LineType_2 +- 0.025 +- 220.0 +- 0.25 +- simBench +* - 5272bcbc-7d0e-4759-85fa-27943fd8d19c +- 2.15199 +- 0.0 +- 1300.0 +- LineType_3 +- 0.05 +- 220.0 +- 0.5 +- simBench +* - dd0bac07-de8d-4608-af36-b8ff2819f55a +- 7.22566 +- 0.0 +- 2600.0 +- LineType_5 +- 0.04 +- 220.0 +- 0.16 +- simBench +* - 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 +- 1.80642 +- 0.0 +- 650.0 +- LineType_7 +- 0.16 +- 220.0 +- 0.64 +- simBench +* - bdc83a85-c796-4bcb-8b79-8988dc2804f8 +- 5.41925 +- 0.0 +- 1950.0 +- LineType_8 +- 0.053333 +- 220.0 +- 0.213333 +- simBench +* - 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 +- 2.8274 +- 0.0 +- 680.0 +- Al/St_265/35 +- 0.1095 +- 110.0 +- 0.296 +- simBench +* - 5b542a50-b0c2-4497-ba90-b2b31aafaa0b +- 2.87456 +- 0.0 +- 170.0 +- 34-AL1/6-ST1A 20.0 +- 0.8342 +- 20.0 +- 0.382 +- simBench +* - d594cd67-4459-44bc-9594-db710372db71 +- 2.98451 +- 0.0 +- 210.0 +- 48-AL1/8-ST1A 20.0 +- 0.5939 +- 20.0 +- 0.372 +- simBench +* - 305e60ad-cfd2-4127-9d83-8d9b21942d93 +- 3.04734 +- 0.0 +- 290.0 +- 70-AL1/11-ST1A 20.0 +- 0.4132 +- 20.0 +- 0.36 +- simBench +``` + ### Cables Some standard cables. -| uuid | b | g | iMax | id | r | vRated | x | source | -|:-------------------------------------|--------:|----:|------:|-----------------------------:|-------:|-------:|----------:|:---------| -| cc59abd4-770b-45d2-98c8-919c91f1ca4b | 58.7478 | 0.0 | 652.0 | 1x630_RM/50 | 0.122 | 110.0 | 0.122522 | simBench | -| 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 | 59.3761 | 0.0 | 158.0 | NA2XS2Y 1x50 RM/25 12/20 kV | 0.64 | 20.0 | 0.145 | simBench | -| 4adef9e6-5e40-416d-8bd2-b6768d156c54 | 59.6903 | 0.0 | 220.0 | NA2XS2Y 1x70 RM/25 12/20 kV | 0.443 | 20.0 | 0.132 | simBench | -| d5c03484-59c2-44d5-a2ee-63a5a0d623b4 | 67.8584 | 0.0 | 252.0 | NA2XS2Y 1x95 RM/25 12/20 kV | 0.313 | 20.0 | 0.132 | simBench | -| 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 | 72.2566 | 0.0 | 283.0 | NA2XS2Y 1x120 RM/25 12/20 kV | 0.253 | 20.0 | 0.119 | simBench | -| 36243493-eb31-4e81-bd13-b54ef59c4cbe | 78.5398 | 0.0 | 319.0 | NA2XS2Y 1x150 RM/25 12/20 kV | 0.206 | 20.0 | 0.116 | simBench | -| 437689f8-366d-4b04-b42d-d7a754db074b | 85.7655 | 0.0 | 362.0 | NA2XS2Y 1x185 RM/25 12/20 kV | 0.161 | 20.0 | 0.117 | simBench | -| b459115d-d4eb-47d4-b7ec-625339ee0dcc | 95.5044 | 0.0 | 421.0 | NA2XS2Y 1x240 RM/25 12/20 kV | 0.122 | 20.0 | 0.112 | simBench | -| 9aed5818-c037-4033-8d15-806c62d70b8f | 113.097 | 0.0 | 315.0 | NA2XS2Y 1x150 RM/25 6/10 kV | 0.206 | 10.0 | 0.11 | simBench | -| 60d37bc7-157a-4c32-b1b5-e74c10d70531 | 127.549 | 0.0 | 358.0 | NA2XS2Y 1x185 RM/25 6/10 kV | 0.161 | 10.0 | 0.11 | simBench | -| a3ced617-2ffd-4593-b8e9-bcad9a521aab | 143.257 | 0.0 | 416.0 | NA2XS2Y 1x240 RM/25 6/10 kV | 0.122 | 10.0 | 0.105 | simBench | -| f0484bb6-9d0d-4d13-bfbe-b83783b8352a | 150.796 | 0.0 | 471.0 | NA2XS2Y 1x300 RM/25 6/10 kV | 0.1 | 10.0 | 0.0974 | simBench | -| 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 | 169.646 | 0.0 | 535.0 | NA2XS2Y 1x400 RM/25 6/10 kV | 0.078 | 10.0 | 0.0942 | simBench | -| 65181464-230a-487b-978f-81e406e9eb22 | 260.752 | 0.0 | 270.0 | NAYY 4x150SE 0.6/1kV | 0.2067 | 0.4 | 0.0804248 | simBench | -| 1200d9eb-6d10-47f3-8543-abea43b128d3 | 273.319 | 0.0 | 357.0 | NAYY 4x240SE 0.6/1kV | 0.1267 | 0.4 | 0.0797965 | simBench | +```{eval-rst} +list-table:: +:widths: 11 11 11 11 11 11 11 11 11 +:header-rows: 1 +* - uuid +- b +- g +- iMax +- id +- r +- vRated +- x +- source +* - cc59abd4-770b-45d2-98c8-919c91f1ca4b +- 58.7478 +- 0.0 +- 652.0 +- 1x630_RM/50 +- 0.122 +- 110.0 +- 0.122522 +- simBench +* - 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 +- 59.3761 +- 0.0 +- 158.0 +- NA2XS2Y 1x50 RM/25 12/20 kV +- 0.64 +- 20.0 +- 0.145 +- simBench +* - 4adef9e6-5e40-416d-8bd2-b6768d156c54 +- 59.6903 +- 0.0 +- 220.0 +- NA2XS2Y 1x70 RM/25 12/20 kV +- 0.443 +- 20.0 +- 0.132 +- simBench +* - d5c03484-59c2-44d5-a2ee-63a5a0d623b4 +- 67.8584 +- 0.0 +- 252.0 +- NA2XS2Y 1x95 RM/25 12/20 kV +- 0.313 +- 20.0 +- 0.132 +- simBench +* - 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 +- 72.2566 +- 0.0 +- 283.0 +- NA2XS2Y 1x120 RM/25 12/20 kV +- 0.253 +- 20.0 +- 0.119 +- simBench +* - 36243493-eb31-4e81-bd13-b54ef59c4cbe +- 78.5398 +- 0.0 +- 319.0 +- NA2XS2Y 1x150 RM/25 12/20 kV +- 0.206 +- 20.0 +- 0.116 +- simBench +* - 437689f8-366d-4b04-b42d-d7a754db074b +- 85.7655 +- 0.0 +- 362.0 +- NA2XS2Y 1x185 RM/25 12/20 kV +- 0.161 +- 20.0 +- 0.117 +- simBench +* - b459115d-d4eb-47d4-b7ec-625339ee0dcc +- 95.5044 +- 0.0 +- 421.0 +- NA2XS2Y 1x240 RM/25 12/20 kV +- 0.122 +- 20.0 +- 0.112 +- simBench +* - 9aed5818-c037-4033-8d15-806c62d70b8f +- 113.097 +- 0.0 +- 315.0 +- NA2XS2Y 1x150 RM/25 6/10 kV +- 0.206 +- 10.0 +- 0.11 +- simBench +* - 60d37bc7-157a-4c32-b1b5-e74c10d70531 +- 127.549 +- 0.0 +- 358.0 +- NA2XS2Y 1x185 RM/25 6/10 kV +- 0.161 +- 10.0 +- 0.11 +- simBench +* - a3ced617-2ffd-4593-b8e9-bcad9a521aab +- 143.257 +- 0.0 +- 416.0 +- NA2XS2Y 1x240 RM/25 6/10 kV +- 0.122 +- 10.0 +- 0.105 +- simBench +* - f0484bb6-9d0d-4d13-bfbe-b83783b8352a +- 150.796 +- 0.0 +- 471.0 +- NA2XS2Y 1x300 RM/25 6/10 kV +- 0.1 +- 10.0 +- 0.0974 +- simBench +* - 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 +- 169.646 +- 0.0 +- 535.0 +- NA2XS2Y 1x400 RM/25 6/10 kV +- 0.078 +- 10.0 +- 0.0942 +- simBench +* - 65181464-230a-487b-978f-81e406e9eb22 +- 260.752 +- 0.0 +- 270.0 +- NAYY 4x150SE 0.6/1kV +- 0.2067 +- 0.4 +- 0.0804248 +- simBench +* - 1200d9eb-6d10-47f3-8543-abea43b128d3 +- 273.319 +- 0.0 +- 357.0 +- NAYY 4x240SE 0.6/1kV +- 0.1267 +- 0.4 +``` ## Caveats diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index 60bd0e92a..3625a3317 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -10,9 +10,10 @@ It is assumed, that node A is the node with higher voltage. All impedances and admittances are given with respect to the higher voltage side. As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit representations. +```{eval-rst} .. list-table:: -:widths: 33 33 33 -:header-rows: 0 + :widths: 33 33 33 + :header-rows: 0 * - Attribute @@ -75,13 +76,14 @@ As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit repres * - tapMax - - Maximum tap position - +``` A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ ### Entity Model +```{eval-rst} .. list-table:: :widths: 33 33 33 :header-rows: 0 @@ -132,7 +134,7 @@ A list with some standard transformer types can be found here: `Standard Two Win * - autoTap - – - true, if there is a tap regulation apparent and active - +``` ## Standard Two Winding Transformer Types @@ -142,22 +144,174 @@ below can be found `here `_. - -| uuid | bM | dPhi | dV | gM | id | rSc | sRated | tapMax | tapMin | tapNeutr | tapSide | vRatedA | vRatedB | xSc | source | -|:-------------------------------------|--------------------:|-----:|----:|-------------------:|------------------------------------:|--------------------:|---------:|-------:|-------:|---------:|--------:|--------:|--------:|-------------------:|:---------| -| 5a890aae-b9c9-4ebf-8a49-8850ae9df402 | 219.43184927638458 | 0.0 | 1.0 | 1731.3019390581715 | Typ_x_380/220 | 0.6016666666666666 | 600000.0 | 16 | -16 | 0 | false | 380.0 | 220.0 | 44.51926783240413 | simBench | -| 03159c0d-126e-47cc-9871-066870df3a3f | 1193.4686938790917 | 0.0 | 1.0 | 831.0249307479223 | 350MVA_380/110 | 1.0608979591836734 | 350000.0 | 16 | -16 | 0 | false | 380.0 | 110.0 | 9 0.75951402093402 | simBench | -| 7cb289cb-e6af-4470-9c68-e5a91978a5e7 | 2013.800484464662 | 0.0 | 1.0 | 1446.280991735537 | 300MVA_220/110 | 0.20704444444444442 | 300000.0 | 16 | -16 | 0 | false | 220.0 | 110.0 | 19.358892855688435 | simBench | -| 73644bc6-78cf-4882-9837-e6508cab092d | 867.7685950413226 | 0.0 | 1.5 | 1157.0247933884295 | 25 MVA 110/20 kV YNd5 | 1.9843999999999997 | 25000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 58.04608993412045 | simBench | -| 6935ae26-374a-4c24-aeee-6d5760d6ddf3 | 720.4791642215993 | 0.0 | 1.5 | 1487.603305785124 | 40 MVA 110/20 kV YNd5 | 1.0285 | 40000.0 | 9 | -9 | 0 | false | 110.0 | 20.0 | 48.994205909984906 | simBench | -| b49db20f-b8b5-4265-8318-f669b9d121e9 | 1015.6886939330394 | 0.0 | 1.5 | 1818.181818181818 | 63 MVA 110/10 kV YNd5 | .6146031746031745 | 63000.0 | 9 | -9 | 0 | false | 110.0 | 10.0 | 34.56596500037509 | simBench | -| 0843b836-cee4-4a8c-81a4-098400fe91cf | 24.495101551166183 | 0.0 | 2.5 | 2999.9999999999995 | 0.4 MVA 20/0.4 kV Dyn5 ASEA | 11.999999999999998 | 400.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 58.787753826796276 | simBench | -| a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 | 9.591746452043322 | 0.0 | 2.5 | 1149.9999999999998 | 0.16 MVA 20/0.4 kV DOTE 160/20 SGB | 36.71874999999999 | 160.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.01469452961452 | simBench | -| 0644c120-a247-425f-bbe4-31b153f7f440 | 16.583241729259253 | 0.0 | 2.5 | 2199.9999999999995 | 0.25 MVA 20/0.4 kV Dyn5 ASEA | 21.119999999999997 | 250.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 93.6479876986153 | simBench | -| bdf22ee4-deba-41f4-a187-ae00638a6880 | 36.47380569074435 | 0.0 | 2.5 | 4125.0 | 0.63 MVA 20/0.4 kV Dyn5 ASEA | 6.953892668178382 | 630.0 | 2 | -2 | 0 | false | 20.0 | 0.4 | 37.45518044666632 | simBench | -| a0cbd90a-4e9f-47db-8dca-041d3a288f77 | 145.8952227629774 | 0.0 | 2.5 | 16500.0 | 0.63 MVA 10/0.4 kV Dyn5 ASEA | 1.7384731670445954 | 630.0 | 2 | -2 | 0 | false | 10.0 | 0.4 | 9.36379511166658 | simBench | - - +```{eval-rst} +list-table:: +:widths: 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 +:header-rows: 1 +* - uuid +- bM +- dPhi +- dV +- gM +- id +- rSc +- sRated +- tapMax +- tapMin +- tapNeutr +- tapSide +- vRatedA +- vRatedB +- xSc +- source +* - 5a890aae-b9c9-4ebf-8a49-8850ae9df402 +- 219.43184927638458 +- 0.0 +- 1.0 +- 1731.3019390581715 +- Typ_x_380/220 +- 0.6016666666666666 +- 600000.0 +- 16 +- -16 +- 0 +- false +- 380.0 +- 220.0 +- 44.51926783240413 +- simBench +* - 03159c0d-126e-47cc-9871-066870df3a3f +- 1193.4686938790917 +- 0.0 +- 1.0 +- 831.0249307479223 +- 350MVA_380/110 +- 1.0608979591836734 +- 350000.0 +- 16 +- -16 +- 0 +- false +- 380.0 +- 110.0 +- 90.75951402093402 +- simBench +* - 7cb289cb-e6af-4470-9c68-e5a91978a5e7 +- 2013.800484464662 +- 0.0 +- 1.0 +- 1446.280991735537 +- 300MVA_220/110 +- 0.20704444444444442 +- 300000.0 +- 16 +- -16 +- 0 +- false +- 220.0 +- 110.0 +- 19.358892855688435 +- simBench +* - 73644bc6-78cf-4882-9837-e6508cab092d +- 867.7685950413226 +- 0.0 +- 1.5 +- 1157.0247933884295 +- 25 MVA 110/20 kV YNd5 +- 1.9843999999999997 +- 25000.0 +- 9 +- -9 +- 0 +- false +- 110.0 +- 20.0 +- 58.04608993412045 +- simBench +* - 6935ae26-374a-4c24-aeee-6d5760d6ddf3 +- 720.4791642215993 +- 0.0 +- 1.5 +- 1487.603305785124 +- 40 MVA 110/20 kV YNd5 +- 1.0285 +- 40000.0 +- 9 +- -9 +- 0 +- false +- 110.0 +- 20.0 +- 48.994205909984906 +- simBench +* - b49db20f-b8b5-4265-8318-f669b9d121e9 +- 1015.6886939330394 +- 0.0 +- 1.5 +- 1818.181818181818 +- 63 MVA 110/10 kV YNd5 +- 0.6146031746031745 +- 63000.0 +- 9 +- -9 +- 0 +- false +- 110.0 +- 10.0 +- 34.56596500037509 +- simBench +* - 0843b836-cee4-4a8c-81a4-098400fe91cf +- 24.495101551166183 +- 0.0 +- 2.5 +- 2999.9999999999995 +- 0.4 MVA 20/0.4 kV Dyn5 ASEA +- 11.999999999999998 +- 400.0 +- 2 +- -2 +- 0 +- false +- 20.0 +- 0.4 +- 58.787753826796276 +- simBench +* - a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 +- 9.591746452043322 +- 0.0 +- 2.5 +- 1149.9999999999998 +- 0.16 MVA 20/0.4 kV DOTE 160/20 SGB +- 36.71874999999999 +- 160.0 +- 2 +- -2 +- 0 +- false +- 20.0 +- 0.4 +- 93.01469452961452 +- simBench +* - 0644c120-a247-425f-bbe4-31b153f7f440 +- 16.583241729259253 +- 0.0 +- 2.5 +- 2199.9999999999995 +- 0.25 MVA 20/0.4 kV Dyn5 ASEA +- 21.119999999999997 +- 250.0 +- 2 +- -2 +- 0 +- false +- 20.0 +- 0.4 +- 93.6479876986153 +- simBench +* - bdf22ee4-deba-41f4-a187-ae00638a6880 +- 36.47380569074435 +- 0.0 +``` ## Caveats From 3865bf09bc26d2c70603f7132d698045331e26df Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 17 Jan 2024 15:33:45 +0100 Subject: [PATCH 152/228] Removed unused import --- .../io/source/csv/CsvSystemParticipantSourceTest.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index 8d1bd118d..7baddd516 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -10,7 +10,6 @@ import static edu.ie3.test.helper.EntityMap.map import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.exceptions.SystemParticipantsException import edu.ie3.datamodel.io.source.* -import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.* import edu.ie3.datamodel.utils.Try From e7005f03b35880776214c7dbcdf850e97fe9a151 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 20:17:19 +0100 Subject: [PATCH 153/228] !test --- docs/readthedocs/models/input/grid/line.md | 636 +++++++++--------- .../models/input/grid/transformer2w.md | 528 ++++++++------- 2 files changed, 598 insertions(+), 566 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 8c734ace9..992cf76f3 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -128,162 +128,180 @@ The lines which source is ``simBench`` are from [here](https://simbench.de/en/do Some standard overhead lines. ```{eval-rst} -list-table:: -:widths: 11 11 11 11 11 11 11 11 11 -:header-rows: 0 -* - uuid -- b -- g -- iMax -- id -- r -- vRated -- x -- source -* - 91617ab8-3de2-4fba-be45-a54473ba09a9 -- 3.61283 -- 0.0 -- 1300.0 -- LineType_1 -- 0.08 -- 380.0 -- 0.32 -- simBench -* - b3b231ae-a971-4432-80d7-4ce2f2a56a32 -- 3.22799 -- 0.0 -- 1950.0 -- LineType_4 -- 0.033333 -- 380.0 -- 0.333333 -- simBench -* - 24595f91-8295-41f8-a3d8-c9418d860d9c -- 1.076 -- 0.0 -- 650.0 -- LineType_6 -- 0.1 -- 380.0 -- 1.0 -- simBench -* - f0fc57ec-aa5a-4484-b870-be70a5428cbd -- 6.45597 -- 0.0 -- 3900.0 -- LineType_9 -- 0.016667 -- 380.0 -- 0.166667 -- simBench -* - ba70d8e7-b082-49bc-8c45-3c10e1236c3e -- 8.60796 -- 0.0 -- 5200.0 -- LineType_10 -- 0.0125 -- 380.0 -- 0.125 -- simBench -* - veee8eeed-62c9-4345-aa5a-3743fe32007d -- 12.9119 -- 0.0 -- 7800.0 -- LineType_11 -- 0.008333 -- 380.0 -- 0.083333 -- simBench -* - d2b16935-dcd7-44d2-8623-cec4c703ccdc -- 17.2159 -- 0.0 -- 10400.0 -- LineType_12 -- 0.00625 -- 380.0 -- 0.0625 -- simBench -* - a490c96e-6e90-485a-b0d7-adeb81fa09cd -- 4.30398 -- 0.0 -- 2600.0 -- LineType_2 -- 0.025 -- 220.0 -- 0.25 -- simBench -* - 5272bcbc-7d0e-4759-85fa-27943fd8d19c -- 2.15199 -- 0.0 -- 1300.0 -- LineType_3 -- 0.05 -- 220.0 -- 0.5 -- simBench -* - dd0bac07-de8d-4608-af36-b8ff2819f55a -- 7.22566 -- 0.0 -- 2600.0 -- LineType_5 -- 0.04 -- 220.0 -- 0.16 -- simBench -* - 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 -- 1.80642 -- 0.0 -- 650.0 -- LineType_7 -- 0.16 -- 220.0 -- 0.64 -- simBench -* - bdc83a85-c796-4bcb-8b79-8988dc2804f8 -- 5.41925 -- 0.0 -- 1950.0 -- LineType_8 -- 0.053333 -- 220.0 -- 0.213333 -- simBench -* - 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 -- 2.8274 -- 0.0 -- 680.0 -- Al/St_265/35 -- 0.1095 -- 110.0 -- 0.296 -- simBench -* - 5b542a50-b0c2-4497-ba90-b2b31aafaa0b -- 2.87456 -- 0.0 -- 170.0 -- 34-AL1/6-ST1A 20.0 -- 0.8342 -- 20.0 -- 0.382 -- simBench -* - d594cd67-4459-44bc-9594-db710372db71 -- 2.98451 -- 0.0 -- 210.0 -- 48-AL1/8-ST1A 20.0 -- 0.5939 -- 20.0 -- 0.372 -- simBench -* - 305e60ad-cfd2-4127-9d83-8d9b21942d93 -- 3.04734 -- 0.0 -- 290.0 -- 70-AL1/11-ST1A 20.0 -- 0.4132 -- 20.0 -- 0.36 -- simBench +.. list-table:: + :widths: 11 11 11 11 11 11 11 11 11 + :header-rows: 0 + + + * - uuid + - b + - g + - iMax + - id + - r + - vRated + - x + - source + + * - 91617ab8-3de2-4fba-be45-a54473ba09a9 + - 3.61283 + - 0.0 + - 1300.0 + - LineType_1 + - 0.08 + - 380.0 + - 0.32 + - simBench + + * - b3b231ae-a971-4432-80d7-4ce2f2a56a32 + - 3.22799 + - 0.0 + - 1950.0 + - LineType_4 + - 0.033333 + - 380.0 + - 0.333333 + - simBench + + * - 24595f91-8295-41f8-a3d8-c9418d860d9c + - 1.076 + - 0.0 + - 650.0 + - LineType_6 + - 0.1 + - 380.0 + - 1.0 + - simBench + + * - f0fc57ec-aa5a-4484-b870-be70a5428cbd + - 6.45597 + - 0.0 + - 3900.0 + - LineType_9 + - 0.016667 + - 380.0 + - 0.166667 + - simBench + + * - ba70d8e7-b082-49bc-8c45-3c10e1236c3e + - 8.60796 + - 0.0 + - 5200.0 + - LineType_10 + - 0.0125 + - 380.0 + - 0.125 + - simBench + + * - veee8eeed-62c9-4345-aa5a-3743fe32007d + - 12.9119 + - 0.0 + - 7800.0 + - LineType_11 + - 0.008333 + - 380.0 + - 0.083333 + - simBench + + * - d2b16935-dcd7-44d2-8623-cec4c703ccdc + - 17.2159 + - 0.0 + - 10400.0 + - LineType_12 + - 0.00625 + - 380.0 + - 0.0625 + - simBench + + * - a490c96e-6e90-485a-b0d7-adeb81fa09cd + - 4.30398 + - 0.0 + - 2600.0 + - LineType_2 + - 0.025 + - 220.0 + - 0.25 + - simBench + + * - 5272bcbc-7d0e-4759-85fa-27943fd8d19c + - 2.15199 + - 0.0 + - 1300.0 + - LineType_3 + - 0.05 + - 220.0 + - 0.5 + - simBench + + * - dd0bac07-de8d-4608-af36-b8ff2819f55a + - 7.22566 + - 0.0 + - 2600.0 + - LineType_5 + - 0.04 + - 220.0 + - 0.16 + - simBench + + * - 64c1dcb5-57a5-4f35-b2bf-9ae4e6cc4943 + - 1.80642 + - 0.0 + - 650.0 + - LineType_7 + - 0.16 + - 220.0 + - 0.64 + - simBench + + * - bdc83a85-c796-4bcb-8b79-8988dc2804f8 + - 5.41925 + - 0.0 + - 1950.0 + - LineType_8 + - 0.053333 + - 220.0 + - 0.213333 + - simBench + + * - 3d75fb6b-f0be-4451-ab4c-7f00c0ebd619 + - 2.8274 + - 0.0 + - 680.0 + - Al/St_265/35 + - 0.1095 + - 110.0 + - 0.296 + - simBench + + * - 5b542a50-b0c2-4497-ba90-b2b31aafaa0b + - 2.87456 + - 0.0 + - 170.0 + - 34-AL1/6-ST1A 20.0 + - 0.8342 + - 20.0 + - 0.382 + - simBench + + * - d594cd67-4459-44bc-9594-db710372db71 + - 2.98451 + - 0.0 + - 210.0 + - 48-AL1/8-ST1A 20.0 + - 0.5939 + - 20.0 + - 0.372 + - simBench + + * - 305e60ad-cfd2-4127-9d83-8d9b21942d93 + - 3.04734 + - 0.0 + - 290.0 + - 70-AL1/11-ST1A 20.0 + - 0.4132 + - 20.0 + - 0.36 + - simBench ``` @@ -293,151 +311,167 @@ list-table:: Some standard cables. ```{eval-rst} -list-table:: -:widths: 11 11 11 11 11 11 11 11 11 -:header-rows: 1 -* - uuid -- b -- g -- iMax -- id -- r -- vRated -- x -- source -* - cc59abd4-770b-45d2-98c8-919c91f1ca4b -- 58.7478 -- 0.0 -- 652.0 -- 1x630_RM/50 -- 0.122 -- 110.0 -- 0.122522 -- simBench -* - 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 -- 59.3761 -- 0.0 -- 158.0 -- NA2XS2Y 1x50 RM/25 12/20 kV -- 0.64 -- 20.0 -- 0.145 -- simBench -* - 4adef9e6-5e40-416d-8bd2-b6768d156c54 -- 59.6903 -- 0.0 -- 220.0 -- NA2XS2Y 1x70 RM/25 12/20 kV -- 0.443 -- 20.0 -- 0.132 -- simBench -* - d5c03484-59c2-44d5-a2ee-63a5a0d623b4 -- 67.8584 -- 0.0 -- 252.0 -- NA2XS2Y 1x95 RM/25 12/20 kV -- 0.313 -- 20.0 -- 0.132 -- simBench -* - 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 -- 72.2566 -- 0.0 -- 283.0 -- NA2XS2Y 1x120 RM/25 12/20 kV -- 0.253 -- 20.0 -- 0.119 -- simBench -* - 36243493-eb31-4e81-bd13-b54ef59c4cbe -- 78.5398 -- 0.0 -- 319.0 -- NA2XS2Y 1x150 RM/25 12/20 kV -- 0.206 -- 20.0 -- 0.116 -- simBench -* - 437689f8-366d-4b04-b42d-d7a754db074b -- 85.7655 -- 0.0 -- 362.0 -- NA2XS2Y 1x185 RM/25 12/20 kV -- 0.161 -- 20.0 -- 0.117 -- simBench -* - b459115d-d4eb-47d4-b7ec-625339ee0dcc -- 95.5044 -- 0.0 -- 421.0 -- NA2XS2Y 1x240 RM/25 12/20 kV -- 0.122 -- 20.0 -- 0.112 -- simBench -* - 9aed5818-c037-4033-8d15-806c62d70b8f -- 113.097 -- 0.0 -- 315.0 -- NA2XS2Y 1x150 RM/25 6/10 kV -- 0.206 -- 10.0 -- 0.11 -- simBench -* - 60d37bc7-157a-4c32-b1b5-e74c10d70531 -- 127.549 -- 0.0 -- 358.0 -- NA2XS2Y 1x185 RM/25 6/10 kV -- 0.161 -- 10.0 -- 0.11 -- simBench -* - a3ced617-2ffd-4593-b8e9-bcad9a521aab -- 143.257 -- 0.0 -- 416.0 -- NA2XS2Y 1x240 RM/25 6/10 kV -- 0.122 -- 10.0 -- 0.105 -- simBench -* - f0484bb6-9d0d-4d13-bfbe-b83783b8352a -- 150.796 -- 0.0 -- 471.0 -- NA2XS2Y 1x300 RM/25 6/10 kV -- 0.1 -- 10.0 -- 0.0974 -- simBench -* - 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 -- 169.646 -- 0.0 -- 535.0 -- NA2XS2Y 1x400 RM/25 6/10 kV -- 0.078 -- 10.0 -- 0.0942 -- simBench -* - 65181464-230a-487b-978f-81e406e9eb22 -- 260.752 -- 0.0 -- 270.0 -- NAYY 4x150SE 0.6/1kV -- 0.2067 -- 0.4 -- 0.0804248 -- simBench -* - 1200d9eb-6d10-47f3-8543-abea43b128d3 -- 273.319 -- 0.0 -- 357.0 -- NAYY 4x240SE 0.6/1kV -- 0.1267 -- 0.4 +.. list-table:: + :widths: 11 11 11 11 11 11 11 11 11 + :header-rows: 0 + + * - uuid + - b + - g + - iMax + - id + - r + - vRated + - x + - source + + * - cc59abd4-770b-45d2-98c8-919c91f1ca4b + - 58.7478 + - 0.0 + - 652.0 + - 1x630_RM/50 + - 0.122 + - 110.0 + - 0.122522 + - simBench + + * - 82ea1b98-2b21-48bd-841a-8d17d8ac20c9 + - 59.3761 + - 0.0 + - 158.0 + - NA2XS2Y 1x50 RM/25 12/20 kV + - 0.64 + - 20.0 + - 0.145 + - simBench + + * - 4adef9e6-5e40-416d-8bd2-b6768d156c54 + - 59.6903 + - 0.0 + - 220.0 + - NA2XS2Y 1x70 RM/25 12/20 kV + - 0.443 + - 20.0 + - 0.132 + - simBench + + * - d5c03484-59c2-44d5-a2ee-63a5a0d623b4 + - 67.8584 + - 0.0 + - 252.0 + - NA2XS2Y 1x95 RM/25 12/20 kV + - 0.313 + - 20.0 + - 0.132 + - simBench + + * - 9c13909d-1dd1-4e2d-980b-55345bdf0fd0 + - 72.2566 + - 0.0 + - 283.0 + - NA2XS2Y 1x120 RM/25 12/20 kV + - 0.253 + - 20.0 + - 0.119 + - simBench + + * - 36243493-eb31-4e81-bd13-b54ef59c4cbe + - 78.5398 + - 0.0 + - 319.0 + - NA2XS2Y 1x150 RM/25 12/20 kV + - 0.206 + - 20.0 + - 0.116 + - simBench + + * - 437689f8-366d-4b04-b42d-d7a754db074b + - 85.7655 + - 0.0 + - 362.0 + - NA2XS2Y 1x185 RM/25 12/20 kV + - 0.161 + - 20.0 + - 0.117 + - simBench + + * - b459115d-d4eb-47d4-b7ec-625339ee0dcc + - 95.5044 + - 0.0 + - 421.0 + - NA2XS2Y 1x240 RM/25 12/20 kV + - 0.122 + - 20.0 + - 0.112 + - simBench + + * - 9aed5818-c037-4033-8d15-806c62d70b8f + - 113.097 + - 0.0 + - 315.0 + - NA2XS2Y 1x150 RM/25 6/10 kV + - 0.206 + - 10.0 + - 0.11 + - simBench + + * - 60d37bc7-157a-4c32-b1b5-e74c10d70531 + - 127.549 + - 0.0 + - 358.0 + - NA2XS2Y 1x185 RM/25 6/10 kV + - 0.161 + - 10.0 + - 0.11 + - simBench + + * - a3ced617-2ffd-4593-b8e9-bcad9a521aab + - 143.257 + - 0.0 + - 416.0 + - NA2XS2Y 1x240 RM/25 6/10 kV + - 0.122 + - 10.0 + - 0.105 + - simBench + + * - f0484bb6-9d0d-4d13-bfbe-b83783b8352a + - 150.796 + - 0.0 + - 471.0 + - NA2XS2Y 1x300 RM/25 6/10 kV + - 0.1 + - 10.0 + - 0.0974 + - simBench + + * - 6b223bc3-69e2-4eb8-a2c0-76be1cd2c998 + - 169.646 + - 0.0 + - 535.0 + - NA2XS2Y 1x400 RM/25 6/10 kV + - 0.078 + - 10.0 + - 0.0942 + - simBench + + * - 65181464-230a-487b-978f-81e406e9eb22 + - 260.752 + - 0.0 + - 270.0 + - NAYY 4x150SE 0.6/1kV + - 0.2067 + - 0.4 + - 0.0804248 + - simBench + + * - 1200d9eb-6d10-47f3-8543-abea43b128d3 + - 273.319 + - 0.0 + - 357.0 + - NAYY 4x240SE 0.6/1kV + - 0.1267 + - 0.4 ``` diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index 3625a3317..f60474216 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -15,67 +15,66 @@ As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit repres :widths: 33 33 33 :header-rows: 0 - -* - Attribute -- Un it -- Remarks - -* - id -- -- Human readable identifier - -* - rSc -- Ω -- Short circuit resistance - -* - xSc -- Ω -- Short circuit reactance - -* - gM -- nS -- No load conductance - -* - bM -- nS -- No load susceptance - -* - sRated -- k VA -- Rated apparent power - -* - vRatedA -- kV -- Rated voltage at higher voltage terminal - -* - vRatedB -- kV -- Rated voltage at lower voltage terminal - -* - dV -- % -- Voltage magnitude increase per tap position - -* - dPhi -- ° -- Voltage angle increase per tap position - -* - tapSide -- -- true, if tap changer is installed on lower voltage - side - -* - tapNeutr -- -- Neutral tap position - -* - tapMin -- -- Minimum tap position - -* - tapMax -- -- Maximum tap position + * - Attribute + - Un it + - Remarks + + * - id + - + - Human readable identifier + + * - rSc + - Ω + - Short circuit resistance + + * - xSc + - Ω + - Short circuit reactance + + * - gM + - nS + - No load conductance + + * - bM + - nS + - No load susceptance + + * - sRated + - k VA + - Rated apparent power + + * - vRatedA + - kV + - Rated voltage at higher voltage terminal + + * - vRatedB + - kV + - Rated voltage at lower voltage terminal + + * - dV + - % + - Voltage magnitude increase per tap position + + * - dPhi + - ° + - Voltage angle increase per tap position + + * - tapSide + - + - true, if tap changer is installed on lower voltage + side + + * - tapNeutr + - + - Neutral tap position + + * - tapMin + - + - Minimum tap position + + * - tapMax + - + - Maximum tap position ``` A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ @@ -85,55 +84,54 @@ A list with some standard transformer types can be found here: `Standard Two Win ```{eval-rst} .. list-table:: -:widths: 33 33 33 -:header-rows: 0 - + :widths: 33 33 33 + :header-rows: 0 -* - Attribute -- U n i t -- Remarks + * - Attribute + - U n i t + - Remarks -* - uuid -- – -- + * - uuid + - – + - -* - id -- – -- Human readable identifier + * - id + - – + - Human readable identifier -* - operator -- – -- + * - operator + - – + - -* - operationTime -- – -- Timely restriction of operation + * - operationTime + - – + - Timely restriction of operation -* - nodeA -- – -- Higher voltage node + * - nodeA + - – + - Higher voltage node -* - nodeB -- – -- Lower voltage node + * - nodeB + - – + - Lower voltage node -* - parallelDevices -- – -- overall amount of parallel transformers to automatically - construct (e.g. parallelDevices = 2 will build a total of - two transformers using the specified parameters) + * - parallelDevices + - – + - overall amount of parallel transformers to automatically + construct (e.g. parallelDevices = 2 will build a total of + two transformers using the specified parameters) -* - type -- – -- + * - type + - – + - -* - tapPos -- – -- Current position of the tap changer + * - tapPos + - – + - Current position of the tap changer -* - autoTap -- – -- true, if there is a tap regulation apparent and active + * - autoTap + - – + - true, if there is a tap regulation apparent and active ``` ## Standard Two Winding Transformer Types @@ -145,172 +143,172 @@ file can be used directly for any simulation with ``simona``. The transformers which source is ``simBench`` are from `here `_. ```{eval-rst} -list-table:: -:widths: 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -:header-rows: 1 -* - uuid -- bM -- dPhi -- dV -- gM -- id -- rSc -- sRated -- tapMax -- tapMin -- tapNeutr -- tapSide -- vRatedA -- vRatedB -- xSc -- source -* - 5a890aae-b9c9-4ebf-8a49-8850ae9df402 -- 219.43184927638458 -- 0.0 -- 1.0 -- 1731.3019390581715 -- Typ_x_380/220 -- 0.6016666666666666 -- 600000.0 -- 16 -- -16 -- 0 -- false -- 380.0 -- 220.0 -- 44.51926783240413 -- simBench -* - 03159c0d-126e-47cc-9871-066870df3a3f -- 1193.4686938790917 -- 0.0 -- 1.0 -- 831.0249307479223 -- 350MVA_380/110 -- 1.0608979591836734 -- 350000.0 -- 16 -- -16 -- 0 -- false -- 380.0 -- 110.0 -- 90.75951402093402 -- simBench -* - 7cb289cb-e6af-4470-9c68-e5a91978a5e7 -- 2013.800484464662 -- 0.0 -- 1.0 -- 1446.280991735537 -- 300MVA_220/110 -- 0.20704444444444442 -- 300000.0 -- 16 -- -16 -- 0 -- false -- 220.0 -- 110.0 -- 19.358892855688435 -- simBench -* - 73644bc6-78cf-4882-9837-e6508cab092d -- 867.7685950413226 -- 0.0 -- 1.5 -- 1157.0247933884295 -- 25 MVA 110/20 kV YNd5 -- 1.9843999999999997 -- 25000.0 -- 9 -- -9 -- 0 -- false -- 110.0 -- 20.0 -- 58.04608993412045 -- simBench -* - 6935ae26-374a-4c24-aeee-6d5760d6ddf3 -- 720.4791642215993 -- 0.0 -- 1.5 -- 1487.603305785124 -- 40 MVA 110/20 kV YNd5 -- 1.0285 -- 40000.0 -- 9 -- -9 -- 0 -- false -- 110.0 -- 20.0 -- 48.994205909984906 -- simBench -* - b49db20f-b8b5-4265-8318-f669b9d121e9 -- 1015.6886939330394 -- 0.0 -- 1.5 -- 1818.181818181818 -- 63 MVA 110/10 kV YNd5 -- 0.6146031746031745 -- 63000.0 -- 9 -- -9 -- 0 -- false -- 110.0 -- 10.0 -- 34.56596500037509 -- simBench -* - 0843b836-cee4-4a8c-81a4-098400fe91cf -- 24.495101551166183 -- 0.0 -- 2.5 -- 2999.9999999999995 -- 0.4 MVA 20/0.4 kV Dyn5 ASEA -- 11.999999999999998 -- 400.0 -- 2 -- -2 -- 0 -- false -- 20.0 -- 0.4 -- 58.787753826796276 -- simBench -* - a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 -- 9.591746452043322 -- 0.0 -- 2.5 -- 1149.9999999999998 -- 0.16 MVA 20/0.4 kV DOTE 160/20 SGB -- 36.71874999999999 -- 160.0 -- 2 -- -2 -- 0 -- false -- 20.0 -- 0.4 -- 93.01469452961452 -- simBench -* - 0644c120-a247-425f-bbe4-31b153f7f440 -- 16.583241729259253 -- 0.0 -- 2.5 -- 2199.9999999999995 -- 0.25 MVA 20/0.4 kV Dyn5 ASEA -- 21.119999999999997 -- 250.0 -- 2 -- -2 -- 0 -- false -- 20.0 -- 0.4 -- 93.6479876986153 -- simBench -* - bdf22ee4-deba-41f4-a187-ae00638a6880 -- 36.47380569074435 -- 0.0 +.. list-table:: + :widths: 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + :header-rows: 0 + * - uuid + - bM + - dPhi + - dV + - gM + - id + - rSc + - sRated + - tapMax + - tapMin + - tapNeutr + - tapSide + - vRatedA + - vRatedB + - xSc + - source + * - 5a890aae-b9c9-4ebf-8a49-8850ae9df402 + - 219.43184927638458 + - 0.0 + - 1.0 + - 1731.3019390581715 + - Typ_x_380/220 + - 0.6016666666666666 + - 600000.0 + - 16 + - -16 + - 0 + - false + - 380.0 + - 220.0 + - 44.51926783240413 + - simBench + * - 03159c0d-126e-47cc-9871-066870df3a3f + - 1193.4686938790917 + - 0.0 + - 1.0 + - 831.0249307479223 + - 350MVA_380/110 + - 1.0608979591836734 + - 350000.0 + - 16 + - -16 + - 0 + - false + - 380.0 + - 110.0 + - 90.75951402093402 + - simBench + * - 7cb289cb-e6af-4470-9c68-e5a91978a5e7 + - 2013.800484464662 + - 0.0 + - 1.0 + - 1446.280991735537 + - 300MVA_220/110 + - 0.20704444444444442 + - 300000.0 + - 16 + - -16 + - 0 + - false + - 220.0 + - 110.0 + - 19.358892855688435 + - simBench + * - 73644bc6-78cf-4882-9837-e6508cab092d + - 867.7685950413226 + - 0.0 + - 1.5 + - 1157.0247933884295 + - 25 MVA 110/20 kV YNd5 + - 1.9843999999999997 + - 25000.0 + - 9 + - -9 + - 0 + - false + - 110.0 + - 20.0 + - 58.04608993412045 + - simBench + * - 6935ae26-374a-4c24-aeee-6d5760d6ddf3 + - 720.4791642215993 + - 0.0 + - 1.5 + - 1487.603305785124 + - 40 MVA 110/20 kV YNd5 + - 1.0285 + - 40000.0 + - 9 + - -9 + - 0 + - false + - 110.0 + - 20.0 + - 48.994205909984906 + - simBench + * - b49db20f-b8b5-4265-8318-f669b9d121e9 + - 1015.6886939330394 + - 0.0 + - 1.5 + - 1818.181818181818 + - 63 MVA 110/10 kV YNd5 + - 0.6146031746031745 + - 63000.0 + - 9 + - -9 + - 0 + - false + - 110.0 + - 10.0 + - 34.56596500037509 + - simBench + * - 0843b836-cee4-4a8c-81a4-098400fe91cf + - 24.495101551166183 + - 0.0 + - 2.5 + - 2999.9999999999995 + - 0.4 MVA 20/0.4 kV Dyn5 ASEA + - 11.999999999999998 + - 400.0 + - 2 + - -2 + - 0 + - false + - 20.0 + - 0.4 + - 58.787753826796276 + - simBench + * - a8f3aeea-ef4d-4f3c-bb07-09a0a86766c1 + - 9.591746452043322 + - 0.0 + - 2.5 + - 1149.9999999999998 + - 0.16 MVA 20/0.4 kV DOTE 160/20 SGB + - 36.71874999999999 + - 160.0 + - 2 + - -2 + - 0 + - false + - 20.0 + - 0.4 + - 93.01469452961452 + - simBench + * - 0644c120-a247-425f-bbe4-31b153f7f440 + - 16.583241729259253 + - 0.0 + - 2.5 + - 2199.9999999999995 + - 0.25 MVA 20/0.4 kV Dyn5 ASEA + - 21.119999999999997 + - 250.0 + - 2 + - -2 + - 0 + - false + - 20.0 + - 0.4 + - 93.6479876986153 + - simBench + * - bdf22ee4-deba-41f4-a187-ae00638a6880 + - 36.47380569074435 + - 0.0 ``` ## Caveats From 80d644ca10aba65dd9898a9726ed674b59efcf5d Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 20:25:16 +0100 Subject: [PATCH 154/228] !test --- .../models/input/grid/transformer2w.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index f60474216..7bc6d15f4 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -146,6 +146,7 @@ The transformers which source is ``simBench`` are from `here Date: Wed, 17 Jan 2024 20:53:51 +0100 Subject: [PATCH 155/228] !test --- .../models/input/participant/general.md | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/readthedocs/models/input/participant/general.md b/docs/readthedocs/models/input/participant/general.md index 7ef4b81a0..7dd45d438 100644 --- a/docs/readthedocs/models/input/participant/general.md +++ b/docs/readthedocs/models/input/participant/general.md @@ -21,12 +21,13 @@ The power factor is determined based on the current active power feed in or cons The characteristic in the figure below would be described by the three coordinates (0.0, 1.0), (0.9,1.0) and (1.0, 0.95). Alternatively it can be parsed from {code}`cosPhiP:{(0.0, 1.0),(0.9,1.0),(1.0, 0.95)}`. -:::{figure} ../../../_static/figures/cosPhiP.png -:align: center -:alt: Active power dependent power factor - +```{figure} ../../../_static/figures/cosPhiP.png +--- +align: center +name: Active power dependent power factor +--- Exemplary active power dependent power factor -::: +``` ### Reactive Power as Function of Nodal Voltage Magnitude @@ -35,9 +36,10 @@ The characteristic in the figure below would be described by the three coordinat and (1.08, 1.0). Alternatively it can be parsed from {code}`qV:{(0.92, -1),(0.97, 0.0),(1.03, 0.0),(1.08, 1.0)}`. -:::{figure} ../../../_static/figures/qv.png -:align: center -:alt: Reactive power as function of nodal voltage magnitude - +```{figure} ../../../_static/figures/qv.png +--- +align: center +name: Reactive power as function of nodal voltage magnitude +--- Exemplary reactive power as function of nodal voltage magnitude -::: +``` \ No newline at end of file From 4391e9c127ed05c93dfbffd70c5fe5388349fafd Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 21:01:28 +0100 Subject: [PATCH 156/228] !test --- docs/readthedocs/models/input/grid/transformer3w.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/readthedocs/models/input/grid/transformer3w.md b/docs/readthedocs/models/input/grid/transformer3w.md index 6de1897f1..15575c78c 100644 --- a/docs/readthedocs/models/input/grid/transformer3w.md +++ b/docs/readthedocs/models/input/grid/transformer3w.md @@ -8,12 +8,13 @@ It is assumed, that node A is the node with highest, node B with intermediate an The assumed mathematical model is inspired by *ABB Schaltanlagenhanbuch* [^cite_gremmel1999], but with the addition of a central phase-to-ground admittance, cf. following picture. -:::{figure} ../../../_static/figures/ecdTransformer3w.png -:align: center -:alt: Equivalent circuit diagram of a three winding transformer - +```{figure} ../../../_static/figures/ecdTransformer3w.png +--- +align: center +name: Equivalent circuit diagram of a three winding transformer +--- "Star like" T-equivalent circuit diagram of a three winding transformer -::: +``` ## Attributes, Units and Remarks From b82eedd3a874c92d31e6472d3882ac06e5fba400 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 21:26:48 +0100 Subject: [PATCH 157/228] !test --- docs/readthedocs/models/input/participant/bm.md | 2 +- docs/readthedocs/models/input/participant/chp.md | 2 +- docs/readthedocs/models/input/participant/evcs.md | 6 +++--- docs/readthedocs/models/input/participant/fixedfeedin.md | 2 +- docs/readthedocs/models/input/participant/hp.md | 2 +- docs/readthedocs/models/input/participant/load.md | 4 ++-- docs/readthedocs/models/input/participant/pv.md | 2 +- docs/readthedocs/models/input/participant/storage.md | 2 +- docs/readthedocs/models/input/participant/wec.md | 4 ++-- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/readthedocs/models/input/participant/bm.md b/docs/readthedocs/models/input/participant/bm.md index f729dae28..f318da626 100644 --- a/docs/readthedocs/models/input/participant/bm.md +++ b/docs/readthedocs/models/input/participant/bm.md @@ -87,7 +87,7 @@ Model of a biomass power plant. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - type - -- diff --git a/docs/readthedocs/models/input/participant/chp.md b/docs/readthedocs/models/input/participant/chp.md index 939cc455b..800774041 100644 --- a/docs/readthedocs/models/input/participant/chp.md +++ b/docs/readthedocs/models/input/participant/chp.md @@ -99,7 +99,7 @@ Combined heat and power plant. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - type - -- diff --git a/docs/readthedocs/models/input/participant/evcs.md b/docs/readthedocs/models/input/participant/evcs.md index 82d2585de..2a85644be 100644 --- a/docs/readthedocs/models/input/participant/evcs.md +++ b/docs/readthedocs/models/input/participant/evcs.md @@ -41,11 +41,11 @@ station and has some limitations outlined below. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - type - -- - - [Charging point type](#charging-point-types) (valid for all installed points) + - :ref:`Charging point type` (valid for all installed points) * - chargingPoints - -- @@ -57,7 +57,7 @@ station and has some limitations outlined below. * - locationType - -- - - [Charging station location types](#location-types) + - :ref:`Charging station location types` ``` diff --git a/docs/readthedocs/models/input/participant/fixedfeedin.md b/docs/readthedocs/models/input/participant/fixedfeedin.md index 65c1b2d2b..3d31657ad 100644 --- a/docs/readthedocs/models/input/participant/fixedfeedin.md +++ b/docs/readthedocs/models/input/participant/fixedfeedin.md @@ -39,7 +39,7 @@ model can be derived. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - sRated - kVA diff --git a/docs/readthedocs/models/input/participant/hp.md b/docs/readthedocs/models/input/participant/hp.md index 08bdf16c2..e4768e46c 100644 --- a/docs/readthedocs/models/input/participant/hp.md +++ b/docs/readthedocs/models/input/participant/hp.md @@ -87,7 +87,7 @@ Model of a heat pump. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - type - -- diff --git a/docs/readthedocs/models/input/participant/load.md b/docs/readthedocs/models/input/participant/load.md index edc31f60d..17388fed0 100644 --- a/docs/readthedocs/models/input/participant/load.md +++ b/docs/readthedocs/models/input/participant/load.md @@ -38,11 +38,11 @@ Model of (mainly) domestic loads. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - loadProfile - -- - - [Load profile](#load-profiles) as model behaviour + - :ref:`Load profile` as model behaviour * - dsm - -- diff --git a/docs/readthedocs/models/input/participant/pv.md b/docs/readthedocs/models/input/participant/pv.md index a7c1d7af6..f9d4592b4 100644 --- a/docs/readthedocs/models/input/participant/pv.md +++ b/docs/readthedocs/models/input/participant/pv.md @@ -36,7 +36,7 @@ Detailed model of a photovoltaic power plant. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - albedo - -- diff --git a/docs/readthedocs/models/input/participant/storage.md b/docs/readthedocs/models/input/participant/storage.md index 443248140..09f7727bb 100644 --- a/docs/readthedocs/models/input/participant/storage.md +++ b/docs/readthedocs/models/input/participant/storage.md @@ -109,7 +109,7 @@ Model of an ideal electrical battery energy storage. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - type - -- diff --git a/docs/readthedocs/models/input/participant/wec.md b/docs/readthedocs/models/input/participant/wec.md index 600ad0f72..7e01f043d 100644 --- a/docs/readthedocs/models/input/participant/wec.md +++ b/docs/readthedocs/models/input/participant/wec.md @@ -45,7 +45,7 @@ Model of a wind energy converter. * - cpCharacteristic - -- - - Wind velocity dependent [Betz factors](#betz-characteristic). + - Wind velocity dependent :ref:`Betz factors`. * - etaConv - % @@ -95,7 +95,7 @@ Model of a wind energy converter. * - qCharacteristics - -- - - [Reactive power characteristic](general.md#reactive-power-characteristics) to follow + - :ref:`Reactive power characteristic` to follow * - type - -- From 080fbb54ce4a175ea5557b8afbeefe6f2c7f6151 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 21:50:38 +0100 Subject: [PATCH 158/228] !test --- docs/readthedocs/models/input/grid/line.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 992cf76f3..f75cba2fb 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -472,6 +472,8 @@ Some standard cables. - NAYY 4x240SE 0.6/1kV - 0.1267 - 0.4 + - 0.0797965 + -simBench ``` From 009ccffba975282fccb762c18552406baca982f7 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 21:52:35 +0100 Subject: [PATCH 159/228] !test --- docs/readthedocs/models/input/grid/line.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index f75cba2fb..0c084f46f 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -474,6 +474,7 @@ Some standard cables. - 0.4 - 0.0797965 -simBench + ``` From a70ef3e3bc525975d0fe90612a0522894c90ee0c Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 21:56:29 +0100 Subject: [PATCH 160/228] !test --- docs/readthedocs/models/input/grid/line.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 0c084f46f..4e9fcb459 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -473,8 +473,7 @@ Some standard cables. - 0.1267 - 0.4 - 0.0797965 - -simBench - + -simBench ``` From af1004ba28c0589e028434443e0ddf8900c3bd29 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Wed, 17 Jan 2024 22:01:54 +0100 Subject: [PATCH 161/228] !test --- docs/readthedocs/models/input/grid/line.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 4e9fcb459..fd3bb1440 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -315,6 +315,7 @@ Some standard cables. :widths: 11 11 11 11 11 11 11 11 11 :header-rows: 0 + * - uuid - b - g @@ -473,7 +474,7 @@ Some standard cables. - 0.1267 - 0.4 - 0.0797965 - -simBench + - simBench ``` From 1f72b4442ca0f2078f02750641de1b0bd115eb9f Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 18 Jan 2024 13:52:31 +0100 Subject: [PATCH 162/228] Adapting `CsvSystemParticipantSourceTest`. --- .../csv/CsvSystemParticipantSourceTest.groovy | 104 +++++++++--------- 1 file changed, 53 insertions(+), 51 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index b2bcff625..bfa64b7a6 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -99,9 +99,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types | thermalBuses || resultingSize | resultingSet [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [sptd.hpInput] - [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ - new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) - ] } def "A SystemParticipantSource with csv input should throw an exception from an invalid heat pump input file as expected"() { @@ -111,19 +108,23 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.hpInput.node]) expect: - def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(nodes as Set, operators as Set, types as Set, thermalBuses as Set), SourceException) + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, map(types), map(thermalBuses)), SourceException) heatPumps.failure heatPumps.exception.get().class == SourceException where: - nodes | operators | types | thermalBuses || resultingSize || resultingSet - [] | [] | [] | [] || 0 || [] - [sptd.hpInput.node] | [] | [] | [] || 0 || [] - [sptd.hpInput.node] | [sptd.hpInput.operator] | [] | [] || 0 || [] - [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 || [] + nodes | operators | types | thermalBuses | resultingSize || resultingSet + [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ + new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) + ] + [] | [] | [] | [] || 0 | [] + [sptd.hpInput.node] | [] | [] | [] || 0 | [] + [sptd.hpInput.node] | [sptd.hpInput.operator] | [] | [] || 0 | [] + [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 | [] } def "A SystemParticipantSource with csv input should return data from a valid chp input file as expected"() { @@ -145,9 +146,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet [sptd.chpInput.operator] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [sptd.chpInput] - [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ - new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) - ] } def "A SystemParticipantSource with csv input should throw an exception from a invalid chp input file as expected"() { @@ -157,20 +155,23 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.hpInput.node]) expect: - def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(nodes as Set, operators as Set, types as Set, thermalBuses as Set, thermalStorages as Set), SourceException) + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) chpUnits.failure chpUnits.exception.get().class == SourceException - where: - nodes | operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet - [] | [] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.node] | [] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.node] | [sptd.chpInput.operator] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.node] | [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] as List || 0 || [] + operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet + [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ + new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) + ] + [] | [] | [] | [] as List || 0 || [] + [] | [] | [] | [] as List || 0 || [] + [sptd.chpInput.operator] | [] | [] | [] as List || 0 || [] + [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] as List || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid ev input file as expected"() { @@ -191,9 +192,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.evInput.node] | [sptd.evInput.operator] | [sptd.evInput.type] || 1 || [sptd.evInput] - [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ - new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid ev input file as expected"() { @@ -205,7 +203,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException @@ -213,6 +211,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet + [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ + new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) + ] [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] [sptd.evInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -236,9 +237,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.wecInput.node] | [sptd.wecInput.operator] | [sptd.wecInput.type] || 1 || [sptd.wecInput] - [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ - new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid wec input file as expected"() { @@ -250,13 +248,16 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: nodes | operators | types || resultingSize || resultingSet + [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ + new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) + ] [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] [sptd.wecInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -280,9 +281,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.storageInput.node] | [sptd.storageInput.operator] | [sptd.storageInput.type] || 1 || [sptd.storageInput] - [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ - new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid storage input file as expected"() { @@ -294,13 +292,16 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: nodes | operators | types || resultingSize || resultingSet + [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ + new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) + ] [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] [sptd.storageInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -324,9 +325,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [sptd.bmInput.operator] | [sptd.bmInput.type] || 1 || [sptd.bmInput] - [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ - new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) - ] + } def "A SystemParticipantSource with csv input should throw an exception from invalid bm input file as expected"() { @@ -338,13 +337,16 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(nodes as Set, operators as Set, types as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: nodes | operators | types || resultingSize || resultingSet + [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ + new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) + ] [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] [sptd.bmInput.node] | [] | [] || 0 || [] [] | [] | [] || 0 || [] @@ -368,9 +370,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.evcsInput.node] | [sptd.evcsInput.operator] || 1 || [sptd.evcsInput] - [sptd.evcsInput.node] | [] || 1 || [ - new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid ev charging station input file as expected"() { @@ -382,13 +381,16 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvCS(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: nodes | operators || resultingSize || resultingSet + [sptd.evcsInput.node] | [] || 1 || [ + new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) + ] []| [sptd.evcsInput.operator]|| 0 || [] []| []|| 0 || [] } @@ -411,9 +413,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.loadInput.node] | [sptd.loadInput.operator] || 1 || [sptd.loadInput] - [sptd.loadInput.node] | [] || 1 || [ - new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid load input file as expected"() { @@ -425,7 +424,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException @@ -433,6 +432,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet + [sptd.loadInput.node] | [] || 1 || [ + new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) + ] [] | [sptd.loadInput.operator] || 0 || [] [] | [] || 0 || [] } @@ -455,9 +457,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.pvInput.node] | [sptd.pvInput.operator] || 1 || [sptd.pvInput] - [sptd.pvInput.node] | [] || 1 || [ - new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid pv input file as expected"() { @@ -469,13 +468,16 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: nodes | operators || resultingSize || resultingSet + [sptd.pvInput.node] | [] || 1 || [ + new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) + ] [] | [sptd.pvInput.operator] || 0 || [] [] | [] || 0 || [] } @@ -498,9 +500,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.fixedFeedInInput.node] | [sptd.fixedFeedInInput.operator] as List || 1 || [sptd.fixedFeedInInput] - [sptd.fixedFeedInInput.node] | [] as List || 1 || [ - new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) - ] } def "A SystemParticipantSource with csv input should throw an exception from invalid fixedFeedIn input file as expected"() { @@ -512,13 +511,16 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(nodes as Set, operators as Set), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: nodes | operators || resultingSize || resultingSet + [sptd.fixedFeedInInput.node] | [] as List || 1 || [ + new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) + ] [] | [sptd.fixedFeedInInput.operator] as List || 0 || [] [] | [] as List || 0 || [] } From b1f720e398cd9454dd34d983818162b363047ff3 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 18 Jan 2024 14:19:56 +0100 Subject: [PATCH 163/228] Adding log message when using SwitchInputs with `parallelDevices` --- CHANGELOG.md | 3 +- .../io/factory/input/SwitchInputFactory.java | 13 +++++++ .../input/SwitchInputFactoryTest.groovy | 34 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a5457a8f..a47ed935e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Formatting Spotless Groovy import order [#960](https://github.com/ie3-institute/PowerSystemDataModel/issues/960) -- Implementing missing typical methods in `Try` [#970](https://github.com/ie3-institute/PowerSystemDataModel/issues/970) +- Implementing missing typical methods in `Try` [#970]() +- Added log warning when using `SwitchInputs` with `parallelDevices` parameter [#840](https://github.com/ie3-institute/PowerSystemDataModel/issues/840) ### Fixed - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java index 0506029a4..30dda802d 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java @@ -34,6 +34,19 @@ protected SwitchInput buildModel( OperatorInput operator, OperationTime operationTime) { final boolean closed = data.getBoolean(CLOSED); + + try { + final int parallelDevices = data.getInt(PARALLEL_DEVICES); + log.warn( + "Found a `SwitchInput` with the id `{}` that specifies `parallelDevices` with a value of `{}`. Because switches cannot be parallel, the given value is ignored!", + id, + parallelDevices); + } catch (Exception ignored) { + // because the field should not be used for switches, we can ignore the exception, that is + // thrown, when we + // do not find the field + } + return new SwitchInput(uuid, id, operator, operationTime, nodeA, nodeB, closed); } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/input/SwitchInputFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/input/SwitchInputFactoryTest.groovy index 9c862e663..48d087a6a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/input/SwitchInputFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/input/SwitchInputFactoryTest.groovy @@ -58,4 +58,38 @@ class SwitchInputFactoryTest extends Specification implements FactoryTestHelper assert closed } } + + def "A SwitchInputFactory should parse a valid SwitchInput with parallelDevices parameter correctly"() { + given: "a system participant input type factory and model data" + def inputFactory = new SwitchInputFactory() + Map parameter = [ + "uuid" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7", + "operatesfrom" : "2019-01-01T00:00:00+01:00[Europe/Berlin]", + "operatesuntil": "", + "id" : "TestID", + "closed" : "true", + "paralleldevices": "2" + ] + def inputClass = SwitchInput + def operatorInput = Mock(OperatorInput) + def nodeInputA = Mock(NodeInput) + def nodeInputB = Mock(NodeInput) + + expect: + Try input = inputFactory.get(new ConnectorInputEntityData(parameter, inputClass, operatorInput, nodeInputA, nodeInputB)) + input.success + input.data.get().getClass() == inputClass + input.data.get().with { + assert uuid == UUID.fromString(parameter["uuid"]) + assert operationTime.startDate.present + assert operationTime.startDate.get() == ZonedDateTime.parse(parameter["operatesfrom"]) + assert !operationTime.endDate.present + assert operator == operatorInput + assert id == parameter["id"] + assert nodeA == nodeInputA + assert nodeB == nodeInputB + assert closed + assert parallelDevices == 1 + } + } } From 49e9686c012167337375439e7cbbaf94f856f53e Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 18 Jan 2024 14:25:08 +0100 Subject: [PATCH 164/228] fmt --- .../csv/CsvSystemParticipantSourceTest.groovy | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index bfa64b7a6..d1a233813 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -119,7 +119,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types | thermalBuses | resultingSize || resultingSet [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ - new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) + new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) ] [] | [] | [] | [] || 0 | [] [sptd.hpInput.node] | [] | [] | [] || 0 | [] @@ -166,7 +166,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ - new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) + new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) ] [] | [] | [] | [] as List || 0 || [] [] | [] | [] | [] as List || 0 || [] @@ -212,7 +212,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ - new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) + new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) ] [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] [sptd.evInput.node] | [] | [] || 0 || [] @@ -256,7 +256,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ - new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) + new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) ] [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] [sptd.wecInput.node] | [] | [] || 0 || [] @@ -300,7 +300,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ - new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) + new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) ] [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] [sptd.storageInput.node] | [] | [] || 0 || [] @@ -325,7 +325,6 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [sptd.bmInput.operator] | [sptd.bmInput.type] || 1 || [sptd.bmInput] - } def "A SystemParticipantSource with csv input should throw an exception from invalid bm input file as expected"() { @@ -345,7 +344,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators | types || resultingSize || resultingSet [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ - new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) + new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) ] [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] [sptd.bmInput.node] | [] | [] || 0 || [] @@ -389,10 +388,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.evcsInput.node] | [] || 1 || [ - new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) + new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) ] - []| [sptd.evcsInput.operator]|| 0 || [] - []| []|| 0 || [] + [] | [sptd.evcsInput.operator] || 0 || [] + [] | [] || 0 || [] } def "A SystemParticipantSource with csv input should return data from valid load input file as expected"() { @@ -433,7 +432,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.loadInput.node] | [] || 1 || [ - new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) + new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) ] [] | [sptd.loadInput.operator] || 0 || [] [] | [] || 0 || [] @@ -476,7 +475,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.pvInput.node] | [] || 1 || [ - new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) + new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) ] [] | [sptd.pvInput.operator] || 0 || [] [] | [] || 0 || [] @@ -519,7 +518,7 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat where: nodes | operators || resultingSize || resultingSet [sptd.fixedFeedInInput.node] | [] as List || 1 || [ - new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) + new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) ] [] | [sptd.fixedFeedInInput.operator] as List || 0 || [] [] | [] as List || 0 || [] From 6e2d9fbdc9da7e4648501b361a9e0e351e28e89a Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Fri, 19 Jan 2024 22:26:27 +0100 Subject: [PATCH 165/228] !test --- docs/readthedocs/models/input/grid/gridcontainer.md | 2 +- docs/readthedocs/models/input/grid/transformer2w.md | 6 +++--- docs/readthedocs/models/input/participant/load.md | 2 +- docs/readthedocs/models/input/participant/thermalbus.md | 3 ++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/readthedocs/models/input/grid/gridcontainer.md b/docs/readthedocs/models/input/grid/gridcontainer.md index 4a093beec..c39ab3386 100644 --- a/docs/readthedocs/models/input/grid/gridcontainer.md +++ b/docs/readthedocs/models/input/grid/gridcontainer.md @@ -44,7 +44,7 @@ A synoptic overview of both classes' attributes is given here: * - Attribute - - Un it + - Unit - Remarks * - gridName diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index 7bc6d15f4..cfc26a692 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -16,7 +16,7 @@ As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit repres :header-rows: 0 * - Attribute - - Un it + - Unit - Remarks * - id @@ -40,7 +40,7 @@ As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit repres - No load susceptance * - sRated - - k VA + - kVA - Rated apparent power * - vRatedA @@ -77,7 +77,7 @@ As obvious, the parameter can be used in T- as in 𝜋-equivalent circuit repres - Maximum tap position ``` -A list with some standard transformer types can be found here: `Standard Two Winding Transformer Types`_ +A list with some standard transformer types can be found here: [Standard Two Winding Transformer Types](#standard-two-winding-transformer-types) ### Entity Model diff --git a/docs/readthedocs/models/input/participant/load.md b/docs/readthedocs/models/input/participant/load.md index 17388fed0..70b56fff6 100644 --- a/docs/readthedocs/models/input/participant/load.md +++ b/docs/readthedocs/models/input/participant/load.md @@ -84,6 +84,6 @@ Wasserwirtschaft; engl. Federal Association of the Energy and Water Industry). F Furthermore there are {code}`TemperatureDependantLoadProfiles` which can be used to note usage of load profiles for night heating storages or heat pumps for example. The profiles rely on the VDN description for interruptable loads. -For more details see [here (German only)](https://www.bdew.de/media/documents/LPuVe-Praxisleitfaden.pdf/). +For more details see [here (German only)](https://www.bdew.de/media/documents/LPuVe-Praxisleitfaden.pdf). {code}`NbwTemperatureDependantLoadProfiles` provides sample temperature dependant load profiles that can be used. The `NbwTemperatureDependantLoadProfiles` consists of load profiles "ep1" for heat pumps and "ez2" for night storage heating. diff --git a/docs/readthedocs/models/input/participant/thermalbus.md b/docs/readthedocs/models/input/participant/thermalbus.md index 8fcdfd1af..87cad5dd8 100644 --- a/docs/readthedocs/models/input/participant/thermalbus.md +++ b/docs/readthedocs/models/input/participant/thermalbus.md @@ -2,7 +2,8 @@ # Thermal Bus -A coupling point to thermal system - equivalent to [electrical node](https://powersystemdatamodel.readthedocs.io/en/latest/models.md/result.md/grid.md/node.md#node). +A coupling point to thermal system - equivalent to [electrical node](../grid/node.md#node) +. ## Attributes, Units and Remarks From 906c8455096f0282d0049478b8e7c8bb1f7a3829 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Fri, 19 Jan 2024 22:29:44 +0100 Subject: [PATCH 166/228] !test --- docs/readthedocs/models/input/grid/transformer2w.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index cfc26a692..0c8802573 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -88,7 +88,7 @@ A list with some standard transformer types can be found here: [Standard Two Win :header-rows: 0 * - Attribute - - U n i t + - Unit - Remarks * - uuid From 9a47f2a4887ad96112d995d2f37ee645f137d325 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Fri, 19 Jan 2024 22:30:50 +0100 Subject: [PATCH 167/228] !test --- docs/readthedocs/models/input/grid/transformer2w.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index 0c8802573..516e18bf1 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -117,9 +117,9 @@ A list with some standard transformer types can be found here: [Standard Two Win * - parallelDevices - – - - overall amount of parallel transformers to automatically - construct (e.g. parallelDevices = 2 will build a total of - two transformers using the specified parameters) + - | overall amount of parallel transformers to automatically + | construct (e.g. parallelDevices = 2 will build a total of + | two transformers using the specified parameters) * - type - – From 2cda75b079ef71e1e513ca546213f13860889785 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Sun, 21 Jan 2024 19:46:56 +0100 Subject: [PATCH 168/228] !test --- docs/readthedocs/models/input/grid/line.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index fd3bb1440..163aa15cc 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -90,16 +90,16 @@ Types](#standard-line-types) * - parallelDevices - – - - overall amount of parallel lines to automatically construct - (e.g. parallelDevices = 2 will build a total of two lines - using the specified parameters) + - | overall amount of parallel lines to automatically construct + | (e.g. parallelDevices = 2 will build a total of two lines + | using the specified parameters) * - type - – - * - length - - k m + - km - * - geoPosition @@ -109,9 +109,9 @@ Types](#standard-line-types) * - olmCharacteristic - – - - Characteristic of possible overhead line monitoring Can be - given in the form of ``olm:{}``. The pairs - are wind velocity in x and permissible loading in y. + - | Characteristic of possible overhead line monitoring Can be + | given in the form of ``olm:{}``. The pairs + | are wind velocity in x and permissible loading in y. ``` From e6b195b63093a3404ca0cfb64a56b4a2f8a5b663 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Sun, 21 Jan 2024 20:12:26 +0100 Subject: [PATCH 169/228] !test --- docs/readthedocs/models/input/grid/transformer2w.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/readthedocs/models/input/grid/transformer2w.md b/docs/readthedocs/models/input/grid/transformer2w.md index 516e18bf1..6e4ef7c6f 100644 --- a/docs/readthedocs/models/input/grid/transformer2w.md +++ b/docs/readthedocs/models/input/grid/transformer2w.md @@ -138,9 +138,9 @@ A list with some standard transformer types can be found here: [Standard Two Win Following there are some standard two winding transformer types with their source. A ``csv file`` containing the types listed -below can be found `here `_. This +below can be found [here](https://github.com/ie3-institute/PowerSystemDataModel/tree/dev/input/StandardAssetTypes). This file can be used directly for any simulation with ``simona``. -The transformers which source is ``simBench`` are from `here `_. +The transformers which source is ``simBench`` are from [here](https://simbench.de/en/download/datasets/). ```{eval-rst} .. list-table:: From 975d7dd419ceef6eca0892f8b2f17601d9476d29 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Sun, 21 Jan 2024 21:36:19 +0100 Subject: [PATCH 170/228] !test --- docs/readthedocs/models/input/grid/line.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index 163aa15cc..cec0b5493 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -12,7 +12,7 @@ Representation of an AC line. :header-rows: 0 * - Attribute - - U n i t + - Unit - Remarks * - uuid From ff9f5fb644a5dd4ec2fc2de746bcd5d0c428f092 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Sun, 21 Jan 2024 22:46:11 +0100 Subject: [PATCH 171/228] !test --- docs/readthedocs/models/input/grid/line.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index cec0b5493..d3cac6c58 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -49,8 +49,7 @@ Representation of an AC line. ``` -A list with some standard line types can be found here: [Standard Line -Types](#standard-line-types) +A list with some standard line types can be found here: [Standard Line Types](#standard-line-types) ### Entity Model From b7c4bd8c9a7dc7321c09f4c1e874dd93dd8e1111 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier Date: Sun, 21 Jan 2024 22:48:18 +0100 Subject: [PATCH 172/228] !test --- docs/readthedocs/models/input/grid/line.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readthedocs/models/input/grid/line.md b/docs/readthedocs/models/input/grid/line.md index d3cac6c58..bd4a6f719 100644 --- a/docs/readthedocs/models/input/grid/line.md +++ b/docs/readthedocs/models/input/grid/line.md @@ -60,7 +60,7 @@ A list with some standard line types can be found here: [Standard Line Types](#s * - Attribute - - U n i t + - Unit - Remarks * - uuid From a5c2613d927f8f3e1cde49008ca178392272d9d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:08:59 +0000 Subject: [PATCH 173/228] Bump org.apache.groovy:groovy from 4.0.17 to 4.0.18 (#989) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 47f0da787..7ab88ff9d 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ ext { //version (changing these should be considered thoroughly!) javaVersion = JavaVersion.VERSION_17 groovyVersion = "4.0" - groovyBinaryVersion = "4.0.17" + groovyBinaryVersion = "4.0.18" testcontainersVersion = '1.19.3' scriptsLocation = 'gradle' + File.separator + 'scripts' + File.separator //location of script plugins From 18f7ad528a9d4ae92bacee51c911f8c3c528fe04 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 22 Jan 2024 17:25:46 +0100 Subject: [PATCH 174/228] Implementing requested changes. --- .../io/source/csv/CsvRawGridSourceTest.groovy | 14 +- .../csv/CsvSystemParticipantSourceTest.groovy | 363 +++++------------- 2 files changed, 103 insertions(+), 274 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy index a666895d0..876b73160 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvRawGridSourceTest.groovy @@ -175,11 +175,10 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "everything is fine" actualSet.size() == expectedSet.size() - Try.scanCollection(actualSet, List).success + def result = Try.scanCollection(actualSet, List) - actualSet.stream().map { - it.data.get() - }.toList().containsAll(expectedSet) + result.success + result.data.get().toList().containsAll(expectedSet) } def "The CsvRawGridSource is able to convert a stream of valid ConnectorInputEntityData to TypedConnectorInputEntityData"() { @@ -258,11 +257,10 @@ class CsvRawGridSourceTest extends Specification implements CsvTestDataMeta { then: "everything is fine" actualSet.size() == expectedSet.size() - Try.scanCollection(actualSet, List).success + def result = Try.scanCollection(actualSet, List) - actualSet.stream().map { - it.data.get() - }.toList().containsAll(expectedSet) + result.success + result.data.get().toList().containsAll(expectedSet) } def "The CsvRawGridSource is able to add the third node for a three winding transformer to a stream of candidates"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy index d1a233813..6d409422e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvSystemParticipantSourceTest.groovy @@ -80,118 +80,106 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat "Linked node with UUID 4ca90220-74c2-4369-9afa-a18bf068840d was not found for entity AssetInputEntityData") } - def "A SystemParticipantSource with csv input should return data from a valid heat pump input file as expected"() { + def "A SystemParticipantSource with csv input should return data from valid input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def nodeMap = map([sptd.hpInput.node]) + def nodeMap = map([sptd.participantNode]) + def operatorMap = map([sptd.operator]) + def thermalBusMap = map([sptd.thermalBus]) + def thermalStorageMap = map([sptd.thermalStorage]) expect: - def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, map(types), map(thermalBuses)), SourceException) - + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(operatorMap, nodeMap, map([sptd.hpTypeInput]), thermalBusMap), SourceException) heatPumps.success - heatPumps.data.get().size() == resultingSize - heatPumps.data.get() == resultingSet as Set + heatPumps.data.get() == [sptd.hpInput] as Set - where: - nodes | operators | types | thermalBuses || resultingSize | resultingSet - [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [sptd.hpInput] - } + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(operatorMap, nodeMap, map([sptd.chpTypeInput]), thermalBusMap, thermalStorageMap), SourceException) + chpUnits.success + chpUnits.data.get() == [sptd.chpInput] as Set - def "A SystemParticipantSource with csv input should throw an exception from an invalid heat pump input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def nodeMap = map([sptd.hpInput.node]) + def evs = Try.of(() -> csvSystemParticipantSource.getEvs(operatorMap, nodeMap, map([sptd.evTypeInput])), SourceException) + evs.success + evs.data.get() == [sptd.evInput] as Set - expect: - def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, map(types), map(thermalBuses)), SourceException) + def wecs = Try.of(() -> csvSystemParticipantSource.getWecPlants(operatorMap, nodeMap, map([sptd.wecType])), SourceException) + wecs.success + wecs.data.get() == [sptd.wecInput] as Set - heatPumps.failure - heatPumps.exception.get().class == SourceException + def storages = Try.of(() -> csvSystemParticipantSource.getStorages(operatorMap, nodeMap, map([sptd.storageTypeInput])), SourceException) + storages.success + storages.data.get() == [sptd.storageInput] as Set - where: - nodes | operators | types | thermalBuses | resultingSize || resultingSet - [sptd.hpInput.node] | [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [ - new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type) - ] - [] | [] | [] | [] || 0 | [] - [sptd.hpInput.node] | [] | [] | [] || 0 | [] - [sptd.hpInput.node] | [sptd.hpInput.operator] | [] | [] || 0 | [] - [sptd.hpInput.node] | [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 | [] - } + def bms = Try.of(() -> csvSystemParticipantSource.getBmPlants(operatorMap, nodeMap, map([sptd.bmTypeInput])), SourceException) + bms.success + bms.data.get() == [sptd.bmInput] as Set - def "A SystemParticipantSource with csv input should return data from a valid chp input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def nodeMap = map([sptd.hpInput.node]) + def evcs = Try.of(() -> csvSystemParticipantSource.getEvcs(operatorMap, nodeMap), SourceException) + evcs.success + evcs.data.get() == [sptd.evcsInput] as Set - expect: - def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) + def loads = Try.of(() -> csvSystemParticipantSource.getLoads(operatorMap, nodeMap), SourceException) + loads.success + loads.data.get() == [sptd.loadInput] as Set - chpUnits.success - chpUnits.data.get().size() == resultingSize - chpUnits.data.get() == resultingSet as Set + def pvs = Try.of(() -> csvSystemParticipantSource.getPvPlants(operatorMap, nodeMap), SourceException) + pvs.success + pvs.data.get() == [sptd.pvInput] as Set - where: - operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet - [sptd.chpInput.operator] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [sptd.chpInput] + def fixedFeedIns = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(operatorMap, nodeMap), SourceException) + fixedFeedIns.success + fixedFeedIns.data.get() == [sptd.fixedFeedInInput] as Set } - def "A SystemParticipantSource with csv input should throw an exception from a invalid chp input file as expected"() { + def "A SystemParticipantSource with csv input should throw an exception from an invalid heat pump input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - def nodeMap = map([sptd.hpInput.node]) + def nodeMap = map([sptd.participantNode]) expect: - def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) + def heatPumps = Try.of(() -> csvSystemParticipantSource.getHeatPumps(map(operators), nodeMap, map(types), map(thermalBuses)), SourceException) - chpUnits.failure - chpUnits.exception.get().class == SourceException + heatPumps.failure + heatPumps.exception.get().class == SourceException where: - operators | types | thermalBuses | thermalStorages || resultingSize || resultingSet - [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || 1 || [ - new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction) - ] - [] | [] | [] | [] as List || 0 || [] - [] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.operator] | [] | [] | [] as List || 0 || [] - [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] as List || 0 || [] + operators | types | thermalBuses || resultingSize | resultingSet + [] | [sptd.hpInput.type] | [sptd.hpInput.thermalBus] || 1 | [new HpInput(sptd.hpInput.uuid, sptd.hpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.hpInput.operationTime, sptd.hpInput.node, sptd.hpInput.thermalBus, sptd.hpInput.qCharacteristics, sptd.hpInput.type)] + [] | [] | [] || 0 | [] + [] | [] | [] || 0 | [] + [sptd.hpInput.operator] | [] | [] || 0 | [] + [sptd.hpInput.operator] | [sptd.hpInput.type] | [] || 0 | [] } - def "A SystemParticipantSource with csv input should return data from valid ev input file as expected"() { + def "A SystemParticipantSource with csv input should throw an exception from a invalid chp input file as expected"() { given: def csvSystemParticipantSource = new SystemParticipantSource( Mock(TypeSource), Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.participantNode]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), map(types)), SourceException) + def chpUnits = Try.of(() -> csvSystemParticipantSource.getChpPlants(map(operators), nodeMap, map(types), map(thermalBuses), map(thermalStorages)), SourceException) - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set + chpUnits.failure + chpUnits.exception.get().class == SourceException where: - nodes | operators | types || resultingSize || resultingSet - [sptd.evInput.node] | [sptd.evInput.operator] | [sptd.evInput.type] || 1 || [sptd.evInput] + operators | types | thermalBuses | thermalStorages || resultingSet + [] | [sptd.chpInput.type] | [sptd.chpInput.thermalBus] | [sptd.chpInput.thermalStorage] || [new ChpInput(sptd.chpInput.uuid, sptd.chpInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.chpInput.operationTime, sptd.chpInput.node, sptd.chpInput.thermalBus, sptd.chpInput.qCharacteristics, sptd.chpInput.type, sptd.chpInput.thermalStorage, sptd.chpInput.marketReaction)] + [] | [] | [] | [] as List || [] + [] | [] | [] | [] as List || [] + [sptd.chpInput.operator] | [] | [] | [] as List || [] + [sptd.chpInput.operator] | [sptd.chpInput.type] | [] | [] as List || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid ev input file as expected"() { @@ -201,42 +189,19 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.participantNode]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getEvs(map(operators), nodeMap, map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException - - where: - nodes | operators | types || resultingSize || resultingSet - [sptd.evInput.node] | [] | [sptd.evInput.type] || 1 || [ - new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type) - ] - [sptd.evInput.node] | [sptd.evInput.operator] | [] || 0 || [] - [sptd.evInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid wec input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), map(types)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - where: - nodes | operators | types || resultingSize || resultingSet - [sptd.wecInput.node] | [sptd.wecInput.operator] | [sptd.wecInput.type] || 1 || [sptd.wecInput] + operators | types || resultingSet + [] | [sptd.evInput.type] || [new EvInput(sptd.evInput.uuid, sptd.evInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evInput.operationTime, sptd.evInput.node, sptd.evInput.qCharacteristics, sptd.evInput.type)] + [sptd.evInput.operator] | [] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid wec input file as expected"() { @@ -246,41 +211,19 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.participantNode]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getWecPlants(map(operators), nodeMap, map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: - nodes | operators | types || resultingSize || resultingSet - [sptd.wecInput.node] | [] | [sptd.wecInput.type] || 1 || [ - new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction) - ] - [sptd.wecInput.node] | [sptd.wecInput.operator] | [] || 0 || [] - [sptd.wecInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid storage input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), map(types)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - - where: - nodes | operators | types || resultingSize || resultingSet - [sptd.storageInput.node] | [sptd.storageInput.operator] | [sptd.storageInput.type] || 1 || [sptd.storageInput] + operators | types || resultingSet + [] | [sptd.wecInput.type] || [new WecInput(sptd.wecInput.uuid, sptd.wecInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.wecInput.operationTime, sptd.wecInput.node, sptd.wecInput.qCharacteristics, sptd.wecInput.type, sptd.wecInput.marketReaction)] + [sptd.wecInput.operator] | [] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid storage input file as expected"() { @@ -290,41 +233,19 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.participantNode]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getStorages(map(operators), nodeMap, map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: - nodes | operators | types || resultingSize || resultingSet - [sptd.storageInput.node] | [] | [sptd.storageInput.type] || 1 || [ - new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type) - ] - [sptd.storageInput.node] | [sptd.storageInput.operator] | [] || 0 || [] - [sptd.storageInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid bm input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), map(types)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - - where: - nodes | operators | types || resultingSize || resultingSet - [sptd.bmInput.node] | [sptd.bmInput.operator] | [sptd.bmInput.type] || 1 || [sptd.bmInput] + operators | types || resultingSet + [] | [sptd.storageInput.type] || [new StorageInput(sptd.storageInput.uuid, sptd.storageInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.storageInput.operationTime, sptd.storageInput.node, sptd.storageInput.qCharacteristics, sptd.storageInput.type)] + [sptd.storageInput.operator] | [] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid bm input file as expected"() { @@ -334,41 +255,20 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat Mock(ThermalSource), Mock(RawGridSource), new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) + def nodeMap = map([sptd.participantNode]) expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), map(nodes), map(types)), SourceException) + def sysParts = Try.of(() -> csvSystemParticipantSource.getBmPlants(map(operators), nodeMap, map(types)), SourceException) sysParts.failure sysParts.exception.get().class == SourceException where: - nodes | operators | types || resultingSize || resultingSet - [sptd.bmInput.node] | [] | [sptd.bmInput.type] || 1 || [ - new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff) - ] - [sptd.bmInput.node] | [sptd.bmInput.operator] | [] || 0 || [] - [sptd.bmInput.node] | [] | [] || 0 || [] - [] | [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid ev charging station input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getEvcs(map(operators), map(nodes)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - - where: - nodes | operators || resultingSize || resultingSet - [sptd.evcsInput.node] | [sptd.evcsInput.operator] || 1 || [sptd.evcsInput] + operators | types || resultingSet + [] | [sptd.bmInput.type] || [new BmInput(sptd.bmInput.uuid, sptd.bmInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.bmInput.operationTime, sptd.bmInput.node, sptd.bmInput.qCharacteristics, sptd.bmInput.type, sptd.bmInput.marketReaction, sptd.bmInput.costControlled, sptd.bmInput.feedInTariff)] + [sptd.bmInput.operator] | [] || [] + [] | [] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid ev charging station input file as expected"() { @@ -386,32 +286,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat sysParts.exception.get().class == SourceException where: - nodes | operators || resultingSize || resultingSet - [sptd.evcsInput.node] | [] || 1 || [ - new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport) - ] - [] | [sptd.evcsInput.operator] || 0 || [] - [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid load input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getLoads(map(operators), map(nodes)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - - where: - nodes | operators || resultingSize || resultingSet - [sptd.loadInput.node] | [sptd.loadInput.operator] || 1 || [sptd.loadInput] + nodes | operators || resultingSet + [sptd.evcsInput.node] | [] || [new EvcsInput(sptd.evcsInput.uuid, sptd.evcsInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.evcsInput.operationTime, sptd.evcsInput.node, sptd.evcsInput.qCharacteristics, sptd.evcsInput.type, sptd.evcsInput.chargingPoints, sptd.evcsInput.cosPhiRated, sptd.evcsInput.locationType, sptd.evcsInput.v2gSupport)] + [] | [sptd.evcsInput.operator] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid load input file as expected"() { @@ -428,34 +306,11 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat sysParts.failure sysParts.exception.get().class == SourceException - - where: - nodes | operators || resultingSize || resultingSet - [sptd.loadInput.node] | [] || 1 || [ - new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated) - ] - [] | [sptd.loadInput.operator] || 0 || [] - [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid pv input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getPvPlants(map(operators), map(nodes)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - where: - nodes | operators || resultingSize || resultingSet - [sptd.pvInput.node] | [sptd.pvInput.operator] || 1 || [sptd.pvInput] + nodes | operators || resultingSet + [sptd.loadInput.node] | [] || [new LoadInput(sptd.loadInput.uuid, sptd.loadInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.loadInput.operationTime, sptd.loadInput.node, sptd.loadInput.qCharacteristics, sptd.loadInput.loadProfile, sptd.loadInput.dsm, sptd.loadInput.eConsAnnual, sptd.loadInput.sRated, sptd.loadInput.cosPhiRated)] + [] | [sptd.loadInput.operator] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid pv input file as expected"() { @@ -473,32 +328,10 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat sysParts.exception.get().class == SourceException where: - nodes | operators || resultingSize || resultingSet - [sptd.pvInput.node] | [] || 1 || [ - new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated) - ] - [] | [sptd.pvInput.operator] || 0 || [] - [] | [] || 0 || [] - } - - def "A SystemParticipantSource with csv input should return data from valid fixedFeedIn input file as expected"() { - given: - def csvSystemParticipantSource = new SystemParticipantSource( - Mock(TypeSource), - Mock(ThermalSource), - Mock(RawGridSource), - new CsvDataSource(csvSep, participantsFolderPath, fileNamingStrategy)) - - expect: - def sysParts = Try.of(() -> csvSystemParticipantSource.getFixedFeedIns(map(operators), map(nodes)), SourceException) - - sysParts.success - sysParts.data.get().size() == resultingSize - sysParts.data.get() == resultingSet as Set - - where: - nodes | operators || resultingSize || resultingSet - [sptd.fixedFeedInInput.node] | [sptd.fixedFeedInInput.operator] as List || 1 || [sptd.fixedFeedInInput] + nodes | operators || resultingSet + [sptd.pvInput.node] | [] || [new PvInput(sptd.pvInput.uuid, sptd.pvInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.pvInput.operationTime, sptd.pvInput.node, sptd.pvInput.qCharacteristics, sptd.pvInput.albedo, sptd.pvInput.azimuth, sptd.pvInput.etaConv, sptd.pvInput.elevationAngle, sptd.pvInput.kG, sptd.pvInput.kT, sptd.pvInput.marketReaction, sptd.pvInput.sRated, sptd.pvInput.cosPhiRated)] + [] | [sptd.pvInput.operator] || [] + [] | [] || [] } def "A SystemParticipantSource with csv input should throw an exception from invalid fixedFeedIn input file as expected"() { @@ -516,11 +349,9 @@ class CsvSystemParticipantSourceTest extends Specification implements CsvTestDat sysParts.exception.get().class == SourceException where: - nodes | operators || resultingSize || resultingSet - [sptd.fixedFeedInInput.node] | [] as List || 1 || [ - new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated) - ] - [] | [sptd.fixedFeedInInput.operator] as List || 0 || [] - [] | [] as List || 0 || [] + nodes | operators || resultingSet + [sptd.fixedFeedInInput.node] | [] as List || [new FixedFeedInInput(sptd.fixedFeedInInput.uuid, sptd.fixedFeedInInput.id, OperatorInput.NO_OPERATOR_ASSIGNED, sptd.fixedFeedInInput.operationTime, sptd.fixedFeedInInput.node, sptd.fixedFeedInInput.qCharacteristics, sptd.fixedFeedInInput.sRated, sptd.fixedFeedInInput.cosPhiRated)] + [] | [sptd.fixedFeedInInput.operator] as List || [] + [] | [] as List || [] } } From e44f5a41fb7fd978ee0390249ca53ab82a68be09 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 22 Jan 2024 17:41:07 +0100 Subject: [PATCH 175/228] Implementing requested changes. --- CHANGELOG.md | 2 +- .../io/factory/input/SwitchInputFactory.java | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a47ed935e..7c8e66de8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Formatting Spotless Groovy import order [#960](https://github.com/ie3-institute/PowerSystemDataModel/issues/960) -- Implementing missing typical methods in `Try` [#970]() +- Implementing missing typical methods in `Try` [#970](https://github.com/ie3-institute/PowerSystemDataModel/issues/970) - Added log warning when using `SwitchInputs` with `parallelDevices` parameter [#840](https://github.com/ie3-institute/PowerSystemDataModel/issues/840) ### Fixed diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java index 30dda802d..279992303 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java @@ -35,16 +35,14 @@ protected SwitchInput buildModel( OperationTime operationTime) { final boolean closed = data.getBoolean(CLOSED); - try { - final int parallelDevices = data.getInt(PARALLEL_DEVICES); + if (data.containsKey(PARALLEL_DEVICES)) { + String parallelDevices = data.getField(PARALLEL_DEVICES); + log.warn( - "Found a `SwitchInput` with the id `{}` that specifies `parallelDevices` with a value of `{}`. Because switches cannot be parallel, the given value is ignored!", + "The `SwitchInput` with the id `{}` specifies the unsupported parameter `parallelDevices` with a value of `{}`." + + " Because switches are expected to have a given value `1`, the provided value is ignored.", id, parallelDevices); - } catch (Exception ignored) { - // because the field should not be used for switches, we can ignore the exception, that is - // thrown, when we - // do not find the field } return new SwitchInput(uuid, id, operator, operationTime, nodeA, nodeB, closed); From 32bf0cc13d76b811b83fd5ccac6800bf55f15230 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 09:41:22 +0000 Subject: [PATCH 176/228] Bump com.diffplug.spotless from 6.24.0 to 6.25.0 (#990) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7ab88ff9d..d3b59950f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'maven-publish' id 'signing' id 'pmd' // code check, working on source code - id 'com.diffplug.spotless' version '6.24.0' //code format + id 'com.diffplug.spotless' version '6.25.0' //code format id 'com.github.spotbugs' version '5.2.5' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation From 73dcea6372961040f2a4a9a1d61e0dc8c3bab8a7 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 24 Jan 2024 11:36:39 +0100 Subject: [PATCH 177/228] Adapting to prevalent doc style --- docs/readthedocs/models/input/participant/em.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/participant/em.md b/docs/readthedocs/models/input/participant/em.md index 299a12b5c..3e842e612 100644 --- a/docs/readthedocs/models/input/participant/em.md +++ b/docs/readthedocs/models/input/participant/em.md @@ -5,11 +5,12 @@ A model of an Energy Management Unit that controls the power of connected system participants. Participants are connected to an EM each via their `em` field. +## Attributes, Units and Remarks ```{eval-rst} -.. list-table:: Entity Model - :widths: auto - :header-rows: 1 +.. list-table:: + :widths: 33 33 33 + :header-rows: 0 * - Attribute From eb8c70839b8a1e77411a3a4e54fed655d68dd82e Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:21:03 +0100 Subject: [PATCH 178/228] !test --- docs/readthedocs/models/input/participant/ev.md | 10 +++++----- docs/readthedocs/models/result/participant/ev.md | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md index ee2690d1c..00a2fd3b0 100644 --- a/docs/readthedocs/models/input/participant/ev.md +++ b/docs/readthedocs/models/input/participant/ev.md @@ -20,7 +20,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - uuid - -- - - + - uuid of the input entity * - id - -- @@ -67,7 +67,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - uuid - -- - - + - uuid of the input entity * - id - -- @@ -75,7 +75,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - operator - -- - - + - operator of the asset * - operationTime - -- @@ -83,11 +83,11 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - node - -- - - + - node the asset is connected to * - type - -- - - + - type of EV ``` diff --git a/docs/readthedocs/models/result/participant/ev.md b/docs/readthedocs/models/result/participant/ev.md index 766096883..964ad812f 100644 --- a/docs/readthedocs/models/result/participant/ev.md +++ b/docs/readthedocs/models/result/participant/ev.md @@ -30,15 +30,15 @@ Result of an electric vehicle, that is occasionally connected to the grid via an * - p - MW - - + - active power output normally provided in MW * - q - MVAr - - + - reactive power output normally provided in MVAr * - soc - % - - + - the current state of charge of the electric vehicle ``` From cc2f5bafd9970ee468f6a7eaacd3df3ea23e8c97 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:31:35 +0100 Subject: [PATCH 179/228] !test --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b2b6086..d102f5ff2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) - Fixed hyperlink in line documentation [#965](https://github.com/ie3-institute/PowerSystemDataModel/issues/965) - Fixed some tests no failing when they should [#958](https://github.com/ie3-institute/PowerSystemDataModel/issues/958) +- Fixed ElectricVehicle Documentation [#875](https://github.com/ie3-institute/PowerSystemDataModel/issues/875) ### Changed - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) From 87b6221dd675962dfbdf60015a2990dedd152b92 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 24 Jan 2024 14:36:59 +0100 Subject: [PATCH 180/228] Removed unnecessary cutting apart and putting together again of directory path --- .../ie3/datamodel/io/connectors/CsvFileConnector.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index 2f307b4be..f022820aa 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -20,12 +20,10 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -236,13 +234,9 @@ public BufferedReader initReader(Path filePath) throws FileNotFoundException { * @return A set of relative paths to time series files, with respect to the base folder path */ private Set getIndividualTimeSeriesFilePaths() { - Path baseDirectoryPath = - Paths.get( - FilenameUtils.getFullPath(baseDirectoryName.toString()) - + FilenameUtils.getName(baseDirectoryName.toString())); - try (Stream pathStream = Files.walk(baseDirectoryPath)) { + try (Stream pathStream = Files.walk(baseDirectoryName)) { return pathStream - .map(baseDirectoryPath::relativize) + .map(baseDirectoryName::relativize) .filter( path -> { Path withoutEnding = From c511194044a463810273586f72d7f87c1c0829d9 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Wed, 24 Jan 2024 14:37:42 +0100 Subject: [PATCH 181/228] Renaming baseDirectoryName --- .../io/connectors/CsvFileConnector.java | 16 ++++++++-------- .../io/source/csv/CsvDataSourceTest.groovy | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index f022820aa..014096177 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -42,12 +42,12 @@ public class CsvFileConnector implements DataConnector { private final Map timeSeriesWriters = new HashMap<>(); private final FileNamingStrategy fileNamingStrategy; - private final Path baseDirectoryName; + private final Path baseDirectory; private static final String FILE_ENDING = ".csv"; - public CsvFileConnector(Path baseDirectoryName, FileNamingStrategy fileNamingStrategy) { - this.baseDirectoryName = baseDirectoryName; + public CsvFileConnector(Path baseDirectory, FileNamingStrategy fileNamingStrategy) { + this.baseDirectory = baseDirectory; this.fileNamingStrategy = fileNamingStrategy; } @@ -61,7 +61,7 @@ public synchronized BufferedCsvWriter getOrInitWriter( /* If it is not available, build and register one */ try { CsvFileDefinition fileDefinition = buildFileDefinition(clz, headerElements, csvSep); - BufferedCsvWriter newWriter = initWriter(baseDirectoryName, fileDefinition); + BufferedCsvWriter newWriter = initWriter(baseDirectory, fileDefinition); entityWriters.put(clz, newWriter); return newWriter; @@ -81,7 +81,7 @@ BufferedCsvWriter getOrInitWriter(T timeSeries, String[] headerElements, String /* If it is not available, build and register one */ try { CsvFileDefinition fileDefinition = buildFileDefinition(timeSeries, headerElements, csvSep); - BufferedCsvWriter newWriter = initWriter(baseDirectoryName, fileDefinition); + BufferedCsvWriter newWriter = initWriter(baseDirectory, fileDefinition); timeSeriesWriters.put(timeSeries.getUuid(), newWriter); return newWriter; @@ -194,7 +194,7 @@ public BufferedReader initReader(Class clz) * @throws FileNotFoundException if no file with the provided file name can be found */ public BufferedReader initReader(Path filePath) throws FileNotFoundException { - File fullPath = baseDirectoryName.resolve(filePath.toString() + FILE_ENDING).toFile(); + File fullPath = baseDirectory.resolve(filePath.toString() + FILE_ENDING).toFile(); return new BufferedReader( new InputStreamReader(new FileInputStream(fullPath), StandardCharsets.UTF_8), 16384); } @@ -234,9 +234,9 @@ public BufferedReader initReader(Path filePath) throws FileNotFoundException { * @return A set of relative paths to time series files, with respect to the base folder path */ private Set getIndividualTimeSeriesFilePaths() { - try (Stream pathStream = Files.walk(baseDirectoryName)) { + try (Stream pathStream = Files.walk(baseDirectory)) { return pathStream - .map(baseDirectoryName::relativize) + .map(baseDirectory::relativize) .filter( path -> { Path withoutEnding = diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy index e6c58dd97..be3fea5be 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy @@ -67,7 +67,7 @@ class CsvDataSourceTest extends Specification { def "A DataSource should contain a valid connector after initialization"() { expect: dummyCsvSource.connector != null - dummyCsvSource.connector.baseDirectoryName == testBaseFolderPath + dummyCsvSource.connector.baseDirectory == testBaseFolderPath dummyCsvSource.connector.fileNamingStrategy == fileNamingStrategy dummyCsvSource.connector.entityWriters.isEmpty() } From 95c89ae2bcfe71f8efe77c9a3e25231555e0fdb2 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 24 Jan 2024 15:46:53 +0100 Subject: [PATCH 182/228] !test --- docs/readthedocs/models/input/participant/thermalhouse.md | 8 ++++++-- .../readthedocs/models/result/participant/thermalhouse.md | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/participant/thermalhouse.md b/docs/readthedocs/models/input/participant/thermalhouse.md index c7a2bb6d6..2b8b3067a 100644 --- a/docs/readthedocs/models/input/participant/thermalhouse.md +++ b/docs/readthedocs/models/input/participant/thermalhouse.md @@ -19,15 +19,19 @@ This reflects a simple shoe box with transmission losses * - uuid - -- - - + - Unique identifier of a thermal house model * - id - -- - Human readable identifier + + * - bus + - -- + - Thermal bus, the model is connected to * - operator - -- - - + - operator of the asset * - operationTime - -- diff --git a/docs/readthedocs/models/result/participant/thermalhouse.md b/docs/readthedocs/models/result/participant/thermalhouse.md index db740a771..a48e7177e 100644 --- a/docs/readthedocs/models/result/participant/thermalhouse.md +++ b/docs/readthedocs/models/result/participant/thermalhouse.md @@ -35,7 +35,7 @@ This reflects a simple shoe box with transmission losses * - indoorTemperature - °C - - + - Indoor room temperature ``` From 1f4f4620fb3b50087f174b7cfc6863fc6b0b8af5 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:46:59 +0100 Subject: [PATCH 183/228] - Delete JavaDoc link in line 19. - Updated AUTHORS file(Developer and Copyright 2024). - link to AUTHORS at line 70. --- AUTHORS | 11 ++++++++++- CONTRIBUTING.md | 7 ++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/AUTHORS b/AUTHORS index 4c5ffecc5..5f4594090 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,10 +1,14 @@ -Copyright (c) 2023, Institute of Energy Systems, Energy Efficiency and Energy Economics (ie3) +Copyright (c) 2024, Institute of Energy Systems, Energy Efficiency and Energy Economics (ie3) All rights reserved. Lead Developers: - Johannes Hiry - Chris Kittl - Debopama Sen-Sarma + - Thomas Oberließen + - Daniel Feismann + - Johannes Bao + - Sebastian Peter Main Contributers: - Johannes Hiry - https://github.com/johanneshiry @@ -20,3 +24,8 @@ Main Contributers: - Marius Staudt - https://github.com/staudtMarius - Lara Roumeliotis - https://github.com/lararou - Vicky Bung - https://github.com/vickybung1 + - Daniel Feismann - https://github.com/danielfeismann + - Johannes Bao - https://github.com/SimonHuette + - Julian Hohmann - https://github.com/jo-bao + - Simon Huette - https://github.com/julianhohmann + - Pierre Petersmeier - http://github.com/pierrepetersmeier diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 613c30be6..02981e3ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ With this document we would like to give you some orientation on how you can con ## Testing and reporting bugs We really appreciate your usage of this project. Whenever you find a bug, it would be nice to check, if this isn't a feature to us. :wink: -You may find extensive information about the intended behaviour when you [Read the Docs](https://powersystemdatamodel.readthedocs.io/en/latest/) or within the [javadoc](https://ie3-institute.github.io/PowerSystemDataModel/javadoc/). +You may find extensive information about the intended behaviour when you [Read the Docs](https://powersystemdatamodel.readthedocs.io/en/latest/). If you still think it's a bug, please raise an [issue](https://guides.github.com/features/issues/) for us. Considering the following aspects in your inquiry, assists us in helping you: @@ -67,9 +67,6 @@ Before marking the pull request as 'ready to review', take these precautionary a `gradle finalizePR` summarizes all of these steps . ## For any doubts -... please contact -* Johannes (@johanneshiry), -* Debopama (@sensarmad) or -* Chris (@ckittl) +... please contact [us](AUTHORS) We are happy to help! :smiley: From 04d11e14c73e73c25b0eed498efc0f96c69412e0 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:57:24 +0100 Subject: [PATCH 184/228] -correct GitHub links --- AUTHORS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AUTHORS b/AUTHORS index 5f4594090..4c0b256d1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -25,7 +25,7 @@ Main Contributers: - Lara Roumeliotis - https://github.com/lararou - Vicky Bung - https://github.com/vickybung1 - Daniel Feismann - https://github.com/danielfeismann - - Johannes Bao - https://github.com/SimonHuette - - Julian Hohmann - https://github.com/jo-bao - - Simon Huette - https://github.com/julianhohmann + - Johannes Bao - https://github.com/jo-bao + - Julian Hohmann - https://github.com/julianhohmann + - Simon Huette - https://github.com/SimonHuette - Pierre Petersmeier - http://github.com/pierrepetersmeier From 9e49c1f0197e678e7a84b9d4df1fc02058df1f4c Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Wed, 24 Jan 2024 21:08:08 +0100 Subject: [PATCH 185/228] - Deleted JavaDoc sentence in line 54. --- CONTRIBUTING.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 02981e3ca..e30f1618a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,6 @@ In order to maintain a consistent project, we thought of some general design gui * We :heart: **immutability**. Therefore, please don't provide setters and use proper instantiation instead. * `double a = b * pow(x, j)`? :hand: Please **be expressive** in what you code! -* Document your code with **javadoc**. ### Testing Ensure the proper function of your code by [test driven development (TDD)](https://www.guru99.com/test-driven-development.html). From 2c90dd8b6e7633f8611c976a4875f6899afd8589 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Thu, 25 Jan 2024 11:01:32 +0100 Subject: [PATCH 186/228] - Added JavaDoc sentence in line 54. - changelog.md entrie. --- CHANGELOG.md | 2 ++ CONTRIBUTING.md | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b2b6086..c8d100af1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Allowing for additional unused columns in sources [#839](https://github.com/ie3-institute/PowerSystemDataModel/issues/839) - Improving column name validation to only run once per source [#849](https://github.com/ie3-institute/PowerSystemDataModel/issues/849) - Refactored and abstracted `EntitySource`s and `EntityData` creation [#969](https://github.com/ie3-institute/PowerSystemDataModel/issues/969) +- Updated contributing.md [#737](https://github.com/ie3-institute/PowerSystemDataModel/issues/737) + ## [4.1.0] - 2023-11-02 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e30f1618a..02981e3ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,6 +51,7 @@ In order to maintain a consistent project, we thought of some general design gui * We :heart: **immutability**. Therefore, please don't provide setters and use proper instantiation instead. * `double a = b * pow(x, j)`? :hand: Please **be expressive** in what you code! +* Document your code with **javadoc**. ### Testing Ensure the proper function of your code by [test driven development (TDD)](https://www.guru99.com/test-driven-development.html). From ba2fa585ee283a2ddfcfe12bd59c6f324aca97f3 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Thu, 25 Jan 2024 11:09:05 +0100 Subject: [PATCH 187/228] -delete space --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8d100af1..769dc95aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored and abstracted `EntitySource`s and `EntityData` creation [#969](https://github.com/ie3-institute/PowerSystemDataModel/issues/969) - Updated contributing.md [#737](https://github.com/ie3-institute/PowerSystemDataModel/issues/737) - ## [4.1.0] - 2023-11-02 ### Fixed From 7181431d0862c0e8df553ff1e91d171fe2e45099 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Thu, 25 Jan 2024 11:28:12 +0100 Subject: [PATCH 188/228] -added a table row for qCharacteristics. --- docs/readthedocs/models/input/participant/ev.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md index 00a2fd3b0..392d2beb6 100644 --- a/docs/readthedocs/models/input/participant/ev.md +++ b/docs/readthedocs/models/input/participant/ev.md @@ -84,6 +84,10 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - node - -- - node the asset is connected to + + * - qCharacteristics + - -- + - :ref:`Reactive power characteristic` to follow * - type - -- From 243fd9d26dc8749f276871540af5053806b28c10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 09:28:04 +0000 Subject: [PATCH 189/228] Bump testcontainersVersion from 1.19.3 to 1.19.4 (#996) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d3b59950f..c4bc3ce65 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ ext { javaVersion = JavaVersion.VERSION_17 groovyVersion = "4.0" groovyBinaryVersion = "4.0.18" - testcontainersVersion = '1.19.3' + testcontainersVersion = '1.19.4' scriptsLocation = 'gradle' + File.separator + 'scripts' + File.separator //location of script plugins } From ddbc3f5d8008791bcc37cb79d185372be4dea551 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:33:59 +0000 Subject: [PATCH 190/228] Bump com.github.spotbugs from 5.2.5 to 6.0.7 (#991) --- build.gradle | 2 +- gradle/scripts/spotbugs.gradle | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index c4bc3ce65..44b25d758 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'signing' id 'pmd' // code check, working on source code id 'com.diffplug.spotless' version '6.25.0' //code format - id 'com.github.spotbugs' version '5.2.5' // code check, working on byte code + id 'com.github.spotbugs' version '6.0.7' // code check, working on byte code id 'de.undercouch.download' version '5.5.0' id 'kr.motd.sphinx' version '2.10.1' // documentation generation id 'jacoco' // java code coverage plugin diff --git a/gradle/scripts/spotbugs.gradle b/gradle/scripts/spotbugs.gradle index 3b7f48f79..db8419336 100644 --- a/gradle/scripts/spotbugs.gradle +++ b/gradle/scripts/spotbugs.gradle @@ -1,21 +1,26 @@ // spotBugs is a code check tool, working on byte code +// workaround because imports do not work in files that are only included by build.gradle +def classLoader = plugins['com.github.spotbugs'].class.classLoader +def SpotBugsEffort = classLoader.findLoadedClass( 'com.github.spotbugs.snom.Effort' ) +def SpotBugsConfidence = classLoader.findLoadedClass( 'com.github.spotbugs.snom.Confidence' ) + spotbugs{ ignoreFailures = true // dont let the build fail on rule violations - effort = 'max' - reportLevel = 'high' + effort = SpotBugsEffort.valueOf("MAX") + reportLevel = SpotBugsConfidence.valueOf("HIGH") } spotbugsMain{ reports{ - html.enabled = false - xml.enabled = true + html.required.set(false) + xml.required.set(true) } } spotbugsTest{ reports{ - html.enabled = false - xml.enabled = true + html.required.set(false) + xml.required.set(true) } } From e63e602444ba0c1a3c4ea88fabf857ba84012002 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sat, 27 Jan 2024 11:24:14 +0100 Subject: [PATCH 191/228] -delete Remarks --- docs/readthedocs/models/input/participant/thermalhouse.md | 4 ++-- docs/readthedocs/models/result/participant/thermalhouse.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/readthedocs/models/input/participant/thermalhouse.md b/docs/readthedocs/models/input/participant/thermalhouse.md index 2b8b3067a..15e5fd54c 100644 --- a/docs/readthedocs/models/input/participant/thermalhouse.md +++ b/docs/readthedocs/models/input/participant/thermalhouse.md @@ -19,7 +19,7 @@ This reflects a simple shoe box with transmission losses * - uuid - -- - - Unique identifier of a thermal house model + - * - id - -- @@ -31,7 +31,7 @@ This reflects a simple shoe box with transmission losses * - operator - -- - - operator of the asset + - * - operationTime - -- diff --git a/docs/readthedocs/models/result/participant/thermalhouse.md b/docs/readthedocs/models/result/participant/thermalhouse.md index a48e7177e..af594039c 100644 --- a/docs/readthedocs/models/result/participant/thermalhouse.md +++ b/docs/readthedocs/models/result/participant/thermalhouse.md @@ -35,7 +35,7 @@ This reflects a simple shoe box with transmission losses * - indoorTemperature - °C - - Indoor room temperature + - ``` From 52a056d6687fcb8e03d79de947e8a2c5fcd9f173 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sat, 27 Jan 2024 11:27:13 +0100 Subject: [PATCH 192/228] -delete Remarks --- docs/readthedocs/models/input/participant/ev.md | 10 +++++----- docs/readthedocs/models/result/participant/ev.md | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/readthedocs/models/input/participant/ev.md b/docs/readthedocs/models/input/participant/ev.md index 392d2beb6..f837ca60d 100644 --- a/docs/readthedocs/models/input/participant/ev.md +++ b/docs/readthedocs/models/input/participant/ev.md @@ -20,7 +20,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - uuid - -- - - uuid of the input entity + - * - id - -- @@ -67,7 +67,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - uuid - -- - - uuid of the input entity + - * - id - -- @@ -75,7 +75,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - operator - -- - - operator of the asset + - * - operationTime - -- @@ -83,7 +83,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - node - -- - - node the asset is connected to + - * - qCharacteristics - -- @@ -91,7 +91,7 @@ Model of an electric vehicle, that is occasionally connected to the grid via an * - type - -- - - type of EV + - ``` diff --git a/docs/readthedocs/models/result/participant/ev.md b/docs/readthedocs/models/result/participant/ev.md index 964ad812f..05ba1e447 100644 --- a/docs/readthedocs/models/result/participant/ev.md +++ b/docs/readthedocs/models/result/participant/ev.md @@ -30,15 +30,15 @@ Result of an electric vehicle, that is occasionally connected to the grid via an * - p - MW - - active power output normally provided in MW + - * - q - MVAr - - reactive power output normally provided in MVAr + - * - soc - % - - the current state of charge of the electric vehicle + - ``` From 295e3ddc856a66a4300b655dd95dac1c2d926288 Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Sat, 27 Jan 2024 11:32:14 +0100 Subject: [PATCH 193/228] -Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b2b6086..54ff98843 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) - Fixed hyperlink in line documentation [#965](https://github.com/ie3-institute/PowerSystemDataModel/issues/965) - Fixed some tests no failing when they should [#958](https://github.com/ie3-institute/PowerSystemDataModel/issues/958) +- Fixed thermal-house-documentation [#873](https://github.com/ie3-institute/PowerSystemDataModel/issues/873) ### Changed - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) From 33c8b2907a98c0c892876c47bb16b8d342f75495 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 29 Jan 2024 15:17:06 +0100 Subject: [PATCH 194/228] Changing part of the log message. --- .../ie3/datamodel/io/factory/input/SwitchInputFactory.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java index 279992303..6a0e94bfc 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java @@ -39,8 +39,9 @@ protected SwitchInput buildModel( String parallelDevices = data.getField(PARALLEL_DEVICES); log.warn( - "The `SwitchInput` with the id `{}` specifies the unsupported parameter `parallelDevices` with a value of `{}`." - + " Because switches are expected to have a given value `1`, the provided value is ignored.", + "The `SwitchInput` with the id `{}` specifies the unused parameter `parallelDevices` with a value of `{}`." + + " SwitchInputs do not need to specify `parallelDevices`, as its value depends on the electrotechnical" + + " context where the switch is embedded.", id, parallelDevices); } From 84720e7617f72b10e90234b150b437e8782e7b07 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Mon, 29 Jan 2024 21:30:56 +0100 Subject: [PATCH 195/228] Tiny improvements to the log message --- .../ie3/datamodel/io/factory/input/SwitchInputFactory.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java index 6a0e94bfc..d716324cc 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/SwitchInputFactory.java @@ -39,9 +39,9 @@ protected SwitchInput buildModel( String parallelDevices = data.getField(PARALLEL_DEVICES); log.warn( - "The `SwitchInput` with the id `{}` specifies the unused parameter `parallelDevices` with a value of `{}`." - + " SwitchInputs do not need to specify `parallelDevices`, as its value depends on the electrotechnical" - + " context where the switch is embedded.", + "The SwitchInput with id `{}` specifies the unused parameter `parallelDevices` with a value of `{}`." + + " SwitchInputs do not need to specify `parallelDevices`, as its physical value depends on" + + " the electrotechnical context of where the switch is embedded.", id, parallelDevices); } From afe0608da96e5ea56b789662069f20396895854a Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 30 Jan 2024 13:27:37 +0100 Subject: [PATCH 196/228] CsvDataSource should throw exceptions on error. --- CHANGELOG.md | 1 + .../ie3/datamodel/io/source/DataSource.java | 3 +- .../ie3/datamodel/io/source/EntitySource.java | 11 +++- .../io/source/TimeSeriesMappingSource.java | 6 +- .../io/source/csv/CsvDataSource.java | 57 +++++++++++-------- .../io/source/csv/CsvIdCoordinateSource.java | 38 +++++++------ .../csv/CsvTimeSeriesMappingSource.java | 7 ++- .../io/source/csv/CsvTimeSeriesSource.java | 10 ++-- .../io/source/csv/CsvWeatherSource.java | 14 +++-- .../java/edu/ie3/datamodel/utils/Try.java | 21 +++++++ .../io/source/csv/CsvDataSourceTest.groovy | 6 +- .../csv/CsvIdCoordinateSourceCosmoIT.groovy | 3 +- .../csv/CsvIdCoordinateSourceIconIT.groovy | 3 +- .../edu/ie3/datamodel/utils/TryTest.groovy | 31 ++++++++++ 14 files changed, 145 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0da7810f..00415f92c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improving column name validation to only run once per source [#849](https://github.com/ie3-institute/PowerSystemDataModel/issues/849) - Refactored and abstracted `EntitySource`s and `EntityData` creation [#969](https://github.com/ie3-institute/PowerSystemDataModel/issues/969) - Updated contributing.md [#737](https://github.com/ie3-institute/PowerSystemDataModel/issues/737) +- `CsvDataSource` throws exceptions on error [#954](https://github.com/ie3-institute/PowerSystemDataModel/issues/954) ## [4.1.0] - 2023-11-02 diff --git a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java index effc82935..f05c0ae38 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/DataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/DataSource.java @@ -23,5 +23,6 @@ Optional> getSourceFields(Class entityClass) throws SourceException; /** Creates a stream of maps that represent the rows in the database */ - Stream> getSourceData(Class entityClass); + Stream> getSourceData(Class entityClass) + throws SourceException; } diff --git a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java index dd489ae4d..e81ec101d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/EntitySource.java @@ -384,9 +384,14 @@ protected static Stream> assetInputEn */ protected Stream> buildEntityData( Class entityClass) { - return dataSource - .getSourceData(entityClass) - .map(fieldsToAttributes -> new Success<>(new EntityData(fieldsToAttributes, entityClass))); + + return Try.of(() -> dataSource.getSourceData(entityClass), SourceException.class) + .convert( + data -> + data.map( + fieldsToAttributes -> + new Success<>(new EntityData(fieldsToAttributes, entityClass))), + exception -> Stream.of(Failure.of(exception))); } protected static Map unpackMap( diff --git a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java index 66cb1c46b..d580bc2d2 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -33,7 +33,7 @@ protected TimeSeriesMappingSource() { * * @return That mapping */ - public Map getMapping() { + public Map getMapping() throws SourceException { return getMappingSourceData() .map(this::createMappingEntry) .filter(Try::isSuccess) @@ -48,7 +48,7 @@ public Map getMapping() { * @param modelIdentifier Identifier of the model * @return An {@link Optional} to the time series identifier */ - public Optional getTimeSeriesUuid(UUID modelIdentifier) { + public Optional getTimeSeriesUuid(UUID modelIdentifier) throws SourceException { return Optional.ofNullable(getMapping().get(modelIdentifier)); } @@ -57,7 +57,7 @@ public Optional getTimeSeriesUuid(UUID modelIdentifier) { * * @return Stream of maps */ - public abstract Stream> getMappingSourceData(); + public abstract Stream> getMappingSourceData() throws SourceException; /** Returns the option for fields found in the source */ public abstract Optional> getSourceFields() throws SourceException; diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index ebe351eda..d57d8fba7 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -11,6 +11,9 @@ import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.source.DataSource; import edu.ie3.datamodel.models.UniqueEntity; +import edu.ie3.datamodel.utils.Try; +import edu.ie3.datamodel.utils.Try.Failure; +import edu.ie3.datamodel.utils.Try.Success; import edu.ie3.datamodel.utils.validation.ValidationUtils; import edu.ie3.util.StringUtils; import java.io.BufferedReader; @@ -83,8 +86,9 @@ public interface ReaderSupplier { } @Override - public Stream> getSourceData(Class entityClass) { - return buildStreamWithFieldsToAttributesMap(entityClass, connector); + public Stream> getSourceData(Class entityClass) + throws SourceException { + return buildStreamWithFieldsToAttributesMap(entityClass, connector).getOrThrow(); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -289,15 +293,15 @@ protected Predicate> isPresentCollectIfNot( * @return a parallel stream of maps, where each map represents one row of the csv file with the * mapping (fieldName to fieldValue) */ - protected Stream> buildStreamWithFieldsToAttributesMap( + protected Try>, SourceException> buildStreamWithFieldsToAttributesMap( Class entityClass, CsvFileConnector connector) { try { return buildStreamWithFieldsToAttributesMap(entityClass, connector.initReader(entityClass)); } catch (FileNotFoundException | ConnectorException e) { log.warn( "Unable to find file for entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); + return Success.of(Stream.empty()); } - return Stream.empty(); } /** @@ -307,10 +311,10 @@ protected Stream> buildStreamWithFieldsToAttributesMap( * * @param entityClass the entity class that should be build * @param bufferedReader the reader to use - * @return a parallel stream of maps, where each map represents one row of the csv file with the - * mapping (fieldName to fieldValue) + * @return a try containing either a parallel stream of maps, where each map represents one row of + * the csv file with the mapping (fieldName to fieldValue) or an exception */ - protected Stream> buildStreamWithFieldsToAttributesMap( + protected Try>, SourceException> buildStreamWithFieldsToAttributesMap( Class entityClass, BufferedReader bufferedReader) { try (BufferedReader reader = bufferedReader) { final String[] headline = parseCsvRow(reader.readLine(), csvSep); @@ -322,14 +326,16 @@ protected Stream> buildStreamWithFieldsToAttributesMap( Collection> allRows = csvRowFieldValueMapping(reader, headline); return distinctRowsWithLog( - allRows, fieldToValues -> fieldToValues.get("uuid"), entityClass.getSimpleName(), "UUID") - .parallelStream(); + allRows, + fieldToValues -> fieldToValues.get("uuid"), + entityClass.getSimpleName(), + "UUID") + .map(Set::parallelStream); } catch (IOException e) { log.warn( "Cannot read file to build entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); + return Success.of(Stream.empty()); } - - return Stream.empty(); } protected List> csvRowFieldValueMapping( @@ -358,10 +364,10 @@ protected List> csvRowFieldValueMapping( * debug String) * @param keyDescriptor Colloquial descriptor of the key, that is meant to be unique (for debug * String) - * @return either a set containing only unique rows or an empty set if at least two rows with the - * same UUID but different field values exist + * @return a try of either a set containing only unique rows or an exception if at least two rows + * with the same UUID but different field values exist */ - protected Set> distinctRowsWithLog( + protected Try>, SourceException> distinctRowsWithLog( Collection> allRows, final Function, String> keyExtractor, String entityDescriptor, @@ -385,18 +391,19 @@ protected Set> distinctRowsWithLog( allRowsSet.removeAll(distinctIdSet); String affectedCoordinateIds = allRowsSet.stream().map(keyExtractor).collect(Collectors.joining(",\n")); - log.error( - """ - '{}' entities with duplicated {} key, but different field values found! Please review the corresponding input file! - Affected primary keys: - {}""", - entityDescriptor, - keyDescriptor, - affectedCoordinateIds); - // if this happens, we return an empty set to prevent further processing - return new HashSet<>(); + + // if this happens, we return a failure + return Failure.of( + new SourceException( + "'" + + entityDescriptor + + "' entities with duplicated " + + keyDescriptor + + " key, but different field " + + "values found! Please review the corresponding input file! Affected primary keys: " + + affectedCoordinateIds)); } - return allRowsSet; + return Success.of(allRowsSet); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index 69609e641..729fd4c80 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -11,6 +11,8 @@ import edu.ie3.datamodel.io.factory.timeseries.IdCoordinateFactory; import edu.ie3.datamodel.io.source.IdCoordinateSource; import edu.ie3.datamodel.utils.Try; +import edu.ie3.datamodel.utils.Try.Failure; +import edu.ie3.datamodel.utils.Try.Success; import edu.ie3.util.geo.CoordinateDistance; import edu.ie3.util.geo.GeoUtils; import java.io.BufferedReader; @@ -63,13 +65,14 @@ public CsvIdCoordinateSource(IdCoordinateFactory factory, CsvDataSource dataSour * @return Mapping from coordinate id to coordinate */ private Map setupIdToCoordinateMap() throws SourceException { - return Try.scanStream( - buildStreamWithFieldsToAttributesMap() - .map(fieldToValues -> new SimpleFactoryData(fieldToValues, Pair.class)) - .map(factory::get), - "Pair") - .transform( - s -> s.collect(Collectors.toMap(Pair::getKey, Pair::getValue)), SourceException::new) + + return buildStreamWithFieldsToAttributesMap() + .map( + data -> + data.map(fieldToValues -> new SimpleFactoryData(fieldToValues, Pair.class)) + .map(factory::get)) + .flatMap(s -> Try.scanStream(s, "Pair").transformF(SourceException::new)) + .map(s -> s.collect(Collectors.toMap(Pair::getKey, Pair::getValue))) .getOrThrow(); } @@ -164,8 +167,8 @@ public int getCoordinateCount() { * * @return Stream with mappings from field identifiers to attributes */ - protected Stream> buildStreamWithFieldsToAttributesMap() - throws SourceException { + protected Try>, SourceException> + buildStreamWithFieldsToAttributesMap() { try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); @@ -181,7 +184,7 @@ protected Stream> buildStreamWithFieldsToAttributesMap() Function, String> idExtractor = fieldToValues -> fieldToValues.get(factory.getIdField()); - Set> withDistinctCoordinateId = + Try>, SourceException> withDistinctCoordinateId = dataSource.distinctRowsWithLog( allRows, idExtractor, COORDINATE_ID_MAPPING, "coordinate id"); Function, String> coordinateExtractor = @@ -189,15 +192,18 @@ protected Stream> buildStreamWithFieldsToAttributesMap() fieldToValues .get(factory.getLatField()) .concat(fieldToValues.get(factory.getLonField())); - return dataSource - .distinctRowsWithLog( - withDistinctCoordinateId, coordinateExtractor, COORDINATE_ID_MAPPING, "coordinate") - .parallelStream(); + + return withDistinctCoordinateId + .flatMap( + set -> + dataSource.distinctRowsWithLog( + set, coordinateExtractor, COORDINATE_ID_MAPPING, "coordinate")) + .map(Set::parallelStream); } catch (IOException e) { log.error("Cannot read the file for coordinate id to coordinate mapping.", e); + return Success.of(Stream.empty()); } catch (ValidationException ve) { - throw new SourceException("Creating stream failed due to failed validation", ve); + return Failure.of(new SourceException("Creating stream failed due to failed validation", ve)); } - return Stream.empty(); } } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index ee165ea2d..0852ef286 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -39,9 +39,10 @@ public CsvTimeSeriesMappingSource( } @Override - public Stream> getMappingSourceData() { - return dataSource.buildStreamWithFieldsToAttributesMap( - MappingEntry.class, dataSource.connector); + public Stream> getMappingSourceData() throws SourceException { + return dataSource + .buildStreamWithFieldsToAttributesMap(MappingEntry.class, dataSource.connector) + .getOrThrow(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java index 4b8d55604..bb81c5378 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java @@ -144,11 +144,11 @@ protected IndividualTimeSeries buildIndividualTimeSeries( throws SourceException { try (BufferedReader reader = dataSource.connector.initReader(filePath)) { Try>, FailureException> timeBasedValues = - Try.scanStream( - dataSource - .buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) - .map(fieldToValueFunction), - "TimeBasedValue"); + dataSource + .buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) + .transformF(FailureException::new) + .flatMap( + stream -> Try.scanStream(stream.map(fieldToValueFunction), "TimeBasedValue")); return new IndividualTimeSeries<>( timeSeriesUuid, new HashSet<>(timeBasedValues.getOrThrow().toList())); } catch (FileNotFoundException e) { diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index d3b98c7ee..cc6d76ab8 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -5,6 +5,7 @@ */ package edu.ie3.datamodel.io.source.csv; +import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation; @@ -20,6 +21,8 @@ import edu.ie3.datamodel.models.value.Value; import edu.ie3.datamodel.models.value.WeatherValue; import edu.ie3.datamodel.utils.TimeSeriesUtils; +import edu.ie3.datamodel.utils.Try; +import edu.ie3.datamodel.utils.Try.Success; import edu.ie3.util.interval.ClosedInterval; import java.io.BufferedReader; import java.io.FileNotFoundException; @@ -154,6 +157,7 @@ private Map> readWeatherTimeSeries( // we need a reader for each file try (BufferedReader reader = connector.initReader(data.getFullFilePath())) { buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) + .getOrThrow() .map(fieldToValueFunction) .flatMap(Optional::stream) .collect(Collectors.groupingBy(tbv -> tbv.getValue().getCoordinate())) @@ -172,6 +176,8 @@ private Map> readWeatherTimeSeries( weatherTimeSeries.put(point, timeSeries); } }); + } catch (SourceException e) { + log.error("Cannot process weather source", e); } catch (FileNotFoundException e) { log.error("Cannot read file {}. File not found!", data.getFullFilePath()); } catch (IOException e) { @@ -183,7 +189,7 @@ private Map> readWeatherTimeSeries( return weatherTimeSeries; } - private Stream> buildStreamWithFieldsToAttributesMap( + private Try>, SourceException> buildStreamWithFieldsToAttributesMap( Class entityClass, BufferedReader bufferedReader) throws ValidationException { try (BufferedReader reader = bufferedReader) { @@ -207,14 +213,12 @@ private Stream> buildStreamWithFieldsToAttributesMap( return dataSource .distinctRowsWithLog( allRows, timeCoordinateIdExtractor, entityClass.getSimpleName(), "UUID") - .parallelStream(); - + .map(Set::parallelStream); } catch (IOException e) { log.warn( "Cannot read file to build entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); + return Success.of(Stream.empty()); } - - return Stream.empty(); } /** diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index ed94ea821..1bb4c046e 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -246,6 +246,17 @@ public abstract Try transformF( public abstract Try transform( Function successFunc, Function failureFunc); + /** + * Method to convert a {@link Try} object. + * + * @param successFunc that will be used to transform the data to the new type + * @param failureFunc that will be used to transform the exception to the new type + * @return the new type + * @param new type + */ + public abstract U convert( + Function successFunc, Function failureFunc); + /** * If this is a Success, the value is returned, otherwise given default is returned. * @@ -334,6 +345,11 @@ public Try transform( return new Success<>(successFunc.apply(data)); } + @Override + public U convert(Function successFunc, Function failureFunc) { + return successFunc.apply(data); + } + @Override public T getOrElse(Supplier defaultData) { return data; @@ -464,6 +480,11 @@ public Try transform( return Failure.of(failureFunc.apply(exception)); } + @Override + public U convert(Function successFunc, Function failureFunc) { + return failureFunc.apply(exception); + } + @Override public T getOrElse(Supplier defaultData) { return defaultData.get(); diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy index 9f39f91f3..9123a4185 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy @@ -444,7 +444,7 @@ class CsvDataSourceTest extends Specification implements CsvTestDataMeta { when: def allRows = [nodeInputRow]* noOfEntities - def distinctRows = dummyCsvSource.distinctRowsWithLog(allRows, uuidExtractor, NodeInput.simpleName, "UUID") + def distinctRows = dummyCsvSource.distinctRowsWithLog(allRows, uuidExtractor, NodeInput.simpleName, "UUID").getOrThrow() then: distinctRows.size() == distinctSize @@ -466,7 +466,7 @@ class CsvDataSourceTest extends Specification implements CsvTestDataMeta { "v_rated" : "380"] } - def "A CsvDataSource should return an empty set of csv row mappings if the provided collection of mappings contains duplicated UUIDs with different data"() { + def "A CsvDataSource should return a failure if the provided collection of mappings contains duplicated UUIDs with different data"() { given: def nodeInputRow1 = [ @@ -501,6 +501,6 @@ class CsvDataSourceTest extends Specification implements CsvTestDataMeta { def distinctRows = dummyCsvSource.distinctRowsWithLog(allRows, uuidExtractor, NodeInput.simpleName, "UUID") then: - distinctRows.size() == 0 + distinctRows.failure } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy index 0a295421c..10ef6f00a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy @@ -36,7 +36,8 @@ class CsvIdCoordinateSourceCosmoIT extends Specification implements CsvTestDataM def actualStream = source.buildStreamWithFieldsToAttributesMap() then: - actualStream.collect(Collectors.toList()).containsAll(expectedStream.collect(Collectors.toList())) + actualStream.success + actualStream.data.get().collect(Collectors.toList()).containsAll(expectedStream.collect(Collectors.toList())) } def "The CsvIdCoordinateSource is able to look up a specific point or an empty Optional otherwise" () { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceIconIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceIconIT.groovy index 484d3a4ba..869c9d882 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceIconIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceIconIT.groovy @@ -37,7 +37,8 @@ class CsvIdCoordinateSourceIconIT extends Specification implements CsvTestDataMe def actualStream = source.buildStreamWithFieldsToAttributesMap() then: - actualStream.collect(Collectors.toList()).containsAll(expectedStream.collect(Collectors.toList())) + actualStream.success + actualStream.data.get().collect(Collectors.toList()).containsAll(expectedStream.collect(Collectors.toList())) } def "The CsvIdCoordinateSource is able to look up a specific point or an empty Optional otherwise" () { diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index ffb332697..74581b42e 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -8,8 +8,12 @@ package edu.ie3.datamodel.utils import edu.ie3.datamodel.exceptions.FailureException import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.exceptions.TryException +import org.junit.runner.notification.Failure import spock.lang.Specification +import java.util.function.Function +import java.util.stream.Stream + class TryTest extends Specification { def "A method can be applied to a try object"() { @@ -317,6 +321,33 @@ class TryTest extends Specification { flatMapF.exception.get() == failure.get() } + def "The convert method should work correctly for successes"() { + given: + Try, SourceException> success = new Try.Success(Stream.of(1, 2, 3)) + + when: + List> converted = success.convert(d -> d.map(r -> Try.Success.of(r)).toList(), e -> [Try.Failure.of(e)] ) + + then: + converted.size() == 3 + converted.get(0).data.get() == 1 + converted.get(1).data.get() == 2 + converted.get(2).data.get() == 3 + } + + def "The convert method should work correctly for failures"() { + given: + SourceException exception = new SourceException("exception") + Try, SourceException> failure = new Try.Failure<>(exception) + + when: + List> converted = failure.convert(d -> d.map(r -> Try.Success.of(r)).toList(), e -> [Try.Failure.of(e)] ) + + then: + converted.size() == 1 + converted.get(0).exception.get() == exception + } + def "The getOrElse method should work as expected on a success"() { given: def value = "some value" From 4e5a3e385f58426e53439171f450a7caae088e28 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 30 Jan 2024 13:45:34 +0100 Subject: [PATCH 197/228] Fixing 'codacy' issue. --- src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index 74581b42e..a7c45186c 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -8,10 +8,8 @@ package edu.ie3.datamodel.utils import edu.ie3.datamodel.exceptions.FailureException import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.exceptions.TryException -import org.junit.runner.notification.Failure import spock.lang.Specification -import java.util.function.Function import java.util.stream.Stream class TryTest extends Specification { From b5a7f44c90ff888d17d85927cdb9e6a146bb205e Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 1 Feb 2024 14:51:44 +0100 Subject: [PATCH 198/228] Refactoring csv source file handling --- .../io/connectors/CsvFileConnector.java | 35 +------- .../io/source/csv/CsvDataSource.java | 79 +++++++++++-------- .../io/source/csv/CsvIdCoordinateSource.java | 7 +- .../csv/CsvTimeSeriesMappingSource.java | 4 +- .../io/source/csv/CsvTimeSeriesSource.java | 32 +++----- .../java/edu/ie3/datamodel/utils/Try.java | 15 ++++ .../io/connectors/CsvFileConnectorTest.groovy | 14 ++-- .../io/source/csv/CsvDataSourceTest.groovy | 20 +---- .../source/csv/CsvTimeSeriesSourceIT.groovy | 2 +- .../edu/ie3/datamodel/utils/TryTest.groovy | 24 ++++++ 10 files changed, 112 insertions(+), 120 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java index cebefeaac..3250a862d 100644 --- a/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java +++ b/src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java @@ -159,28 +159,7 @@ public synchronized void closeEntityWriter(Class clz } /** - * Initializes a file reader for the given class that should be read in. The expected file name is - * determined based on {@link FileNamingStrategy} of the this {@link CsvFileConnector} instance - * - * @param clz the class of the entity that should be read - * @return the reader that contains information about the file to be read in - * @throws FileNotFoundException If the matching file cannot be found - */ - public BufferedReader initReader(Class clz) - throws FileNotFoundException, ConnectorException { - Path filePath = - fileNamingStrategy - .getFilePath(clz) - .orElseThrow( - () -> - new ConnectorException( - "Cannot find a naming strategy for class '" + clz.getSimpleName() + "'.")); - return initReader(filePath); - } - - /** - * Initializes a file reader for the given file name. Use {@link - * CsvFileConnector#initReader(Class)} for files that actually correspond to concrete entities. + * Initializes a file reader for the given file name. * * @param filePath path of file starting from base folder, including file name but not file * extension @@ -247,18 +226,6 @@ private Set getIndividualTimeSeriesFilePaths() { } } - /** - * Initialises a reader to get grip on the file that contains mapping information between - * coordinate id and actual coordinate - * - * @return A {@link BufferedReader} - * @throws FileNotFoundException If the file is not present - */ - public BufferedReader initIdCoordinateReader() throws FileNotFoundException { - Path filePath = Path.of(fileNamingStrategy.getIdCoordinateEntityName()); - return initReader(filePath); - } - /** * Builds a new file definition consisting of file name and head line elements * diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java index d57d8fba7..b627872d4 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvDataSource.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source.csv; -import edu.ie3.datamodel.exceptions.ConnectorException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.connectors.CsvFileConnector; import edu.ie3.datamodel.io.naming.FileNamingStrategy; @@ -49,6 +48,8 @@ public class CsvDataSource implements DataSource { protected final String csvSep; protected final CsvFileConnector connector; + private final FileNamingStrategy fileNamingStrategy; + /** * @deprecated ensures downward compatibility with old csv data format. Can be removed when * support for old csv format is removed. * @@ -59,42 +60,38 @@ public class CsvDataSource implements DataSource { public CsvDataSource(String csvSep, Path folderPath, FileNamingStrategy fileNamingStrategy) { this.csvSep = csvSep; this.connector = new CsvFileConnector(folderPath, fileNamingStrategy); + this.fileNamingStrategy = fileNamingStrategy; } @Override public Optional> getSourceFields(Class entityClass) throws SourceException { - return getSourceFields(() -> connector.initReader(entityClass)); + return getSourceFields(getFilePath(entityClass).getOrThrow()); } - public Optional> getSourceFields(ReaderSupplier readerSupplier) - throws SourceException { - try (BufferedReader reader = readerSupplier.get()) { + /** + * @param filePath path of file starting from base folder, including file name but not file + * extension + * @return The source field names as a set, if file exists + * @throws SourceException on error while reading the source file + */ + public Optional> getSourceFields(Path filePath) throws SourceException { + try (BufferedReader reader = connector.initReader(filePath)) { return Optional.of( Arrays.stream(parseCsvRow(reader.readLine(), csvSep)).collect(Collectors.toSet())); } catch (FileNotFoundException e) { // A file not existing can be acceptable in many cases, and is handled elsewhere. log.debug("The source for the given entity couldn't be found! Cause: {}", e.getMessage()); return Optional.empty(); - } catch (ConnectorException | IOException e) { + } catch (IOException e) { throw new SourceException("Error while trying to read source", e); } } - public interface ReaderSupplier { - BufferedReader get() throws FileNotFoundException, ConnectorException; - } - @Override public Stream> getSourceData(Class entityClass) throws SourceException { - return buildStreamWithFieldsToAttributesMap(entityClass, connector).getOrThrow(); - } - - // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - - public BufferedReader createReader(Path filePath) throws FileNotFoundException { - return connector.initReader(filePath); + return buildStreamWithFieldsToAttributesMap(entityClass, true).getOrThrow(); } // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -283,25 +280,24 @@ protected Predicate> isPresentCollectIfNot( }; } + public FileNamingStrategy getNamingStrategy() { + return fileNamingStrategy; + } + /** - * Tries to open a file reader from the connector based on the provided entity class and hands it - * over for further processing. + * Tries to open a file reader based on the provided entity class and hands it over for further + * processing. * * @param entityClass the entity class that should be build and that is used to get the * corresponding reader - * @param connector the connector that should be used to get the reader from * @return a parallel stream of maps, where each map represents one row of the csv file with the * mapping (fieldName to fieldValue) */ protected Try>, SourceException> buildStreamWithFieldsToAttributesMap( - Class entityClass, CsvFileConnector connector) { - try { - return buildStreamWithFieldsToAttributesMap(entityClass, connector.initReader(entityClass)); - } catch (FileNotFoundException | ConnectorException e) { - log.warn( - "Unable to find file for entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); - return Success.of(Stream.empty()); - } + Class entityClass, boolean allowFileNotExisting) { + return getFilePath(entityClass) + .flatMap( + path -> buildStreamWithFieldsToAttributesMap(entityClass, path, allowFileNotExisting)); } /** @@ -310,13 +306,13 @@ protected Try>, SourceException> buildStreamWithField * the returning stream is a parallel stream, the order of the elements cannot be guaranteed. * * @param entityClass the entity class that should be build - * @param bufferedReader the reader to use + * @param filePath the path of the file to read * @return a try containing either a parallel stream of maps, where each map represents one row of * the csv file with the mapping (fieldName to fieldValue) or an exception */ protected Try>, SourceException> buildStreamWithFieldsToAttributesMap( - Class entityClass, BufferedReader bufferedReader) { - try (BufferedReader reader = bufferedReader) { + Class entityClass, Path filePath, boolean allowFileNotExisting) { + try (BufferedReader reader = connector.initReader(filePath)) { final String[] headline = parseCsvRow(reader.readLine(), csvSep); // by default try-with-resources closes the reader directly when we leave this method (which @@ -331,13 +327,28 @@ protected Try>, SourceException> buildStreamWithField entityClass.getSimpleName(), "UUID") .map(Set::parallelStream); + } catch (FileNotFoundException e) { + if (allowFileNotExisting) { + log.warn("Unable to find file '{}': {}", filePath, e.getMessage()); + return Success.of(Stream.empty()); + } else { + return Failure.of(new SourceException("Unable to find file '" + filePath + "'.", e)); + } } catch (IOException e) { - log.warn( - "Cannot read file to build entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); - return Success.of(Stream.empty()); + return Failure.of( + new SourceException( + "Cannot read file to build entity '" + entityClass.getSimpleName() + "'", e)); } } + private Try getFilePath(Class entityClass) { + return Try.from( + fileNamingStrategy.getFilePath(entityClass), + () -> + new SourceException( + "Cannot find a naming strategy for class '" + entityClass.getSimpleName() + "'.")); + } + protected List> csvRowFieldValueMapping( BufferedReader reader, String[] headline) { return reader diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index 729fd4c80..f5cac5884 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -17,6 +17,7 @@ import edu.ie3.util.geo.GeoUtils; import java.io.BufferedReader; import java.io.IOException; +import java.nio.file.Path; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -92,7 +93,8 @@ private Map invert(Map map) { @Override public Optional> getSourceFields(Class entityClass) throws SourceException { - return dataSource.getSourceFields(dataSource.connector::initIdCoordinateReader); + Path filePath = Path.of(dataSource.getNamingStrategy().getIdCoordinateEntityName()); + return dataSource.getSourceFields(filePath); } @Override @@ -169,7 +171,8 @@ public int getCoordinateCount() { */ protected Try>, SourceException> buildStreamWithFieldsToAttributesMap() { - try (BufferedReader reader = dataSource.connector.initIdCoordinateReader()) { + Path filePath = Path.of(dataSource.getNamingStrategy().getIdCoordinateEntityName()); + try (BufferedReader reader = dataSource.connector.initReader(filePath)) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); // validating read file diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java index 0852ef286..4f1065dd7 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSource.java @@ -40,9 +40,7 @@ public CsvTimeSeriesMappingSource( @Override public Stream> getMappingSourceData() throws SourceException { - return dataSource - .buildStreamWithFieldsToAttributesMap(MappingEntry.class, dataSource.connector) - .getOrThrow(); + return dataSource.buildStreamWithFieldsToAttributesMap(MappingEntry.class, true).getOrThrow(); } @Override diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java index bb81c5378..49d6f83e5 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java @@ -6,7 +6,6 @@ package edu.ie3.datamodel.io.source.csv; import edu.ie3.datamodel.exceptions.FactoryException; -import edu.ie3.datamodel.exceptions.FailureException; import edu.ie3.datamodel.exceptions.SourceException; import edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation; import edu.ie3.datamodel.io.factory.timeseries.*; @@ -18,9 +17,6 @@ import edu.ie3.datamodel.utils.TimeSeriesUtils; import edu.ie3.datamodel.utils.Try; import edu.ie3.util.interval.ClosedInterval; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; import java.nio.file.Path; import java.time.ZonedDateTime; import java.util.*; @@ -128,7 +124,8 @@ public Optional getValue(ZonedDateTime time) { /** * Attempts to read a time series with given unique identifier and file path. Single entries are - * obtained entries with the help of {@code fieldToValueFunction}. + * obtained entries with the help of {@code fieldToValueFunction}. If the file does not exist, an + * empty Stream is returned. * * @param timeSeriesUuid unique identifier of the time series * @param filePath path to the file to read @@ -142,21 +139,14 @@ protected IndividualTimeSeries buildIndividualTimeSeries( Path filePath, Function, Try, FactoryException>> fieldToValueFunction) throws SourceException { - try (BufferedReader reader = dataSource.connector.initReader(filePath)) { - Try>, FailureException> timeBasedValues = - dataSource - .buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) - .transformF(FailureException::new) - .flatMap( - stream -> Try.scanStream(stream.map(fieldToValueFunction), "TimeBasedValue")); - return new IndividualTimeSeries<>( - timeSeriesUuid, new HashSet<>(timeBasedValues.getOrThrow().toList())); - } catch (FileNotFoundException e) { - throw new SourceException("Unable to find a file with path '" + filePath + "'.", e); - } catch (IOException e) { - throw new SourceException("Error during reading of file'" + filePath + "'.", e); - } catch (FailureException e) { - throw new SourceException("Unable to build individual time series. ", e.getCause()); - } + Try>, SourceException> timeBasedValues = + dataSource + .buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, filePath, false) + .flatMap( + stream -> + Try.scanStream(stream.map(fieldToValueFunction), "TimeBasedValue") + .transformF(SourceException::new)); + return new IndividualTimeSeries<>( + timeSeriesUuid, new HashSet<>(timeBasedValues.getOrThrow().toList())); } } diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index 1bb4c046e..b8b967401 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -96,6 +96,21 @@ public static List> ofVoid( return Arrays.stream(supplier).map(sup -> Try.ofVoid(sup, clazz)).toList(); } + /** + * Method to create a {@link Try} object from Optional. + * + * @param opt The optional + * @param exception Supplier function that supplies an exception if Optional is empty + * @return a try object + * @param type of data + * @param type of exception + */ + public static Try from( + Optional opt, ExceptionSupplier exception) { + return opt.map(data -> (Try) new Success(data)) + .orElseGet(() -> new Failure<>(exception.get())); + } + /** * Method to retrieve the exceptions from all {@link Failure} objects. * diff --git a/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy index 69231768b..4898da785 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy @@ -32,6 +32,9 @@ class CsvFileConnectorTest extends Specification { @Shared Path tmpDirectory + @Shared + FileNamingStrategy fileNamingStrategy + @Shared CsvFileConnector cfc @@ -43,7 +46,8 @@ class CsvFileConnectorTest extends Specification { def setupSpec() { tmpDirectory = Files.createTempDirectory("psdm_csv_file_connector_") - cfc = new CsvFileConnector(tmpDirectory, new FileNamingStrategy()) + fileNamingStrategy = new FileNamingStrategy() + cfc = new CsvFileConnector(tmpDirectory, fileNamingStrategy) def gridPaths = [Path.of("node_input.csv")] timeSeriesPaths = [ "its_pq_53990eea-1b5d-47e8-9134-6d8de36604bf.csv", @@ -110,11 +114,8 @@ class CsvFileConnectorTest extends Specification { } def "The csv file connector throws an Exception, if the foreseen file cannot be found"() { - given: - def cfc = new CsvFileConnector(tmpDirectory, new FileNamingStrategy(new EntityPersistenceNamingStrategy(), new DefaultDirectoryHierarchy(tmpDirectory, "test"))) - when: - cfc.initReader(NodeInput) + cfc.initReader(tmpDirectory.resolve("path-does-not-exist")) then: thrown(FileNotFoundException) @@ -122,7 +123,8 @@ class CsvFileConnectorTest extends Specification { def "The csv file connector initializes a reader without Exception, if the foreseen file is apparent"() { when: - cfc.initReader(NodeInput) + def filePath = fileNamingStrategy.getFilePath(NodeInput).orElseThrow() + cfc.initReader(filePath) then: noExceptionThrown() diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy index 9123a4185..5527bef57 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.io.source.csv -import edu.ie3.datamodel.exceptions.SourceException import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.NodeInput @@ -99,24 +98,7 @@ class CsvDataSourceTest extends Specification implements CsvTestDataMeta { def path = Path.of("this/path/does-not-exist") expect: - dummyCsvSource.getSourceFields(() -> dummyCsvSource.connector.initReader(path)).isEmpty() - } - - def "A CsvDataSource should throw an exception when retrieving column names for a non-readable CSV file"() { - given: - DummyCsvSource source = new DummyCsvSource(csvSep, participantsFolderPath, fileNamingStrategy) - def readerSupplier = () -> { - def reader = source.connector.initReader(LoadInput) - reader.close() // We simulate the file being unreadable by just closing the reader before passing it over - return reader - } - - when: - source.getSourceFields(readerSupplier) - - then: - def exc = thrown(SourceException) - exc.message.startsWith("Error while trying to read source") + dummyCsvSource.getSourceFields(path).isEmpty() } def "A CsvDataSource should build a valid fields to attributes map with valid data as expected"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy index 2f1935193..78ca34d74 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceIT.groovy @@ -39,7 +39,7 @@ class CsvTimeSeriesSourceIT extends Specification implements CsvTestDataMeta { then: def ex = thrown(SourceException) - ex.message == "Unable to find a file with path '" + filePath + "'." + ex.message == "Unable to find file '" + filePath + "'." ex.cause.class == FileNotFoundException } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy index a7c45186c..1419f04f3 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/TryTest.groovy @@ -163,6 +163,30 @@ class TryTest extends Specification { ex.cause.message == "source exception" } + def "A Success is created from a non-empty Optional"() { + given: + def opt = Optional.of("Test") + + when: + def actualTry = Try.from(opt, () -> new FailureException("failure")) + + then: + actualTry.success + actualTry.data.get() == "Test" + } + + def "A Failure is created from an empty Optional"() { + given: + def opt = Optional.empty() + + when: + def actualTry = Try.from(opt, () -> new FailureException("failure")) + + then: + actualTry.failure + actualTry.exception.get().getMessage() == "failure" + } + def "A void method can be applied to a try object"() { when: Try actual = Try.ofVoid(() -> null, Exception) From d1b37bbbaf3e1d1427e95c8824a046bd73531bc1 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 1 Feb 2024 16:51:24 +0100 Subject: [PATCH 199/228] Hopefully fixing code smell --- src/main/java/edu/ie3/datamodel/utils/Try.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index b8b967401..8d6918c8f 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -107,7 +107,7 @@ public static List> ofVoid( */ public static Try from( Optional opt, ExceptionSupplier exception) { - return opt.map(data -> (Try) new Success(data)) + return opt.map(data -> (Try) Success.of(data)) .orElseGet(() -> new Failure<>(exception.get())); } From e65eb5c9d69e3339ac768cba8f72915044e4da04 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 2 Feb 2024 11:55:58 +0100 Subject: [PATCH 200/228] Add metals to gitignore --- .gitignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7cbb73c34..a99c96c97 100644 --- a/.gitignore +++ b/.gitignore @@ -242,4 +242,9 @@ docs/readthedocs/_build **/*.synctex.gz **/*.synctex(busy) -docs/javadoc \ No newline at end of file +### Metals ### +.metals/ +.bloop/ +project/**/metals.sbt + +docs/javadoc From d0b4289dc2f64594b5ac806514ba1b12e122910b Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 2 Feb 2024 12:00:54 +0100 Subject: [PATCH 201/228] Fix equals behavior of ConnectorResult --- .../ie3/datamodel/models/result/connector/ConnectorResult.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/edu/ie3/datamodel/models/result/connector/ConnectorResult.java b/src/main/java/edu/ie3/datamodel/models/result/connector/ConnectorResult.java index 7b8030396..e78ba6da9 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/connector/ConnectorResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/connector/ConnectorResult.java @@ -115,6 +115,7 @@ public void setiBAng(ComparableQuantity iBAng) { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; ConnectorResult that = (ConnectorResult) o; return iAMag.equals(that.iAMag) && iAAng.equals(that.iAAng) From 0ecaf2d456f5d61bd5c4e67cdbaa2b3b3eb600bb Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 2 Feb 2024 12:06:13 +0100 Subject: [PATCH 202/228] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 332853b8e..1cf7c5a8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed some tests no failing when they should [#958](https://github.com/ie3-institute/PowerSystemDataModel/issues/958) - Fixed thermal-house-documentation [#873](https://github.com/ie3-institute/PowerSystemDataModel/issues/873) - Fixed ElectricVehicle Documentation [#875](https://github.com/ie3-institute/PowerSystemDataModel/issues/875) +- Fixed Equal behavior of `ConnectorResult` [#1001](https://github.com/ie3-institute/PowerSystemDataModel/issues/1001) ### Changed - Changing from comparing strings to comparing uuids in `EntitySource.findFirstEntityByUuid` [#829](https://github.com/ie3-institute/PowerSystemDataModel/issues/829) From 12a6e9b2f218cd0bbb14156b17b62ef917c81a49 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Fri, 2 Feb 2024 13:37:30 +0100 Subject: [PATCH 203/228] Implementing an evcs validation. Fixing throwing exception for not yet implemented validations. --- CHANGELOG.md | 2 + .../exceptions/NotImplementedException.java | 12 ---- .../validation/ConnectorValidationUtils.java | 6 +- .../SystemParticipantValidationUtils.java | 48 ++++++++++------ .../ThermalUnitValidationUtils.java | 16 +----- .../utils/validation/ValidationUtils.java | 29 +++------- ...ystemParticipantValidationUtilsTest.groovy | 57 +++++++++---------- .../validation/ValidationUtilsTest.groovy | 52 ----------------- 8 files changed, 73 insertions(+), 149 deletions(-) delete mode 100644 src/main/java/edu/ie3/datamodel/exceptions/NotImplementedException.java diff --git a/CHANGELOG.md b/CHANGELOG.md index a0da7810f..590b45f80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Formatting Spotless Groovy import order [#960](https://github.com/ie3-institute/PowerSystemDataModel/issues/960) - Implementing missing typical methods in `Try` [#970](https://github.com/ie3-institute/PowerSystemDataModel/issues/970) - Added log warning when using `SwitchInputs` with `parallelDevices` parameter [#840](https://github.com/ie3-institute/PowerSystemDataModel/issues/840) +- Validation for `EvcsInput` [#1000](https://github.com/ie3-institute/PowerSystemDataModel/issues/1000) ### Fixed - Fixed Couchbase integration tests that randomly failed [#755](https://github.com/ie3-institute/PowerSystemDataModel/issues/755) @@ -26,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improving column name validation to only run once per source [#849](https://github.com/ie3-institute/PowerSystemDataModel/issues/849) - Refactored and abstracted `EntitySource`s and `EntityData` creation [#969](https://github.com/ie3-institute/PowerSystemDataModel/issues/969) - Updated contributing.md [#737](https://github.com/ie3-institute/PowerSystemDataModel/issues/737) +- Don't throw exceptions for not yet implemented validations [#879](https://github.com/ie3-institute/PowerSystemDataModel/issues/879) ## [4.1.0] - 2023-11-02 diff --git a/src/main/java/edu/ie3/datamodel/exceptions/NotImplementedException.java b/src/main/java/edu/ie3/datamodel/exceptions/NotImplementedException.java deleted file mode 100644 index 8cbc79b50..000000000 --- a/src/main/java/edu/ie3/datamodel/exceptions/NotImplementedException.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - * © 2021. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.exceptions; - -public class NotImplementedException extends UnsupportedOperationException { - public NotImplementedException(String msg) { - super(msg); - } -} diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java index 640e38426..5e11508b0 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java @@ -15,7 +15,6 @@ import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput; import edu.ie3.datamodel.models.input.container.SubGridContainer; import edu.ie3.datamodel.utils.Try; -import edu.ie3.datamodel.utils.Try.*; import edu.ie3.util.geo.GeoUtils; import edu.ie3.util.quantities.QuantityUtil; import java.util.ArrayList; @@ -73,10 +72,7 @@ protected static List> check(ConnectorInput co } else if (SwitchInput.class.isAssignableFrom(connector.getClass())) { exceptions.add(checkSwitch((SwitchInput) connector)); } else { - exceptions.add( - new Failure<>( - new InvalidEntityException( - "Validation failed due to: ", buildNotImplementedException(connector)))); + logNotImplemented(connector); } return exceptions; diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java index b2e0bc896..b01462433 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java @@ -8,7 +8,6 @@ import static edu.ie3.datamodel.models.StandardUnits.*; import edu.ie3.datamodel.exceptions.InvalidEntityException; -import edu.ie3.datamodel.exceptions.NotImplementedException; import edu.ie3.datamodel.exceptions.TryException; import edu.ie3.datamodel.models.input.InputEntity; import edu.ie3.datamodel.models.input.system.*; @@ -81,14 +80,9 @@ protected static List> check( } else if (WecInput.class.isAssignableFrom(systemParticipant.getClass())) { exceptions.addAll(checkWec((WecInput) systemParticipant)); } else if (EvcsInput.class.isAssignableFrom(systemParticipant.getClass())) { - exceptions.add( - Try.ofVoid(SystemParticipantValidationUtils::checkEvcs, NotImplementedException.class) - .transformF(e -> new InvalidEntityException(e.getMessage(), e.getCause()))); + exceptions.addAll(checkEvcs((EvcsInput) systemParticipant)); } else { - exceptions.add( - new Failure<>( - new InvalidEntityException( - "Validation failed due to: ", buildNotImplementedException(systemParticipant)))); + logNotImplemented(systemParticipant); } return exceptions; @@ -167,11 +161,7 @@ protected static List> checkType( } else if (WecTypeInput.class.isAssignableFrom(systemParticipantTypeInput.getClass())) { exceptions.addAll(checkWecType((WecTypeInput) systemParticipantTypeInput)); } else { - exceptions.add( - new Failure<>( - new InvalidEntityException( - buildNotImplementedException(systemParticipantTypeInput).getMessage(), - systemParticipantTypeInput))); + logNotImplemented(systemParticipantTypeInput); } return exceptions; @@ -532,11 +522,33 @@ private static List> checkWecType(WecTypeInput wecTypeInput)); } - /** Validates a EvcsInput */ - private static void checkEvcs() { - throw new NotImplementedException( - String.format( - "Validation of '%s' is currently not supported.", EvcsInput.class.getSimpleName())); + /** + * Validates a EvcsInput if
    + * - its number of charging points is < 1 - its rated power factor is between 0 and 1 - its rated + * apparent power is not negative + * + * @param evcsInput EvcsInput to validate + * @return a list of try objects either containing an {@link InvalidEntityException} or an empty + * Success + */ + private static List> checkEvcs(EvcsInput evcsInput) { + return List.of( + Try.ofVoid( + evcsInput.getChargingPoints() < 1, + () -> + new InvalidEntityException( + "The number of charging points needs to be at least one. Got: '" + + evcsInput.getChargingPoints() + + "'.", + evcsInput)), + Try.ofVoid( + () -> checkRatedPowerFactor(evcsInput, evcsInput.getCosPhiRated()), + InvalidEntityException.class), + Try.ofVoid( + evcsInput.getType().getsRated().getValue().doubleValue() < 0d, + () -> + new InvalidEntityException( + "The rated power of the given entity is below zero.", evcsInput))); } /** diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java index 8dd2b39f0..ea4984a32 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java @@ -5,7 +5,6 @@ */ package edu.ie3.datamodel.utils.validation; -import edu.ie3.datamodel.exceptions.FailedValidationException; import edu.ie3.datamodel.exceptions.InvalidEntityException; import edu.ie3.datamodel.exceptions.ValidationException; import edu.ie3.datamodel.models.input.thermal.*; @@ -48,10 +47,7 @@ private ThermalUnitValidationUtils() { } else if (ThermalStorageInput.class.isAssignableFrom(thermalUnitInput.getClass())) { exceptions.addAll(checkThermalStorage((ThermalStorageInput) thermalUnitInput)); } else { - exceptions.add( - new Failure<>( - new FailedValidationException( - buildNotImplementedException(thermalUnitInput).getMessage()))); + logNotImplemented(thermalUnitInput); } return exceptions; @@ -81,10 +77,7 @@ private ThermalUnitValidationUtils() { if (ThermalHouseInput.class.isAssignableFrom(thermalSinkInput.getClass())) { exceptions.addAll(checkThermalHouse((ThermalHouseInput) thermalSinkInput)); } else { - exceptions.add( - new Failure<>( - new FailedValidationException( - buildNotImplementedException(thermalSinkInput).getMessage()))); + logNotImplemented(thermalSinkInput); } return exceptions; @@ -115,10 +108,7 @@ private ThermalUnitValidationUtils() { if (CylindricalStorageInput.class.isAssignableFrom(thermalStorageInput.getClass())) { exceptions.addAll(checkCylindricalStorage((CylindricalStorageInput) thermalStorageInput)); } else { - exceptions.add( - new Failure<>( - new FailedValidationException( - buildNotImplementedException(thermalStorageInput).getMessage()))); + logNotImplemented(thermalStorageInput); } return exceptions; diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index 9cdd9add2..e63a3db35 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -41,17 +41,14 @@ protected ValidationUtils() { } /** - * Creates a new {@link NotImplementedException}, if there is no check available for the class of - * the given object + * Logs a warning, if there is no check available for the class of the given object. * - * @param obj Object, that cannot be checked - * @return Exception with predefined error string + * @param obj object, that cannot be checked */ - protected static NotImplementedException buildNotImplementedException(Object obj) { - return new NotImplementedException( - String.format( - "Cannot validate object of class '%s', as no routine is implemented.", - obj.getClass().getSimpleName())); + protected static void logNotImplemented(Object obj) { + logger.warn( + "Cannot validate object of class '{}', as no routine is implemented.", + obj.getClass().getSimpleName()); } /** @@ -74,9 +71,7 @@ public static void check(Object obj) throws ValidationException { } else if (AssetTypeInput.class.isAssignableFrom(obj.getClass())) { exceptions.addAll(checkAssetType((AssetTypeInput) obj)); } else { - exceptions.add( - new Failure<>( - new FailedValidationException(buildNotImplementedException(obj).getMessage()))); + logNotImplemented(obj); } List list = @@ -156,10 +151,7 @@ else if (SystemParticipantInput.class.isAssignableFrom(assetInput.getClass())) else if (ThermalUnitInput.class.isAssignableFrom(assetInput.getClass())) exceptions.addAll(ThermalUnitValidationUtils.check((ThermalUnitInput) assetInput)); else { - exceptions.add( - new Failure<>( - new FailedValidationException( - buildNotImplementedException(assetInput).getMessage()))); + logNotImplemented(assetInput); } return exceptions; @@ -207,10 +199,7 @@ else if (SystemParticipantTypeInput.class.isAssignableFrom(assetTypeInput.getCla exceptions.addAll( SystemParticipantValidationUtils.checkType((SystemParticipantTypeInput) assetTypeInput)); else { - exceptions.add( - new Failure<>( - new FailedValidationException( - buildNotImplementedException(assetTypeInput).getMessage()))); + logNotImplemented(assetTypeInput); } return exceptions; diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy index c82979e66..00bbaa2bd 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy @@ -5,14 +5,16 @@ */ package edu.ie3.datamodel.utils.validation +import static edu.ie3.datamodel.models.ElectricCurrentType.AC import static edu.ie3.datamodel.models.StandardUnits.* +import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE import static tech.units.indriya.unit.Units.PERCENT import edu.ie3.datamodel.exceptions.InvalidEntityException -import edu.ie3.datamodel.exceptions.NotImplementedException import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput import edu.ie3.datamodel.models.input.system.type.* +import edu.ie3.datamodel.models.input.system.type.chargingpoint.ChargingPointType import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.util.quantities.interfaces.Currency @@ -48,7 +50,7 @@ class SystemParticipantValidationUtilsTest extends Specification { def "SystemParticipantValidationUtils.check() recognizes all potential errors for a system participant"() { when: - List> exceptions = SystemParticipantValidationUtils.check(invalidSystemParticipant).stream().filter { it -> it.failure }.toList() + List> exceptions = SystemParticipantValidationUtils.check(invalidSystemParticipant).findAll { it -> it.failure } then: exceptions.size() == expectedSize @@ -255,7 +257,7 @@ class SystemParticipantValidationUtilsTest extends Specification { def "SystemParticipantValidationUtils.checkFixedFeedIn() recognizes all potential errors for an a Fixed Feed-In"() { when: - List> exceptions = SystemParticipantValidationUtils.check(invalidFixedFeedIn).stream().filter { it -> it.failure }.toList() + List> exceptions = SystemParticipantValidationUtils.check(invalidFixedFeedIn).findAll { it -> it.failure } then: exceptions.size() == expectedSize @@ -325,7 +327,7 @@ class SystemParticipantValidationUtilsTest extends Specification { def "SystemParticipantValidationUtils.checkLoad() recognizes all potential errors for a load"() { when: - List> exceptions = SystemParticipantValidationUtils.check(invalidLoad).stream().filter { it -> it.failure }.toList() + List> exceptions = SystemParticipantValidationUtils.check(invalidLoad).findAll { it -> it.failure } then: exceptions.size() == expectedSize @@ -355,7 +357,7 @@ class SystemParticipantValidationUtilsTest extends Specification { def "SystemParticipantValidationUtils.checkPV() recognizes all potential errors for a PV"() { when: - List> exceptions = SystemParticipantValidationUtils.check(invalidPV).stream().filter { it -> it.failure }.toList() + List> exceptions = SystemParticipantValidationUtils.check(invalidPV).findAll { it -> it.failure } then: exceptions.size() == expectedSize @@ -460,39 +462,36 @@ class SystemParticipantValidationUtilsTest extends Specification { new WecTypeInput(uuid, id, capex, opex, sRated, cosPhiRated, wecCharacteristic, etaConv, Quantities.getQuantity(-10, ROTOR_AREA), Quantities.getQuantity(-200, HUB_HEIGHT)) || new InvalidEntityException("The following quantities have to be zero or positive: -10 m², -200 m", invalidWecType) } - def "Checking an unsupported asset leads to an exception"() { - given: - def node = Mock(NodeInput) - node.getUuid() >> UUID.randomUUID() - def invalidParticipant = new InvalidSystemParticipantInput(node) - + def "SystemParticipantValidationUtils.checkEvcs() recognizes all potential errors for a evcs"() { when: - List> exceptions = SystemParticipantValidationUtils.check(invalidParticipant).stream().filter { it -> it.failure }.toList() + def exceptions = SystemParticipantValidationUtils.check(invalidEvcs).findAll { it.failure } then: - def e = exceptions.get(0).exception.get().cause - e.message == "Cannot validate object of class 'InvalidSystemParticipantInput', as no routine is implemented." + exceptions.size() == 1 + Exception ex = exceptions.get(0).exception.get() + ex.class == expectedException.class + ex.message == expectedException.message + + where: + invalidEvcs || expectedException + SystemParticipantTestData.evcsInput.copy().chargingPoints(-1).build() || new InvalidEntityException("The number of charging points needs to be at least one. Got: '-1'.", invalidEvcs) + SystemParticipantTestData.evcsInput.copy().chargingPoints(0).build() || new InvalidEntityException("The number of charging points needs to be at least one. Got: '0'.", invalidEvcs) + SystemParticipantTestData.evcsInput.copy().cosPhiRated(2).build() || new InvalidEntityException("Rated power factor of EvcsInput must be between 0 and 1", invalidEvcs) } - def "Checking an unsupported asset type leads to an exception"() { + def "SystemParticipantValidationUtils.checkEvcs() recognizes all potential errors for a evcs type"() { given: - def invalidParticipantInput = new InvalidSystemParticipantTypeInput() + def invalidType = new ChargingPointType("invalid type", Quantities.getQuantity(-1d, KILOVOLTAMPERE), AC) + def invalidEvcs = SystemParticipantTestData.evcsInput.copy().type(invalidType).build() + def expectedExceptions = new InvalidEntityException("The rated power of the given entity is below zero.", invalidEvcs) when: - SystemParticipantValidationUtils.check(invalidParticipantInput) + def exceptions = SystemParticipantValidationUtils.check(invalidEvcs).findAll { it.failure } then: - Throwable topEx = thrown() - Throwable e = topEx.cause - e.message.contains "Cannot validate object of class 'InvalidSystemParticipantTypeInput', as no routine is implemented." - } - - def "Checking electric vehicle charging stations leads to an exception"() { - when: - SystemParticipantValidationUtils.checkEvcs() - - then: - def e = thrown(NotImplementedException) - e.message == "Validation of 'EvcsInput' is currently not supported." + exceptions.size() == 1 + Exception ex = exceptions.get(0).exception.get() + ex.class == expectedExceptions.class + ex.message == expectedExceptions.message } } diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy index ab7eb8d2e..3dd39d15b 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy @@ -86,19 +86,6 @@ class ValidationUtilsTest extends Specification { [] as Set || Optional.empty() } - def "If an object can't be identified, a ValidationException is thrown as expected"() { - when: - ValidationUtils.check(invalidObject) - - then: - Exception ex = thrown() - ex.message.contains(expectedException.message) - - where: - invalidObject || expectedException - new Coordinate(10, 10) || new FailedValidationException("Cannot validate object of class '" + invalidObject.class.simpleName + "', as no routine is implemented.") - } - def "The validation check method recognizes all potential errors for an asset"() { when: ValidationUtils.check(invalidAsset) @@ -191,45 +178,6 @@ class ValidationUtilsTest extends Specification { ex.message == "Entity is invalid because of: \nThe following quantities have to be positive: 0.0 µS/km [LineTypeInput{uuid=3bed3eb3-9790-4874-89b5-a5434d408088, id=lineType_AtoB, b=0.0 µS/km, g=0.0 µS/km, r=0.437 Ω/km, x=0.356 Ω/km, iMax=300 A, vRated=20 kV}]" } - def "Checking an unsupported asset leads to an exception"() { - given: - def invalidAsset = invalid() - - when: - List> exceptions = ValidationUtils.checkAsset(invalidAsset).stream().filter { it -> it.failure }.toList() - - then: - exceptions.size() == 1 - def e = exceptions.get(0).exception.get() - e.message.contains("Cannot validate object of class 'DummyAssetInput', as no routine is implemented.") - } - - def "Checking an unsupported asset type leads to an exception"() { - given: - def invalidAssetType = new InvalidAssetTypeInput() - - when: - List> exceptions = ValidationUtils.checkAssetType(invalidAssetType).stream().filter { it -> it.failure }.toList() - - then: - exceptions.size() == 1 - def e = exceptions.get(0).exception.get() - e.message.contains("Cannot validate object of class 'InvalidAssetTypeInput', as no routine is implemented.") - } - - def "Checking an asset type input without an id leads to an exception"() { - given: - def invalidAssetType = new InvalidAssetTypeInput(UUID.randomUUID(), null) - - when: - List> exceptions = ValidationUtils.checkAssetType(invalidAssetType).stream().filter { it -> it.failure }.toList() - - then: - exceptions.size() == 2 - def e = exceptions.get(0).exception.get() - e.message.startsWith("Entity is invalid because of: \nNo ID assigned [AssetTypeInput") - } - def "Checking if asset input ids are unique"() { given: Set validAssetIds = [ From 57ad3ace31ba5714c996bf33d5c592551e066d1f Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Fri, 2 Feb 2024 14:21:26 +0100 Subject: [PATCH 204/228] Implementing requested changes. --- .../io/source/IdCoordinateSource.java | 3 +-- .../io/source/csv/CsvIdCoordinateSource.java | 8 +++----- .../io/source/csv/CsvWeatherSource.java | 20 ++++++++++--------- .../io/source/sql/SqlIdCoordinateSource.java | 4 ++-- .../java/edu/ie3/datamodel/utils/Try.java | 2 +- .../io/source/IdCoordinateSourceMock.groovy | 2 +- .../io/source/csv/CsvDataSourceTest.groovy | 1 + .../csv/CsvIdCoordinateSourceCosmoIT.groovy | 16 +++++++++++++++ .../ie3/test/common/WeatherTestData.groovy | 2 +- 9 files changed, 37 insertions(+), 21 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java index 755a33875..70d215e1c 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java @@ -23,10 +23,9 @@ public interface IdCoordinateSource { /** * Method to retrieve the fields found in the source. * - * @param entityClass class of the source * @return an option for the found fields */ - Optional> getSourceFields(Class entityClass) throws SourceException; + Optional> getSourceFields() throws SourceException; /** * Get the matching coordinate for the given ID diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java index f5cac5884..46241e10d 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSource.java @@ -12,7 +12,6 @@ import edu.ie3.datamodel.io.source.IdCoordinateSource; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.Failure; -import edu.ie3.datamodel.utils.Try.Success; import edu.ie3.util.geo.CoordinateDistance; import edu.ie3.util.geo.GeoUtils; import java.io.BufferedReader; @@ -66,7 +65,6 @@ public CsvIdCoordinateSource(IdCoordinateFactory factory, CsvDataSource dataSour * @return Mapping from coordinate id to coordinate */ private Map setupIdToCoordinateMap() throws SourceException { - return buildStreamWithFieldsToAttributesMap() .map( data -> @@ -92,7 +90,7 @@ private Map invert(Map map) { } @Override - public Optional> getSourceFields(Class entityClass) throws SourceException { + public Optional> getSourceFields() throws SourceException { Path filePath = Path.of(dataSource.getNamingStrategy().getIdCoordinateEntityName()); return dataSource.getSourceFields(filePath); } @@ -203,8 +201,8 @@ public int getCoordinateCount() { set, coordinateExtractor, COORDINATE_ID_MAPPING, "coordinate")) .map(Set::parallelStream); } catch (IOException e) { - log.error("Cannot read the file for coordinate id to coordinate mapping.", e); - return Success.of(Stream.empty()); + return Failure.of( + new SourceException("Cannot read the file for coordinate id to coordinate mapping.", e)); } catch (ValidationException ve) { return Failure.of(new SourceException("Creating stream failed due to failed validation", ve)); } diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index cc6d76ab8..11fbd1faf 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -56,7 +56,8 @@ public CsvWeatherSource( Path folderPath, FileNamingStrategy fileNamingStrategy, IdCoordinateSource idCoordinateSource, - TimeBasedWeatherValueFactory weatherFactory) { + TimeBasedWeatherValueFactory weatherFactory) + throws SourceException { super(idCoordinateSource, weatherFactory); this.dataSource = new CsvDataSource(csvSep, folderPath, fileNamingStrategy); coordinateToTimeSeries = getWeatherTimeSeries(); @@ -130,7 +131,8 @@ protected IndividualTimeSeries mergeTimeSeries( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - private Map> getWeatherTimeSeries() { + private Map> getWeatherTimeSeries() + throws SourceException { /* Get only weather time series meta information */ Collection weatherCsvMetaInformation = dataSource @@ -148,7 +150,8 @@ private Map> getWeatherTimeSeries() { */ private Map> readWeatherTimeSeries( Set weatherMetaInformation, - CsvFileConnector connector) { + CsvFileConnector connector) + throws SourceException { final Map> weatherTimeSeries = new HashMap<>(); Function, Optional>> fieldToValueFunction = this::buildWeatherValue; @@ -176,14 +179,13 @@ private Map> readWeatherTimeSeries( weatherTimeSeries.put(point, timeSeries); } }); - } catch (SourceException e) { - log.error("Cannot process weather source", e); } catch (FileNotFoundException e) { - log.error("Cannot read file {}. File not found!", data.getFullFilePath()); + throw new SourceException( + "Cannot read file " + data.getFullFilePath() + ". File not found!", e); } catch (IOException e) { - log.error("Cannot read file {}. Exception: {}", data.getFullFilePath(), e); - } catch (ValidationException ve) { - log.error("Validation failed for file {}. Exception: {}", data.getFullFilePath(), ve); + throw new SourceException("Cannot read file " + data.getFullFilePath() + ".", e); + } catch (ValidationException e) { + throw new SourceException("Validation failed for file " + data.getFullFilePath() + ".", e); } } return weatherTimeSeries; diff --git a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java index 8ec23b01f..0703deb48 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/sql/SqlIdCoordinateSource.java @@ -59,7 +59,7 @@ public SqlIdCoordinateSource( dataSource.getDbColumnName(factory.getCoordinateField(), coordinateTableName); // validating table - Try.of(() -> getSourceFields(Pair.class), SourceException.class) + Try.of(this::getSourceFields, SourceException.class) .flatMap( fieldsOpt -> fieldsOpt @@ -101,7 +101,7 @@ public SqlIdCoordinateSource( } @Override - public Optional> getSourceFields(Class entityClass) { + public Optional> getSourceFields() { return dataSource.getSourceFields(coordinateTableName); } diff --git a/src/main/java/edu/ie3/datamodel/utils/Try.java b/src/main/java/edu/ie3/datamodel/utils/Try.java index 8d6918c8f..434fd5838 100644 --- a/src/main/java/edu/ie3/datamodel/utils/Try.java +++ b/src/main/java/edu/ie3/datamodel/utils/Try.java @@ -262,7 +262,7 @@ public abstract Try transform( Function successFunc, Function failureFunc); /** - * Method to convert a {@link Try} object. + * Method to convert a {@link Try} object to a common type. * * @param successFunc that will be used to transform the data to the new type * @param failureFunc that will be used to transform the exception to the new type diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy index 992e868de..bdbe1fea6 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/IdCoordinateSourceMock.groovy @@ -15,7 +15,7 @@ import javax.measure.quantity.Length class IdCoordinateSourceMock implements IdCoordinateSource { @Override - Optional> getSourceFields(Class entityClass) throws SourceException { + Optional> getSourceFields() throws SourceException { return Optional.empty() } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy index 5527bef57..94f8de4af 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvDataSourceTest.groovy @@ -484,5 +484,6 @@ class CsvDataSourceTest extends Specification implements CsvTestDataMeta { then: distinctRows.failure + distinctRows.exception.get().message == "'NodeInput' entities with duplicated UUID key, but different field values found! Please review the corresponding input file! Affected primary keys: 4ca90220-74c2-4369-9afa-a18bf068840d" } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy index 10ef6f00a..b878d2b28 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvIdCoordinateSourceCosmoIT.groovy @@ -40,6 +40,22 @@ class CsvIdCoordinateSourceCosmoIT extends Specification implements CsvTestDataM actualStream.data.get().collect(Collectors.toList()).containsAll(expectedStream.collect(Collectors.toList())) } + def "The CsvCoordinateSource is able to return the source fields from a coordinate file"() { + when: + def sourceFields = source.sourceFields + + then: + sourceFields.present + sourceFields.get() == [ + "id", + "lat_geo", + "lat_rot", + "long_geo", + "long_rot", + "tid" + ] as Set + } + def "The CsvIdCoordinateSource is able to look up a specific point or an empty Optional otherwise" () { given: def knownCoordinateId = 106582 diff --git a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy index cc3d3e1a4..343af527a 100644 --- a/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy @@ -22,7 +22,7 @@ abstract class WeatherTestData { static final class DummyIdCoordinateSource implements CsvTestDataMeta, IdCoordinateSource { @Override - Optional> getSourceFields(Class entityClass) throws SourceException { + Optional> getSourceFields() throws SourceException { return Optional.empty() } From df54e26bce0ddf310776359b80f0505f45ca141a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 09:34:00 +0000 Subject: [PATCH 205/228] Bump org.junit.jupiter:junit-jupiter from 5.10.1 to 5.10.2 (#1004) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 44b25d758..754d5ed5e 100644 --- a/build.gradle +++ b/build.gradle @@ -70,7 +70,7 @@ dependencies { // testing testImplementation "org.apache.groovy:groovy:$groovyBinaryVersion" - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2' testImplementation "org.spockframework:spock-core:2.3-groovy-$groovyVersion" testImplementation 'org.objenesis:objenesis:3.3' // Mock creation with constructor parameters testImplementation 'net.bytebuddy:byte-buddy:1.14.11' // Mocks of classes From 8f703f11e4b90e34b22975cac1823b8e595af8bb Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 5 Feb 2024 11:43:44 +0100 Subject: [PATCH 206/228] Improving ``javadoc``. --- .../validation/ConnectorValidationUtils.java | 145 +++++++----- .../validation/GraphicValidationUtils.java | 25 +- .../MeasurementUnitValidationUtils.java | 9 +- .../utils/validation/NodeValidationUtils.java | 15 +- .../SystemParticipantValidationUtils.java | 223 +++++++++++------- .../ThermalUnitValidationUtils.java | 56 +++-- .../utils/validation/ValidationUtils.java | 22 +- ...ystemParticipantValidationUtilsTest.groovy | 6 +- 8 files changed, 309 insertions(+), 192 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java index 5e11508b0..6e57cc849 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java @@ -43,8 +43,12 @@ private ConnectorValidationUtils() { } /** - * Validates a connector if:
    - * - it is not null
    + * Validates a connector if: + * + *

    + * * A "distribution" method, that forwards the check request to specific implementations to fulfill * the checking task, based on the class of the given object. * @@ -79,15 +83,18 @@ protected static List> check(ConnectorInput co } /** - * Validates a line if:
    - * - {@link ConnectorValidationUtils#checkLineType(LineTypeInput)} confirms valid type properties - *
    - * - it does not connect the same node
    - * - it connects nodes in the same subnet
    - * - it connects nodes in the same voltage level
    - * - its line length has a positive value
    - * - its length equals the sum of calculated distances between points of LineString
    - * - its coordinates of start and end point equal coordinates of nodes + * Validates a line if: + * + *
      + * - {@link ConnectorValidationUtils#checkLineType(LineTypeInput)} confirms valid type + * properties + *
    • it does not connect the same node + *
    • it connects nodes in the same subnet + *
    • it connects nodes in the same voltage level + *
    • its line length has a positive value + *
    • its length equals the sum of calculated distances between points of LineString + *
    • its coordinates of start and end point equal coordinates of nodes + *
    * * @param line Line to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -112,14 +119,17 @@ private static List> checkLine(LineInput line) } /** - * Validates a line type if:
    - * - it is not null
    - * - B is greater/equal to 0 (Phase-to-ground susceptance per length)
    - * - G is greater/equal to 0 (Phase-to-ground conductance per length)
    - * - R is greater 0 (Phase resistance per length)
    - * - X is greater 0 (Phase reactance per length)
    - * - iMax is greater 0 (Maximum permissible current)
    - * - vRated is greater 0 (Rated voltage) + * Validates a line type if: + * + *
      + *
    • it is not null + *
    • B is greater/equal to 0 (Phase-to-ground susceptance per length) + *
    • G is greater/equal to 0 (Phase-to-ground conductance per length) + *
    • R is greater 0 (Phase resistance per length) + *
    • X is greater 0 (Phase reactance per length) + *
    • iMax is greater 0 (Maximum permissible current) + *
    • vRated is greater 0 (Rated voltage) + *
    * * @param lineType Line type to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -146,13 +156,16 @@ protected static List> checkLineType(LineTypeI } /** - * Validates a transformer2W if:
    - * - {@link ConnectorValidationUtils#checkTransformer2WType(Transformer2WTypeInput)} confirms a - * valid type properties
    - * - its tap position is within bounds
    - * - it connects different subnets
    - * - it connects different voltage levels
    - * - its rated voltages match the voltages at the nodes + * Validates a transformer2W if: + * + *
      + *
    • {@link ConnectorValidationUtils#checkTransformer2WType(Transformer2WTypeInput)} confirms + * a valid type properties + *
    • its tap position is within bounds + *
    • it connects different subnets + *
    • it connects different voltage levels + *
    • its rated voltages match the voltages at the nodes + *
    * * @param transformer2W Transformer2W to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -176,19 +189,22 @@ private static List> checkTransformer2W( } /** - * Validates a transformer2W type if:
    - * - it is not null
    - * - rSc is greater 0 (short circuit resistance)
    - * - xSc is greater 0 (short circuit impedance)
    - * - gM is greater/equal to 0 (no load conductance)
    - * - bM is less/equal to 0 (no load susceptance)
    - * - sRated is greater 0 (rated apparent power)
    - * - vRatedA is greater 0 (rated voltage at higher voltage terminal)
    - * - vRatedB is greater 0 (rated voltage at lower voltage terminal)
    - * - dV is between 0% and 100% (voltage magnitude increase per tap position
    - * - dPhi is greater/equal to 0 (voltage angle increase per tap position)
    - * - neutral tap position is between min and max tap position
    - * - minimum tap position is smaller than maximum tap position + * Validates a transformer2W type if: + * + *
      + *
    • it is not null + *
    • rSc is greater 0 (short circuit resistance) + *
    • xSc is greater 0 (short circuit impedance) + *
    • gM is greater/equal to 0 (no load conductance) + *
    • bM is less/equal to 0 (no load susceptance) + *
    • sRated is greater 0 (rated apparent power) + *
    • vRatedA is greater 0 (rated voltage at higher voltage terminal) + *
    • vRatedB is greater 0 (rated voltage at lower voltage terminal) + *
    • dV is between 0% and 100% (voltage magnitude increase per tap position + *
    • dPhi is greater/equal to 0 (voltage angle increase per tap position) + *
    • neutral tap position is between min and max tap position + *
    • minimum tap position is smaller than maximum tap position + *
    * * @param transformer2WType Transformer2W type to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -229,13 +245,16 @@ protected static List> checkTransformer2WType( } /** - * Validates a transformer3W if:
    - * - {@link ConnectorValidationUtils#checkTransformer3WType(Transformer3WTypeInput)} confirm a - * valid type
    - * - its tap position is within bounds
    - * - it connects different subnets
    - * - it connects different voltage levels
    - * - its rated voltages match the voltages at the nodes + * Validates a transformer3W if: + * + *
      + *
    • {@link ConnectorValidationUtils#checkTransformer3WType(Transformer3WTypeInput)} confirm a + * valid type + *
    • its tap position is within bounds + *
    • it connects different subnets + *
    • it connects different voltage levels + *
    • its rated voltages match the voltages at the nodes + *
    * * @param transformer3W Transformer3W to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -280,18 +299,21 @@ private static List> checkTransformer3W( } /** - * Validates a transformer3W type if:
    - * - it is not null
    - * - rScA, rScB, rScC are greater 0 (short circuit resistance in branches A,B,C)
    - * - xScA, xScB, xScC are greater 0 (short circuit impedance in branches A,B,C)
    - * - gM is greater/equal to 0 (no load conductance)
    - * - bM is less/equal to 0 (no load susceptance)
    - * - sRatedA, sRatedB, sRatedC are greater 0 (rated apparent power in branches A,B,C)
    - * - vRatedA, vRatedB, vRatedC are greater 0 (rated voltage at higher node A,B,C)
    - * - dV is between 0% and 100% (voltage magnitude increase per tap position
    - * - dPhi is greater/equal to 0 (voltage angle increase per tap position)
    - * - neutral tap position is between min and max tap position
    - * - minimum tap position is smaller than maximum tap position
    + * Validates a transformer3W type if: + * + *
      + *
    • it is not null + *
    • rScA, rScB, rScC are greater 0 (short circuit resistance in branches A,B,C) + *
    • xScA, xScB, xScC are greater 0 (short circuit impedance in branches A,B,C) + *
    • gM is greater/equal to 0 (no load conductance) + *
    • bM is less/equal to 0 (no load susceptance) + *
    • sRatedA, sRatedB, sRatedC are greater 0 (rated apparent power in branches A,B,C) + *
    • vRatedA, vRatedB, vRatedC are greater 0 (rated voltage at higher node A,B,C) + *
    • dV is between 0% and 100% (voltage magnitude increase per tap position + *
    • dPhi is greater/equal to 0 (voltage angle increase per tap position) + *
    • neutral tap position is between min and max tap position + *
    • minimum tap position is smaller than maximum tap position + *
    * * @param transformer3WType Transformer type to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -338,8 +360,11 @@ protected static List> checkTransformer3WType( } /** - * Validates a switch if:
    - * - its connected nodes are in the same voltage level + * Validates a switch if: + * + *
      + *
    • its connected nodes are in the same voltage level + *
    * * @param switchInput Switch to validate * @return a try object either containing an {@link InvalidEntityException} or an empty Success diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/GraphicValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/GraphicValidationUtils.java index e47eadf61..845be81d2 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/GraphicValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/GraphicValidationUtils.java @@ -21,9 +21,12 @@ private GraphicValidationUtils() { } /** - * Validates a graphic input if:
    - * - it is not null
    - * - its graphic layer is not null
    + * Validates a graphic input if: + * + *
      + *
    • it is not null + *
    • its graphic layer is not null + *
    * *

    A "distribution" method, that forwards the check request to specific implementations to * fulfill the checking task, based on the class of the given object. @@ -59,8 +62,11 @@ protected static List> check(GraphicInput grap } /** - * Validates a line graphic input if:
    - * - its path is not null + * Validates a line graphic input if: + * + *

      + *
    • its path is not null + *
    * * @param lineGraphicInput LineGraphicInput to validate */ @@ -74,9 +80,12 @@ private static Try checkLineGraphicInput( } /** - * Validates a node graphic input if:
    - * - its node is not null
    - * - its point is not null + * Validates a node graphic input if: + * + *
      + *
    • its node is not null + *
    • its point is not null + *
    * * @param nodeGraphicInput NodeGraphicInput to validate */ diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/MeasurementUnitValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/MeasurementUnitValidationUtils.java index 318cfd13f..dd51e33a7 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/MeasurementUnitValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/MeasurementUnitValidationUtils.java @@ -19,9 +19,12 @@ private MeasurementUnitValidationUtils() { } /** - * Validates a measurement unit if:
    - * - it is not null
    - * - any values are measured + * Validates a measurement unit if: + * + *
      + *
    • it is not null + *
    • any values are measured + *
    * * @param measurementUnit Measurement unit to validate * @return a try object either containing an {@link ValidationException} or an empty Success diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/NodeValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/NodeValidationUtils.java index 37f948c95..98a78bc9b 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/NodeValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/NodeValidationUtils.java @@ -24,12 +24,15 @@ private NodeValidationUtils() { } /** - * Validates a node if:
    - * - it is not null
    - * - voltage level is not null and valid
    - * - target voltage is larger than zero and smaller than two
    - * - subnet number is larger than zero
    - * - geoPosition is not null + * Validates a node if: + * + *
      + *
    • it is not null + *
    • voltage level is not null and valid + *
    • target voltage is larger than zero and smaller than two + *
    • subnet number is larger than zero + *
    • geoPosition is not null + *
    * * @param node Node to validate * @return a list of try objects either containing an {@link ValidationException} or an empty diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java index b01462433..8a48857e1 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java @@ -30,9 +30,12 @@ private SystemParticipantValidationUtils() { } /** - * Validates a system participant if:
    - * - it is not null
    - * - its qCharacteristics are not null + * Validates a system participant if: + * + *
      + *
    • it is not null + *
    • its qCharacteristics are not null + *
    * *

    A "distribution" method, that forwards the check request to specific implementations to * fulfill the checking task, based on the class of the given object. @@ -89,12 +92,15 @@ protected static List> check( } /** - * Validates a system participant type if:
    - * - it is not null
    - * - capex is not null and not negative
    - * - opex is not null and not negative
    - * - sRated is not null and not negative
    - * - cosphiRated is between zero and one + * Validates a system participant type if: + * + *

      + *
    • it is not null + *
    • capex is not null and not negative + *
    • opex is not null and not negative + *
    • sRated is not null and not negative + *
    • cosphiRated is between zero and one + *
    * *

    A "distribution" method, that forwards the check request to specific implementations to * fulfill the checking task, based on the class of the given object. @@ -169,8 +175,11 @@ protected static List> checkType( /** * Validates a bmInput if:
    - * - {@link SystemParticipantValidationUtils#checkBmType(BmTypeInput)} confirms a valid type - * properties
    + * + *

      + *
    • {@link SystemParticipantValidationUtils#checkBmType(BmTypeInput)} confirms a valid type + * properties + *
    * * @param bmInput BmInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -181,9 +190,12 @@ private static List> checkBm(BmInput bmInput) } /** - * Validates a bmTypeInput if:
    - * - its active power gradient is not negative
    - * - its efficiency of assets inverter is between 0% and 100% + * Validates a bmTypeInput if: + * + *
      + *
    • its active power gradient is not negative# + *
    • its efficiency of assets inverter is between 0% and 100% + *
    * * @param bmTypeInput BmTypeInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -201,9 +213,12 @@ private static List> checkBmType(BmTypeInput b } /** - * Validates a chpInput if:
    - * - {@link SystemParticipantValidationUtils#checkChpType(ChpTypeInput)} confirms a valid type - * properties + * Validates a chpInput if: + * + *
      + *
    • {@link SystemParticipantValidationUtils#checkChpType(ChpTypeInput)} confirms a valid type + * properties + *
    * * @param chpInput ChpInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -214,11 +229,14 @@ private static List> checkChp(ChpInput chpInpu } /** - * Validates a chpTypeInput if:
    - * - its efficiency of the electrical inverter is between 0% and 100%
    - * - its thermal efficiency of the system is between 0% and 100%
    - * - its rated thermal power is positive
    - * - its needed self-consumption is not negative + * Validates a chpTypeInput if: + * + *
      + *
    • its efficiency of the electrical inverter is between 0% and 100% + *
    • its thermal efficiency of the system is between 0% and 100% + *
    • its rated thermal power is positive + *
    • its needed self-consumption is not negative + *
    * * @param chpTypeInput ChpTypeInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -240,9 +258,12 @@ private static List> checkChpType(ChpTypeInput } /** - * Validates a EvInput if:
    - * - {@link SystemParticipantValidationUtils#checkEvType(EvTypeInput)} confirms a valid type - * properties + * Validates a EvInput if: + * + *
      + *
    • {@link SystemParticipantValidationUtils#checkEvType(EvTypeInput)} confirms a valid type + * properties + *
    * * @param evInput EvInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -253,9 +274,12 @@ private static List> checkEv(EvInput evInput) } /** - * Validates a EvTypeInput if:
    - * - its available battery capacity is positive
    - * - its energy consumption per driven kilometre is positive + * Validates a EvTypeInput if: + * + *
      + *
    • its available battery capacity is positive + *
    • its energy consumption per driven kilometre is positive + *
    * * @param evTypeInput EvTypeInput to validate * @return a try object either containing an {@link InvalidEntityException} or an empty Success @@ -269,9 +293,12 @@ private static Try checkEvType(EvTypeInput evTypeI } /** - * Validates a FixedFeedInInput if:
    - * - its rated apparent power is not negative
    - * - its rated power factor is between 0 and 1 + * Validates a FixedFeedInInput if: + * + *
      + *
    • its rated apparent power is not negative + *
    • its rated power factor is between 0 and 1 + *
    * * @param fixedFeedInInput FixedFeedInInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -288,9 +315,12 @@ private static List> checkFixedFeedIn( } /** - * Validates a HpInput if:
    - * - {@link SystemParticipantValidationUtils#checkHpType(HpTypeInput)} confirms a valid type - * properties + * Validates a HpInput if: + * + *
      + *
    • {@link SystemParticipantValidationUtils#checkHpType(HpTypeInput)} confirms a valid type + * properties + *
    * * @param hpInput HpInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -301,8 +331,11 @@ private static List> checkHp(HpInput hpInput) } /** - * Validates a HpTypeInput if:
    - * - its rated thermal power is positive + * Validates a HpTypeInput if: + * + *
      + *
    • its rated thermal power is positive + *
    * * @param hpTypeInput HpTypeInput to validate * @return a try object either containing an {@link InvalidEntityException} or an empty Success @@ -316,11 +349,14 @@ private static Try checkHpType(HpTypeInput hpTypeI } /** - * Validates a LoadInput if:
    - * - its standard load profile is not null
    - * - its rated apparent power is not negative
    - * - its annual energy consumption is not negative
    - * - its rated power factor is between 0 and 1 + * Validates a LoadInput if: + * + *
      + *
    • its standard load profile is not null + *
    • its rated apparent power is not negative + *
    • its annual energy consumption is not negative + *
    • its rated power factor is between 0 and 1 + *
    * * @param loadInput LoadInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -349,13 +385,16 @@ private static List> checkLoad(LoadInput loadI } /** - * Validates a PvInput if:
    - * - its rated apparent power is not negative
    - * - its albedo value of the plant's surrounding is between 0 and 1
    - * - its inclination in a compass direction (azimuth) is between -90° and 90°
    - * - its efficiency of the asset's inverter (etaConv) is between 0% and 100%
    - * - its tilted inclination from horizontal (elevation angle) is between 0° and 90°
    - * - its rated power factor is between 0 and 1 + * Validates a PvInput if: + * + *
      + *
    • its rated apparent power is not negative + *
    • its albedo value of the plant's surrounding is between 0 and 1 + *
    • its inclination in a compass direction (azimuth) is between -90° and 90° + *
    • its efficiency of the asset's inverter (etaConv) is between 0% and 100% + *
    • its tilted inclination from horizontal (elevation angle) is between 0° and 90° + *
    • its rated power factor is between 0 and 1 + *
    * * @param pvInput PvInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -421,9 +460,12 @@ private static void checkElevationAngle(PvInput pvInput) throws InvalidEntityExc } /** - * Validates a StorageInput if:
    - * - {@link SystemParticipantValidationUtils#checkStorageType(StorageTypeInput)} confirms a valid - * type properties + * Validates a StorageInput if: + * + *
      + *
    • {@link SystemParticipantValidationUtils#checkStorageType(StorageTypeInput)} confirms a + * valid type properties + *
    * * @param storageInput StorageInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -434,14 +476,17 @@ private static List> checkStorage(StorageInput } /** - * Validates a StorageTypeInput if:
    - * - its permissible amount of full cycles is not negative
    - * - its efficiency of the electrical converter is between 0% and 100%
    - * - its maximum permissible depth of discharge is between 0% and 100%
    - * - its active power gradient is not negative
    - * - its battery capacity is positive
    - * - its maximum permissible active power (in-feed or consumption) is not negative
    - * - its permissible hours of full use is not negative + * Validates a StorageTypeInput if: + * + *
      + *
    • its permissible amount of full cycles is not negative + *
    • its efficiency of the electrical converter is between 0% and 100% + *
    • its maximum permissible depth of discharge is between 0% and 100% + *
    • its active power gradient is not negative + *
    • its battery capacity is positive + *
    • its maximum permissible active power (in-feed or consumption) is not negative + *
    • its permissible hours of full use is not negative + *
    * * @param storageTypeInput StorageTypeInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -488,9 +533,9 @@ private static List> checkStorageType( } /** - * Validates a WecInput if:
    - * - {@link SystemParticipantValidationUtils#checkWecType(WecTypeInput)} confirms a valid type - * properties + * Validates a WecInput if: + *
  • {@link SystemParticipantValidationUtils#checkWecType(WecTypeInput)} confirms a valid type + * properties * * @param wecInput WecInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -501,10 +546,13 @@ private static List> checkWec(WecInput wecInpu } /** - * Validates a WecTypeInput if:
    - * - its efficiency of the assets converter is between 0% and 100%
    - * - its rotor area is not negative
    - * - its height of the rotor hub is not negative + * Validates a WecTypeInput if: + * + *
      + *
    • its efficiency of the assets converter is between 0% and 100% + *
    • its rotor area is not negative + *
    • its height of the rotor hub is not negative + *
    * * @param wecTypeInput WecTypeInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -523,32 +571,35 @@ private static List> checkWecType(WecTypeInput } /** - * Validates a EvcsInput if
    - * - its number of charging points is < 1 - its rated power factor is between 0 and 1 - its rated - * apparent power is not negative + * Validates a EvcsInput if: + * + *
      + *
    • its number of charging points is < 1 + *
    • its rated power factor is between 0 and 1 + *
    • its rated apparent power is not negative + *
    * * @param evcsInput EvcsInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty * Success */ private static List> checkEvcs(EvcsInput evcsInput) { - return List.of( - Try.ofVoid( - evcsInput.getChargingPoints() < 1, - () -> - new InvalidEntityException( - "The number of charging points needs to be at least one. Got: '" - + evcsInput.getChargingPoints() - + "'.", - evcsInput)), - Try.ofVoid( - () -> checkRatedPowerFactor(evcsInput, evcsInput.getCosPhiRated()), - InvalidEntityException.class), - Try.ofVoid( - evcsInput.getType().getsRated().getValue().doubleValue() < 0d, - () -> - new InvalidEntityException( - "The rated power of the given entity is below zero.", evcsInput))); + Try.VoidSupplier chargingPointValidation = + () -> { + if (evcsInput.getChargingPoints() < 1) + throw new InvalidEntityException( + "Invalid number of charging points: '" + + evcsInput.getChargingPoints() + + "'. At least one charging point is needed.", + evcsInput); + }; + + return Try.ofVoid( + InvalidEntityException.class, + chargingPointValidation, + () -> checkRatedPowerFactor(evcsInput, evcsInput.getCosPhiRated()), + () -> + detectNegativeQuantities(new Quantity[] {evcsInput.getType().getsRated()}, evcsInput)); } /** diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java index ea4984a32..704567699 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ThermalUnitValidationUtils.java @@ -22,8 +22,12 @@ private ThermalUnitValidationUtils() { } /** - * Validates a thermal unit if:
    - * - it is not null
    + * Validates a thermal unit if: + * + *
      + *
    • it is not null + *
    + * * A "distribution" method, that forwards the check request to specific implementations to fulfill * the checking task, based on the class of the given object. * @@ -54,8 +58,12 @@ private ThermalUnitValidationUtils() { } /** - * Validates a thermalSinkInput if:
    - * - it is not null
    + * Validates a thermalSinkInput if: + * + *
      + *
    • it is not null + *
    + * * A "distribution" method, that forwards the check request to specific implementations to fulfill * the checking task, based on the class of the given object. * @@ -84,8 +92,12 @@ private ThermalUnitValidationUtils() { } /** - * Validates a thermalStorageInput if:
    - * - it is not null
    + * Validates a thermalStorageInput if: + * + *
      + *
    • it is not null + *
    + * * A "distribution" method, that forwards the check request to specific implementations to fulfill * the checking task, based on the class of the given object. * @@ -115,12 +127,15 @@ private ThermalUnitValidationUtils() { } /** - * Validates a thermalHouseInput if:
    - * - it is not null
    - * - its thermal losses are not negative
    - * - its thermal capacity is positive
    - * - its upper temperature limit is higher than the lower temperature limit
    - * - its target temperature lies between the upper und lower limit temperatures + * Validates a thermalHouseInput if: + * + *
      + *
    • it is not null + *
    • its thermal losses are not negative + *
    • its thermal capacity is positive + *
    • its upper temperature limit is higher than the lower temperature limit + *
    • its target temperature lies between the upper und lower limit temperatures + *
    * * @param thermalHouseInput ThermalHouseInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty @@ -162,13 +177,16 @@ private static List> checkThermalHouse( } /** - * Validates a cylindricalStorageInput if:
    - * - it is not null
    - * - its available storage volume is positive
    - * - its minimum permissible storage volume is positive and not greater than the available storage - * volume
    - * - its inlet temperature is equal/greater than the outlet temperature
    - * - its specific heat capacity is positive + * Validates a cylindricalStorageInput if: + * + *
      + *
    • it is not null + *
    • its available storage volume is positive + *
    • its minimum permissible storage volume is positive and not greater than the available + * storage volume + *
    • its inlet temperature is equal/greater than the outlet temperature + *
    • its specific heat capacity is positive + *
    * * @param cylindricalStorageInput CylindricalStorageInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index e63a3db35..23f9d078e 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -84,11 +84,15 @@ public static void check(Object obj) throws ValidationException { } /** - * Validates an asset if:
    - * - it is not null
    - * - its id is not null
    - * - its operation time is not null
    - * - in case operation time is limited, start time is before end time
    + * Validates an asset if: + * + *
      + *
    • it is not null + *
    • its id is not null + *
    • its operation time is not null + *
    • in case operation time is limited, start time is before end time + *
    + * * A "distribution" method, that forwards the check request to specific implementations to fulfill * the checking task, based on the class of the given object. * @@ -158,8 +162,12 @@ else if (ThermalUnitInput.class.isAssignableFrom(assetInput.getClass())) } /** - * Validates an asset type if:
    - * - it is not null
    + * Validates an asset type if: + * + *
      + *
    • it is not null + *
    + * * A "distribution" method, that forwards the check request to specific implementations to fulfill * the checking task, based on the class of the given object. * diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy index 00bbaa2bd..864d621a6 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtilsTest.groovy @@ -474,8 +474,8 @@ class SystemParticipantValidationUtilsTest extends Specification { where: invalidEvcs || expectedException - SystemParticipantTestData.evcsInput.copy().chargingPoints(-1).build() || new InvalidEntityException("The number of charging points needs to be at least one. Got: '-1'.", invalidEvcs) - SystemParticipantTestData.evcsInput.copy().chargingPoints(0).build() || new InvalidEntityException("The number of charging points needs to be at least one. Got: '0'.", invalidEvcs) + SystemParticipantTestData.evcsInput.copy().chargingPoints(-1).build() || new InvalidEntityException("Invalid number of charging points: '-1'. At least one charging point is needed.", invalidEvcs) + SystemParticipantTestData.evcsInput.copy().chargingPoints(0).build() || new InvalidEntityException("Invalid number of charging points: '0'. At least one charging point is needed.", invalidEvcs) SystemParticipantTestData.evcsInput.copy().cosPhiRated(2).build() || new InvalidEntityException("Rated power factor of EvcsInput must be between 0 and 1", invalidEvcs) } @@ -483,7 +483,7 @@ class SystemParticipantValidationUtilsTest extends Specification { given: def invalidType = new ChargingPointType("invalid type", Quantities.getQuantity(-1d, KILOVOLTAMPERE), AC) def invalidEvcs = SystemParticipantTestData.evcsInput.copy().type(invalidType).build() - def expectedExceptions = new InvalidEntityException("The rated power of the given entity is below zero.", invalidEvcs) + def expectedExceptions = new InvalidEntityException("The following quantities have to be zero or positive: -1 kVA", invalidEvcs) when: def exceptions = SystemParticipantValidationUtils.check(invalidEvcs).findAll { it.failure } From 9e9c11a9be3ee6b2e6fa5e5b35932f9d98bff13f Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 6 Feb 2024 09:06:19 +0100 Subject: [PATCH 207/228] Fixing list --- .../datamodel/utils/validation/ConnectorValidationUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java index 6e57cc849..c411bf40b 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java @@ -86,7 +86,7 @@ protected static List> check(ConnectorInput co * Validates a line if: * *
      - * - {@link ConnectorValidationUtils#checkLineType(LineTypeInput)} confirms valid type + *
    • {@link ConnectorValidationUtils#checkLineType(LineTypeInput)} confirms valid type * properties *
    • it does not connect the same node *
    • it connects nodes in the same subnet From b1e2025e936531c9735439bc65cea0085edea53e Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 6 Feb 2024 09:47:32 +0100 Subject: [PATCH 208/228] More fixes --- .../utils/validation/ConnectorValidationUtils.java | 2 +- .../utils/validation/SystemParticipantValidationUtils.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java index c411bf40b..dddf51f61 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java @@ -87,7 +87,7 @@ protected static List> check(ConnectorInput co * *
        *
      • {@link ConnectorValidationUtils#checkLineType(LineTypeInput)} confirms valid type - * properties + * properties *
      • it does not connect the same node *
      • it connects nodes in the same subnet *
      • it connects nodes in the same voltage level diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java index 8a48857e1..04c969c34 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/SystemParticipantValidationUtils.java @@ -534,8 +534,11 @@ private static List> checkStorageType( /** * Validates a WecInput if: - *
      • {@link SystemParticipantValidationUtils#checkWecType(WecTypeInput)} confirms a valid type - * properties + * + *
          + *
        • {@link SystemParticipantValidationUtils#checkWecType(WecTypeInput)} confirms a valid type + * properties + *
        * * @param wecInput WecInput to validate * @return a list of try objects either containing an {@link InvalidEntityException} or an empty From 4ff74fea4c69f0a66f43df0dace3c408ee2b8f4e Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 6 Feb 2024 09:51:11 +0100 Subject: [PATCH 209/228] Reinstating deleted test --- .../utils/validation/ValidationUtilsTest.groovy | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy index 3dd39d15b..4dd02967b 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/ValidationUtilsTest.groovy @@ -12,21 +12,18 @@ import static edu.ie3.util.quantities.PowerSystemUnits.OHM_PER_KILOMETRE import static edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.datamodel.exceptions.DuplicateEntitiesException -import edu.ie3.datamodel.exceptions.FailedValidationException import edu.ie3.datamodel.exceptions.InvalidEntityException import edu.ie3.datamodel.exceptions.ValidationException import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.UniqueEntity import edu.ie3.datamodel.models.input.AssetInput import edu.ie3.datamodel.models.input.NodeInput -import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils import edu.ie3.datamodel.utils.Try import edu.ie3.test.common.GridTestData import edu.ie3.util.TimeUtil import edu.ie3.util.quantities.interfaces.SpecificConductance -import org.locationtech.jts.geom.Coordinate import spock.lang.Specification import tech.units.indriya.quantity.Quantities @@ -178,6 +175,19 @@ class ValidationUtilsTest extends Specification { ex.message == "Entity is invalid because of: \nThe following quantities have to be positive: 0.0 µS/km [LineTypeInput{uuid=3bed3eb3-9790-4874-89b5-a5434d408088, id=lineType_AtoB, b=0.0 µS/km, g=0.0 µS/km, r=0.437 Ω/km, x=0.356 Ω/km, iMax=300 A, vRated=20 kV}]" } + def "Checking an asset type input without an id leads to an exception"() { + given: + def invalidAssetType = new InvalidAssetTypeInput(UUID.randomUUID(), null) + + when: + List> exceptions = ValidationUtils.checkAssetType(invalidAssetType).stream().filter { it -> it.failure }.toList() + + then: + exceptions.size() == 1 + def e = exceptions.get(0).exception.get() + e.message.startsWith("Entity is invalid because of: \nNo ID assigned [AssetTypeInput") + } + def "Checking if asset input ids are unique"() { given: Set validAssetIds = [ From 5472099da744b620939120fb902cef27f06cb531 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 6 Feb 2024 11:29:02 +0100 Subject: [PATCH 210/228] Adapting `CsvWeatherSource`. --- .../io/source/csv/CsvWeatherSource.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index 11fbd1faf..efa325435 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -22,7 +22,7 @@ import edu.ie3.datamodel.models.value.WeatherValue; import edu.ie3.datamodel.utils.TimeSeriesUtils; import edu.ie3.datamodel.utils.Try; -import edu.ie3.datamodel.utils.Try.Success; +import edu.ie3.datamodel.utils.Try.Failure; import edu.ie3.util.interval.ClosedInterval; import java.io.BufferedReader; import java.io.FileNotFoundException; @@ -159,7 +159,7 @@ private Map> readWeatherTimeSeries( for (CsvIndividualTimeSeriesMetaInformation data : weatherMetaInformation) { // we need a reader for each file try (BufferedReader reader = connector.initReader(data.getFullFilePath())) { - buildStreamWithFieldsToAttributesMap(TimeBasedValue.class, reader) + buildStreamWithFieldsToAttributesMap(reader) .getOrThrow() .map(fieldToValueFunction) .flatMap(Optional::stream) @@ -192,8 +192,9 @@ private Map> readWeatherTimeSeries( } private Try>, SourceException> buildStreamWithFieldsToAttributesMap( - Class entityClass, BufferedReader bufferedReader) - throws ValidationException { + BufferedReader bufferedReader) throws ValidationException { + Class entityClass = TimeBasedValue.class; + try (BufferedReader reader = bufferedReader) { final String[] headline = dataSource.parseCsvRow(reader.readLine(), dataSource.csvSep); @@ -217,9 +218,12 @@ private Try>, SourceException> buildStreamWithFieldsT allRows, timeCoordinateIdExtractor, entityClass.getSimpleName(), "UUID") .map(Set::parallelStream); } catch (IOException e) { - log.warn( - "Cannot read file to build entity '{}': {}", entityClass.getSimpleName(), e.getMessage()); - return Success.of(Stream.empty()); + return Failure.of( + new SourceException( + "Cannot read file to build entity '" + + entityClass.getSimpleName() + + "': " + + e.getMessage())); } } From cf206189133c7d75bcab4ff17871f41b4c241e34 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 6 Feb 2024 12:25:41 +0100 Subject: [PATCH 211/228] Minor improvement to `CsvWeatherSource`. --- .../edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java index efa325435..57b2b736f 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/csv/CsvWeatherSource.java @@ -220,10 +220,7 @@ private Try>, SourceException> buildStreamWithFieldsT } catch (IOException e) { return Failure.of( new SourceException( - "Cannot read file to build entity '" - + entityClass.getSimpleName() - + "': " - + e.getMessage())); + "Cannot read file to build entity '" + entityClass.getSimpleName() + "'.", e)); } } From 273652c2233da4acb50332defd22e4b03fdf80b5 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Tue, 6 Feb 2024 12:52:23 +0100 Subject: [PATCH 212/228] Minor improvement to `IdCoordinateSource`. --- .../datamodel/io/source/IdCoordinateSource.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java index 70d215e1c..560b2a909 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/IdCoordinateSource.java @@ -134,7 +134,14 @@ default List restrictToBoundingBox( Point point = distance.getCoordinateB(); // check for bounding box - if (!topLeft && (point.getX() < coordinate.getX() && point.getY() > coordinate.getY())) { + if (coordinate.equalsExact(point, 1e-6)) { + // if current point is matching the given coordinate, we need to return only the current + // point + resultingDistances.clear(); + resultingDistances.add(distance); + return resultingDistances; + } else if (!topLeft + && (point.getX() < coordinate.getX() && point.getY() > coordinate.getY())) { resultingDistances.add(distance); topLeft = true; } else if (!topRight @@ -149,13 +156,6 @@ default List restrictToBoundingBox( && (point.getX() > coordinate.getX() && point.getY() < coordinate.getY())) { resultingDistances.add(distance); bottomRight = true; - } else if (coordinate.equalsExact(point, 1e-6)) { - // if current point is matching the given coordinate, we need to return only the current - // point - - resultingDistances.clear(); - resultingDistances.add(distance); - return resultingDistances; } else { other.add(distance); } From 49dfa19dcd97c78fbfa201885d771801b385f1f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 09:03:31 +0000 Subject: [PATCH 213/228] Bump com.couchbase.client:java-client from 3.5.2 to 3.5.3 (#1008) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 754d5ed5e..fb071d13e 100644 --- a/build.gradle +++ b/build.gradle @@ -90,7 +90,7 @@ dependencies { // Databases implementation 'org.influxdb:influxdb-java:2.24' - implementation 'com.couchbase.client:java-client:3.5.2' + implementation 'com.couchbase.client:java-client:3.5.3' runtimeOnly 'org.postgresql:postgresql:42.7.1' // postgresql jdbc driver required during runtime implementation 'commons-io:commons-io:2.15.1' // I/O functionalities From 37ea4468949e9288b56c9f1471205f992e067914 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Feb 2024 09:20:27 +0000 Subject: [PATCH 214/228] Bump testcontainersVersion from 1.19.4 to 1.19.5 (#1010) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fb071d13e..d783aa216 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ ext { javaVersion = JavaVersion.VERSION_17 groovyVersion = "4.0" groovyBinaryVersion = "4.0.18" - testcontainersVersion = '1.19.4' + testcontainersVersion = '1.19.5' scriptsLocation = 'gradle' + File.separator + 'scripts' + File.separator //location of script plugins } From bfc0b97b75f5d8ab397a0d7fd5bc2577d087e305 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Fri, 9 Feb 2024 16:22:17 +0100 Subject: [PATCH 215/228] Introducing scaling function in copy builders Implementing a bunch of missing copy builders --- .../models/input/AssetTypeInput.java | 31 +++++ .../models/input/system/BmInput.java | 6 + .../models/input/system/ChpInput.java | 6 + .../models/input/system/EvInput.java | 16 ++- .../models/input/system/EvcsInput.java | 6 + .../models/input/system/FixedFeedInInput.java | 26 ++-- .../models/input/system/HpInput.java | 26 ++-- .../models/input/system/LoadInput.java | 7 + .../models/input/system/PvInput.java | 6 + .../models/input/system/StorageInput.java | 16 ++- .../input/system/SystemParticipantInput.java | 2 + .../models/input/system/WecInput.java | 6 + .../models/input/system/type/BmTypeInput.java | 63 +++++++++ .../input/system/type/ChpTypeInput.java | 88 ++++++++++++ .../models/input/system/type/EvTypeInput.java | 64 +++++++++ .../models/input/system/type/HpTypeInput.java | 45 +++++++ .../input/system/type/StorageTypeInput.java | 126 ++++++++++++++++++ .../type/SystemParticipantTypeInput.java | 68 ++++++++++ .../input/system/type/WecTypeInput.java | 87 ++++++++++++ .../type/chargingpoint/ChargingPointType.java | 70 ++++++++++ .../InvalidSystemParticipantTypeInput.groovy | 5 + 21 files changed, 740 insertions(+), 30 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/models/input/AssetTypeInput.java b/src/main/java/edu/ie3/datamodel/models/input/AssetTypeInput.java index 907280676..6e3a558e4 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/AssetTypeInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/AssetTypeInput.java @@ -43,4 +43,35 @@ public int hashCode() { public String toString() { return "AssetTypeInput{" + "uuid=" + getUuid() + ", id=" + id + "}"; } + + /** + * Abstract class for all builder that build child entities of abstract class {@link + * AssetTypeInput} + */ + public abstract static class AssetTypeInputCopyBuilder< + B extends AssetTypeInput.AssetTypeInputCopyBuilder> + extends UniqueEntityCopyBuilder { + + private String id; + + protected AssetTypeInputCopyBuilder(AssetTypeInput entity) { + super(entity); + this.id = entity.getId(); + } + + public B id(String id) { + this.id = id; + return thisInstance(); + } + + protected String getId() { + return id; + } + + @Override + public abstract AssetTypeInput build(); + + @Override + protected abstract B thisInstance(); + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java index 5ebb38e9d..9ddb9533d 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/BmInput.java @@ -205,6 +205,12 @@ public BmInputCopyBuilder feedInTariff(ComparableQuantity feedInTar return this; } + @Override + public BmInputCopyBuilder scale(Double factor) { + this.type = this.type.copy().scale(factor).build(); + return this; + } + @Override public BmInput build() { return new BmInput( diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java index 1478c949b..f68d842a1 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/ChpInput.java @@ -222,6 +222,12 @@ public ChpInputCopyBuilder marketReaction(boolean marketReaction) { return this; } + @Override + public ChpInputCopyBuilder scale(Double factor) { + this.type = this.type.copy().scale(factor).build(); + return this; + } + @Override protected ChpInputCopyBuilder thisInstance() { return this; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java index b4796b844..0ddb4b21c 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvInput.java @@ -127,6 +127,17 @@ private EvInputCopyBuilder(EvInput entity) { this.type = entity.getType(); } + public EvInputCopyBuilder type(EvTypeInput type) { + this.type = type; + return this; + } + + @Override + public EvInputCopyBuilder scale(Double factor) { + type(type.copy().scale(factor).build()); + return this; + } + @Override public EvInput build() { return new EvInput( @@ -140,11 +151,6 @@ public EvInput build() { type); } - public EvInputCopyBuilder type(EvTypeInput type) { - this.type = type; - return this; - } - @Override protected EvInputCopyBuilder thisInstance() { return this; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java index 8513edd5c..6bc40adfb 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/EvcsInput.java @@ -283,6 +283,12 @@ public EvcsInputCopyBuilder v2gSupport(boolean v2gSupport) { return this; } + @Override + public EvcsInputCopyBuilder scale(Double factor) { + type(type.copy().scale(factor).build()); + return this; + } + @Override public EvcsInput build() { return new EvcsInput( diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java index b765ca695..d0580202f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/FixedFeedInInput.java @@ -144,6 +144,22 @@ private FixedFeedInInputCopyBuilder(FixedFeedInInput entity) { this.cosPhiRated = entity.getCosPhiRated(); } + public FixedFeedInInputCopyBuilder sRated(ComparableQuantity sRated) { + this.sRated = sRated; + return this; + } + + public FixedFeedInInputCopyBuilder cosPhiRated(double cosPhiRated) { + this.cosPhiRated = cosPhiRated; + return this; + } + + @Override + public FixedFeedInInputCopyBuilder scale(Double factor) { + sRated(sRated.multiply(factor)); + return this; + } + @Override public FixedFeedInInput build() { return new FixedFeedInInput( @@ -158,16 +174,6 @@ public FixedFeedInInput build() { cosPhiRated); } - public FixedFeedInInputCopyBuilder sRated(ComparableQuantity sRated) { - this.sRated = sRated; - return this; - } - - public FixedFeedInInputCopyBuilder cosPhiRated(double cosPhiRated) { - this.cosPhiRated = cosPhiRated; - return this; - } - @Override protected FixedFeedInInputCopyBuilder thisInstance() { return this; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java index 89771ae58..bd1aff3e2 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/HpInput.java @@ -146,6 +146,22 @@ private HpInputCopyBuilder(HpInput entity) { this.thermalBus = entity.getThermalBus(); } + public HpInputCopyBuilder type(HpTypeInput type) { + this.type = type; + return this; + } + + public HpInputCopyBuilder thermalBus(ThermalBusInput thermalBus) { + this.thermalBus = thermalBus; + return this; + } + + @Override + public HpInputCopyBuilder scale(Double factor) { + type(type.copy().scale(factor).build()); + return this; + } + @Override public HpInput build() { return new HpInput( @@ -160,16 +176,6 @@ public HpInput build() { type); } - public HpInputCopyBuilder type(HpTypeInput type) { - this.type = type; - return this; - } - - public HpInputCopyBuilder thermalBus(ThermalBusInput thermalBus) { - this.thermalBus = thermalBus; - return this; - } - @Override protected HpInputCopyBuilder thisInstance() { return this; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java index 196952d65..924af0c89 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/LoadInput.java @@ -317,6 +317,13 @@ public LoadInputCopyBuilder cosPhiRated(double cosPhiRated) { return this; } + @Override + public LoadInputCopyBuilder scale(Double factor) { + eConsAnnual(eConsAnnual.multiply(factor)); + sRated(sRated.multiply(factor)); + return this; + } + @Override public LoadInput build() { return new LoadInput( diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java index 2117ef313..47812390f 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/PvInput.java @@ -321,6 +321,12 @@ public PvInputCopyBuilder cosPhiRated(double cosPhiRated) { return this; } + @Override + public PvInputCopyBuilder scale(Double factor) { + this.sRated = this.sRated.multiply(factor); + return this; + } + @Override public PvInput build() { return new PvInput( diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java index ed37c1448..ec4cc3ddc 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/StorageInput.java @@ -127,6 +127,17 @@ private StorageInputCopyBuilder(StorageInput entity) { this.type = entity.getType(); } + public StorageInputCopyBuilder type(StorageTypeInput type) { + this.type = type; + return this; + } + + @Override + public StorageInputCopyBuilder scale(Double factor) { + type(type.copy().scale(factor).build()); + return this; + } + @Override public StorageInput build() { return new StorageInput( @@ -140,11 +151,6 @@ public StorageInput build() { type); } - public StorageInputCopyBuilder type(StorageTypeInput type) { - this.type = type; - return this; - } - @Override protected StorageInputCopyBuilder thisInstance() { return this; diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java index eea7df273..0a676fe2e 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/SystemParticipantInput.java @@ -181,6 +181,8 @@ public EmInput getEm() { return em; } + public abstract B scale(Double factor); + @Override public abstract SystemParticipantInput build(); diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java index 05d170e59..949708f66 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/WecInput.java @@ -145,6 +145,12 @@ private WecInputCopyBuilder(WecInput entity) { this.marketReaction = entity.isMarketReaction(); } + @Override + public WecInputCopyBuilder scale(Double factor) { + type(type.copy().scale(factor).build()); + return this; + } + @Override public WecInput build() { return new WecInput( diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/type/BmTypeInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/type/BmTypeInput.java index ad150174a..99bc7d113 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/type/BmTypeInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/type/BmTypeInput.java @@ -55,6 +55,11 @@ public ComparableQuantity getEtaConv() { return etaConv; } + @Override + public BmTypeInputCopyBuilder copy() { + return new BmTypeInputCopyBuilder(this); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -89,4 +94,62 @@ public String toString() { + etaConv + '}'; } + + /** + * Abstract class for all builder that build child entities of abstract class {@link BmTypeInput} + */ + public static class BmTypeInputCopyBuilder + extends SystemParticipantTypeInputCopyBuilder { + + private ComparableQuantity activePowerGradient; + private ComparableQuantity etaConv; + + private BmTypeInputCopyBuilder(BmTypeInput entity) { + super(entity); + this.activePowerGradient = entity.getActivePowerGradient(); + this.etaConv = entity.getEtaConv(); + } + + public BmTypeInputCopyBuilder setActivePowerGradient( + ComparableQuantity activePowerGradient) { + this.activePowerGradient = activePowerGradient; + return this; + } + + public BmTypeInputCopyBuilder setEtaConv(ComparableQuantity etaConv) { + this.etaConv = etaConv; + return this; + } + + public ComparableQuantity getActivePowerGradient() { + return activePowerGradient; + } + + public ComparableQuantity getEtaConv() { + return etaConv; + } + + public BmTypeInputCopyBuilder scale(Double factor) { + setsRated(getsRated().multiply(factor)); + return this; + } + + @Override + public BmTypeInput build() { + return new BmTypeInput( + getUuid(), + getId(), + getCapex(), + getOpex(), + activePowerGradient, + getsRated(), + getCosPhiRated(), + etaConv); + } + + @Override + protected BmTypeInputCopyBuilder thisInstance() { + return this; + } + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/type/ChpTypeInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/type/ChpTypeInput.java index d4d1f6abe..ff1d030f0 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/type/ChpTypeInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/type/ChpTypeInput.java @@ -71,6 +71,11 @@ public ComparableQuantity getpOwn() { return pOwn; } + @Override + public ChpTypeInputCopyBuilder copy() { + return new ChpTypeInputCopyBuilder(this); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -112,4 +117,87 @@ public String toString() { + pOwn + '}'; } + + /** + * Abstract class for all builder that build child entities of abstract class {@link ChpTypeInput} + */ + public static class ChpTypeInputCopyBuilder + extends SystemParticipantTypeInputCopyBuilder { + + private ComparableQuantity etaEl; + private ComparableQuantity etaThermal; + private ComparableQuantity pThermal; + private ComparableQuantity pOwn; + + private ChpTypeInputCopyBuilder(ChpTypeInput entity) { + super(entity); + this.etaEl = entity.getEtaEl(); + this.etaThermal = entity.getEtaThermal(); + this.pThermal = entity.getpThermal(); + this.pOwn = entity.getpOwn(); + } + + public ChpTypeInputCopyBuilder setEtaEl(ComparableQuantity etaEl) { + this.etaEl = etaEl; + return this; + } + + public ChpTypeInputCopyBuilder setEtaThermal(ComparableQuantity etaThermal) { + this.etaThermal = etaThermal; + return this; + } + + public ChpTypeInputCopyBuilder setpThermal(ComparableQuantity pThermal) { + this.pThermal = pThermal; + return this; + } + + public ChpTypeInputCopyBuilder setpOwn(ComparableQuantity pOwn) { + this.pOwn = pOwn; + return this; + } + + public ComparableQuantity getEtaEl() { + return etaEl; + } + + public ComparableQuantity getEtaThermal() { + return etaThermal; + } + + public ComparableQuantity getpThermal() { + return pThermal; + } + + public ComparableQuantity getpOwn() { + return pOwn; + } + + public ChpTypeInput.ChpTypeInputCopyBuilder scale(Double factor) { + setsRated(getsRated().multiply(factor)); + setpThermal(getpThermal().multiply(factor)); + setpOwn(getpOwn().multiply(factor)); + return this; + } + + @Override + public ChpTypeInput build() { + return new ChpTypeInput( + getUuid(), + getId(), + getCapex(), + getOpex(), + etaEl, + etaThermal, + getsRated(), + getCosPhiRated(), + pThermal, + pOwn); + } + + @Override + protected ChpTypeInput.ChpTypeInputCopyBuilder thisInstance() { + return this; + } + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/type/EvTypeInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/type/EvTypeInput.java index 465a1ae90..e5455d657 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/type/EvTypeInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/type/EvTypeInput.java @@ -54,6 +54,11 @@ public ComparableQuantity geteCons() { return eCons; } + @Override + public EvTypeInputCopyBuilder copy() { + return new EvTypeInputCopyBuilder(this); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -88,4 +93,63 @@ public String toString() { + eCons + '}'; } + + /** + * Abstract class for all builder that build child entities of abstract class {@link EvTypeInput} + */ + public static class EvTypeInputCopyBuilder + extends SystemParticipantTypeInputCopyBuilder { + + private ComparableQuantity eStorage; + private ComparableQuantity eCons; + + private EvTypeInputCopyBuilder(EvTypeInput entity) { + super(entity); + this.eStorage = entity.geteStorage(); + this.eCons = entity.geteCons(); + } + + public EvTypeInputCopyBuilder seteStorage(ComparableQuantity eStorage) { + this.eStorage = eStorage; + return this; + } + + public EvTypeInputCopyBuilder seteCons(ComparableQuantity eCons) { + this.eCons = eCons; + return this; + } + + public ComparableQuantity geteStorage() { + return eStorage; + } + + public ComparableQuantity geteCons() { + return eCons; + } + + public EvTypeInput.EvTypeInputCopyBuilder scale(Double factor) { + setsRated(getsRated().multiply(factor)); + seteStorage(geteStorage().multiply(factor)); + seteCons(geteCons().multiply(factor)); + return this; + } + + @Override + public EvTypeInput build() { + return new EvTypeInput( + getUuid(), + getId(), + getCapex(), + getOpex(), + eStorage, + eCons, + getsRated(), + getCosPhiRated()); + } + + @Override + protected EvTypeInput.EvTypeInputCopyBuilder thisInstance() { + return this; + } + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/type/HpTypeInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/type/HpTypeInput.java index fb2532413..f8dc0da27 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/type/HpTypeInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/type/HpTypeInput.java @@ -44,6 +44,11 @@ public ComparableQuantity getpThermal() { return pThermal; } + @Override + public HpTypeInputCopyBuilder copy() { + return new HpTypeInputCopyBuilder(this); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -76,4 +81,44 @@ public String toString() { + pThermal + '}'; } + + /** + * Abstract class for all builder that build child entities of abstract class {@link HpTypeInput} + */ + public static class HpTypeInputCopyBuilder + extends SystemParticipantTypeInputCopyBuilder { + + private ComparableQuantity pThermal; + + private HpTypeInputCopyBuilder(HpTypeInput entity) { + super(entity); + this.pThermal = entity.getpThermal(); + } + + public HpTypeInputCopyBuilder setpThermal(ComparableQuantity pThermal) { + this.pThermal = pThermal; + return this; + } + + public ComparableQuantity getpThermal() { + return pThermal; + } + + public HpTypeInput.HpTypeInputCopyBuilder scale(Double factor) { + setsRated(getsRated().multiply(factor)); + setpThermal(getpThermal().multiply(factor)); + return this; + } + + @Override + public HpTypeInput build() { + return new HpTypeInput( + getUuid(), getId(), getCapex(), getOpex(), getsRated(), getCosPhiRated(), pThermal); + } + + @Override + protected HpTypeInput.HpTypeInputCopyBuilder thisInstance() { + return this; + } + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/type/StorageTypeInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/type/StorageTypeInput.java index 4358631b9..4619a4d51 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/type/StorageTypeInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/type/StorageTypeInput.java @@ -101,6 +101,11 @@ public ComparableQuantity getActivePowerGradient() { return activePowerGradient; } + @Override + public StorageTypeInputCopyBuilder copy() { + return new StorageTypeInputCopyBuilder(this); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -152,4 +157,125 @@ public String toString() { + lifeCycle + '}'; } + + /** + * Abstract class for all builder that build child entities of abstract class {@link + * StorageTypeInput} + */ + public static class StorageTypeInputCopyBuilder + extends SystemParticipantTypeInputCopyBuilder { + + private ComparableQuantity eStorage; + private ComparableQuantity pMax; + private ComparableQuantity activePowerGradient; + private ComparableQuantity eta; + private ComparableQuantity dod; + private ComparableQuantity
  • we?35C_(Hos!o*@I>J{xnhbcH*8 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 QO}z6yxdXC^yN{guKZgWsLjV8( literal 0 HcmV?d00001 diff --git a/docs/readthedocs/_static/figures/uml/WeatherCoordinateSourceClassDiagram.png b/docs/readthedocs/_static/figures/uml/WeatherCoordinateSourceClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..7f657673ab943320073b9050e8c59b7ea8d3c086 GIT binary patch literal 108069 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