Skip to content

Commit 99312f7

Browse files
committed
Implementing reviewer's requests.
1 parent f88d124 commit 99312f7

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,22 @@ public <Q extends Quantity<Q>> ComparableQuantity<Q> getQuantity(String field, U
7878
return Quantities.getQuantity(getDouble(field), unit);
7979
}
8080

81+
/**
82+
* Returns field value for given field name, or empty Optional if field does not exist.
83+
*
84+
* @param field field name
85+
* @param unit unit of Quantity
86+
* @param <Q> unit type parameter
87+
* @return field value
88+
*/
89+
public <Q extends Quantity<Q>> Optional<ComparableQuantity<Q>> getQuantityOptional(
90+
String field, Unit<Q> unit) {
91+
return Optional.ofNullable(fieldsToAttributes.get(field))
92+
.filter(str -> !str.isEmpty())
93+
.map(Double::parseDouble)
94+
.map(value -> Quantities.getQuantity(value, unit));
95+
}
96+
8197
/**
8298
* Returns int value for given field name. Throws {@link FactoryException} if field does not exist
8399
* or parsing fails.

src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,9 @@
1111
import edu.ie3.datamodel.models.StandardUnits;
1212
import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue;
1313
import edu.ie3.datamodel.models.value.*;
14-
import edu.ie3.datamodel.utils.Try;
1514
import java.time.ZonedDateTime;
1615
import java.time.format.DateTimeFormatter;
1716
import java.util.*;
18-
import javax.measure.quantity.Angle;
19-
import tech.units.indriya.ComparableQuantity;
2017

2118
public class TimeBasedSimpleValueFactory<V extends Value>
2219
extends TimeBasedValueFactory<SimpleTimeBasedValueData<V>, V> {
@@ -42,6 +39,7 @@ public TimeBasedSimpleValueFactory(
4239
}
4340

4441
@Override
42+
@SuppressWarnings("unchecked")
4543
protected TimeBasedValue<V> buildModel(SimpleTimeBasedValueData<V> data) {
4644
ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME));
4745
V value;
@@ -72,10 +70,11 @@ protected TimeBasedValue<V> buildModel(SimpleTimeBasedValueData<V> data) {
7270
} else if (PValue.class.isAssignableFrom(data.getTargetClass())) {
7371
value = (V) new PValue(data.getQuantity(ACTIVE_POWER, ACTIVE_POWER_IN));
7472
} else if (VoltageValue.class.isAssignableFrom(data.getTargetClass())) {
75-
Optional<ComparableQuantity<Angle>> angleOption =
76-
Try.of(() -> data.getQuantity(VANG, VOLTAGE_ANGLE), FactoryException.class).getData();
77-
78-
value = (V) new VoltageValue(data.getQuantity(VMAG, VOLTAGE_MAGNITUDE), angleOption);
73+
value =
74+
(V)
75+
new VoltageValue(
76+
data.getQuantity(VMAG, VOLTAGE_MAGNITUDE),
77+
data.getQuantityOptional(VANG, VOLTAGE_ANGLE));
7978
} else {
8079
throw new FactoryException(
8180
"The given factory cannot handle target class '" + data.getTargetClass() + "'.");

src/test/groovy/edu/ie3/datamodel/models/value/VoltageValueTest.groovy

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,22 @@ package edu.ie3.datamodel.models.value
88
import static edu.ie3.util.quantities.PowerSystemUnits.*
99

1010
import edu.ie3.util.quantities.QuantityUtil
11+
import spock.lang.Shared
1112
import spock.lang.Specification
1213
import tech.units.indriya.quantity.Quantities
1314

1415
class VoltageValueTest extends Specification {
1516

17+
@Shared
18+
double tolerance = 1e-10
19+
1620
def "A VoltageValue should return the real part correctly"() {
1721
when:
1822
def actual = value.realPart
1923

2024
then:
2125
actual.isPresent()
22-
QuantityUtil.isEquivalentAbs(actual.get(), expected, 1e-3)
26+
QuantityUtil.isEquivalentAbs(actual.get(), expected, tolerance)
2327

2428
where:
2529
value | expected
@@ -35,7 +39,7 @@ class VoltageValueTest extends Specification {
3539

3640
then:
3741
actual.isPresent()
38-
QuantityUtil.isEquivalentAbs(actual.get(), expected, 1e-3)
42+
QuantityUtil.isEquivalentAbs(actual.get(), expected, tolerance)
3943

4044
where:
4145
value | expected

0 commit comments

Comments
 (0)