-
Notifications
You must be signed in to change notification settings - Fork 5
/
TimeBasedSimpleValueFactory.java
112 lines (99 loc) · 4.41 KB
/
TimeBasedSimpleValueFactory.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
/*
* © 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.timeseries;
import static edu.ie3.datamodel.models.StandardUnits.*;
import edu.ie3.datamodel.exceptions.FactoryException;
import edu.ie3.datamodel.models.StandardUnits;
import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue;
import edu.ie3.datamodel.models.value.*;
import edu.ie3.util.TimeUtil;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;
public class TimeBasedSimpleValueFactory<V extends Value>
extends TimeBasedValueFactory<SimpleTimeBasedValueData<V>, V> {
private static final String UUID = "uuid";
private static final String TIME = "time";
/* Energy price */
private static final String PRICE = "price";
/* Energy / Power */
private static final String ACTIVE_POWER = "p";
private static final String REACTIVE_POWER = "q";
private static final String HEAT_DEMAND = "heatDemand";
private final TimeUtil timeUtil;
public TimeBasedSimpleValueFactory(Class<? extends V> valueClasses) {
this(valueClasses, "yyyy-MM-dd'T'HH:mm:ss[.S[S][S]]'Z'");
}
public TimeBasedSimpleValueFactory(Class<? extends V> valueClasses, String timePattern) {
super(valueClasses);
timeUtil = new TimeUtil(ZoneId.of("UTC"), Locale.GERMANY, timePattern);
}
/**
* Return the field name for the date time
*
* @return the field name for the date time
*/
public String getTimeFieldString() {
return TIME;
}
@Override
protected TimeBasedValue<V> buildModel(SimpleTimeBasedValueData<V> data) {
UUID uuid = data.getUUID(UUID);
ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME));
V value;
if (EnergyPriceValue.class.isAssignableFrom(data.getTargetClass())) {
value = (V) new EnergyPriceValue(data.getQuantity(PRICE, ENERGY_PRICE));
} else if (HeatAndSValue.class.isAssignableFrom(data.getTargetClass())) {
value =
(V)
new HeatAndSValue(
data.getQuantity(ACTIVE_POWER, ACTIVE_POWER_IN),
data.getQuantity(REACTIVE_POWER, REACTIVE_POWER_IN),
data.getQuantity(HEAT_DEMAND, StandardUnits.HEAT_DEMAND));
} else if (HeatAndPValue.class.isAssignableFrom(data.getTargetClass())) {
value =
(V)
new HeatAndPValue(
data.getQuantity(ACTIVE_POWER, ACTIVE_POWER_IN),
data.getQuantity(HEAT_DEMAND, StandardUnits.HEAT_DEMAND));
} else if (HeatDemandValue.class.isAssignableFrom(data.getTargetClass())) {
value = (V) new HeatDemandValue(data.getQuantity(HEAT_DEMAND, StandardUnits.HEAT_DEMAND));
} else if (SValue.class.isAssignableFrom(data.getTargetClass())) {
value =
(V)
new SValue(
data.getQuantity(ACTIVE_POWER, ACTIVE_POWER_IN),
data.getQuantity(REACTIVE_POWER, REACTIVE_POWER_IN));
} else if (PValue.class.isAssignableFrom(data.getTargetClass())) {
value = (V) new PValue(data.getQuantity(ACTIVE_POWER, ACTIVE_POWER_IN));
} else {
throw new FactoryException(
"The given factory cannot handle target class '" + data.getTargetClass() + "'.");
}
return new TimeBasedValue<>(uuid, time, value);
}
@Override
protected List<Set<String>> getFields(Class<?> entityClass) {
Set<String> minConstructorParams = newSet(UUID, TIME);
if (EnergyPriceValue.class.isAssignableFrom(entityClass)) {
minConstructorParams.add(PRICE);
} else if (HeatAndSValue.class.isAssignableFrom(entityClass)) {
minConstructorParams.addAll(Arrays.asList(ACTIVE_POWER, REACTIVE_POWER, HEAT_DEMAND));
} else if (HeatAndPValue.class.isAssignableFrom(entityClass)) {
minConstructorParams.addAll(Arrays.asList(ACTIVE_POWER, HEAT_DEMAND));
} else if (HeatDemandValue.class.isAssignableFrom(entityClass)) {
minConstructorParams.add(HEAT_DEMAND);
} else if (SValue.class.isAssignableFrom(entityClass)) {
minConstructorParams.addAll(Arrays.asList(ACTIVE_POWER, REACTIVE_POWER));
} else if (PValue.class.isAssignableFrom(entityClass)) {
minConstructorParams.add(ACTIVE_POWER);
} else {
throw new FactoryException(
"The given factory cannot handle target class '" + entityClass + "'.");
}
return Collections.singletonList(minConstructorParams);
}
}