diff options
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.java | 95 |
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); } } |