Skip to content

Commit 4e83b98

Browse files
remove json patch support
1 parent f27d6f8 commit 4e83b98

File tree

5 files changed

+26
-73
lines changed

5 files changed

+26
-73
lines changed

pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
<liquibase-hibernate-package>org.gridsuite.shortcircuit.server</liquibase-hibernate-package>
4747
<mockito-inline.version>3.11.1</mockito-inline.version>
4848
<db-util.version>1.0.5</db-util.version>
49-
<json-patch.version>1.13</json-patch.version>
5049
</properties>
5150

5251
<build>
@@ -176,11 +175,6 @@
176175
<groupId>org.springframework.boot</groupId>
177176
<artifactId>spring-boot-starter-actuator</artifactId>
178177
</dependency>
179-
<dependency>
180-
<groupId>com.github.java-json-tools</groupId>
181-
<artifactId>json-patch</artifactId>
182-
<version>${json-patch.version}</version>
183-
</dependency>
184178

185179
<!-- Test dependencies -->
186180
<dependency>

src/main/java/org/gridsuite/shortcircuit/server/ParametersController.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@
22

33
import io.swagger.v3.oas.annotations.Operation;
44
import io.swagger.v3.oas.annotations.Parameter;
5+
import io.swagger.v3.oas.annotations.media.Schema;
56
import io.swagger.v3.oas.annotations.responses.ApiResponse;
67
import io.swagger.v3.oas.annotations.tags.Tag;
78
import org.gridsuite.shortcircuit.server.dto.ShortCircuitParametersInfos;
89
import org.gridsuite.shortcircuit.server.service.ShortCircuitService;
9-
import org.springframework.http.MediaType;
1010
import org.springframework.http.ResponseEntity;
1111
import org.springframework.web.bind.annotation.*;
1212

1313
import java.util.UUID;
1414

15-
import static org.gridsuite.shortcircuit.server.util.Utils.APPLICATION_JSON_PATCH_VALUE;
16-
import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
1715
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
1816
import static org.springframework.http.MediaType.TEXT_PLAIN_VALUE;
1917

