-
Notifications
You must be signed in to change notification settings - Fork 5
/
CsvTypeSource.java
77 lines (70 loc) · 3.24 KB
/
CsvTypeSource.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* © 2021. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/
package edu.ie3.datamodel.io.source.csv;
import edu.ie3.datamodel.io.factory.EntityFactory;
import edu.ie3.datamodel.io.factory.SimpleEntityData;
import edu.ie3.datamodel.io.factory.input.OperatorInputFactory;
import edu.ie3.datamodel.io.factory.typeinput.LineTypeInputFactory;
import edu.ie3.datamodel.io.factory.typeinput.SystemParticipantTypeInputFactory;
import edu.ie3.datamodel.io.factory.typeinput.Transformer2WTypeInputFactory;
import edu.ie3.datamodel.io.factory.typeinput.Transformer3WTypeInputFactory;
import edu.ie3.datamodel.io.naming.FileNamingStrategy;
import edu.ie3.datamodel.io.source.TypeSource;
import edu.ie3.datamodel.models.input.InputEntity;
import edu.ie3.datamodel.models.input.OperatorInput;
import edu.ie3.datamodel.models.input.connector.type.LineTypeInput;
import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput;
import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput;
import edu.ie3.datamodel.models.input.system.type.*;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Source that provides the capability to build entities of type {@link SystemParticipantTypeInput}
* and {@link OperatorInput} from .csv files
*
* @version 0.1
* @since 05.04.20
*/
public class CsvTypeSource extends CsvDataSource implements TypeSource {
public CsvTypeSource(
String csvSep, String typeFolderPath, FileNamingStrategy fileNamingStrategy) {
super(csvSep, typeFolderPath, fileNamingStrategy);
}
/**
* Tries to build a set of {@link InputEntity}s of the provided entity class based on the provided
* factory. To do so, first entity data of type {@link SimpleEntityData} is constructed based on
* the input .csv file that can be derived from the entity class. This data is than passed to the
* factory and used to build the corresponding entities.
*
* <p>Be careful, that always a factory that is able to produce an entity of type <T> is passed
* into as argument. Otherwise, a casting exception will be thrown.
*
* @param entityClass the concrete class of the {@link InputEntity} that should be built
* @param factory the entity factory that should be used
* @param <T> the type of the resulting entity
* @return a set containing all entities that could have been built or an empty set if no entity
* could been built
*/
private <T extends InputEntity> Set<T> buildSimpleEntities(
Class<T> entityClass,
EntityFactory<? extends InputEntity, SimpleEntityData> factory
) {
return buildStreamWithFieldsToAttributesMap(entityClass, connector)
.map(
fieldsToAttributes -> {
SimpleEntityData data = new SimpleEntityData(fieldsToAttributes, entityClass);
return (Optional<T>) factory.get(data);
})
.flatMap(Optional::stream)
.collect(Collectors.toSet());
}
public <T extends InputEntity> Stream<Map<String, String>> getSourceData(Class<T> entityClass) {
return buildStreamWithFieldsToAttributesMap(entityClass, connector);
}
}