7
7
package org .gridsuite .shortcircuit .server .service ;
8
8
9
9
import com .fasterxml .jackson .databind .ObjectMapper ;
10
- import com .fasterxml .jackson .databind .node .ArrayNode ;
11
- import com .github .fge .jsonpatch .JsonPatch ;
12
- import com .github .fge .jsonpatch .JsonPatchException ;
13
10
import com .powsybl .security .LimitViolationType ;
14
11
import com .powsybl .shortcircuit .InitialVoltageProfileMode ;
15
12
import com .powsybl .shortcircuit .ShortCircuitParameters ;
26
23
import org .gridsuite .shortcircuit .server .entities .*;
27
24
import org .gridsuite .shortcircuit .server .repositories .ParametersRepository ;
28
25
import org .gridsuite .shortcircuit .server .repositories .ShortCircuitAnalysisResultRepository ;
29
- import org .gridsuite .shortcircuit .server .util .Utils ;
30
26
import org .slf4j .Logger ;
31
27
import org .slf4j .LoggerFactory ;
32
28
import org .springframework .data .domain .Page ;
33
29
import org .springframework .data .domain .Pageable ;
34
- import org .springframework .http .MediaType ;
35
30
import org .springframework .lang .Nullable ;
36
31
import org .springframework .stereotype .Service ;
37
32
import org .springframework .transaction .annotation .Transactional ;
@@ -83,17 +78,16 @@ public ShortCircuitService(NotificationService notificationService,
83
78
84
79
@ SneakyThrows
85
80
public UUID runAndSaveResult (UUID networkUuid , String variantId , String receiver , UUID reportUuid , String reporterId , String reportType ,
86
- String userId , String busId ,
87
- @ Nullable final UUID parametersUuid , @ Nullable final MediaType contentType , @ Nullable final String parametersPatch ) {
81
+ String userId , String busId , @ Nullable final UUID parametersUuid , @ Nullable final String parametersPatch ) {
88
82
//TODO Objects.requireNonNull(???)
89
83
final UUID resultUuid = uuidGeneratorService .generate ();
90
84
ShortCircuitParameters parameters = Optional .ofNullable (parametersUuid )
91
- .flatMap (parametersRepository ::findById )
92
- .map (ShortCircuitService ::fromEntity )
93
- .map (ShortCircuitParametersInfos ::parameters )
94
- .orElseGet (ShortCircuitService ::getDefaultShortCircuitParameters );
85
+ .flatMap (parametersRepository ::findById )
86
+ .map (ShortCircuitService ::fromEntity )
87
+ .map (ShortCircuitParametersInfos ::parameters )
88
+ .orElseGet (ShortCircuitService ::getDefaultShortCircuitParameters );
95
89
if (parametersPatch != null ) {
96
- parameters = updateDto (parameters , contentType , parametersPatch , ShortCircuitParameters . class );
90
+ parameters = updateDto (parameters , parametersPatch );
97
91
}
98
92
parameters .setWithFortescueResult (StringUtils .isBlank (busId ));
99
93
ShortCircuitRunContext runContext = new ShortCircuitRunContext (networkUuid , variantId , receiver , parameters , reportUuid , reporterId , reportType , userId , busId );
@@ -459,31 +453,24 @@ public Optional<UUID> duplicateParameters(UUID sourceParametersUuid) {
459
453
.map (AnalysisParametersEntity ::getId );
460
454
}
461
455
462
- private <T > T updateDto (T parameters , @ Nullable final MediaType contentType , final String parametersPatch , final Class <T > clazz )
463
- throws IllegalArgumentException , IOException , JsonPatchException {
464
- if (contentType == null ) {
465
- throw new IllegalArgumentException ("Content-Type is mandatory" );
466
- } else if (Utils .APPLICATION_JSON_PATCH .equalsTypeAndSubtype (contentType )) {
467
- return objectMapper .treeToValue (JsonPatch .fromJson (objectMapper .readValue (parametersPatch , ArrayNode .class ))
468
- .apply (objectMapper .valueToTree (parameters )), clazz );
469
- } else if (MediaType .APPLICATION_JSON .equalsTypeAndSubtype (contentType )) {
470
- return objectMapper .readerForUpdating (parameters ).readValue (parametersPatch );
471
- } else {
472
- throw new IllegalArgumentException ("Unsupported content type: " + contentType );
473
- }
456
+ private <T > T updateDto (T parameters , final String parametersPatch ) throws IllegalArgumentException , IOException {
457
+ return objectMapper .readerForUpdating (parameters ).readValue (parametersPatch );
474
458
}
475
459
476
460
@ SneakyThrows
477
- public UUID createParameters (@ Nullable final MediaType contentType , @ Nullable final String parametersPatch ) {
461
+ public UUID createParameters (@ Nullable final String parametersPatch ) {
478
462
ShortCircuitParametersInfos parameters = getDefaultDtoParameters ();
479
463
if (parametersPatch != null ) {
480
- parameters = updateDto (parameters , contentType , parametersPatch , ShortCircuitParametersInfos . class );
464
+ parameters = updateDto (parameters , parametersPatch );
481
465
}
482
466
return parametersRepository .save (toEntity (parameters )).getId ();
483
467
}
484
468
469
+ /**
470
+ * Use the ability of Jackson to update an object with a partial Json.
471
+ */
485
472
@ SneakyThrows
486
- public boolean updateParameters (final UUID parametersUuid , @ Nullable final MediaType contentType , @ Nullable final String parametersPatch ) {
473
+ public boolean updateParameters (final UUID parametersUuid , @ Nullable final String parametersPatch ) {
487
474
AnalysisParametersEntity parameters = parametersRepository .findById (parametersUuid ).orElse (null );
488
475
if (parameters == null ) {
489
476
return false ;
@@ -492,7 +479,7 @@ public boolean updateParameters(final UUID parametersUuid, @Nullable final Media
492
479
// we simply reset
493
480
updateEntity (parameters , getDefaultDtoParameters ());
494
481
} else {
495
- updateEntity (parameters , updateDto (fromEntity (parameters ), contentType , parametersPatch , ShortCircuitParametersInfos . class ));
482
+ updateEntity (parameters , updateDto (fromEntity (parameters ), parametersPatch ));
496
483
}
497
484
parametersRepository .save (parameters );
498
485
return true ;
0 commit comments