From a94716362d716fadc1e304284947b16715ce7400 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 1 Mar 2023 15:30:12 +0100 Subject: [PATCH 1/3] harmonize and simplify time pattern --- .../TimeBasedSimpleValueFactory.java | 2 +- .../ie3/datamodel/io/processor/Processor.java | 3 +- .../io/source/csv/CsvTimeSeriesSource.java | 31 ++++++++++++++++--- .../TimeBasedSimpleValueFactoryTest.groovy | 2 +- .../source/csv/CsvTimeSeriesSourceTest.groovy | 8 +++-- 5 files changed, 36 insertions(+), 10 deletions(-) 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..01ff81b82 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 @@ -30,7 +30,7 @@ public class TimeBasedSimpleValueFactory private final TimeUtil timeUtil; public TimeBasedSimpleValueFactory(Class valueClasses) { - this(valueClasses, "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'"); + this(valueClasses, TimeUtil.withDefaults.getDtfPattern()); } public TimeBasedSimpleValueFactory(Class valueClasses, String timePattern) { 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 36f197db6..463d5a0d9 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java @@ -17,6 +17,7 @@ import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicInput; import edu.ie3.datamodel.models.profile.LoadProfile; import edu.ie3.datamodel.models.voltagelevels.VoltageLevel; +import edu.ie3.util.TimeUtil; import java.beans.Introspector; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -396,7 +397,7 @@ protected String processOperationTime(OperationTime operationTime, String fieldN * @return string representation of the ZonedDateTime */ protected String processZonedDateTime(ZonedDateTime zonedDateTime) { - return zonedDateTime.toString(); + return TimeUtil.withDefaults.toString(zonedDateTime); } /** 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 f380bd11a..9fa58f6f2 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 @@ -14,10 +14,12 @@ import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.*; import edu.ie3.datamodel.utils.TimeSeriesUtils; +import edu.ie3.util.TimeUtil; import edu.ie3.util.interval.ClosedInterval; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; +import java.sql.Time; import java.time.ZonedDateTime; import java.util.*; import java.util.function.Function; @@ -88,11 +90,31 @@ private static CsvTimeSeriesSource create( * @throws SourceException If the given meta information are not supported * @return The source */ + public static CsvTimeSeriesSource getSource( + String csvSep, + String folderPath, + FileNamingStrategy fileNamingStrategy, + CsvIndividualTimeSeriesMetaInformation metaInformation) throws SourceException { + return getSource(csvSep, folderPath, fileNamingStrategy, metaInformation, TimeUtil.withDefaults.getDtfPattern()); + } + + /** + * Factory method to build a source from given meta information + * + * @param csvSep the separator string for csv columns + * @param folderPath path to the folder holding the time series files + * @param fileNamingStrategy strategy for the file naming of time series files / data sinks + * @param metaInformation The given meta information + * @param dtfPattern The date time format pattern for the time based value factory + * @throws SourceException If the given meta information are not supported + * @return The source + */ public static CsvTimeSeriesSource getSource( String csvSep, String folderPath, FileNamingStrategy fileNamingStrategy, - CsvIndividualTimeSeriesMetaInformation metaInformation) + CsvIndividualTimeSeriesMetaInformation metaInformation, + String dtfPattern) throws SourceException { if (!TimeSeriesUtils.isSchemeAccepted(metaInformation.getColumnScheme())) throw new SourceException( @@ -100,7 +122,7 @@ public static CsvTimeSeriesSource getSource( Class valClass = metaInformation.getColumnScheme().getValueClass(); - return create(csvSep, folderPath, fileNamingStrategy, metaInformation, valClass); + return create(csvSep, folderPath, fileNamingStrategy, metaInformation, valClass, dtfPattern); } private static CsvTimeSeriesSource create( @@ -108,8 +130,9 @@ private static CsvTimeSeriesSource create( String folderPath, FileNamingStrategy fileNamingStrategy, CsvIndividualTimeSeriesMetaInformation metaInformation, - Class valClass) { - TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass); + Class valClass, + String dtfPattern) { + TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass, dtfPattern); return new CsvTimeSeriesSource<>( csvSep, folderPath, 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 e05cd8989..5933ebfaf 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 @@ -29,7 +29,7 @@ class TimeBasedSimpleValueFactoryTest extends Specification { TimeUtil defaultTimeUtil def setupSpec() { - defaultTimeUtil = new TimeUtil(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'") + defaultTimeUtil = new TimeUtil(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd HH:mm:ss") } def "The simple time based value factory provides correct fields"() { 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 d2ef940e6..06c88fdb1 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 @@ -25,10 +25,11 @@ class CsvTimeSeriesSourceTest extends Specification implements CsvTestDataMeta { def "The csv time series source is able to build time based values from simple data"() { given: - def factory = new TimeBasedSimpleValueFactory(EnergyPriceValue) + def timePattern = "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'" + def factory = new TimeBasedSimpleValueFactory(EnergyPriceValue, timePattern) def source = new CsvTimeSeriesSource(";", timeSeriesFolderPath, new FileNamingStrategy(), UUID.fromString("2fcb3e53-b94a-4b96-bea4-c469e499f1a1"), "its_c_2fcb3e53-b94a-4b96-bea4-c469e499f1a1", EnergyPriceValue, factory) def time = TimeUtil.withDefaults.toZonedDateTime("2019-01-01 00:00:00") - def timeUtil = new TimeUtil(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'") + def timeUtil = new TimeUtil(ZoneId.of("UTC"), Locale.GERMANY, timePattern) def fieldToValue = [ "uuid" : "78ca078a-e6e9-4972-a58d-b2cadbc2df2c", "time" : timeUtil.toString(time), @@ -63,9 +64,10 @@ class CsvTimeSeriesSourceTest extends Specification implements CsvTestDataMeta { def "The factory method in csv time series source builds a time series source for all supported column types"() { given: def metaInformation = new CsvIndividualTimeSeriesMetaInformation(uuid, columnScheme, path) + def timePattern = "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'" when: - def actual = CsvTimeSeriesSource.getSource(";", timeSeriesFolderPath, fileNamingStrategy, metaInformation) + def actual = CsvTimeSeriesSource.getSource(";", timeSeriesFolderPath, fileNamingStrategy, metaInformation, timePattern) then: actual.timeSeries.entries.size() == amountOfEntries From 61a98ae1bf9ef2e148ba97d6aea210c4051d42da Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 28 Nov 2023 13:12:19 +0100 Subject: [PATCH 2/3] Spotless --- .../ie3/datamodel/io/processor/Processor.java | 2 +- .../io/source/csv/CsvTimeSeriesSource.java | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) 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 ccc623d13..bcb71f1a4 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/Processor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/Processor.java @@ -17,9 +17,9 @@ import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicInput; import edu.ie3.datamodel.models.profile.LoadProfile; import edu.ie3.datamodel.models.voltagelevels.VoltageLevel; -import edu.ie3.util.TimeUtil; import edu.ie3.datamodel.utils.Try; import edu.ie3.datamodel.utils.Try.*; +import edu.ie3.util.TimeUtil; import edu.ie3.util.exceptions.QuantityException; import java.beans.Introspector; import java.lang.reflect.InvocationTargetException; 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 72f5b7250..ebd582d6c 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 @@ -23,7 +23,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Path; -import java.sql.Time; import java.time.ZonedDateTime; import java.util.*; import java.util.function.Function; @@ -45,11 +44,17 @@ public class CsvTimeSeriesSource extends TimeSeriesSource { * @return The source */ public static CsvTimeSeriesSource getSource( - String csvSep, - String folderPath, - FileNamingStrategy fileNamingStrategy, - CsvIndividualTimeSeriesMetaInformation metaInformation) throws SourceException { - return getSource(csvSep, folderPath, fileNamingStrategy, metaInformation, TimeUtil.withDefaults.getDtfPattern()); + String csvSep, + String folderPath, + FileNamingStrategy fileNamingStrategy, + CsvIndividualTimeSeriesMetaInformation metaInformation) + throws SourceException { + return getSource( + csvSep, + folderPath, + fileNamingStrategy, + metaInformation, + TimeUtil.withDefaults.getDtfPattern()); } /** @@ -86,7 +91,8 @@ private static CsvTimeSeriesSource create( CsvIndividualTimeSeriesMetaInformation metaInformation, Class valClass, String dtfPattern) { - TimeBasedSimpleValueFactory valueFactory = new TimeBasedSimpleValueFactory<>(valClass, dtfPattern); + TimeBasedSimpleValueFactory valueFactory = + new TimeBasedSimpleValueFactory<>(valClass, dtfPattern); return new CsvTimeSeriesSource<>( csvSep, folderPath, From 0360bb6688ccbd0d5dc8d63dd4480034f59e29a0 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 28 Nov 2023 13:32:56 +0100 Subject: [PATCH 3/3] Use paths as arguments --- .../edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ebd582d6c..8181bf4db 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 @@ -45,7 +45,7 @@ public class CsvTimeSeriesSource extends TimeSeriesSource { */ public static CsvTimeSeriesSource getSource( String csvSep, - String folderPath, + Path folderPath, FileNamingStrategy fileNamingStrategy, CsvIndividualTimeSeriesMetaInformation metaInformation) throws SourceException {