@@ -34,11 +32,11 @@ public ResponseEntity<ShortCircuitParametersInfos> getParameters(@Parameter(desc
3432
return ResponseEntity.of(shortCircuitService.getParameters(parametersUuid));
3533
}
3634

37-
@PostMapping(produces = TEXT_PLAIN_VALUE, consumes = {APPLICATION_JSON_VALUE, APPLICATION_JSON_PATCH_VALUE})
35+
@PostMapping(produces = TEXT_PLAIN_VALUE, consumes = APPLICATION_JSON_VALUE)
3836
@Operation(summary = "Create a new set of parameters for an analysis using default parameters as base")
39-
public ResponseEntity<UUID> createParameters(@RequestHeader(value = CONTENT_TYPE, required = false) MediaType contentType,
37+
public ResponseEntity<UUID> createParameters(@Parameter(description = "Modifications on top of the default parameters", schema = @Schema(implementation = ShortCircuitParametersInfos.class))
4038
@RequestBody(required = false) String parametersPatch) {
41-
return ResponseEntity.ok(shortCircuitService.createParameters(contentType, parametersPatch));
39+
return ResponseEntity.ok(shortCircuitService.createParameters(parametersPatch));
4240
}
4341

4442
@PostMapping(value = "/parameters", produces = TEXT_PLAIN_VALUE)
@@ -54,11 +52,12 @@ public ResponseEntity<Void> deleteParameters(@Parameter(description = "UUID of p
5452
return ResponseEntity.ok().build();
5553
}
5654

57-
@PutMapping(value = "/parameters/{parametersUuid}", consumes = {APPLICATION_JSON_VALUE, APPLICATION_JSON_PATCH_VALUE})
55+
@PutMapping(value = "/parameters/{parametersUuid}", consumes = APPLICATION_JSON_VALUE)
5856
@Operation(summary = "Update a set of parameters for an analysis or reset them to default ones")
5957
public ResponseEntity<Void> updateParameters(@Parameter(description = "UUID of parameters") @PathVariable("parametersUuid") UUID parametersUuid,
60-
@RequestHeader(value = CONTENT_TYPE, required = false) MediaType contentType, @RequestBody(required = false) String parametersPatch) {
61-
if (shortCircuitService.updateParameters(parametersUuid, contentType, parametersPatch)) {
58+
@Parameter(description = "Modifications on top of the parameters referenced by parametersUuid", schema = @Schema(implementation = ShortCircuitParametersInfos.class))
59+
@RequestBody(required = false) String parametersPatch) {
60+
if (shortCircuitService.updateParameters(parametersUuid, parametersPatch)) {
6261
return ResponseEntity.noContent().build();
6362
} else {
6463
return ResponseEntity.notFound().build();

src/main/java/org/gridsuite/shortcircuit/server/ShortCircuitController.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.powsybl.shortcircuit.ShortCircuitParameters;
1212
import io.swagger.v3.oas.annotations.Operation;
1313
import io.swagger.v3.oas.annotations.Parameter;
14-
import io.swagger.v3.oas.annotations.media.Content;
1514
import io.swagger.v3.oas.annotations.media.Schema;
1615
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1716
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@@ -29,8 +28,6 @@
2928

3029
import static com.powsybl.shortcircuit.Fault.FaultType;
3130
import static org.gridsuite.shortcircuit.server.service.NotificationService.HEADER_USER_ID;
32-
import static org.gridsuite.shortcircuit.server.util.Utils.APPLICATION_JSON_PATCH_VALUE;
33-
import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
3431
import static org.springframework.http.MediaType.*;
3532

3633
/**
@@ -46,11 +43,9 @@ public ShortCircuitController(ShortCircuitService shortCircuitService) {
4643
this.shortCircuitService = shortCircuitService;
4744
}
4845

49-
@PostMapping(value = "/networks/{networkUuid}/run-and-save", produces = TEXT_PLAIN_VALUE, consumes = {APPLICATION_JSON_VALUE, APPLICATION_JSON_PATCH_VALUE})
46+
@PostMapping(value = "/networks/{networkUuid}/run-and-save", produces = TEXT_PLAIN_VALUE, consumes = APPLICATION_JSON_VALUE)
5047
@Operation(summary = "Run a short circuit analysis on a network")
5148
@ApiResponse(responseCode = "200", description = "The short circuit analysis has been performed")
52-
@io.swagger.v3.oas.annotations.parameters.RequestBody(required = false, content = {
53-
@Content(schema = @Schema(implementation = ShortCircuitParameters.class))})
5449
public ResponseEntity<UUID> runAndSave(@Parameter(description = "Network UUID") @PathVariable("networkUuid") UUID networkUuid,
5550
@Parameter(description = "Variant Id") @RequestParam(name = "variantId", required = false) String variantId,
5651
@Parameter(description = "Result receiver") @RequestParam(name = "receiver", required = false) String receiver,
@@ -59,10 +54,10 @@ public ResponseEntity<UUID> runAndSave(@Parameter(description = "Network UUID")
5954
@Parameter(description = "The type name for the report") @RequestParam(name = "reportType", required = false) String reportType,
6055
@Parameter(description = "Bus Id - Used for analysis targeting one bus") @RequestParam(name = "busId", required = false) String busId,
6156
@Parameter(description = "ID of parameters to use") @RequestParam(name = "parametersUuid", required = false) UUID parametersUuid,
62-
@RequestHeader(value = CONTENT_TYPE, required = false) MediaType contentType,
57+
@Parameter(description = "Parameters (full or partial) to use on top of the ones designed by parametersUuid", schema = @Schema(implementation = ShortCircuitParameters.class))
6358
@RequestBody(required = false) String parametersPatch,
6459
@RequestHeader(HEADER_USER_ID) String userId) {
65-
return ResponseEntity.ok().contentType(TEXT_PLAIN).body(shortCircuitService.runAndSaveResult(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, busId, parametersUuid, contentType, parametersPatch));
60+
return ResponseEntity.ok().contentType(TEXT_PLAIN).body(shortCircuitService.runAndSaveResult(networkUuid, variantId, receiver, reportUuid, reporterId, reportType, userId, busId, parametersUuid, parametersPatch));
6661
}
6762

6863
@GetMapping(value = "/results/{resultUuid}", produces = APPLICATION_JSON_VALUE)

src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitService.java

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
package org.gridsuite.shortcircuit.server.service;
88

99
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;
1310
import com.powsybl.security.LimitViolationType;
1411
import com.powsybl.shortcircuit.InitialVoltageProfileMode;
1512
import com.powsybl.shortcircuit.ShortCircuitParameters;
@@ -26,12 +23,10 @@
2623
import org.gridsuite.shortcircuit.server.entities.*;
2724
import org.gridsuite.shortcircuit.server.repositories.ParametersRepository;
2825
import org.gridsuite.shortcircuit.server.repositories.ShortCircuitAnalysisResultRepository;
29-
import org.gridsuite.shortcircuit.server.util.Utils;
3026
import org.slf4j.Logger;
3127
import org.slf4j.LoggerFactory;
3228
import org.springframework.data.domain.Page;
3329
import org.springframework.data.domain.Pageable;
34-
import org.springframework.http.MediaType;
3530
import org.springframework.lang.Nullable;
3631
import org.springframework.stereotype.Service;
3732
import org.springframework.transaction.annotation.Transactional;
@@ -83,17 +78,16 @@ public ShortCircuitService(NotificationService notificationService,
8378

8479
@SneakyThrows
8580
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) {
8882
//TODO Objects.requireNonNull(???)
8983
final UUID resultUuid = uuidGeneratorService.generate();
9084
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);
9589
if (parametersPatch != null) {
96-
parameters = updateDto(parameters, contentType, parametersPatch, ShortCircuitParameters.class);
90+
parameters = updateDto(parameters, parametersPatch);
9791
}
9892
parameters.setWithFortescueResult(StringUtils.isBlank(busId));
9993
ShortCircuitRunContext runContext = new ShortCircuitRunContext(networkUuid, variantId, receiver, parameters, reportUuid, reporterId, reportType, userId, busId);
@@ -459,31 +453,24 @@ public Optional<UUID> duplicateParameters(UUID sourceParametersUuid) {
459453
.map(AnalysisParametersEntity::getId);
460454
}
461455

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);
474458
}
475459

476460
@SneakyThrows
477-
public UUID createParameters(@Nullable final MediaType contentType, @Nullable final String parametersPatch) {
461+
public UUID createParameters(@Nullable final String parametersPatch) {
478462
ShortCircuitParametersInfos parameters = getDefaultDtoParameters();
479463
if (parametersPatch != null) {
480-
parameters = updateDto(parameters, contentType, parametersPatch, ShortCircuitParametersInfos.class);
464+
parameters = updateDto(parameters, parametersPatch);
481465
}
482466
return parametersRepository.save(toEntity(parameters)).getId();
483467
}
484468

469+
/**
470+
* Use the ability of Jackson to update an object with a partial Json.
471+
*/
485472
@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) {
487474
AnalysisParametersEntity parameters = parametersRepository.findById(parametersUuid).orElse(null);
488475
if (parameters == null) {
489476
return false;
@@ -492,7 +479,7 @@ public boolean updateParameters(final UUID parametersUuid, @Nullable final Media
492479
// we simply reset
493480
updateEntity(parameters, getDefaultDtoParameters());
494481
} else {
495-
updateEntity(parameters, updateDto(fromEntity(parameters), contentType, parametersPatch, ShortCircuitParametersInfos.class));
482+
updateEntity(parameters, updateDto(fromEntity(parameters), parametersPatch));
496483
}
497484
parametersRepository.save(parameters);
498485
return true;

src/main/java/org/gridsuite/shortcircuit/server/util/Utils.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)