Skip to content

Use default time pattern for ZDT persistence #767

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class TimeBasedSimpleValueFactory<V extends Value>
private final TimeUtil timeUtil;

public TimeBasedSimpleValueFactory(Class<? extends V> valueClasses) {
this(valueClasses, "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'");
this(valueClasses, TimeUtil.withDefaults.getDtfPattern());
}

public TimeBasedSimpleValueFactory(Class<? extends V> valueClasses, String timePattern) {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/edu/ie3/datamodel/io/processor/Processor.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import edu.ie3.datamodel.models.voltagelevels.VoltageLevel;
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;
Expand Down Expand Up @@ -411,7 +412,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);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import edu.ie3.datamodel.models.value.*;
import edu.ie3.datamodel.utils.TimeSeriesUtils;
import edu.ie3.datamodel.utils.Try;
import edu.ie3.util.TimeUtil;
import edu.ie3.util.interval.ClosedInterval;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
Expand Down Expand Up @@ -48,22 +49,50 @@ public static CsvTimeSeriesSource<? extends Value> getSource(
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<? extends Value> getSource(
String csvSep,
Path folderPath,
FileNamingStrategy fileNamingStrategy,
CsvIndividualTimeSeriesMetaInformation metaInformation,
String dtfPattern)
throws SourceException {
if (!TimeSeriesUtils.isSchemeAccepted(metaInformation.getColumnScheme()))
throw new SourceException(
"Unsupported column scheme '" + metaInformation.getColumnScheme() + "'.");

Class<? extends Value> valClass = metaInformation.getColumnScheme().getValueClass();

return create(csvSep, folderPath, fileNamingStrategy, metaInformation, valClass);
return create(csvSep, folderPath, fileNamingStrategy, metaInformation, valClass, dtfPattern);
}

private static <T extends Value> CsvTimeSeriesSource<T> create(
String csvSep,
Path folderPath,
FileNamingStrategy fileNamingStrategy,
CsvIndividualTimeSeriesMetaInformation metaInformation,
Class<T> valClass) {
TimeBasedSimpleValueFactory<T> valueFactory = new TimeBasedSimpleValueFactory<>(valClass);
Class<T> valClass,
String dtfPattern) {
TimeBasedSimpleValueFactory<T> valueFactory =
new TimeBasedSimpleValueFactory<>(valClass, dtfPattern);
return new CsvTimeSeriesSource<>(
csvSep,
folderPath,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,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"() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,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"), Path.of("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),
Expand Down Expand Up @@ -65,9 +66,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
Expand Down