From 5e0f7912ac694eef2d283aab61a659470b4ba3e5 Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Fri, 9 Dec 2022 14:38:10 +0000 Subject: Link the existing InstantiationController with the generated code Issue-ID: POLICY-4467 Change-Id: Ibe9206ee4189e73357271211d83b0603edfb86da Signed-off-by: FrancescoFioraEst --- .../commissioning/CommissioningProvider.java | 13 - ...AutomationCompositionInstantiationProvider.java | 109 ++++--- .../runtime/main/rest/InstantiationController.java | 332 +++------------------ .../runtime/main/web/AbstractRestController.java | 53 ---- .../main/web/GlobalControllerExceptionHandler.java | 10 +- .../src/main/resources/openapi/openapi.yaml | 9 +- 6 files changed, 125 insertions(+), 401 deletions(-) (limited to 'runtime-acm/src/main') diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java index 19d4afe11..66a67a304 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java @@ -94,10 +94,6 @@ public class CommissioningProvider { */ public CommissioningResponse createAutomationCompositionDefinitions(ToscaServiceTemplate serviceTemplate) { - if (verifyIfDefinitionExists()) { - throw new PfModelRuntimeException(Status.BAD_REQUEST, - "Delete instances, to commission automation composition definitions"); - } var acmDefinition = acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate); serviceTemplate = acmDefinition.getServiceTemplate(); var participantList = participantProvider.getParticipants(); @@ -191,13 +187,4 @@ public class CommissioningProvider { private boolean verifyIfInstanceExists(UUID compositionId) { return !acProvider.getAcInstancesByCompositionId(compositionId).isEmpty(); } - - /** - * Validates to see if there is any instance saved. - * - * @return true if exists instance - */ - private boolean verifyIfDefinitionExists() { - return !acDefinitionProvider.getAllAcDefinitions().isEmpty(); - } } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java index 03a2f4e25..374c94f5d 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java @@ -22,6 +22,7 @@ package org.onap.policy.clamp.acm.runtime.instantiation; import java.util.List; +import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; import javax.ws.rs.core.Response; @@ -29,12 +30,14 @@ import javax.ws.rs.core.Response.Status; import lombok.AllArgsConstructor; import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler; import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException; +import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; import org.onap.policy.clamp.models.acm.concepts.Participant; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider; import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider; import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider; @@ -43,7 +46,6 @@ import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.parameters.ObjectValidationResult; import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,6 +57,7 @@ import org.springframework.transaction.annotation.Transactional; @AllArgsConstructor public class AutomationCompositionInstantiationProvider { private static final String AUTOMATION_COMPOSITION_NODE_ELEMENT_TYPE = "AutomationCompositionElement"; + private static final String DO_NOT_MATCH = " do not match with "; private final AutomationCompositionProvider automationCompositionProvider; private final SupervisionHandler supervisionHandler; @@ -65,11 +68,16 @@ public class AutomationCompositionInstantiationProvider { /** * Create automation composition. * + * @param compositionId The UUID of the automation composition definition * @param automationComposition the automation composition * @return the result of the instantiation operation */ - public InstantiationResponse createAutomationComposition(AutomationComposition automationComposition) { - + public InstantiationResponse createAutomationComposition(UUID compositionId, + AutomationComposition automationComposition) { + if (!compositionId.equals(automationComposition.getCompositionId())) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, + automationComposition.getCompositionId() + DO_NOT_MATCH + compositionId); + } var checkAutomationCompositionOpt = automationCompositionProvider.findAutomationComposition(automationComposition.getKey().asIdentifier()); if (checkAutomationCompositionOpt.isPresent()) { @@ -93,20 +101,34 @@ public class AutomationCompositionInstantiationProvider { /** * Update automation composition. * - * @param automationComposition the automation composition - * @return the result of the instantiation operation + * @param compositionId The UUID of the automation composition definition + * @param instanceId The UUID of the automation composition instance + * @param instanceUpdate the automation composition + * @return the result of the update */ - public InstantiationResponse updateAutomationComposition(AutomationComposition automationComposition) { - var validationResult = validateAutomationComposition(automationComposition); - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); + public InstantiationResponse updateAutomationComposition(UUID compositionId, UUID instanceId, + InstantiationUpdate instanceUpdate) { + var automationComposition = automationCompositionProvider.getAutomationComposition(instanceId); + if (!compositionId.equals(automationComposition.getCompositionId())) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, + automationComposition.getCompositionId() + DO_NOT_MATCH + compositionId); + } + if (instanceUpdate.getElements() != null) { + automationComposition.setElements(instanceUpdate.getElements()); + var validationResult = validateAutomationComposition(automationComposition); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); + } + automationComposition = automationCompositionProvider.updateAutomationComposition(automationComposition); + } + + if (instanceUpdate.getInstantiationCommand() != null) { + issueAutomationCompositionCommand(automationComposition, instanceUpdate.getInstantiationCommand()); } - automationCompositionProvider.updateAutomationComposition(automationComposition); var response = new InstantiationResponse(); - response.setInstanceId(automationComposition.getInstanceId()); + response.setInstanceId(instanceId); response.setAffectedAutomationComposition(automationComposition.getKey().asIdentifier()); - return response; } @@ -129,20 +151,36 @@ public class AutomationCompositionInstantiationProvider { return result; } + /** + * Get Automation Composition. + * + * @param compositionId The UUID of the automation composition definition + * @param instanceId The UUID of the automation composition instance + * @return the Automation Composition + */ + @Transactional(readOnly = true) + public AutomationComposition getAutomationComposition(UUID compositionId, UUID instanceId) { + var automationComposition = automationCompositionProvider.getAutomationComposition(instanceId); + if (!automationComposition.getCompositionId().equals(compositionId)) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, + "Composition Id " + compositionId + DO_NOT_MATCH + automationComposition.getCompositionId()); + } + return automationComposition; + } + /** * Delete the automation composition with the given name and version. * - * @param name the name of the automation composition to delete - * @param version the version of the automation composition to delete + * @param compositionId The UUID of the automation composition definition + * @param instanceId The UUID of the automation composition instance * @return the result of the deletion */ - public InstantiationResponse deleteAutomationComposition(String name, String version) { - var automationCompositionOpt = - automationCompositionProvider.findAutomationComposition(new ToscaConceptIdentifier(name, version)); - if (automationCompositionOpt.isEmpty()) { - throw new PfModelRuntimeException(Response.Status.NOT_FOUND, "Automation composition not found"); + public InstantiationResponse deleteAutomationComposition(UUID compositionId, UUID instanceId) { + var automationComposition = automationCompositionProvider.getAutomationComposition(instanceId); + if (!compositionId.equals(automationComposition.getCompositionId())) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, + automationComposition.getCompositionId() + DO_NOT_MATCH + compositionId); } - var automationComposition = automationCompositionOpt.get(); if (!AutomationCompositionState.UNINITIALISED.equals(automationComposition.getState())) { throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, "Automation composition state is still " + automationComposition.getState()); @@ -174,42 +212,33 @@ public class AutomationCompositionInstantiationProvider { /** * Issue a command to automation compositions, setting their ordered state. * + * @param automationComposition the AutomationComposition * @param command the command to issue to automation compositions - * @return the result of the initiation command - * @throws AutomationCompositionException on ordered state invalid */ - public InstantiationResponse issueAutomationCompositionCommand(InstantiationCommand command) - throws AutomationCompositionException { + public void issueAutomationCompositionCommand(AutomationComposition automationComposition, + InstantiationCommand command) { if (command.getOrderedState() == null) { - throw new AutomationCompositionException(Status.BAD_REQUEST, + throw new AutomationCompositionRuntimeException(Status.BAD_REQUEST, "ordered state invalid or not specified on command"); } var participants = participantProvider.getParticipants(); if (participants.isEmpty()) { - throw new AutomationCompositionException(Status.BAD_REQUEST, "No participants registered"); - } - var automationCompositionOpt = - automationCompositionProvider.findAutomationComposition(command.getAutomationCompositionIdentifier()); - if (automationCompositionOpt.isEmpty()) { - throw new AutomationCompositionException(Response.Status.BAD_REQUEST, - "AutomationComposition with id " + command.getAutomationCompositionIdentifier() + " not found"); + throw new AutomationCompositionRuntimeException(Status.BAD_REQUEST, "No participants registered"); } - - var automationComposition = automationCompositionOpt.get(); var validationResult = validateIssueAutomationComposition(automationComposition, participants); if (!validationResult.isValid()) { - throw new AutomationCompositionException(Response.Status.BAD_REQUEST, validationResult.getResult()); + throw new AutomationCompositionRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } automationComposition.setCascadedOrderedState(command.getOrderedState()); - supervisionHandler.triggerAutomationCompositionSupervision(automationComposition); + try { + supervisionHandler.triggerAutomationCompositionSupervision(automationComposition); + } catch (AutomationCompositionException e) { + throw new AutomationCompositionRuntimeException(Response.Status.BAD_REQUEST, e.getMessage()); + } automationCompositionProvider.updateAutomationComposition(automationComposition); - var response = new InstantiationResponse(); - response.setAffectedAutomationComposition(command.getAutomationCompositionIdentifier()); - - return response; } private BeanValidationResult validateIssueAutomationComposition(AutomationComposition automationComposition, diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java index d575a690e..e828843a6 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java @@ -21,32 +21,16 @@ package org.onap.policy.clamp.acm.runtime.main.rest; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.Authorization; -import io.swagger.annotations.Extension; -import io.swagger.annotations.ExtensionProperty; -import io.swagger.annotations.ResponseHeader; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.onap.policy.clamp.acm.runtime.instantiation.AutomationCompositionInstantiationProvider; +import org.onap.policy.clamp.acm.runtime.main.rest.gen.AutomationCompositionInstanceApi; import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController; -import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; -import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; -import org.springframework.http.MediaType; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -54,129 +38,55 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequiredArgsConstructor -public class InstantiationController extends AbstractRestController { - - private static final String TAGS = "Clamp Automation Composition Instantiation API"; +public class InstantiationController extends AbstractRestController implements AutomationCompositionInstanceApi { // The Automation Composition provider for instantiation requests private final AutomationCompositionInstantiationProvider provider; /** - * Creates a automation composition. + * Creates an automation composition. * - * @param requestId request ID used in ONAP logging + * @param compositionId The UUID of the automation composition definition * @param automationComposition the automation composition + * @param requestId request ID used in ONAP logging * @return a response */ - // @formatter:off - @PostMapping(value = "/instantiation", - produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}, - consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}) - @ApiOperation( - value = "Commissions automation composition definitions", - notes = "Commissions automation composition definitions, returning the automation composition IDs", - response = InstantiationResponse.class, - tags = {TAGS}, - authorizations = @Authorization(value = AUTHORIZATION_TYPE), - responseHeaders = { - @ResponseHeader( - name = VERSION_MINOR_NAME, - description = VERSION_MINOR_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = VERSION_PATCH_NAME, - description = VERSION_PATCH_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = VERSION_LATEST_NAME, - description = VERSION_LATEST_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = REQUEST_ID_NAME, - description = REQUEST_ID_HDR_DESCRIPTION, - response = UUID.class) - }, - extensions = { - @Extension - ( - name = EXTENSION_NAME, - properties = { - @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION), - @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE) - } - ) - } - ) - @ApiResponses( - value = { - @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE), - @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE), - @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE) - } - ) - // @formatter:on - public ResponseEntity createCompositionInstance( - @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam( - value = "Entity Body of automation composition", - required = true) @RequestBody AutomationComposition automationComposition) { + @Override + public ResponseEntity createCompositionInstance(UUID compositionId, + AutomationComposition automationComposition, UUID requestId) { + + var response = provider.createAutomationComposition(compositionId, automationComposition); + return ResponseEntity + .created(createUri("/compositions/" + compositionId + "/instances/" + response.getInstanceId())) + .body(response); + } - return ResponseEntity.ok().body(provider.createAutomationComposition(automationComposition)); + /** + * Gets an automation composition. + * + * @param compositionId The UUID of the automation composition definition + * @param instanceId The UUID of the automation composition instance + * @param requestId request ID used in ONAP logging + * @return the automation composition instance + */ + @Override + public ResponseEntity getCompositionInstance(UUID compositionId, UUID instanceId, + UUID requestId) { + return ResponseEntity.ok().body(provider.getAutomationComposition(compositionId, instanceId)); } /** * Queries details of all automation compositions. * - * @param requestId request ID used in ONAP logging + * @param compositionId The UUID of the automation composition definition * @param name the name of the automation composition to get, null for all automation compositions * @param version the version of the automation composition to get, null for all automation compositions + * @param requestId request ID used in ONAP logging * @return the automation compositions */ - // @formatter:off - @GetMapping(value = "/instantiation", - produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}) - @ApiOperation(value = "Query details of the requested automation compositions", - notes = "Queries details of the requested automation compositions, returning all composition details", - response = AutomationCompositions.class, - tags = {TAGS}, - authorizations = @Authorization(value = AUTHORIZATION_TYPE), - responseHeaders = { - @ResponseHeader( - name = VERSION_MINOR_NAME, description = VERSION_MINOR_DESCRIPTION, - response = String.class), - @ResponseHeader(name = VERSION_PATCH_NAME, description = VERSION_PATCH_DESCRIPTION, - response = String.class), - @ResponseHeader(name = VERSION_LATEST_NAME, description = VERSION_LATEST_DESCRIPTION, - response = String.class), - @ResponseHeader(name = REQUEST_ID_NAME, description = REQUEST_ID_HDR_DESCRIPTION, - response = UUID.class)}, - extensions = { - @Extension - ( - name = EXTENSION_NAME, - properties = { - @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION), - @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE) - } - ) - } - ) - @ApiResponses( - value = { - @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE), - @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE), - @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE) - } - ) - // @formatter:on - public ResponseEntity queryCompositionInstances( - @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam(value = "Automation composition definition name", required = false) @RequestParam( - value = "name", - required = false) String name, - @ApiParam(value = "Automation composition definition version", required = false) @RequestParam( - value = "version", - required = false) String version) { + @Override + public ResponseEntity queryCompositionInstances(UUID compositionId, String name, + String version, UUID requestId) { return ResponseEntity.ok().body(provider.getAutomationCompositions(name, version)); } @@ -184,182 +94,32 @@ public class InstantiationController extends AbstractRestController { /** * Updates a automation composition. * + * @param compositionId The UUID of the automation composition definition + * @param instanceId The UUID of the automation composition instance + * @param instanceUpdate the automation composition to update * @param requestId request ID used in ONAP logging - * @param automationComposition the automation composition * @return a response */ - // @formatter:off - @PutMapping(value = "/instantiation", - produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}, - consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}) - @ApiOperation( - value = "Updates automation composition definitions", - notes = "Updates automation composition definitions, returning the updated composition definition IDs", - response = InstantiationResponse.class, - tags = {TAGS}, - authorizations = @Authorization(value = AUTHORIZATION_TYPE), - responseHeaders = { - @ResponseHeader( - name = VERSION_MINOR_NAME, - description = VERSION_MINOR_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = VERSION_PATCH_NAME, - description = VERSION_PATCH_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = VERSION_LATEST_NAME, - description = VERSION_LATEST_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = REQUEST_ID_NAME, - description = REQUEST_ID_HDR_DESCRIPTION, - response = UUID.class) - }, - extensions = { - @Extension - ( - name = EXTENSION_NAME, - properties = { - @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION), - @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE) - } - ) - } - ) - @ApiResponses( - value = { - @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE), - @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE), - @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE) - } - ) - // @formatter:on - public ResponseEntity updateCompositionInstance( - @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam( - value = "Entity Body of Automation Composition", - required = true) @RequestBody AutomationComposition automationComposition) { + @Override + public ResponseEntity updateCompositionInstance(UUID compositionId, UUID instanceId, + InstantiationUpdate instanceUpdate, UUID requestId) { - return ResponseEntity.ok().body(provider.updateAutomationComposition(automationComposition)); + return ResponseEntity.ok() + .body(provider.updateAutomationComposition(compositionId, instanceId, instanceUpdate)); } /** * Deletes a automation composition definition. * + * @param compositionId The UUID of the automation composition definition + * @param instanceId The UUID of the automation composition instance * @param requestId request ID used in ONAP logging - * @param name the name of the automation composition to delete - * @param version the version of the automation composition to delete * @return a response */ - // @formatter:off - @DeleteMapping(value = "/instantiation", - produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}) - @ApiOperation(value = "Delete a automation composition", - notes = "Deletes a automation composition, returning optional error details", - response = InstantiationResponse.class, - tags = {TAGS}, - authorizations = @Authorization(value = AUTHORIZATION_TYPE), - responseHeaders = { - @ResponseHeader( - name = VERSION_MINOR_NAME, - description = VERSION_MINOR_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = VERSION_PATCH_NAME, - description = VERSION_PATCH_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = VERSION_LATEST_NAME, - description = VERSION_LATEST_DESCRIPTION, - response = String.class), - @ResponseHeader( - name = REQUEST_ID_NAME, - description = REQUEST_ID_HDR_DESCRIPTION, - response = UUID.class)}, - extensions = { - @Extension - ( - name = EXTENSION_NAME, - properties = { - @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION), - @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE) - } - ) - } - ) - @ApiResponses( - value = { - @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE), - @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE), - @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE) - } - ) - // @formatter:on - - public ResponseEntity deleteCompositionInstance( - @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam(value = "Automation composition definition name", required = true) @RequestParam("name") String name, - @ApiParam(value = "Automation composition definition version") @RequestParam( - value = "version", - required = true) String version) { - - return ResponseEntity.ok().body(provider.deleteAutomationComposition(name, version)); - } - - /** - * Issues automation composition commands to automation compositions. - * - * @param requestId request ID used in ONAP logging - * @param command the command to issue to automation compositions - * @return the automation composition definitions - * @throws AutomationCompositionException on errors issuing a command - */ - // @formatter:off - @PutMapping(value = "/instantiation/command", - produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}, - consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML}) - @ApiOperation(value = "Issue a command to the requested automation compositions", - notes = "Issues a command to an automation composition, ordering a state change on the composition", - response = InstantiationResponse.class, - tags = {TAGS}, - authorizations = @Authorization(value = AUTHORIZATION_TYPE), - responseHeaders = { - @ResponseHeader( - name = VERSION_MINOR_NAME, description = VERSION_MINOR_DESCRIPTION, - response = String.class), - @ResponseHeader(name = VERSION_PATCH_NAME, description = VERSION_PATCH_DESCRIPTION, - response = String.class), - @ResponseHeader(name = VERSION_LATEST_NAME, description = VERSION_LATEST_DESCRIPTION, - response = String.class), - @ResponseHeader(name = REQUEST_ID_NAME, description = REQUEST_ID_HDR_DESCRIPTION, - response = UUID.class)}, - extensions = { - @Extension - ( - name = EXTENSION_NAME, - properties = { - @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION), - @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE) - } - ) - } - ) - @ApiResponses( - value = { - @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE), - @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE), - @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE) - } - ) - // @formatter:on - public ResponseEntity issueAutomationCompositionCommand( - @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam( - value = "Entity Body of automation composition command", - required = true) @RequestBody InstantiationCommand command) - throws AutomationCompositionException { + @Override + public ResponseEntity deleteCompositionInstance(UUID compositionId, UUID instanceId, + UUID requestId) { - return ResponseEntity.accepted().body(provider.issueAutomationCompositionCommand(command)); + return ResponseEntity.ok().body(provider.deleteAutomationComposition(compositionId, instanceId)); } } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/AbstractRestController.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/AbstractRestController.java index 61522dd66..736f258ee 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/AbstractRestController.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/AbstractRestController.java @@ -20,13 +20,6 @@ package org.onap.policy.clamp.acm.runtime.main.web; -import io.swagger.annotations.Api; -import io.swagger.annotations.BasicAuthDefinition; -import io.swagger.annotations.Info; -import io.swagger.annotations.SecurityDefinition; -import io.swagger.annotations.SwaggerDefinition; -import io.swagger.annotations.Tag; -import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import javax.ws.rs.core.MediaType; @@ -37,57 +30,11 @@ import org.springframework.web.bind.annotation.RequestMapping; /** * Common superclass to provide REST endpoints for the participant simulator. */ -// @formatter:off @RequestMapping(value = "/v2", produces = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML}) -@Api(value = "Automation Composition Commissioning API") -@SwaggerDefinition( - info = @Info(description = - "Automation Composition Service", version = "v1.0", - title = "Automation Composition"), - consumes = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML}, - produces = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML}, - schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS}, - tags = {@Tag(name = "automationcomposition", description = "Automation Composition Service")}, - securityDefinition = @SecurityDefinition(basicAuthDefinitions = {@BasicAuthDefinition(key = "basicAuth")})) -// @formatter:on public abstract class AbstractRestController { public static final String APPLICATION_YAML = "application/yaml"; - public static final String EXTENSION_NAME = "interface info"; - - public static final String API_VERSION_NAME = "api-version"; - public static final String API_VERSION = "1.0.0"; - - public static final String LAST_MOD_NAME = "last-mod-release"; - public static final String LAST_MOD_RELEASE = "Istanbul"; - - public static final String VERSION_MINOR_NAME = "X-MinorVersion"; - public static final String VERSION_MINOR_DESCRIPTION = - "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client"; - - public static final String VERSION_PATCH_NAME = "X-PatchVersion"; - public static final String VERSION_PATCH_DESCRIPTION = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" + " the client on request"; - - public static final String VERSION_LATEST_NAME = "X-LatestVersion"; - public static final String VERSION_LATEST_DESCRIPTION = "Used only to communicate an API's latest version"; - - public static final String REQUEST_ID_NAME = "X-ONAP-RequestID"; - public static final String REQUEST_ID_HDR_DESCRIPTION = "Used to track REST transactions for logging purpose"; - public static final String REQUEST_ID_PARAM_DESCRIPTION = "RequestID for http transaction"; - - public static final String AUTHORIZATION_TYPE = "basicAuth"; - - public static final int AUTHENTICATION_ERROR_CODE = HttpURLConnection.HTTP_UNAUTHORIZED; - public static final int AUTHORIZATION_ERROR_CODE = HttpURLConnection.HTTP_FORBIDDEN; - public static final int SERVER_ERROR_CODE = HttpURLConnection.HTTP_INTERNAL_ERROR; - - public static final String AUTHENTICATION_ERROR_MESSAGE = "Authentication Error"; - public static final String AUTHORIZATION_ERROR_MESSAGE = "Authorization Error"; - public static final String SERVER_ERROR_MESSAGE = "Internal Server Error"; - /** * Constructor. */ diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/GlobalControllerExceptionHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/GlobalControllerExceptionHandler.java index fef358bb1..96d3bb2a7 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/GlobalControllerExceptionHandler.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/GlobalControllerExceptionHandler.java @@ -20,7 +20,7 @@ package org.onap.policy.clamp.acm.runtime.main.web; -import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException; +import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException; import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse; import org.onap.policy.clamp.models.acm.rest.RestUtils; import org.onap.policy.models.base.PfModelException; @@ -33,13 +33,13 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; public class GlobalControllerExceptionHandler { /** - * Handle AutomationCompositionException. + * Handle AutomationCompositionRuntimeException. * - * @param ex AutomationCompositionException + * @param ex AutomationCompositionRuntimeException * @return ResponseEntity */ - @ExceptionHandler(AutomationCompositionException.class) - public ResponseEntity handleBadRequest(AutomationCompositionException ex) { + @ExceptionHandler(AutomationCompositionRuntimeException.class) + public ResponseEntity handleBadRequest(AutomationCompositionRuntimeException ex) { return RestUtils.toSimpleResponse(ex); } diff --git a/runtime-acm/src/main/resources/openapi/openapi.yaml b/runtime-acm/src/main/resources/openapi/openapi.yaml index de7b26ead..65d2c6b08 100644 --- a/runtime-acm/src/main/resources/openapi/openapi.yaml +++ b/runtime-acm/src/main/resources/openapi/openapi.yaml @@ -968,14 +968,12 @@ paths: content: application/json: schema: - title: InstantiationUpdate - type: object + $ref: '#/components/schemas/InstantiationUpdate' example: externalValue: 'https://raw.githubusercontent.com/onap/policy-clamp/master/runtime-acm/src/main/resources/openapi/examples/putCompositionInstanceUpdate.json' application/yaml: schema: - title: InstantiationUpdate - type: object + $ref: '#/components/schemas/InstantiationUpdate' example: externalValue: 'https://raw.githubusercontent.com/onap/policy-clamp/master/runtime-acm/src/main/resources/openapi/examples/putCompositionInstanceUpdate.yaml' required: true @@ -1228,6 +1226,9 @@ components: CommissioningResponse: title: CommissioningResponse type: object + InstantiationUpdate: + title: InstantiationUpdate + type: object InstantiationResponse: title: InstantiationResponse type: object -- cgit 1.2.3-korg