-
Notifications
You must be signed in to change notification settings - Fork 5
/
ResultEntityProcessor.java
89 lines (83 loc) · 3.32 KB
/
ResultEntityProcessor.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
/*
* © 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.processor.result;
import edu.ie3.datamodel.io.factory.result.SystemParticipantResultFactory;
import edu.ie3.datamodel.io.processor.EntityProcessor;
import edu.ie3.datamodel.models.StandardUnits;
import edu.ie3.datamodel.models.result.NodeResult;
import edu.ie3.datamodel.models.result.ResultEntity;
import edu.ie3.datamodel.models.result.connector.LineResult;
import edu.ie3.datamodel.models.result.connector.SwitchResult;
import edu.ie3.datamodel.models.result.connector.Transformer2WResult;
import edu.ie3.datamodel.models.result.connector.Transformer3WResult;
import edu.ie3.datamodel.models.result.system.*;
import edu.ie3.datamodel.models.result.thermal.CylindricalStorageResult;
import edu.ie3.datamodel.models.result.thermal.ThermalHouseResult;
import java.util.*;
import javax.measure.Quantity;
import javax.measure.quantity.Energy;
import javax.measure.quantity.Power;
/**
* 'Serializer' for {@link ResultEntity}s into a fieldName to value representation to allow for an
* easy processing into a database or file sink e.g. .csv It is important that the units used in
* this class are equal to the units used {@link SystemParticipantResultFactory} to prevent invalid
* interpretation of unit prefixes!
*
* @version 0.1
* @since 31.01.20
*/
public class ResultEntityProcessor extends EntityProcessor<ResultEntity> {
/** The entities that can be used within this processor */
public static final List<Class<? extends ResultEntity>> eligibleEntityClasses =
List.of(
LoadResult.class,
FixedFeedInResult.class,
BmResult.class,
PvResult.class,
ChpResult.class,
WecResult.class,
StorageResult.class,
EvcsResult.class,
EvResult.class,
HpResult.class,
Transformer2WResult.class,
Transformer3WResult.class,
LineResult.class,
SwitchResult.class,
NodeResult.class,
ThermalHouseResult.class,
CylindricalStorageResult.class,
EmResult.class,
FlexOptionsResult.class);
public ResultEntityProcessor(Class<? extends ResultEntity> registeredClass) {
super(registeredClass);
}
@Override
protected Optional<String> handleProcessorSpecificQuantity(
Quantity<?> quantity, String fieldName) {
return switch (fieldName) {
case "energy", "eConsAnnual", "eStorage":
yield quantityValToOptionalString(
quantity.asType(Energy.class).to(StandardUnits.ENERGY_RESULT));
case "q":
yield quantityValToOptionalString(
quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_RESULT));
case "p", "pMax", "pOwn", "pThermal", "pRef", "pMin":
yield quantityValToOptionalString(
quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_RESULT));
default:
log.error(
"Cannot process quantity with value '{}' for field with name {} in result entity processing!",
quantity,
fieldName);
yield Optional.empty();
};
}
@Override
protected List<Class<? extends ResultEntity>> getEligibleEntityClasses() {
return eligibleEntityClasses;
}
}