11
11
import com .powsybl .iidm .network .extensions .*;
12
12
import com .powsybl .math .graph .TraversalType ;
13
13
import org .gridsuite .network .map .dto .common .*;
14
+ import org .gridsuite .network .map .dto .common .CurrentLimitsData .Applicability ;
14
15
import org .gridsuite .network .map .dto .definition .extension .*;
15
16
import org .gridsuite .network .map .dto .definition .threewindingstransformer .ThreeWindingsTransformerTabInfos ;
17
+ import org .springframework .lang .Nullable ;
16
18
import org .springframework .util .CollectionUtils ;
17
19
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 .*;
24
21
import java .util .function .Consumer ;
25
22
import java .util .function .Function ;
26
23
import java .util .stream .Collectors ;
@@ -93,7 +90,7 @@ public static void buildCurrentLimits(Collection<OperationalLimitsGroup> current
93
90
}
94
91
}
95
92
96
- private static CurrentLimitsData copyCurrentLimitsData (CurrentLimitsData currentLimitsData , CurrentLimitsData . Applicability applicability ) {
93
+ private static CurrentLimitsData copyCurrentLimitsData (CurrentLimitsData currentLimitsData , Applicability applicability ) {
97
94
return CurrentLimitsData .builder ()
98
95
.id (currentLimitsData .getId ())
99
96
.applicability (applicability )
@@ -111,15 +108,17 @@ public static void mergeCurrentLimits(Collection<OperationalLimitsGroup> operati
111
108
112
109
// Build temporary limit from side 1 and 2
113
110
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 ();
116
114
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 ());
119
118
120
119
// combine 2 sides in one list
121
120
122
- // simple case : one of the arrays are empty
121
+ // simple case: one of the arrays are empty
123
122
if (currentLimitsData2 .isEmpty () && !currentLimitsData1 .isEmpty ()) {
124
123
mergedLimitsData .addAll (currentLimitsData1 );
125
124
build .accept (mergedLimitsData );
@@ -134,30 +133,22 @@ public static void mergeCurrentLimits(Collection<OperationalLimitsGroup> operati
134
133
// more complex case
135
134
for (CurrentLimitsData limitsData : currentLimitsData1 ) {
136
135
Optional <CurrentLimitsData > l2 = currentLimitsData2 .stream ().filter (l -> l .getId ().equals (limitsData .getId ())).findFirst ();
137
-
138
136
if (l2 .isPresent ()) {
139
137
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
142
144
mergedLimitsData .add (limitsData );
143
- // only side two has limits
144
- } else if (limitsData2 .hasLimits () && !limitsData .hasLimits ()) {
145
+ // Side 2
145
146
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
- }
157
147
}
158
148
// remove processed limits from side 2
159
149
currentLimitsData2 .remove (l2 .get ());
160
150
} else {
151
+ // only one side has limits
161
152
mergedLimitsData .add (limitsData );
162
153
}
163
154
}
@@ -261,7 +252,8 @@ public static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits(Ope
261
252
return operationalLimitsGroupToMapDataCurrentLimits (operationalLimitsGroup , null );
262
253
}
263
254
264
- public static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits (OperationalLimitsGroup operationalLimitsGroup , CurrentLimitsData .Applicability applicability ) {
255
+ @ Nullable
256
+ public static CurrentLimitsData operationalLimitsGroupToMapDataCurrentLimits (OperationalLimitsGroup operationalLimitsGroup , Applicability applicability ) {
265
257
if (operationalLimitsGroup == null || operationalLimitsGroup .getCurrentLimits ().isEmpty ()) {
266
258
return null ;
267
259
}
0 commit comments