diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bc6a2513..a76218f58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improving usage of streams on sql fetches [#827](https://github.com/ie3-institute/PowerSystemDataModel/issues/827) - Improving error message when using the outdated csv format [#1112](https://github.com/ie3-institute/PowerSystemDataModel/issues/1112) - Changed ThermalUnitValidation: Ensure that thermal boundaries of thermal house are not the same [#1186](https://github.com/ie3-institute/PowerSystemDataModel/issues/1186) +- Converted `MappingEntry` into a normal class [#1087](https://github.com/ie3-institute/PowerSystemDataModel/issues/1087) +- Renamed timeseries mapping `participant` column to `asset` [#1191](https://github.com/ie3-institute/PowerSystemDataModel/issues/1191) ## [5.1.0] - 2024-06-24 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 2009435cc..9172b99dd 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 @@ -8,16 +8,13 @@ import edu.ie3.datamodel.io.factory.EntityData; import edu.ie3.datamodel.io.factory.EntityFactory; import edu.ie3.datamodel.io.source.TimeSeriesMappingSource; -import java.util.Collections; import java.util.List; import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.Stream; public class TimeSeriesMappingFactory extends EntityFactory { - private static final String PARTICIPANT = "participant"; + private static final String ASSET = "asset"; private static final String TIME_SERIES = "timeSeries"; public TimeSeriesMappingFactory() { @@ -26,14 +23,13 @@ public TimeSeriesMappingFactory() { @Override protected List> getFields(Class entityClass) { - return Collections.singletonList( - Stream.of(PARTICIPANT, TIME_SERIES).collect(Collectors.toSet())); + return List.of(newSet(ASSET, TIME_SERIES)); } @Override protected TimeSeriesMappingSource.MappingEntry buildModel(EntityData data) { - UUID participant = data.getUUID(PARTICIPANT); + UUID asset = data.getUUID(ASSET); UUID timeSeries = data.getUUID(TIME_SERIES); - return new TimeSeriesMappingSource.MappingEntry(participant, timeSeries); + return new TimeSeriesMappingSource.MappingEntry(asset, timeSeries); } } 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 75a1802c6..0c0a1d192 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/TimeSeriesMappingSource.java @@ -11,7 +11,6 @@ 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.models.input.system.SystemParticipantInput; import edu.ie3.datamodel.models.timeseries.TimeSeries; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; @@ -47,7 +46,7 @@ public Map getMapping() throws SourceException { .filter(Try::isSuccess) .map(t -> (Success) t) .map(Success::get) - .collect(Collectors.toMap(MappingEntry::participant, MappingEntry::timeSeries)); + .collect(Collectors.toMap(MappingEntry::getAsset, MappingEntry::getTimeSeries)); } /** @@ -80,12 +79,19 @@ private Try createMappingEntry( // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - /** Class to represent one entry within the participant to time series mapping */ - public record MappingEntry(UUID participant, UUID timeSeries) implements InputEntity { + /** Class to represent one entry within the asset to time series mapping */ + public static class MappingEntry implements InputEntity { + private final UUID asset; + private final UUID timeSeries; - /** Returns the {@link UUID} of the {@link SystemParticipantInput}. */ - public UUID getParticipant() { - return participant; + public MappingEntry(UUID asset, UUID timeSeries) { + this.asset = asset; + this.timeSeries = timeSeries; + } + + /** Returns the {@link UUID} of the {@link edu.ie3.datamodel.models.input.AssetInput}. */ + public UUID getAsset() { + return asset; } /** Returns the {@link UUID} of the {@link TimeSeries}. */ @@ -97,17 +103,17 @@ public UUID getTimeSeries() { public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof MappingEntry that)) return false; - return participant.equals(that.participant) && timeSeries.equals(that.timeSeries); + return asset.equals(that.asset) && timeSeries.equals(that.timeSeries); } @Override public int hashCode() { - return Objects.hash(participant, timeSeries); + return Objects.hash(asset, timeSeries); } @Override public String toString() { - return "MappingEntry{" + "participant=" + participant + ", timeSeries=" + timeSeries + '}'; + return "MappingEntry{" + "asset=" + asset + ", timeSeries=" + timeSeries + '}'; } } } 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 86be3c060..50f71c78c 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/UniquenessValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/UniquenessValidationUtils.java @@ -33,7 +33,7 @@ public class UniquenessValidationUtils extends ValidationUtils { protected static final FieldSetSupplier congestionResultFieldSupplier = entity -> Set.of(entity.getTime(), entity.getSubgrid()); protected static final FieldSetSupplier mappingFieldSupplier = - entity -> Set.of(entity.participant()); + entity -> Set.of(entity.getAsset()); protected static final FieldSetSupplier idCoordinateSupplier = entity -> Set.of(entity.id(), entity.point()); protected static final FieldSetSupplier> weatherValueFieldSupplier = 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 24b1a8198..0a421286b 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 @@ -630,7 +630,7 @@ class InputEntityProcessorTest extends Specification { def validResult = new TimeSeriesMappingSource.MappingEntry(UUID.fromString("7eb7b296-f4c4-4020-acf3-e865453b5dbd"), UUID.fromString("bc581c6c-3044-48a1-aea1-5b2cb1370356")) Map expectedResults = [ - "participant": "7eb7b296-f4c4-4020-acf3-e865453b5dbd", + "asset": "7eb7b296-f4c4-4020-acf3-e865453b5dbd", "timeSeries": "bc581c6c-3044-48a1-aea1-5b2cb1370356" ] diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSourceIT.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSourceIT.groovy index 91ff12295..2abcc918c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSourceIT.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesMappingSourceIT.groovy @@ -23,7 +23,8 @@ class CsvTimeSeriesMappingSourceIT extends Specification implements CsvTestDataM def expectedMapping = [ (UUID.fromString("b86e95b0-e579-4a80-a534-37c7a470a409")) : UUID.fromString("9185b8c1-86ba-4a16-8dea-5ac898e8caa5"), (UUID.fromString("c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8")) : UUID.fromString("3fbfaa97-cff4-46d4-95ba-a95665e87c26"), - (UUID.fromString("90a96daa-012b-4fea-82dc-24ba7a7ab81c")) : UUID.fromString("3fbfaa97-cff4-46d4-95ba-a95665e87c26") + (UUID.fromString("90a96daa-012b-4fea-82dc-24ba7a7ab81c")) : UUID.fromString("3fbfaa97-cff4-46d4-95ba-a95665e87c26"), + (UUID.fromString("7bed7760-c220-4fe6-88b3-47b246f6ef3f")) : UUID.fromString("eeccbe3c-a47e-448e-8eca-1f369d3c24e6") ] when: 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 d33502cb1..95b2f0472 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/validation/UniquenessValidationUtilsTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/validation/UniquenessValidationUtilsTest.groovy @@ -23,6 +23,7 @@ import edu.ie3.datamodel.models.value.SolarIrradianceValue import edu.ie3.datamodel.models.value.TemperatureValue import edu.ie3.datamodel.models.value.WeatherValue import edu.ie3.datamodel.models.value.WindValue +import edu.ie3.datamodel.utils.Try import edu.ie3.util.geo.GeoUtils import spock.lang.Specification import tech.units.indriya.quantity.Quantities @@ -183,29 +184,30 @@ class UniquenessValidationUtilsTest extends Specification { given: UUID participant = UUID.fromString("1f25eea2-20eb-4b6b-8f05-bdbb0e851e65") - Set uniqueEntries = [ + Set uniqueEntityEntries = [ new TimeSeriesMappingSource.MappingEntry(participant, UUID.randomUUID()), new TimeSeriesMappingSource.MappingEntry(participant, UUID.randomUUID()), ] when: - checkMappingEntryUniqueness(uniqueEntries) + def entityDuplicate = Try.ofVoid(() -> checkMappingEntryUniqueness(uniqueEntityEntries), DuplicateEntitiesException) then: - DuplicateEntitiesException de = thrown() - de.message == "'MappingEntry' entities with duplicated UUID key, but different field values found! " + - "Affected primary keys: [1f25eea2-20eb-4b6b-8f05-bdbb0e851e65]" + + entityDuplicate.failure + entityDuplicate.exception.get().message == "'MappingEntry' entities with duplicated UUID key, but different field values found! " + + "Affected primary keys: [1f25eea2-20eb-4b6b-8f05-bdbb0e851e65]" } def "Checking if time based weather values are unique"() { given: ZonedDateTime time = ZonedDateTime.now() WeatherValue value = new WeatherValue( - GeoUtils.buildPoint(50d, 7d), - new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE)), - new TemperatureValue(Quantities.getQuantity(5d, Units.CELSIUS)), - new WindValue(Quantities.getQuantity(5d, DEGREE_GEOM), Quantities.getQuantity(10d, METRE_PER_SECOND)) - ) + GeoUtils.buildPoint(50d, 7d), + new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE)), + new TemperatureValue(Quantities.getQuantity(5d, Units.CELSIUS)), + new WindValue(Quantities.getQuantity(5d, DEGREE_GEOM), Quantities.getQuantity(10d, METRE_PER_SECOND)) + ) Set> uniqueValues = [ new TimeBasedValue(time, value), @@ -223,11 +225,11 @@ class UniquenessValidationUtilsTest extends Specification { given: ZonedDateTime time = ZonedDateTime.now() WeatherValue value = new WeatherValue( - GeoUtils.buildPoint(50d, 7d), - new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE)), - new TemperatureValue(Quantities.getQuantity(5d, Units.CELSIUS)), - new WindValue(Quantities.getQuantity(5d, DEGREE_GEOM), Quantities.getQuantity(10d, METRE_PER_SECOND)) - ) + GeoUtils.buildPoint(50d, 7d), + new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE)), + new TemperatureValue(Quantities.getQuantity(5d, Units.CELSIUS)), + new WindValue(Quantities.getQuantity(5d, DEGREE_GEOM), Quantities.getQuantity(10d, METRE_PER_SECOND)) + ) Set> notUniqueValues = [ new TimeBasedValue(time, value), new TimeBasedValue(time, value) diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_timeseries/time_series_mapping.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_timeseries/time_series_mapping.csv index d0130d232..3fe2db3ed 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/csv/_timeseries/time_series_mapping.csv +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_timeseries/time_series_mapping.csv @@ -1,4 +1,5 @@ -"uuid";"participant";"time_series" -"58167015-d760-4f90-8109-f2ebd94cda91";"b86e95b0-e579-4a80-a534-37c7a470a409";"9185b8c1-86ba-4a16-8dea-5ac898e8caa5" -"9a9ebfda-dc26-4a40-b9ca-25cd42f6cc3f";"c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8";"3fbfaa97-cff4-46d4-95ba-a95665e87c26" -"9c1c53ea-e575-41a2-a373-a8b2d3ed2c39";"90a96daa-012b-4fea-82dc-24ba7a7ab81c";"3fbfaa97-cff4-46d4-95ba-a95665e87c26" \ No newline at end of file +"asset";"time_series" +"b86e95b0-e579-4a80-a534-37c7a470a409";"9185b8c1-86ba-4a16-8dea-5ac898e8caa5" +"c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8";"3fbfaa97-cff4-46d4-95ba-a95665e87c26" +"90a96daa-012b-4fea-82dc-24ba7a7ab81c";"3fbfaa97-cff4-46d4-95ba-a95665e87c26" +"7bed7760-c220-4fe6-88b3-47b246f6ef3f";"eeccbe3c-a47e-448e-8eca-1f369d3c24e6" \ No newline at end of file diff --git a/src/test/resources/edu/ie3/datamodel/io/source/sql/_timeseries/time_series_mapping.sql b/src/test/resources/edu/ie3/datamodel/io/source/sql/_timeseries/time_series_mapping.sql index b3921f442..80fddde76 100644 --- a/src/test/resources/edu/ie3/datamodel/io/source/sql/_timeseries/time_series_mapping.sql +++ b/src/test/resources/edu/ie3/datamodel/io/source/sql/_timeseries/time_series_mapping.sql @@ -1,15 +1,14 @@ CREATE TABLE public.time_series_mapping ( - uuid uuid PRIMARY KEY, - participant uuid, + asset uuid PRIMARY KEY, time_series uuid ) WITHOUT OIDS TABLESPACE pg_default; INSERT INTO - public.time_series_mapping (uuid, participant, time_series) + public.time_series_mapping (asset, time_series) VALUES -('58167015-d760-4f90-8109-f2ebd94cda91', 'b86e95b0-e579-4a80-a534-37c7a470a409', '9185b8c1-86ba-4a16-8dea-5ac898e8caa5'), -('9a9ebfda-dc26-4a40-b9ca-25cd42f6cc3f', 'c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8', '3fbfaa97-cff4-46d4-95ba-a95665e87c26'), -('9c1c53ea-e575-41a2-a373-a8b2d3ed2c39', '90a96daa-012b-4fea-82dc-24ba7a7ab81c', '3fbfaa97-cff4-46d4-95ba-a95665e87c26'); +('b86e95b0-e579-4a80-a534-37c7a470a409', '9185b8c1-86ba-4a16-8dea-5ac898e8caa5'), +('c7ebcc6c-55fc-479b-aa6b-6fa82ccac6b8', '3fbfaa97-cff4-46d4-95ba-a95665e87c26'), +('90a96daa-012b-4fea-82dc-24ba7a7ab81c', '3fbfaa97-cff4-46d4-95ba-a95665e87c26');