Skip to content

Commit f3b42ee

Browse files
sebastian-peterjohanneshiryt-ober
authored
Introducing SqlIndividualTimeSeriesMetaInformation & refactorings 2.0 (#524)
* proper refactoring for #513 w/o breaking external interfaces (no tests yet!) * More deprecations, adapting tests, adding to changelog * Fixing test * Specified arguments of deprecation tags * Small improvement * SqlIndividualTimeSeriesMetaInformation * Addressing reviewers comments, providing richer deprecation messages Co-authored-by: Johannes Hiry <johannes.hiry@tu-dortmund.de> Co-authored-by: t-ober <63147366+t-ober@users.noreply.github.com>
1 parent a21d301 commit f3b42ee

29 files changed

+765
-124
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
### Added
1010
- SQL time series sources (`SqlTimeSeriesSource` and `SqlTimeSeriesMappingSource`) [#467](https://github.com/ie3-institute/PowerSystemDataModel/issues/467)
1111
- Graph with impedance weighted edges including facilities to create it [#440](https://github.com/ie3-institute/PowerSystemDataModel/issues/440)
12+
- Introducing `SqlIndividualTimeSeriesMetaInformation` which provides sql table names [#513](https://github.com/ie3-institute/PowerSystemDataModel/issues/513)
1213

1314
### Fixed
1415
- Reduced code smells [#492](https://github.com/ie3-institute/PowerSystemDataModel/issues/492)
@@ -26,6 +27,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2627
### Changed
2728
- BREAKING: Transformer's no load susceptance needs to be zero or negative to pass model validation [#378](https://github.com/ie3-institute/PowerSystemDataModel/issues/378)
2829
- All input data sets for version < 3.0.0 need to be altered!
30+
- Deprecating (as part of [#513](https://github.com/ie3-institute/PowerSystemDataModel/issues/513)):
31+
- `edu.ie3.datamodel.io.csv.timeseries.ColumnScheme`
32+
- `edu.ie3.datamodel.io.csv.FileNameMetaInformation`
33+
- `edu.ie3.datamodel.io.csv.timeseries.IndividualTimeSeriesMetaInformation`
34+
- `edu.ie3.datamodel.io.csv.timeseries.LoadProfileTimeSeriesMetaInformation`
35+
- `edu.ie3.datamodel.io.connectors.CsvFileConnector.CsvIndividualTimeSeriesMetaInformation`
36+
- and related methods
2937

3038
## [2.1.0] - 2022-01-05
3139

src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
import edu.ie3.datamodel.exceptions.ConnectorException;
99
import edu.ie3.datamodel.io.IoUtil;
1010
import edu.ie3.datamodel.io.csv.*;
11-
import edu.ie3.datamodel.io.csv.timeseries.ColumnScheme;
12-
import edu.ie3.datamodel.io.csv.timeseries.IndividualTimeSeriesMetaInformation;
1311
import edu.ie3.datamodel.io.naming.FileNamingStrategy;
12+
import edu.ie3.datamodel.io.naming.TimeSeriesMetaInformation;
13+
import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme;
14+
import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation;
1415
import edu.ie3.datamodel.models.UniqueEntity;
1516
import edu.ie3.datamodel.models.timeseries.TimeSeries;
1617
import edu.ie3.datamodel.models.timeseries.TimeSeriesEntry;
@@ -41,7 +42,8 @@ public class CsvFileConnector implements DataConnector {
4142
new HashMap<>();
4243
private final Map<UUID, BufferedCsvWriter> timeSeriesWriters = new HashMap<>();
4344
// ATTENTION: Do not finalize. It's meant for lazy evaluation.
44-
private Map<UUID, CsvIndividualTimeSeriesMetaInformation> individualTimeSeriesMetaInformation;
45+
private Map<UUID, edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation>
46+
individualTimeSeriesMetaInformation;
4547
private final FileNamingStrategy fileNamingStrategy;
4648
private final String baseDirectoryName;
4749

@@ -219,8 +221,25 @@ public BufferedReader initReader(String filePath) throws FileNotFoundException {
219221
*
220222
* @param timeSeriesUuid The time series in question
221223
* @return An option on the queried information
224+
* @deprecated since 3.0. Use {@link #individualTimeSeriesMetaInformation(UUID)} instead
222225
*/
223-
public Optional<IndividualTimeSeriesMetaInformation> getIndividualTimeSeriesMetaInformation(
226+
@Deprecated(since = "3.0", forRemoval = true)
227+
public Optional<edu.ie3.datamodel.io.csv.timeseries.IndividualTimeSeriesMetaInformation>
228+
getIndividualTimeSeriesMetaInformation(UUID timeSeriesUuid) {
229+
return individualTimeSeriesMetaInformation(timeSeriesUuid)
230+
.map(edu.ie3.datamodel.io.csv.timeseries.IndividualTimeSeriesMetaInformation::new);
231+
}
232+
233+
/**
234+
* Get time series meta information for a given uuid.
235+
*
236+
* <p>This method lazily evaluates the mapping from <i>all</i> time series files to their meta
237+
* information.
238+
*
239+
* @param timeSeriesUuid The time series in question
240+
* @return An option on the queried information
241+
*/
242+
public Optional<IndividualTimeSeriesMetaInformation> individualTimeSeriesMetaInformation(
224243
UUID timeSeriesUuid) {
225244
if (Objects.isNull(individualTimeSeriesMetaInformation))
226245
individualTimeSeriesMetaInformation = buildIndividualTimeSeriesMetaInformation();
@@ -233,7 +252,7 @@ public Optional<IndividualTimeSeriesMetaInformation> getIndividualTimeSeriesMeta
233252
*
234253
* @return Mapping from time series uuid to it's meta information.
235254
*/
236-
private Map<UUID, CsvIndividualTimeSeriesMetaInformation>
255+
private Map<UUID, edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation>
237256
buildIndividualTimeSeriesMetaInformation() {
238257
return getIndividualTimeSeriesFilePaths().parallelStream()
239258
.map(
@@ -242,11 +261,11 @@ public Optional<IndividualTimeSeriesMetaInformation> getIndividualTimeSeriesMeta
242261
String filePathWithoutEnding = removeFileEnding(filePath);
243262
IndividualTimeSeriesMetaInformation metaInformation =
244263
(IndividualTimeSeriesMetaInformation)
245-
fileNamingStrategy.extractTimeSeriesMetaInformation(filePathWithoutEnding);
246-
return new CsvIndividualTimeSeriesMetaInformation(
264+
fileNamingStrategy.timeSeriesMetaInformation(filePathWithoutEnding);
265+
return new edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation(
247266
metaInformation, filePathWithoutEnding);
248267
})
249-
.collect(Collectors.toMap(FileNameMetaInformation::getUuid, v -> v));
268+
.collect(Collectors.toMap(TimeSeriesMetaInformation::getUuid, v -> v));
250269
}
251270

252271
/**
@@ -257,7 +276,7 @@ public Optional<IndividualTimeSeriesMetaInformation> getIndividualTimeSeriesMeta
257276
* possible readers will be initialized.
258277
* @return A mapping from column scheme to the individual time series meta information
259278
*/
260-
public Map<ColumnScheme, Set<CsvIndividualTimeSeriesMetaInformation>>
279+
public Map<ColumnScheme, Set<edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation>>
261280
getCsvIndividualTimeSeriesMetaInformation(ColumnScheme... columnSchemes) {
262281
return getIndividualTimeSeriesFilePaths().parallelStream()
263282
.map(
@@ -269,7 +288,8 @@ public Optional<IndividualTimeSeriesMetaInformation> getIndividualTimeSeriesMeta
269288
.map(Optional::get)
270289
.collect(
271290
Collectors.groupingBy(
272-
CsvIndividualTimeSeriesMetaInformation::getColumnScheme, Collectors.toSet()));
291+
edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation::getColumnScheme,
292+
Collectors.toSet()));
273293
}
274294

275295
/**
@@ -322,11 +342,11 @@ private Set<String> getIndividualTimeSeriesFilePaths() {
322342
* allowed.
323343
* @return An {@link Optional} to {@link IndividualTimeSeriesMetaInformation}
324344
*/
325-
private Optional<CsvIndividualTimeSeriesMetaInformation> buildCsvTimeSeriesMetaInformation(
326-
String filePathString, ColumnScheme... columnSchemes) {
345+
private Optional<edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation>
346+
buildCsvTimeSeriesMetaInformation(String filePathString, ColumnScheme... columnSchemes) {
327347
try {
328-
FileNameMetaInformation metaInformation =
329-
fileNamingStrategy.extractTimeSeriesMetaInformation(filePathString);
348+
TimeSeriesMetaInformation metaInformation =
349+
fileNamingStrategy.timeSeriesMetaInformation(filePathString);
330350
if (!IndividualTimeSeriesMetaInformation.class.isAssignableFrom(metaInformation.getClass())) {
331351
log.error(
332352
"The time series file '{}' does not represent an individual time series.",
@@ -350,7 +370,7 @@ private Optional<CsvIndividualTimeSeriesMetaInformation> buildCsvTimeSeriesMetaI
350370
return Optional.empty();
351371
}
352372
return Optional.of(
353-
new CsvIndividualTimeSeriesMetaInformation(
373+
new edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation(
354374
individualMetaInformation.getUuid(),
355375
individualMetaInformation.getColumnScheme(),
356376
filePathString));
@@ -433,19 +453,28 @@ public void shutdown() {
433453
});
434454
}
435455

436-
/** Enhancing the {@link IndividualTimeSeriesMetaInformation} with the full path to csv file */
456+
/**
457+
* Enhancing the {@link IndividualTimeSeriesMetaInformation} with the full path to csv file
458+
*
459+
* @deprecated since 3.0. Use {@link
460+
* edu.ie3.datamodel.io.csv.CsvIndividualTimeSeriesMetaInformation} instead
461+
*/
462+
@Deprecated(since = "3.0", forRemoval = true)
437463
public static class CsvIndividualTimeSeriesMetaInformation
438-
extends IndividualTimeSeriesMetaInformation {
464+
extends edu.ie3.datamodel.io.csv.timeseries.IndividualTimeSeriesMetaInformation {
439465
private final String fullFilePath;
440466

441467
public CsvIndividualTimeSeriesMetaInformation(
442-
UUID uuid, ColumnScheme columnScheme, String fullFilePath) {
468+
UUID uuid,
469+
edu.ie3.datamodel.io.csv.timeseries.ColumnScheme columnScheme,
470+
String fullFilePath) {
443471
super(uuid, columnScheme);
444472
this.fullFilePath = fullFilePath;
445473
}
446474

447475
public CsvIndividualTimeSeriesMetaInformation(
448-
IndividualTimeSeriesMetaInformation metaInformation, String fullFilePath) {
476+
edu.ie3.datamodel.io.csv.timeseries.IndividualTimeSeriesMetaInformation metaInformation,
477+
String fullFilePath) {
449478
this(metaInformation.getUuid(), metaInformation.getColumnScheme(), fullFilePath);
450479
}
451480

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* © 2022. TU Dortmund University,
3+
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
4+
* Research group Distribution grid planning and operation
5+
*/
6+
package edu.ie3.datamodel.io.csv;
7+
8+
import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme;
9+
import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation;
10+
import java.util.Objects;
11+
import java.util.UUID;
12+
13+
/** Enhancing the {@link IndividualTimeSeriesMetaInformation} with the full path to csv file */
14+
public class CsvIndividualTimeSeriesMetaInformation extends IndividualTimeSeriesMetaInformation {
15+
private final String fullFilePath;
16+
17+
public CsvIndividualTimeSeriesMetaInformation(
18+
UUID uuid, ColumnScheme columnScheme, String fullFilePath) {
19+
super(uuid, columnScheme);
20+
this.fullFilePath = fullFilePath;
21+
}
22+
23+
public CsvIndividualTimeSeriesMetaInformation(
24+
IndividualTimeSeriesMetaInformation metaInformation, String fullFilePath) {
25+
this(metaInformation.getUuid(), metaInformation.getColumnScheme(), fullFilePath);
26+
}
27+
28+
public String getFullFilePath() {
29+
return fullFilePath;
30+
}
31+
32+
@Override
33+
public boolean equals(Object o) {
34+
if (this == o) return true;
35+
if (!(o instanceof CsvIndividualTimeSeriesMetaInformation that)) return false;
36+
if (!super.equals(o)) return false;
37+
return fullFilePath.equals(that.fullFilePath);
38+
}
39+
40+
@Override
41+
public int hashCode() {
42+
return Objects.hash(super.hashCode(), fullFilePath);
43+
}
44+
45+
@Override
46+
public String toString() {
47+
return "CsvIndividualTimeSeriesMetaInformation{"
48+
+ "uuid="
49+
+ getUuid()
50+
+ ", columnScheme="
51+
+ getColumnScheme()
52+
+ ", fullFilePath='"
53+
+ fullFilePath
54+
+ '\''
55+
+ '}';
56+
}
57+
}

src/main/java/edu/ie3/datamodel/io/csv/FileNameMetaInformation.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
import java.util.Objects;
99
import java.util.UUID;
1010

11-
/** Meta information, that can be derived from a certain file name */
11+
/**
12+
* Meta information, that can be derived from a certain file name
13+
*
14+
* @deprecated since 3.0. Use {@link edu.ie3.datamodel.io.naming.TimeSeriesMetaInformation} instead
15+
*/
16+
@Deprecated(since = "3.0", forRemoval = true)
1217
public abstract class FileNameMetaInformation {
1318
private final UUID uuid;
1419

src/main/java/edu/ie3/datamodel/io/csv/timeseries/ColumnScheme.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
import java.util.Objects;
1212
import java.util.Optional;
1313

14-
/** Yet supported column schemes in individual time series */
14+
/**
15+
* Yet supported column schemes in individual time series
16+
*
17+
* @deprecated since 3.0. Use {@link edu.ie3.datamodel.io.naming.timeseries.ColumnScheme} instead
18+
*/
19+
@Deprecated(since = "3.0", forRemoval = true)
1520
public enum ColumnScheme {
1621
ENERGY_PRICE("c", EnergyPriceValue.class),
1722
ACTIVE_POWER("p", PValue.class),
@@ -24,6 +29,7 @@ public enum ColumnScheme {
2429
private final String scheme;
2530
private final Class<? extends Value> valueClass;
2631

32+
@Deprecated
2733
ColumnScheme(String scheme, Class<? extends Value> valueClass) {
2834
this.scheme = scheme;
2935
this.valueClass = valueClass;

src/main/java/edu/ie3/datamodel/io/csv/timeseries/IndividualTimeSeriesMetaInformation.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99
import java.util.Objects;
1010
import java.util.UUID;
1111

12-
/** Specific meta information, that can be derived from a individual time series file */
12+
/**
13+
* Specific meta information, that can be derived from a individual time series file
14+
*
15+
* @deprecated since 3.0. Use {@link
16+
* edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation} instead
17+
*/
18+
@Deprecated(since = "3.0", forRemoval = true)
1319
public class IndividualTimeSeriesMetaInformation extends FileNameMetaInformation {
1420
private final ColumnScheme columnScheme;
1521

@@ -18,6 +24,20 @@ public IndividualTimeSeriesMetaInformation(UUID uuid, ColumnScheme columnScheme)
1824
this.columnScheme = columnScheme;
1925
}
2026

27+
public IndividualTimeSeriesMetaInformation(
28+
edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation
29+
newMetaInformation) {
30+
super(newMetaInformation.getUuid());
31+
this.columnScheme =
32+
ColumnScheme.parse(newMetaInformation.getColumnScheme().toString())
33+
.orElseThrow(
34+
() ->
35+
new RuntimeException(
36+
"Cannot convert new column scheme "
37+
+ newMetaInformation.getColumnScheme().getScheme()
38+
+ " to deprecated column scheme!"));
39+
}
40+
2141
public ColumnScheme getColumnScheme() {
2242
return columnScheme;
2343
}

src/main/java/edu/ie3/datamodel/io/csv/timeseries/LoadProfileTimeSeriesMetaInformation.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99
import java.util.Objects;
1010
import java.util.UUID;
1111

12-
/** Specific meta information, that can be derived from a load profile time series file */
12+
/**
13+
* Specific meta information, that can be derived from a load profile time series file
14+
*
15+
* @deprecated since 3.0. Use {@link
16+
* edu.ie3.datamodel.io.naming.timeseries.LoadProfileTimeSeriesMetaInformation} instead
17+
*/
18+
@Deprecated(since = "3.0", forRemoval = true)
1319
public class LoadProfileTimeSeriesMetaInformation extends FileNameMetaInformation {
1420
private final String profile;
1521

@@ -18,6 +24,12 @@ public LoadProfileTimeSeriesMetaInformation(UUID uuid, String profile) {
1824
this.profile = profile;
1925
}
2026

27+
public LoadProfileTimeSeriesMetaInformation(
28+
edu.ie3.datamodel.io.naming.timeseries.LoadProfileTimeSeriesMetaInformation metaInformation) {
29+
super(metaInformation.getUuid());
30+
this.profile = metaInformation.getProfile();
31+
}
32+
2133
public String getProfile() {
2234
return profile;
2335
}

0 commit comments

Comments
 (0)