-
Notifications
You must be signed in to change notification settings - Fork 5
/
SystemParticipantResultFactory.java
132 lines (116 loc) · 4.99 KB
/
SystemParticipantResultFactory.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.factory.result;
import static tech.units.indriya.unit.Units.PERCENT;
import edu.ie3.datamodel.exceptions.FactoryException;
import edu.ie3.datamodel.io.factory.EntityData;
import edu.ie3.datamodel.models.Entity;
import edu.ie3.datamodel.models.StandardUnits;
import edu.ie3.datamodel.models.result.system.*;
import java.time.ZonedDateTime;
import java.util.*;
import javax.measure.quantity.Dimensionless;
import javax.measure.quantity.Power;
import tech.units.indriya.ComparableQuantity;
/**
* Factory class for creating {@link SystemParticipantResult} entities from provided {@link
* EntityData} data objects.
*/
public class SystemParticipantResultFactory extends ResultEntityFactory<SystemParticipantResult> {
private static final String POWER = "p";
private static final String REACTIVE_POWER = "q";
private static final String SOC = "soc";
private static final String Q_DOT = "qDot";
public SystemParticipantResultFactory() {
super(
LoadResult.class,
FixedFeedInResult.class,
BmResult.class,
PvResult.class,
ChpResult.class,
WecResult.class,
StorageResult.class,
EvcsResult.class,
EvResult.class,
HpResult.class,
EmResult.class);
}
/**
* Create a new factory to build {@link SystemParticipantResult}s and utilize the given date time
* formatter pattern to parse date time strings
*
* @param dtfPattern Pattern to parse date time strings
*/
public SystemParticipantResultFactory(String dtfPattern) {
super(
dtfPattern,
LoadResult.class,
FixedFeedInResult.class,
BmResult.class,
PvResult.class,
ChpResult.class,
WecResult.class,
StorageResult.class,
EvcsResult.class,
EvResult.class,
HpResult.class,
EmResult.class);
}
@Override
protected List<Set<String>> getFields(Class<?> entityClass) {
/// all result models have the same constructor except StorageResult
Set<String> minConstructorParams = newSet(TIME, INPUT_MODEL, POWER, REACTIVE_POWER);
if (entityClass.equals(StorageResult.class) || entityClass.equals(EvResult.class)) {
minConstructorParams = newSet(TIME, INPUT_MODEL, POWER, REACTIVE_POWER, SOC);
}
if (SystemParticipantWithHeatResult.class.isAssignableFrom(entityClass)) {
minConstructorParams = expandSet(minConstructorParams, Q_DOT);
}
return List.of(minConstructorParams);
}
@Override
protected SystemParticipantResult buildModel(EntityData data) {
Class<? extends Entity> entityClass = data.getTargetClass();
ZonedDateTime zdtTime = timeUtil.toZonedDateTime(data.getField(TIME));
UUID inputModelUuid = data.getUUID(INPUT_MODEL);
ComparableQuantity<Power> p = data.getQuantity(POWER, StandardUnits.ACTIVE_POWER_RESULT);
ComparableQuantity<Power> q =
data.getQuantity(REACTIVE_POWER, StandardUnits.REACTIVE_POWER_RESULT);
if (entityClass.equals(LoadResult.class)) {
return new LoadResult(zdtTime, inputModelUuid, p, q);
} else if (entityClass.equals(FixedFeedInResult.class)) {
return new FixedFeedInResult(zdtTime, inputModelUuid, p, q);
} else if (entityClass.equals(BmResult.class)) {
return new BmResult(zdtTime, inputModelUuid, p, q);
} else if (entityClass.equals(PvResult.class)) {
return new PvResult(zdtTime, inputModelUuid, p, q);
} else if (entityClass.equals(EvcsResult.class)) {
return new EvcsResult(zdtTime, inputModelUuid, p, q);
} else if (entityClass.equals(EmResult.class)) {
return new EmResult(zdtTime, inputModelUuid, p, q);
} else if (SystemParticipantWithHeatResult.class.isAssignableFrom(entityClass)) {
/* The following classes all have a heat component as well */
ComparableQuantity<Power> qDot = data.getQuantity(Q_DOT, StandardUnits.Q_DOT_RESULT);
if (entityClass.equals(ChpResult.class)) {
return new ChpResult(zdtTime, inputModelUuid, p, q, qDot);
} else if (entityClass.equals(HpResult.class)) {
return new HpResult(zdtTime, inputModelUuid, p, q, qDot);
} else {
throw new FactoryException("Cannot process " + entityClass.getSimpleName() + ".class.");
}
} else if (entityClass.equals(WecResult.class)) {
return new WecResult(zdtTime, inputModelUuid, p, q);
} else if (entityClass.equals(EvResult.class)) {
ComparableQuantity<Dimensionless> socQuantity = data.getQuantity(SOC, PERCENT);
return new EvResult(zdtTime, inputModelUuid, p, q, socQuantity);
} else if (entityClass.equals(StorageResult.class)) {
ComparableQuantity<Dimensionless> socQuantity = data.getQuantity(SOC, PERCENT);
return new StorageResult(zdtTime, inputModelUuid, p, q, socQuantity);
} else {
throw new FactoryException("Cannot process " + entityClass.getSimpleName() + ".class.");
}
}
}