Skip to content

Commit eef11c4

Browse files
Fix b32f39 (#276)
* Add tests for `ElementUtils.operationalLimitsGroupToMapDataCurrentLimits` * Add test for `ElementUtils.mergeCurrentLimits` * Remove dead code in conditions * Handle nullable values
1 parent 417eff2 commit eef11c4

File tree

5 files changed

+525
-34
lines changed

5 files changed

+525
-34
lines changed

src/main/java/org/gridsuite/network/map/dto/common/CurrentLimitsData.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import lombok.Builder;
1111
import lombok.EqualsAndHashCode;
1212
import lombok.Getter;
13-
import org.springframework.util.CollectionUtils;
13+
import lombok.ToString;
1414

1515
import java.util.List;
1616
import java.util.Objects;
@@ -22,6 +22,7 @@
2222
@Builder
2323
@Getter
2424
@EqualsAndHashCode
25+
@ToString
2526
public class CurrentLimitsData {
2627
// may be null in case we just need the selected limit set and don't really need its name/id
2728
@JsonInclude(JsonInclude.Include.NON_NULL)
@@ -42,10 +43,6 @@ public enum Applicability {
4243
SIDE2,
4344
}
4445

45-
public boolean hasLimits() {
46-
return permanentLimit != null && !Double.isNaN(permanentLimit) || !CollectionUtils.isEmpty(temporaryLimits);
47-
}
48-
4946
public boolean limitsEquals(CurrentLimitsData other) {
5047
return Objects.equals(permanentLimit, other.permanentLimit)
5148
&& Objects.equals(temporaryLimits, other.temporaryLimits);

src/main/java/org/gridsuite/network/map/dto/common/TemporaryLimitData.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
import lombok.Builder;
1111
import lombok.EqualsAndHashCode;
1212
import lombok.Getter;
13+
import lombok.ToString;
1314

1415
/**
1516
* @author David Braquart <david.braquart at rte-france.com>
1617
*/
1718
@Builder
1819
@Getter
1920
@EqualsAndHashCode
21+
@ToString
2022
public class TemporaryLimitData {
2123
private String name;
2224

src/main/java/org/gridsuite/network/map/dto/utils/ElementUtils.java

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,13 @@
1111
import com.powsybl.iidm.network.extensions.*;
1212
import com.powsybl.math.graph.TraversalType;
1313
import org.gridsuite.network.map.dto.common.*;
14+
import org.gridsuite.network.map.dto.common.CurrentLimitsData.Applicability;
1415
import org.gridsuite.network.map.dto.definition.extension.*;
1516
import org.gridsuite.network.map.dto.definition.threewindingstransformer.ThreeWindingsTransformerTabInfos;
17+
import org.springframework.lang.Nullable;
1618
import org.springframework.util.CollectionUtils;
1719

18-
import java.util.ArrayList;
19-
import java.util.Collection;
20-
import java.util.HashMap;
21-
import java.util.List;
22-
import java.util.Map;
23-
import java.util.Optional;
20+
import java.util.*;
2421
import java.util.function.Consumer;
2522
import java.util.function.Function;
2623
import java.util.stream.Collectors;
@@ -93,7 +90,7 @@ public static void buildCurrentLimits(Collection<OperationalLimitsGroup> current
9390
}
9491
}
9592

96-
private static CurrentLimitsData copyCurrentLimitsData(CurrentLimitsData currentLimitsData, CurrentLimitsData.Applicability applicability) {
93+
private static CurrentLimitsData copyCurrentLimitsData(CurrentLimitsData currentLimitsData, Applicability applicability) {
9794
return CurrentLimitsData.builder()
9895
.id(currentLimitsData.getId())
9996
.applicability(applicability)
@@ -111,15 +108,17 @@ public static void mergeCurrentLimits(Collection<OperationalLimitsGroup> operati
111108

112109
// Build temporary limit from side 1 and 2
113110
List<CurrentLimitsData> currentLimitsData1 = operationalLimitsGroups1.stream()
114-
.map(currentLimitsData ->
115-
ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(currentLimitsData, SIDE1)).toList();
111+
.map(currentLimitsData -> ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(currentLimitsData, SIDE1))
112+
.filter(Objects::nonNull)
113+
.toList();
116114
ArrayList<CurrentLimitsData> currentLimitsData2 = new ArrayList<>(operationalLimitsGroups2.stream()
117-
.map(currentLimitsData ->
118-
ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(currentLimitsData, SIDE2)).toList());
115+
.map(currentLimitsData -> ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(currentLimitsData, SIDE2))
116+
.filter(Objects::nonNull)
117+
.toList());
119118

120119
// combine 2 sides in one list
121120

122-
// simple case : one of the arrays are empty
121+
// simple case: one of the arrays are empty
123122
if (currentLimitsData2.isEmpty() && !currentLimitsData1.isEmpty()) {
124123
mergedLimitsData.addAll(currentLimitsData1);
125124
build.accept(mergedLimitsData);
@@ -134,30 +133,22 @@ public static void mergeCurrentLimits(Collection<OperationalLimitsGroup> operati
134133
// more complex case
135134
for (CurrentLimitsData limitsData : currentLimitsData1) {
136135
Optional<CurrentLimitsData> l2 = currentLimitsData2.stream().filter(l -> l.getId().equals(limitsData.getId())).findFirst();
137-
138136
if (l2.isPresent()) {
139137
CurrentLimitsData limitsData2 = l2.get();
140-
// Only side one has limits
141-
if (limitsData.hasLimits() && !limitsData2.hasLimits()) {
138+
// both sides have limits and limits are equals
139+
if (limitsData.limitsEquals(limitsData2)) {
140+
mergedLimitsData.add(copyCurrentLimitsData(limitsData, EQUIPMENT));
141+
// both sides have limits and are different: create 2 different limit sets
142+
} else {
143+
// Side 1
142144
mergedLimitsData.add(limitsData);
143-
// only side two has limits
144-
} else if (limitsData2.hasLimits() && !limitsData.hasLimits()) {
145+
// Side 2
145146
mergedLimitsData.add(limitsData2);
146-
} else {
147-
// both sides have limits and limits are equals
148-
if (limitsData.limitsEquals(limitsData2)) {
149-
mergedLimitsData.add(copyCurrentLimitsData(limitsData, EQUIPMENT));
150-
// both side have limits and they are different : create 2 different limit sets
151-
} else {
152-
// Side 1
153-
mergedLimitsData.add(limitsData);
154-
// Side 2
155-
mergedLimitsData.add(limitsData2);
156-
}
157147
}
158148
// remove processed limits from side 2
159149
currentLimitsData2.remove(l2.get());
160150
} else {
151+
// only one side has limits
161152
mergedLimitsData.add(limitsData);
162153
}
163154
}
@@ -261,7 +252,8 @@ public static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits(Ope
261252
return operationalLimitsGroupToMapDataCurrentLimits(operationalLimitsGroup, null);
262253
}
263254

264-
public static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits(OperationalLimitsGroup operationalLimitsGroup, CurrentLimitsData.Applicability applicability) {
255+
@Nullable
256+
public static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits(OperationalLimitsGroup operationalLimitsGroup, Applicability applicability) {
265257
if (operationalLimitsGroup == null || operationalLimitsGroup.getCurrentLimits().isEmpty()) {
266258
return null;
267259
}

0 commit comments

Comments
 (0)