2828import static com .powsybl .openrao .searchtreerao .commons .RaoUtil .getDuplicateCnecs ;
2929
3030/**
31+ * Implementation of {@link com.powsybl.openrao.data.raoresult.api.RaoResult} used when only one state
32+ * was optimized by the RAO. The methods are not expected to be called with other states.
33+ *
3134 * @author Joris Mancini {@literal <joris.mancini at rte-france.com>}
3235 */
3336public class OneStateOnlyRaoResultImpl extends AbstractFlowRaoResult {
34- public static final String WRONG_STATE = "Trying to access perimeter result for the wrong state." ;
3537 private final State optimizedState ;
3638 private final PrePerimeterResult initialResult ;
3739 private final OptimizationResult postOptimizationResult ;
@@ -46,29 +48,29 @@ public OneStateOnlyRaoResultImpl(State optimizedState, PrePerimeterResult initia
4648 excludeDuplicateCnec ();
4749 }
4850
49- private FlowResult getAppropriateResult (Instant optimizedInstant , FlowCnec flowCnec ) {
51+ private Optional < FlowResult > getAppropriateResult (Instant optimizedInstant , FlowCnec flowCnec ) {
5052 if (!optimizedFlowCnecs .contains (flowCnec )) {
51- throw new OpenRaoException ( "Cnec not optimized in this perimeter." );
53+ return Optional . empty ( );
5254 }
5355 State state = flowCnec .getState ();
5456 if (optimizedInstant == null ) {
55- return initialResult ;
57+ return Optional . of ( initialResult ) ;
5658 }
5759 if (optimizedState .isPreventive ()) {
58- return postOptimizationResult ;
60+ return Optional . of ( postOptimizationResult ) ;
5961 }
6062 if (state .isPreventive ()) {
61- return initialResult ;
63+ return Optional . of ( initialResult ) ;
6264 }
6365 if (!optimizedState .isPreventive ()) {
6466 Contingency optimizedContingency = optimizedState .getContingency ().orElseThrow (() -> new OpenRaoException ("Should not happen" ));
6567 Contingency contingency = state .getContingency ().orElseThrow (() -> new OpenRaoException ("Should not happen" ));
6668 if (optimizedContingency .equals (contingency )
6769 && state .compareTo (optimizedState ) >= 0 ) {
68- return postOptimizationResult ;
70+ return Optional . of ( postOptimizationResult ) ;
6971 }
7072 }
71- return initialResult ;
73+ return Optional . of ( initialResult ) ;
7274 }
7375
7476 public OptimizationResult getPostOptimizationResult () {
@@ -93,39 +95,32 @@ public ComputationStatus getComputationStatus(State state) {
9395
9496 @ Override
9597 public double getMargin (Instant optimizedInstant , FlowCnec flowCnec , Unit unit ) {
96- return getAppropriateResult (optimizedInstant , flowCnec ).getMargin (flowCnec , unit );
98+ return getAppropriateResult (optimizedInstant , flowCnec ).map ( flowResult -> flowResult . getMargin (flowCnec , unit )). orElse ( Double . NaN );
9799 }
98100
99101 @ Override
100102 public double getRelativeMargin (Instant optimizedInstant , FlowCnec flowCnec , Unit unit ) {
101- return getAppropriateResult (optimizedInstant , flowCnec ).getRelativeMargin (flowCnec , unit );
103+ return getAppropriateResult (optimizedInstant , flowCnec ).map ( flowResult -> flowResult . getRelativeMargin (flowCnec , unit )). orElse ( Double . NaN );
102104 }
103105
104106 @ Override
105107 public double getFlow (Instant optimizedInstant , FlowCnec flowCnec , TwoSides side , Unit unit ) {
106- return getAppropriateResult (optimizedInstant , flowCnec ).getFlow (flowCnec , side , unit );
108+ return getAppropriateResult (optimizedInstant , flowCnec ).map ( flowResult -> flowResult . getFlow (flowCnec , side , unit )). orElse ( Double . NaN );
107109 }
108110
109111 @ Override
110112 public double getCommercialFlow (Instant optimizedInstant , FlowCnec flowCnec , TwoSides side , Unit unit ) {
111- return getAppropriateResult (optimizedInstant , flowCnec ).getCommercialFlow (flowCnec , side , unit );
113+ return getAppropriateResult (optimizedInstant , flowCnec ).map ( flowResult -> flowResult . getCommercialFlow (flowCnec , side , unit )). orElse ( Double . NaN );
112114 }
113115
114116 @ Override
115117 public double getLoopFlow (Instant optimizedInstant , FlowCnec flowCnec , TwoSides side , Unit unit ) {
116- return getAppropriateResult (optimizedInstant , flowCnec ).getLoopFlow (flowCnec , side , unit );
118+ return getAppropriateResult (optimizedInstant , flowCnec ).map ( flowResult -> flowResult . getLoopFlow (flowCnec , side , unit )). orElse ( Double . NaN );
117119 }
118120
119121 @ Override
120122 public double getPtdfZonalSum (Instant optimizedInstant , FlowCnec flowCnec , TwoSides side ) {
121- return getAppropriateResult (optimizedInstant , flowCnec ).getPtdfZonalSum (flowCnec , side );
122- }
123-
124- public OptimizationResult getOptimizationResult (State state ) {
125- if (!state .equals (optimizedState )) {
126- throw new OpenRaoException (WRONG_STATE );
127- }
128- return postOptimizationResult ;
123+ return getAppropriateResult (optimizedInstant , flowCnec ).map (flowResult -> flowResult .getPtdfZonalSum (flowCnec , side )).orElse (Double .NaN );
129124 }
130125
131126 public PrePerimeterResult getInitialResult () {
@@ -189,91 +184,57 @@ public List<FlowCnec> getCostlyElements(Instant optimizedInstant, String virtual
189184
190185 @ Override
191186 public boolean wasActivatedBeforeState (State state , NetworkAction networkAction ) {
192- if (!state .equals (optimizedState )) {
193- throw new OpenRaoException (WRONG_STATE );
194- }
195187 return false ;
196188 }
197189
198190 @ Override
199191 public boolean isActivatedDuringState (State state , NetworkAction networkAction ) {
200- if (!state .equals (optimizedState )) {
201- throw new OpenRaoException (WRONG_STATE );
202- }
203- return postOptimizationResult .isActivated (networkAction );
192+ return state .equals (optimizedState ) && postOptimizationResult .isActivated (networkAction );
204193 }
205194
206195 @ Override
207196 public Set <NetworkAction > getActivatedNetworkActionsDuringState (State state ) {
208- if (!state .equals (optimizedState )) {
209- throw new OpenRaoException (WRONG_STATE );
210- }
211- return postOptimizationResult .getActivatedNetworkActions ();
197+ return state .equals (optimizedState ) ? postOptimizationResult .getActivatedNetworkActions () : Set .of ();
212198 }
213199
214200 @ Override
215201 public boolean isActivatedDuringState (State state , RangeAction <?> rangeAction ) {
216- if (!state .equals (optimizedState )) {
217- throw new OpenRaoException (WRONG_STATE );
218- }
219- return postOptimizationResult .getOptimizedSetpoint (rangeAction , state ) != initialResult .getSetpoint (rangeAction );
202+ return state .equals (optimizedState ) && postOptimizationResult .getOptimizedSetpoint (rangeAction , state ) != initialResult .getSetpoint (rangeAction );
220203 }
221204
222205 @ Override
223206 public int getPreOptimizationTapOnState (State state , PstRangeAction pstRangeAction ) {
224- if (!state .equals (optimizedState )) {
225- throw new OpenRaoException (WRONG_STATE );
226- }
227207 return initialResult .getTap (pstRangeAction );
228208 }
229209
230210 @ Override
231211 public int getOptimizedTapOnState (State state , PstRangeAction pstRangeAction ) {
232- if (!state .equals (optimizedState )) {
233- throw new OpenRaoException (WRONG_STATE );
234- }
235- return postOptimizationResult .getOptimizedTap (pstRangeAction , state );
212+ return state .equals (optimizedState ) ? postOptimizationResult .getOptimizedTap (pstRangeAction , state ) : initialResult .getTap (pstRangeAction );
236213 }
237214
238215 @ Override
239216 public double getPreOptimizationSetPointOnState (State state , RangeAction <?> rangeAction ) {
240- if (!state .equals (optimizedState )) {
241- throw new OpenRaoException (WRONG_STATE );
242- }
243217 return initialResult .getSetpoint (rangeAction );
244218 }
245219
246220 @ Override
247221 public double getOptimizedSetPointOnState (State state , RangeAction <?> rangeAction ) {
248- if (!state .equals (optimizedState )) {
249- throw new OpenRaoException (WRONG_STATE );
250- }
251- return postOptimizationResult .getOptimizedSetpoint (rangeAction , state );
222+ return state .equals (optimizedState ) ? postOptimizationResult .getOptimizedSetpoint (rangeAction , state ) : initialResult .getSetpoint (rangeAction );
252223 }
253224
254225 @ Override
255226 public Set <RangeAction <?>> getActivatedRangeActionsDuringState (State state ) {
256- if (!state .equals (optimizedState )) {
257- throw new OpenRaoException (WRONG_STATE );
258- }
259227 return postOptimizationResult .getRangeActions ().stream ().filter (rangeAction -> isActivatedDuringState (state , rangeAction )).collect (Collectors .toSet ());
260228 }
261229
262230 @ Override
263231 public Map <PstRangeAction , Integer > getOptimizedTapsOnState (State state ) {
264- if (!state .equals (optimizedState )) {
265- throw new OpenRaoException (WRONG_STATE );
266- }
267- return postOptimizationResult .getOptimizedTapsOnState (state );
268-
232+ return state .equals (optimizedState ) ? postOptimizationResult .getOptimizedTapsOnState (state ) : Map .of ();
269233 }
270234
271235 @ Override
272236 public Map <RangeAction <?>, Double > getOptimizedSetPointsOnState (State state ) {
273- if (!state .equals (optimizedState )) {
274- throw new OpenRaoException (WRONG_STATE );
275- }
276- return postOptimizationResult .getOptimizedSetpointsOnState (state );
237+ return state .equals (optimizedState ) ? postOptimizationResult .getOptimizedSetpointsOnState (state ) : Map .of ();
277238 }
278239
279240 @ Override
0 commit comments