aboutsummaryrefslogtreecommitdiffstats
path: root/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java
diff options
context:
space:
mode:
Diffstat (limited to 'a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java')
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java95
1 files changed, 35 insertions, 60 deletions
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java
index 0d0919d8..6bf6fbaf 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationController.java
@@ -22,38 +22,28 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.media.Content;
-import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
-
-import java.io.IOException;
-import java.util.Optional;
-
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig;
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfigParser;
import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ConfigurationFile;
-import org.onap.ccsdk.oran.a1policymanagementservice.controllers.VoidResponse;
+import org.onap.ccsdk.oran.a1policymanagementservice.controllers.api.v2.ConfigurationApi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+import java.io.IOException;
+import java.util.Optional;
@RestController("ConfigurationControllerV2")
@Tag( //
name = ConfigurationController.API_NAME, //
description = ConfigurationController.API_DESCRIPTION //
)
-public class ConfigurationController {
+public class ConfigurationController implements ConfigurationApi {
private static final Logger logger = LoggerFactory.getLogger(ConfigurationController.class);
public static final String API_NAME = "Management of configuration";
@@ -71,58 +61,43 @@ public class ConfigurationController {
private static Gson gson = new GsonBuilder() //
.create(); //
- @PutMapping(path = Consts.V2_API_ROOT + "/configuration", consumes = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Replace the current configuration file with the given configuration")
- @ApiResponses(value = { //
- @ApiResponse(responseCode = "200", //
- description = "Configuration updated", //
- content = @Content(schema = @Schema(implementation = VoidResponse.class))), //
- @ApiResponse(responseCode = "400", //
- description = "Invalid configuration provided", //
- content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class))), //
- @ApiResponse(responseCode = "500", //
- description = "Something went wrong when replacing the configuration. Try again.", //
- content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class))) //
- })
- public ResponseEntity<Object> putConfiguration(@RequestBody Object configuration) {
- try {
- String configAsString = gson.toJson(configuration);
- JsonObject configJson = JsonParser.parseString(configAsString).getAsJsonObject();
- ApplicationConfigParser configParser = new ApplicationConfigParser(applicationConfig);
- configParser.parse(configJson);
- configurationFile.writeFile(configJson);
- logger.info("Configuration changed through REST call.");
- return new ResponseEntity<>(HttpStatus.OK);
- } catch (IOException ioe) {
- logger.warn("Configuration file not written, {}.", ioe.getMessage());
- return ErrorResponse.create("Internal error when writing the configuration.",
- HttpStatus.INTERNAL_SERVER_ERROR);
- } catch (Exception e) {
- return ErrorResponse.create(e, HttpStatus.BAD_REQUEST);
- }
+ @Override
+ public Mono<ResponseEntity<Object>> putConfiguration(final Mono<Object> configuration,
+ final ServerWebExchange exchange) {
+ return configuration
+ .flatMap(configObject -> {
+ try {
+ String configAsString = gson.toJson(configObject);
+ JsonObject configJson = JsonParser.parseString(configAsString).getAsJsonObject();
+ ApplicationConfigParser configParser = new ApplicationConfigParser(applicationConfig);
+ configParser.parse(configJson);
+ configurationFile.writeFile(configJson);
+ logger.info("Configuration changed through REST call.");
+ return Mono.just(new ResponseEntity<>(HttpStatus.OK));
+ } catch (IOException ioe) {
+ logger.warn("Configuration file not written, {}.", ioe.getMessage());
+ return ErrorResponse.createMono("Internal error when writing the configuration.",
+ HttpStatus.INTERNAL_SERVER_ERROR);
+ } catch (Exception e) {
+ return ErrorResponse.createMono(e, HttpStatus.BAD_REQUEST);
+ }
+ })
+ .onErrorResume(error -> {
+ return ErrorResponse.createMono(error.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ });
}
- @GetMapping(path = Consts.V2_API_ROOT + "/configuration", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Returns the contents of the application configuration file") //
- @ApiResponses(value = { //
- @ApiResponse(responseCode = "200", //
- description = "Configuration", //
- content = @Content(schema = @Schema(implementation = Object.class))), //
- @ApiResponse(responseCode = "404", //
- description = "File is not found or readable", //
- content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class)))
-
- })
- public ResponseEntity<Object> getConfiguration() {
+ @Override
+ public Mono<ResponseEntity<Object>> getConfiguration(final ServerWebExchange exchange) {
try {
Optional<JsonObject> rootObject = configurationFile.readFile();
if (rootObject.isPresent()) {
- return new ResponseEntity<>(rootObject.get().toString(), HttpStatus.OK);
+ return Mono.just(new ResponseEntity<>(rootObject.get().toString(), HttpStatus.OK));
} else {
- return ErrorResponse.create("File does not exist", HttpStatus.NOT_FOUND);
+ return ErrorResponse.createMono("File does not exist", HttpStatus.NOT_FOUND);
}
} catch (Exception e) {
- return ErrorResponse.create(e, HttpStatus.INTERNAL_SERVER_ERROR);
+ return ErrorResponse.createMono(e, HttpStatus.INTERNAL_SERVER_ERROR);
}
}