-
Notifications
You must be signed in to change notification settings - Fork 5
/
CsvTypeSource.java
132 lines (126 loc) · 5.49 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* © 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.exceptions.FactoryException;
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 edu.ie3.datamodel.utils.options.Try;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 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 {
// factories
private final OperatorInputFactory operatorInputFactory;
private final Transformer2WTypeInputFactory transformer2WTypeInputFactory;
private final LineTypeInputFactory lineTypeInputFactory;
private final Transformer3WTypeInputFactory transformer3WTypeInputFactory;
private final SystemParticipantTypeInputFactory systemParticipantTypeInputFactory;
public CsvTypeSource(
String csvSep, String typeFolderPath, FileNamingStrategy fileNamingStrategy) {
super(csvSep, typeFolderPath, fileNamingStrategy);
// init factories
operatorInputFactory = new OperatorInputFactory();
transformer2WTypeInputFactory = new Transformer2WTypeInputFactory();
lineTypeInputFactory = new LineTypeInputFactory();
transformer3WTypeInputFactory = new Transformer3WTypeInputFactory();
systemParticipantTypeInputFactory = new SystemParticipantTypeInputFactory();
}
/** {@inheritDoc} */
@Override
public Set<Transformer2WTypeInput> getTransformer2WTypes() {
return buildSimpleEntities(Transformer2WTypeInput.class, transformer2WTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<OperatorInput> getOperators() {
return buildSimpleEntities(OperatorInput.class, operatorInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<LineTypeInput> getLineTypes() {
return buildSimpleEntities(LineTypeInput.class, lineTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<Transformer3WTypeInput> getTransformer3WTypes() {
return buildSimpleEntities(Transformer3WTypeInput.class, transformer3WTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<BmTypeInput> getBmTypes() {
return buildSimpleEntities(BmTypeInput.class, systemParticipantTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<ChpTypeInput> getChpTypes() {
return buildSimpleEntities(ChpTypeInput.class, systemParticipantTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<HpTypeInput> getHpTypes() {
return buildSimpleEntities(HpTypeInput.class, systemParticipantTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<StorageTypeInput> getStorageTypes() {
return buildSimpleEntities(StorageTypeInput.class, systemParticipantTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<WecTypeInput> getWecTypes() {
return buildSimpleEntities(WecTypeInput.class, systemParticipantTypeInputFactory);
}
/** {@inheritDoc} */
@Override
public Set<EvTypeInput> getEvTypes() {
return buildSimpleEntities(EvTypeInput.class, systemParticipantTypeInputFactory);
}
/**
* 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 (Try<T, FactoryException>) factory.get(data);
})
.map(Try::getOrThrowException)
.collect(Collectors.toSet());
}
}