diff --git a/CHANGELOG.md b/CHANGELOG.md index c714ba6ae..c0fa956c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed SonarQube junit path issue in GitHub Actions [#1284](https://github.com/ie3-institute/PowerSystemDataModel/issues/1284) -### Changed +- Fix returning null in TimeBasedWeatherValueData [#356](https://github.com/ie3-institute/PowerSystemDataModel/issues/356) + +- ### Changed - Replaced `return this` with `return thisInstance` in CopyBuilders [#1250](https://github.com/ie3-institute/PowerSystemDataModel/issues/1250) ## [6.0.0] - 2025-02-27 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 cc0cdd357..ce5756053 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java @@ -73,7 +73,9 @@ public Optional getFieldOptional(String field) { * @param unit unit of Quantity * @param unit type parameter * @return Quantity of given field with given unit + * @deprecated Use {@link #getQuantityOptional(String, Unit)} instead. */ + @Deprecated public > ComparableQuantity getQuantity(String field, Unit unit) { return Quantities.getQuantity(getDouble(field), unit); } 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 09048fb89..104314d23 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 @@ -63,15 +63,18 @@ protected TimeBasedValue buildModel(TimeBasedWeatherValueData data Point coordinate = data.getCoordinate(); ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME)); ComparableQuantity directIrradiance = - data.getQuantity(DIRECT_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE); + data.getQuantityOptional(DIRECT_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE) + .orElse(null); ComparableQuantity diffuseIrradiance = - data.getQuantity(DIFFUSE_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE); + data.getQuantityOptional(DIFFUSE_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE) + .orElse(null); ComparableQuantity temperature = - data.getQuantity(TEMPERATURE, StandardUnits.TEMPERATURE); + data.getQuantityOptional(TEMPERATURE, StandardUnits.TEMPERATURE).orElse(null); ComparableQuantity windDirection = - data.getQuantity(WIND_DIRECTION, StandardUnits.WIND_DIRECTION); + data.getQuantityOptional(WIND_DIRECTION, StandardUnits.WIND_DIRECTION).orElse(null); ComparableQuantity windVelocity = - data.getQuantity(WIND_VELOCITY, StandardUnits.WIND_VELOCITY); + data.getQuantityOptional(WIND_VELOCITY, StandardUnits.WIND_VELOCITY).orElse(null); + WeatherValue weatherValue = new WeatherValue( coordinate, @@ -80,6 +83,7 @@ protected TimeBasedValue buildModel(TimeBasedWeatherValueData data temperature, windDirection, windVelocity); + return new TimeBasedValue<>(time, weatherValue); } } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueData.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueData.java index e9e12aafc..9c7f099f5 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueData.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedWeatherValueData.java @@ -7,10 +7,7 @@ import edu.ie3.datamodel.models.value.WeatherValue; import java.util.Map; -import javax.measure.Quantity; -import javax.measure.Unit; import org.locationtech.jts.geom.Point; -import tech.units.indriya.ComparableQuantity; public class TimeBasedWeatherValueData extends TimeBasedValueData { @@ -31,11 +28,6 @@ public Point getCoordinate() { return coordinate; } - @Override - public > ComparableQuantity getQuantity(String field, Unit unit) { - return getField(field).isEmpty() ? null : super.getQuantity(field, unit); - } - @Override public boolean equals(Object o) { if (this == o) return true; 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 e85aebf3b..a310760fc 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 @@ -34,12 +34,12 @@ class CosmoTimeBasedWeatherValueFactoryTest extends Specification { def data = new TimeBasedWeatherValueData(parameter, coordinate) def expectedResults = new TimeBasedValue( - time, new WeatherValue(coordinate, - Quantities.getQuantity(286.872985839844d, StandardUnits.SOLAR_IRRADIANCE), - Quantities.getQuantity(282.671997070312d, StandardUnits.SOLAR_IRRADIANCE), - null, - Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), - Quantities.getQuantity(1.66103506088257d, StandardUnits.WIND_VELOCITY))) + time, new WeatherValue( coordinate, + data.getQuantityOptional("directIrradiance", StandardUnits.SOLAR_IRRADIANCE).orElse(null), + data.getQuantityOptional("diffuseIrradiance", StandardUnits.SOLAR_IRRADIANCE).orElse(null), + data.getQuantityOptional("temperature", StandardUnits.TEMPERATURE).orElse(null), + data.getQuantityOptional("windDirection", StandardUnits.WIND_DIRECTION).orElse(null), + data.getQuantityOptional("windVelocity", StandardUnits.WIND_VELOCITY).orElse(null))) when: def model = factory.buildModel(data) @@ -67,12 +67,16 @@ class CosmoTimeBasedWeatherValueFactoryTest extends Specification { def data = new TimeBasedWeatherValueData(parameter, coordinate) def expectedResults = new TimeBasedValue( - time, new WeatherValue(coordinate, - Quantities.getQuantity(286.872985839844d, StandardUnits.SOLAR_IRRADIANCE), - Quantities.getQuantity(282.671997070312d, StandardUnits.SOLAR_IRRADIANCE), - Quantities.getQuantity(278.019012451172d, StandardUnits.TEMPERATURE), - Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), - Quantities.getQuantity(1.66103506088257d, StandardUnits.WIND_VELOCITY))) + time, new WeatherValue( + coordinate, + data.getQuantityOptional("directIrradiance", StandardUnits.SOLAR_IRRADIANCE).orElse(null), + data.getQuantityOptional("diffuseIrradiance", StandardUnits.SOLAR_IRRADIANCE).orElse(null), + data.getQuantityOptional("temperature", StandardUnits.TEMPERATURE).orElse(null), + data.getQuantityOptional("windDirection", StandardUnits.WIND_DIRECTION).orElse(null), + data.getQuantityOptional("windVelocity", StandardUnits.WIND_VELOCITY).orElse(null) + ) + ) + when: def model = factory.buildModel(data)