diff --git a/CHANGELOG.md b/CHANGELOG.md index 3abd7d730..f93c8b178 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Renamed timeseries mapping `participant` column to `asset` [#1191](https://github.com/ie3-institute/PowerSystemDataModel/issues/1191) - Removed attribute `dsm` from `LoadInput` [#1195](https://github.com/ie3-institute/PowerSystemDataModel/issues/1195) - Fix spotless deprecations [#1123](https://github.com/ie3-institute/PowerSystemDataModel/issues/1223) +- Refactored `CongestionResult`, removed `ModelResultEntity` [#1234](https://github.com/ie3-institute/PowerSystemDataModel/issues/1234) ## [5.1.0] - 2024-06-24 diff --git a/docs/readthedocs/models/result/grid/congestion.md b/docs/readthedocs/models/result/grid/congestion.md index e0f687fa4..2113706ac 100644 --- a/docs/readthedocs/models/result/grid/congestion.md +++ b/docs/readthedocs/models/result/grid/congestion.md @@ -2,7 +2,7 @@ # Congestion -Representation of a congestion result for a given subnet. +Representation of a congestion result for a given asset. ## Attributes, Units and Remarks @@ -18,30 +18,30 @@ Representation of a congestion result for a given subnet. * - time - ZonedDateTime - date and time for the produced result - - * - subgrid + + * - inputModel - - - Sub grid number - - * - vMin - - p.u. - - minimal voltage of the subnet - - * - vMax - - p.u. - - maximal voltage of the subnet - - * - voltage + - uuid for the associated input model + + * - inputModelType - - - Boolean indicator, if a voltage congestion occurred - - * - line + - the type of the input model (e.g. node, line, etc.) + + * - subgrid - - - Boolean indicator, if a line congestion occurred + - Sub grid number - * - transformer - - - - Boolean indicator, if a transformer congestion occurred + * - value + - Percent + - the actual value that was calculated in relation to its base value + + * - min + - Percent + - minimal limit value + + * - max + - Percent + - maximal limit value ``` ## Caveats diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/CongestionResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/CongestionResultFactory.java index 9950a3eaf..1ff917089 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/CongestionResultFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/result/CongestionResultFactory.java @@ -5,24 +5,28 @@ */ package edu.ie3.datamodel.io.factory.result; -import static edu.ie3.util.quantities.PowerSystemUnits.PU; +import static tech.units.indriya.unit.Units.PERCENT; +import edu.ie3.datamodel.exceptions.FactoryException; +import edu.ie3.datamodel.exceptions.ParsingException; import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.models.result.CongestionResult; +import edu.ie3.datamodel.models.result.CongestionResult.InputModelType; +import edu.ie3.datamodel.utils.Try; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Set; +import java.util.UUID; import javax.measure.quantity.Dimensionless; import tech.units.indriya.ComparableQuantity; public class CongestionResultFactory extends ResultEntityFactory { + private static final String TYPE = "type"; private static final String SUBGRID = "subgrid"; - private static final String VMIN = "vMin"; - private static final String VMAX = "vMax"; - private static final String VOLTAGE = "voltage"; - private static final String LINE = "line"; - private static final String TRANSFORMER = "transformer"; + private static final String VALUE = "value"; + private static final String MIN = "min"; + private static final String MAX = "max"; public CongestionResultFactory() { super(CongestionResult.class); @@ -34,19 +38,25 @@ public CongestionResultFactory(DateTimeFormatter dateTimeFormatter) { @Override protected List> getFields(Class entityClass) { - return List.of(newSet(TIME, SUBGRID, VMIN, VMAX, VOLTAGE, LINE, TRANSFORMER)); + return List.of(newSet(TIME, INPUT_MODEL, TYPE, SUBGRID, MIN, MAX)); } @Override protected CongestionResult buildModel(EntityData data) { ZonedDateTime zdtTime = timeUtil.toZonedDateTime(data.getField(TIME)); + UUID inputModel = data.getUUID(INPUT_MODEL); + + InputModelType type = + Try.of(() -> InputModelType.parse(data.getField(TYPE)), ParsingException.class) + .transformF(FactoryException::new) + .getOrThrow(); + int subgrid = data.getInt(SUBGRID); - ComparableQuantity vMin = data.getQuantity(VMIN, PU); - ComparableQuantity vMax = data.getQuantity(VMAX, PU); - boolean voltage = data.getBoolean(VOLTAGE); - boolean line = data.getBoolean(LINE); - boolean transformer = data.getBoolean(TRANSFORMER); - return new CongestionResult(zdtTime, subgrid, vMin, vMax, voltage, line, transformer); + ComparableQuantity value = data.getQuantity(VALUE, PERCENT); + ComparableQuantity min = data.getQuantity(MIN, PERCENT); + ComparableQuantity max = data.getQuantity(MAX, PERCENT); + + return new CongestionResult(zdtTime, inputModel, type, subgrid, value, min, max); } } 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 d211528ef..495ee9bb9 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 @@ -20,7 +20,7 @@ import javax.measure.quantity.ElectricCurrent; import tech.units.indriya.ComparableQuantity; -public class ConnectorResultFactory extends ModelResultFactory { +public class ConnectorResultFactory extends ResultEntityFactory { private static final String IAMAG = "iAMag"; private static final String IAANG = "iAAng"; 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 d3d63af84..1c31ea9db 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 @@ -14,7 +14,7 @@ import javax.measure.quantity.Power; import tech.units.indriya.ComparableQuantity; -public class FlexOptionsResultFactory extends ModelResultFactory { +public class FlexOptionsResultFactory extends ResultEntityFactory { private static final String P_REF = "pRef"; private static final String P_MIN = "pMin"; diff --git a/src/main/java/edu/ie3/datamodel/io/factory/result/ModelResultFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/result/ModelResultFactory.java deleted file mode 100644 index c888b7ee5..000000000 --- a/src/main/java/edu/ie3/datamodel/io/factory/result/ModelResultFactory.java +++ /dev/null @@ -1,23 +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.factory.result; - -import edu.ie3.datamodel.models.result.ModelResultEntity; -import java.time.format.DateTimeFormatter; - -public abstract class ModelResultFactory - extends ResultEntityFactory { - protected static final String INPUT_MODEL = "inputModel"; - - protected ModelResultFactory(Class... allowedClasses) { - super(allowedClasses); - } - - protected ModelResultFactory( - DateTimeFormatter dateTimeFormatter, Class... allowedClasses) { - super(dateTimeFormatter, allowedClasses); - } -} 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 858480fbd..e7cbf1ea9 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,7 +15,7 @@ import javax.measure.quantity.Dimensionless; import tech.units.indriya.ComparableQuantity; -public class NodeResultFactory extends ModelResultFactory { +public class NodeResultFactory extends ResultEntityFactory { private static final String VMAG = "vMag"; private static final String VANG = "vAng"; 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 f4c239795..6eadf1cd9 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 @@ -22,6 +22,7 @@ public abstract class ResultEntityFactory extends EntityFactory { protected static final String TIME = "time"; + protected static final String INPUT_MODEL = "inputModel"; protected final TimeUtil timeUtil; 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 039928148..0db6a14dc 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 @@ -11,7 +11,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; -public class SwitchResultFactory extends ModelResultFactory { +public class SwitchResultFactory extends ResultEntityFactory { private static final String CLOSED = "closed"; 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 68243f438..1d819be4e 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 @@ -23,7 +23,7 @@ * Factory class for creating {@link SystemParticipantResult} entities from provided {@link * EntityData} data objects. */ -public class SystemParticipantResultFactory extends ModelResultFactory { +public class SystemParticipantResultFactory extends ResultEntityFactory { private static final String POWER = "p"; private static final String REACTIVE_POWER = "q"; 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 0ff9180d0..6a84b6d73 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 @@ -21,7 +21,7 @@ import javax.measure.quantity.Temperature; import tech.units.indriya.ComparableQuantity; -public class ThermalResultFactory extends ModelResultFactory { +public class ThermalResultFactory extends ResultEntityFactory { private static final String Q_DOT = "qDot"; private static final String INDOOR_TEMPERATURE = "indoorTemperature"; private static final String ENERGY = "energy"; diff --git a/src/main/java/edu/ie3/datamodel/models/result/CongestionResult.java b/src/main/java/edu/ie3/datamodel/models/result/CongestionResult.java index 61db3fb62..cada19c7f 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/CongestionResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/CongestionResult.java @@ -5,8 +5,10 @@ */ package edu.ie3.datamodel.models.result; +import edu.ie3.datamodel.exceptions.ParsingException; import java.time.ZonedDateTime; import java.util.Objects; +import java.util.UUID; import javax.measure.quantity.Dimensionless; import tech.units.indriya.ComparableQuantity; @@ -14,62 +16,56 @@ public class CongestionResult extends ResultEntity { /** Values */ private final Integer subgrid; - private final ComparableQuantity vMin; - private final ComparableQuantity vMax; - private final boolean voltage; - private final boolean line; - private final boolean transformer; + private final InputModelType type; + private final ComparableQuantity value; + private final ComparableQuantity min; + private final ComparableQuantity max; /** * Standard constructor which includes auto generation of the resulting output models uuid. * * @param time date and time when the result is produced + * @param inputModel identifier of the input model + * @param type of the input model * @param subgrid the subgrid - * @param vMin minimum voltage in pu - * @param vMax maximal voltage in pu - * @param voltage {@code true} if a voltage congestion occurred in the subnet - * @param line {@code true} if a line congestion occurred in the subnet - * @param transformer {@code true} if a transformer congestion occurred in the subnet + * @param value the actual value in percent + * @param min minimum value in percent + * @param max maximal value in percent */ public CongestionResult( ZonedDateTime time, + UUID inputModel, + InputModelType type, int subgrid, - ComparableQuantity vMin, - ComparableQuantity vMax, - boolean voltage, - boolean line, - boolean transformer) { - super(time); + ComparableQuantity value, + ComparableQuantity min, + ComparableQuantity max) { + super(time, inputModel); + this.type = type; this.subgrid = subgrid; - this.vMin = vMin; - this.vMax = vMax; - this.voltage = voltage; - this.line = line; - this.transformer = transformer; + this.value = value; + this.min = min; + this.max = max; } - public int getSubgrid() { - return subgrid; - } - - public boolean getVoltage() { - return voltage; + public InputModelType getType() { + return type; } - public boolean getLine() { - return line; + public int getSubgrid() { + return subgrid; } - public boolean getTransformer() { - return transformer; + public ComparableQuantity getValue() { + return value; } - public ComparableQuantity getVMin() { - return vMin; + public ComparableQuantity getMin() { + return min; } - public ComparableQuantity getVMax() { - return vMax; + public ComparableQuantity getMax() { + return max; } @Override @@ -78,36 +74,59 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; CongestionResult that = (CongestionResult) o; return getTime().equals(that.getTime()) + && getInputModel().equals(that.getInputModel()) + && type.equals(that.type) && Objects.equals(subgrid, that.subgrid) - && vMin.equals(that.vMin) - && vMax.equals(that.vMax) - && voltage == that.voltage - && line == that.line - && transformer == that.transformer; + && value.equals(that.value) + && min.equals(that.min) + && max.equals(that.max); } @Override public int hashCode() { - return Objects.hash( - super.hashCode(), getTime(), subgrid, vMin, vMax, voltage, line, transformer); + return Objects.hash(super.hashCode(), getTime(), type, subgrid, value, min, max); } @Override public String toString() { return "InputResultEntity{time=" + getTime() + + ", inputModel=" + + getInputModel() + + ", type=" + + type + ", subgrid=" + subgrid - + ", vMin=" - + vMin - + ", vMan=" - + vMax - + ", voltage=" - + voltage - + ", line=" - + line - + ", transformer=" - + transformer + + ", value=" + + value + + ", min=" + + min + + ", max=" + + max + '}'; } + + public enum InputModelType { + NODE("node"), + LINE("line"), + TRANSFORMER_2W("transformer_2w"), + TRANSFORMER_3W("transforerm_3w"); + + public final String type; + + InputModelType(String type) { + this.type = type; + } + + public static InputModelType parse(String inputModelType) throws ParsingException { + return switch (inputModelType) { + case "node" -> NODE; + case "line" -> LINE; + case "transformer_2w" -> TRANSFORMER_2W; + case "transformer_3w" -> TRANSFORMER_3W; + default -> throw new ParsingException( + "InputModelType '" + inputModelType + "' cannot be parsed!"); + }; + } + } } diff --git a/src/main/java/edu/ie3/datamodel/models/result/ModelResultEntity.java b/src/main/java/edu/ie3/datamodel/models/result/ModelResultEntity.java deleted file mode 100644 index abc90cec4..000000000 --- a/src/main/java/edu/ie3/datamodel/models/result/ModelResultEntity.java +++ /dev/null @@ -1,54 +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.models.result; - -import java.time.ZonedDateTime; -import java.util.Objects; -import java.util.UUID; - -/** Abstract class to hold all mappings common to all input result models */ -public abstract class ModelResultEntity extends ResultEntity { - - /** uuid of the input model that produces the result */ - private UUID inputModel; - - /** - * Standard constructor which includes auto generation of the resulting output models uuid. - * - * @param time date and time when the result is produced - * @param inputModel uuid of the input model that produces the result - */ - protected ModelResultEntity(ZonedDateTime time, UUID inputModel) { - super(time); - this.inputModel = inputModel; - } - - public UUID getInputModel() { - return inputModel; - } - - public void setInputModel(UUID inputID) { - inputModel = inputID; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ModelResultEntity that = (ModelResultEntity) o; - return getTime().equals(that.getTime()) && inputModel.equals(that.inputModel); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), getTime(), inputModel); - } - - @Override - public String toString() { - return "InputResultEntity{time=" + getTime() + ", inputModel=" + inputModel + '}'; - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/result/NodeResult.java b/src/main/java/edu/ie3/datamodel/models/result/NodeResult.java index f0db14df3..0724a8344 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/NodeResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/NodeResult.java @@ -13,7 +13,7 @@ import tech.units.indriya.ComparableQuantity; /** Represents calculation results of a {@link edu.ie3.datamodel.models.input.NodeInput} */ -public class NodeResult extends ModelResultEntity { +public class NodeResult extends ResultEntity { /** Voltage magnitude @ this node in p.u. */ private ComparableQuantity vMag; diff --git a/src/main/java/edu/ie3/datamodel/models/result/ResultEntity.java b/src/main/java/edu/ie3/datamodel/models/result/ResultEntity.java index ba4dd58af..0d8b229bf 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/ResultEntity.java +++ b/src/main/java/edu/ie3/datamodel/models/result/ResultEntity.java @@ -8,20 +8,33 @@ import edu.ie3.datamodel.models.Entity; import java.time.ZonedDateTime; import java.util.Objects; +import java.util.UUID; /** Abstract class to hold all mappings common to all result models */ public abstract class ResultEntity implements Entity { /** date and time of the produced result */ private ZonedDateTime time; + /** uuid of the input model that produces the result */ + private UUID inputModel; /** * Standard constructor which includes auto generation of the resulting output models uuid. * * @param time date and time when the result is produced + * @param inputModel uuid of the input model that produces the result */ - protected ResultEntity(ZonedDateTime time) { + protected ResultEntity(ZonedDateTime time, UUID inputModel) { this.time = time; + this.inputModel = inputModel; + } + + public UUID getInputModel() { + return inputModel; + } + + public void setInputModel(UUID inputID) { + inputModel = inputID; } public ZonedDateTime getTime() { 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 187a27fc0..c5d9b99cd 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 @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.models.result.connector; -import edu.ie3.datamodel.models.result.ModelResultEntity; +import edu.ie3.datamodel.models.result.ResultEntity; import java.time.ZonedDateTime; import java.util.Objects; import java.util.UUID; @@ -14,7 +14,7 @@ import tech.units.indriya.ComparableQuantity; /** Abstract class to hold most 'ElectricCurrent and Angle'-mappings common to all connectors */ -public abstract class ConnectorResult extends ModelResultEntity { +public abstract class ConnectorResult extends ResultEntity { /** Electric current magnitude @ port A, normally provided in Ampere */ private ComparableQuantity iAMag; diff --git a/src/main/java/edu/ie3/datamodel/models/result/connector/SwitchResult.java b/src/main/java/edu/ie3/datamodel/models/result/connector/SwitchResult.java index c0b650558..7b5c15c5b 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/connector/SwitchResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/connector/SwitchResult.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.models.result.connector; -import edu.ie3.datamodel.models.result.ModelResultEntity; +import edu.ie3.datamodel.models.result.ResultEntity; import java.time.ZonedDateTime; import java.util.Objects; import java.util.UUID; @@ -13,7 +13,7 @@ /** * Represents calculation results of a {@link edu.ie3.datamodel.models.input.connector.SwitchInput} */ -public class SwitchResult extends ModelResultEntity { +public class SwitchResult extends ResultEntity { /** is the switching state 'closed'? */ private boolean closed; diff --git a/src/main/java/edu/ie3/datamodel/models/result/system/FlexOptionsResult.java b/src/main/java/edu/ie3/datamodel/models/result/system/FlexOptionsResult.java index ea85fc554..210bc761b 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/system/FlexOptionsResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/system/FlexOptionsResult.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.models.result.system; -import edu.ie3.datamodel.models.result.ModelResultEntity; +import edu.ie3.datamodel.models.result.ResultEntity; import java.time.ZonedDateTime; import java.util.Objects; import java.util.UUID; @@ -13,7 +13,7 @@ import tech.units.indriya.ComparableQuantity; /** Represents results of flexibility request */ -public class FlexOptionsResult extends ModelResultEntity { +public class FlexOptionsResult extends ResultEntity { /** * Active power (might be negative, thus feed-in) that was suggested for regular usage by the diff --git a/src/main/java/edu/ie3/datamodel/models/result/system/SystemParticipantResult.java b/src/main/java/edu/ie3/datamodel/models/result/system/SystemParticipantResult.java index 225833777..4b5067896 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/system/SystemParticipantResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/system/SystemParticipantResult.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.models.result.system; -import edu.ie3.datamodel.models.result.ModelResultEntity; +import edu.ie3.datamodel.models.result.ResultEntity; import java.time.ZonedDateTime; import java.util.Objects; import java.util.UUID; @@ -13,7 +13,7 @@ import tech.units.indriya.ComparableQuantity; /** Abstract class that holds values common to all other result entities */ -public abstract class SystemParticipantResult extends ModelResultEntity { +public abstract class SystemParticipantResult extends ResultEntity { /** active power output normally provided in MW */ private ComparableQuantity p; diff --git a/src/main/java/edu/ie3/datamodel/models/result/thermal/ThermalUnitResult.java b/src/main/java/edu/ie3/datamodel/models/result/thermal/ThermalUnitResult.java index d3265bbae..07ba81913 100644 --- a/src/main/java/edu/ie3/datamodel/models/result/thermal/ThermalUnitResult.java +++ b/src/main/java/edu/ie3/datamodel/models/result/thermal/ThermalUnitResult.java @@ -6,7 +6,7 @@ package edu.ie3.datamodel.models.result.thermal; import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.datamodel.models.result.ModelResultEntity; +import edu.ie3.datamodel.models.result.ResultEntity; import java.time.ZonedDateTime; import java.util.Objects; import java.util.UUID; @@ -14,7 +14,7 @@ import tech.units.indriya.ComparableQuantity; /** Representation of a result with regard to a thermal unit */ -public abstract class ThermalUnitResult extends ModelResultEntity { +public abstract class ThermalUnitResult extends ResultEntity { /** * Average thermal power flowing into the thermal unit (+: Power flowing into unit, -: Power diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/UniquenessValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/UniquenessValidationUtils.java index 50f71c78c..cdf980fad 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/UniquenessValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/UniquenessValidationUtils.java @@ -11,8 +11,7 @@ import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.AssetInput; import edu.ie3.datamodel.models.input.IdCoordinateInput; -import edu.ie3.datamodel.models.result.CongestionResult; -import edu.ie3.datamodel.models.result.ModelResultEntity; +import edu.ie3.datamodel.models.result.ResultEntity; import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.WeatherValue; import edu.ie3.datamodel.utils.Try; @@ -28,10 +27,8 @@ public class UniquenessValidationUtils extends ValidationUtils { protected static final FieldSetSupplier uuidFieldSupplier = entity -> Set.of(entity.getUuid()); protected static final FieldSetSupplier idFieldSupplier = e -> Set.of(e.getId()); - protected static final FieldSetSupplier modelResultFieldSupplier = + protected static final FieldSetSupplier resultFieldSupplier = entity -> Set.of(entity.getTime(), entity.getInputModel()); - protected static final FieldSetSupplier congestionResultFieldSupplier = - entity -> Set.of(entity.getTime(), entity.getSubgrid()); protected static final FieldSetSupplier mappingFieldSupplier = entity -> Set.of(entity.getAsset()); protected static final FieldSetSupplier idCoordinateSupplier = @@ -72,25 +69,14 @@ public static void checkAssetUniqueness(Collection entitie } /** - * Checks the uniqueness of a collection of {@link CongestionResult}. + * Checks the uniqueness of a collection of {@link ResultEntity}. * * @param entities to be checked * @throws DuplicateEntitiesException if uniqueness is violated */ - public static void checkCongestionResultUniqueness( - Collection entities) throws DuplicateEntitiesException { - checkUniqueness(entities, congestionResultFieldSupplier).getOrThrow(); - } - - /** - * Checks the uniqueness of a collection of {@link ModelResultEntity}. - * - * @param entities to be checked - * @throws DuplicateEntitiesException if uniqueness is violated - */ - public static void checkModelResultUniqueness(Collection entities) + public static void checkResultUniqueness(Collection entities) throws DuplicateEntitiesException { - checkUniqueness(entities, modelResultFieldSupplier).getOrThrow(); + checkUniqueness(entities, resultFieldSupplier).getOrThrow(); } /** 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 7bf12fbb9..4f5c4a0f1 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 @@ -7,8 +7,8 @@ package edu.ie3.datamodel.io.processor.result import edu.ie3.datamodel.exceptions.EntityProcessorException import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.datamodel.models.result.ModelResultEntity import edu.ie3.datamodel.models.result.NodeResult +import edu.ie3.datamodel.models.result.ResultEntity import edu.ie3.datamodel.models.result.connector.LineResult import edu.ie3.datamodel.models.result.connector.SwitchResult import edu.ie3.datamodel.models.result.connector.Transformer2WResult @@ -285,7 +285,7 @@ class ResultEntityProcessorTest extends Specification { thrown(EntityProcessorException) } - private static class InvalidTestResult extends ModelResultEntity { + private static class InvalidTestResult extends ResultEntity { InvalidTestResult(ZonedDateTime time, UUID inputModel) { super(time, inputModel) diff --git a/src/test/groovy/edu/ie3/datamodel/utils/validation/UniquenessValidationUtilsTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/validation/UniquenessValidationUtilsTest.groovy index 95b2f0472..82066c52c 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/UniquenessValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/UniquenessValidationUtilsTest.groovy @@ -5,19 +5,21 @@ */ package edu.ie3.datamodel.utils.validation +import static edu.ie3.datamodel.models.result.CongestionResult.InputModelType.NODE import static edu.ie3.datamodel.utils.validation.DummyAssetInput.valid import static edu.ie3.datamodel.utils.validation.UniquenessValidationUtils.* import static edu.ie3.util.quantities.PowerSystemUnits.DEGREE_GEOM import static edu.ie3.util.quantities.PowerSystemUnits.PU import static tech.units.indriya.unit.Units.METRE_PER_SECOND +import static tech.units.indriya.unit.Units.PERCENT import edu.ie3.datamodel.exceptions.DuplicateEntitiesException import edu.ie3.datamodel.io.source.TimeSeriesMappingSource import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.AssetInput import edu.ie3.datamodel.models.result.CongestionResult -import edu.ie3.datamodel.models.result.ModelResultEntity import edu.ie3.datamodel.models.result.NodeResult +import edu.ie3.datamodel.models.result.ResultEntity import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.value.SolarIrradianceValue import edu.ie3.datamodel.models.value.TemperatureValue @@ -107,19 +109,19 @@ class UniquenessValidationUtilsTest extends Specification { Quantity vMag = Quantities.getQuantity(0.95, PU) Quantity vAng = Quantities.getQuantity(45, StandardUnits.VOLTAGE_ANGLE) - Set uniqueResults = [ + Set uniqueResults = [ new NodeResult(time, uuid, vMag, vAng), new NodeResult(time.plusHours(1), uuid, vMag, vAng) ] when: - checkModelResultUniqueness(uniqueResults) + checkResultUniqueness(uniqueResults) then: noExceptionThrown() } - def "Duplicates in model result inputs lead to an exception"() { + def "Duplicates in result inputs lead to an exception"() { given: ZonedDateTime time = ZonedDateTime.parse("2024-02-15T13:49:44+01:00[Europe/Berlin]") UUID uuid1 = UUID.fromString("4f7938ad-3d8f-4d56-a76c-525f2362e8b6") @@ -127,7 +129,7 @@ class UniquenessValidationUtilsTest extends Specification { Quantity vMag = Quantities.getQuantity(0.95, PU) Quantity vAng = Quantities.getQuantity(45, StandardUnits.VOLTAGE_ANGLE) - Set notUniqueResults = [ + Set notUniqueResults = [ new NodeResult(time, uuid1, vMag, vAng), new NodeResult(time, uuid1, vMag, vAng), new NodeResult(time.plusHours(1), uuid2, vMag, vAng), @@ -135,7 +137,7 @@ class UniquenessValidationUtilsTest extends Specification { ] when: - checkModelResultUniqueness(notUniqueResults) + checkResultUniqueness(notUniqueResults) then: DuplicateEntitiesException de = thrown() @@ -145,20 +147,23 @@ class UniquenessValidationUtilsTest extends Specification { def "Duplicates in congestion result inputs lead to an exception"() { given: ZonedDateTime time = ZonedDateTime.parse("2024-02-15T13:49:44+01:00[Europe/Berlin]") + UUID inputModel1 = UUID.randomUUID() + UUID inputModel2 = UUID.randomUUID() int subgrid1 = 1 int subgrid2 = 2 - Quantity vMin = Quantities.getQuantity(0.9, PU) - Quantity vMax = Quantities.getQuantity(1.1, PU) + Quantity value = Quantities.getQuantity(120, PERCENT) + Quantity min = Quantities.getQuantity(90, PERCENT) + Quantity max = Quantities.getQuantity(110, PERCENT) Set notUniqueResults = [ - new CongestionResult(time, subgrid1, vMin, vMax, false, false, false), - new CongestionResult(time, subgrid1, vMin, vMax, false, true, false), - new CongestionResult(time.plusHours(1), subgrid1, vMin, vMax, false, false, false), - new CongestionResult(time.plusHours(1), subgrid2, vMin, vMax, false, true, false), + new CongestionResult(time, inputModel1, NODE, subgrid1, value, min, max), + new CongestionResult(time, inputModel1, NODE, subgrid2, value, min, max), + new CongestionResult(time.plusHours(1), inputModel1, NODE, subgrid1, value, min, max), + new CongestionResult(time.plusHours(1), inputModel2, NODE, subgrid2, value, min, max), ] when: - checkCongestionResultUniqueness(notUniqueResults) + checkResultUniqueness(notUniqueResults) then: DuplicateEntitiesException de = thrown()