diff options
author | FrancescoFioraEst <francesco.fiora@est.tech> | 2023-01-03 16:15:39 +0000 |
---|---|---|
committer | FrancescoFioraEst <francesco.fiora@est.tech> | 2023-01-04 11:15:03 +0000 |
commit | a76f5614e10f99658114ea1ff2eaf334e0df01c8 (patch) | |
tree | e3d468119c6795d54d3894e363ba9a7d6e11fa88 /runtime-acm/src/main | |
parent | c6fb86de3dae6f26aec9813cd5ef4cc8d9268359 (diff) |
Refactor Post instances to create and update ACM instances
Issue-ID: POLICY-4493
Change-Id: I31c00e6d61a53dcd6a03a911a618f1c6495f2d38
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
Diffstat (limited to 'runtime-acm/src/main')
6 files changed, 77 insertions, 138 deletions
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 b723dba7f..099c0e740 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 @@ -37,7 +37,6 @@ 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; @@ -102,29 +101,27 @@ public class AutomationCompositionInstantiationProvider { * Update 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 + * @param automationComposition the automation composition * @return the result of the update */ - public InstantiationResponse updateAutomationComposition(UUID compositionId, UUID instanceId, - InstantiationUpdate instanceUpdate) { - var automationComposition = automationCompositionProvider.getAutomationComposition(instanceId); - if (!compositionId.equals(automationComposition.getCompositionId())) { + public InstantiationResponse updateAutomationComposition(UUID compositionId, + AutomationComposition automationComposition) { + var instanceId = automationComposition.getInstanceId(); + var acToUpdate = automationCompositionProvider.getAutomationComposition(instanceId); + if (!compositionId.equals(acToUpdate.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()); + acToUpdate.setElements(automationComposition.getElements()); + acToUpdate.setName(automationComposition.getName()); + acToUpdate.setVersion(automationComposition.getVersion()); + acToUpdate.setDescription(automationComposition.getDescription()); + acToUpdate.setDerivedFrom(automationComposition.getDerivedFrom()); + var validationResult = validateAutomationComposition(acToUpdate); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } + automationComposition = automationCompositionProvider.updateAutomationComposition(acToUpdate); var response = new InstantiationResponse(); response.setInstanceId(instanceId); 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 1ff7c019e..94c111e00 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 @@ -31,7 +31,6 @@ 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.AcInstanceStateUpdate; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; -import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; import org.springframework.context.annotation.Profile; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @@ -59,10 +58,14 @@ public class InstantiationController extends AbstractRestController implements A public ResponseEntity<InstantiationResponse> createCompositionInstance(UUID compositionId, AutomationComposition automationComposition, UUID requestId) { - var response = provider.createAutomationComposition(compositionId, automationComposition); - return ResponseEntity - .created(createUri("/compositions/" + compositionId + "/instances/" + response.getInstanceId())) - .body(response); + if (automationComposition.getInstanceId() == null) { + var response = provider.createAutomationComposition(compositionId, automationComposition); + return ResponseEntity + .created(createUri("/compositions/" + compositionId + "/instances/" + response.getInstanceId())) + .body(response); + } else { + return ResponseEntity.ok().body(provider.updateAutomationComposition(compositionId, automationComposition)); + } } /** @@ -96,22 +99,6 @@ public class InstantiationController extends AbstractRestController implements A } /** - * 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 - * @return a response - */ - public ResponseEntity<InstantiationResponse> updateCompositionInstance(UUID compositionId, UUID instanceId, - InstantiationUpdate instanceUpdate, UUID requestId) { - - return ResponseEntity.ok() - .body(provider.updateAutomationComposition(compositionId, instanceId, instanceUpdate)); - } - - /** * Deletes a automation composition definition. * * @param compositionId The UUID of the automation composition definition @@ -127,8 +114,8 @@ public class InstantiationController extends AbstractRestController implements A } @Override - public ResponseEntity<Void> ompositionInstanceState(UUID compositionId, UUID instanceId, - @Valid AcInstanceStateUpdate body, UUID requestId) { + public ResponseEntity<Void> compositionInstanceState(UUID compositionId, UUID instanceId, + @Valid AcInstanceStateUpdate body, UUID requestId) { // TODO Auto-generated method stub return null; } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java index 833b3fa0b..98c71dc6f 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java @@ -21,37 +21,24 @@ package org.onap.policy.clamp.acm.runtime.main.rest.stub; import java.util.UUID; -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; +import lombok.RequiredArgsConstructor; import org.onap.policy.clamp.acm.runtime.main.rest.gen.AutomationCompositionDefinitionApi; import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController; import org.onap.policy.clamp.models.acm.messages.rest.commissioning.AcTypeStateUpdate; import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Profile; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -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; @RestController @Profile("stub") -public class CommissioningControllerStub extends AbstractRestController - implements AutomationCompositionDefinitionApi { +@RequiredArgsConstructor +public class CommissioningControllerStub extends AbstractRestController implements AutomationCompositionDefinitionApi { - private static final Logger log = LoggerFactory.getLogger(CommissioningControllerStub.class); - - private StubUtils stubUtils = new StubUtils(); - - @Autowired - private HttpServletRequest request; + private final StubUtils stubUtils; @Value("${stub.deleteCompositionDefinitionResponse}") private String pathToResponseFile; @@ -69,44 +56,35 @@ public class CommissioningControllerStub extends AbstractRestController private String pathToPutUpdate; @Override - public ResponseEntity<CommissioningResponse> createCompositionDefinitions( - @Valid @RequestBody ToscaServiceTemplate body, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToPostResponse, CommissioningResponse.class, request, log); + public ResponseEntity<CommissioningResponse> createCompositionDefinitions(ToscaServiceTemplate body, + UUID xonaprequestid) { + var compositionId = body.getMetadata() != null ? body.getMetadata().get("compositionId") : null; + if (compositionId == null) { + return stubUtils.getResponse(pathToPostResponse, CommissioningResponse.class); + } else { + return stubUtils.getResponse(pathToPutUpdate, CommissioningResponse.class); + } } @Override - public ResponseEntity<CommissioningResponse> deleteCompositionDefinition( - @PathVariable("compositionId") UUID compositionId, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToResponseFile, CommissioningResponse.class, request, log); + public ResponseEntity<CommissioningResponse> deleteCompositionDefinition(UUID compositionId, UUID xonaprequestid) { + return stubUtils.getResponse(pathToResponseFile, CommissioningResponse.class); } @Override - public ResponseEntity<ToscaServiceTemplate> getCompositionDefinition( - @PathVariable("compositionId") UUID compositionId, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToSingleDefinition, ToscaServiceTemplate.class, request, log); + public ResponseEntity<ToscaServiceTemplate> getCompositionDefinition(UUID compositionId, UUID xonaprequestid) { + return stubUtils.getResponse(pathToSingleDefinition, ToscaServiceTemplate.class); } @Override - public ResponseEntity<ToscaServiceTemplates> queryCompositionDefinitions( - @Valid @RequestParam(value = "name", required = false) String name, - @Valid @RequestParam(value = "version", required = false) String version, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToAllDefinitions, ToscaServiceTemplates.class, request, log); - } - - public ResponseEntity<CommissioningResponse> updateCompositionDefinition( - @PathVariable("compositionId") UUID compositionId, - @Valid @RequestBody ToscaServiceTemplate body, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToPutUpdate, CommissioningResponse.class, request, log); + public ResponseEntity<ToscaServiceTemplates> queryCompositionDefinitions(String name, String version, + UUID xonaprequestid) { + return stubUtils.getResponse(pathToAllDefinitions, ToscaServiceTemplates.class); } @Override public ResponseEntity<Void> compositionDefinitionPriming(UUID compositionId, UUID requestId, - AcTypeStateUpdate body) { + AcTypeStateUpdate body) { // TODO Auto-generated method stub return null; } diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java index ac34f227d..d0b190dd3 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java @@ -21,37 +21,25 @@ package org.onap.policy.clamp.acm.runtime.main.rest.stub; import java.util.UUID; -import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; +import lombok.RequiredArgsConstructor; 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.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AcInstanceStateUpdate; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; -import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Profile; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -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; @RestController @Profile("stub") +@RequiredArgsConstructor public class InstantiationControllerStub extends AbstractRestController implements AutomationCompositionInstanceApi { - private static final Logger log = LoggerFactory.getLogger(InstantiationControllerStub.class); - - private StubUtils stubUtils = new StubUtils(); - - @Autowired - private HttpServletRequest request; + private final StubUtils stubUtils; @Value("${stub.deleteCompositionInstanceResponse}") private String pathToResponseFile; @@ -69,50 +57,37 @@ public class InstantiationControllerStub extends AbstractRestController implemen private String pathToPutUpdate; @Override - public ResponseEntity<InstantiationResponse> createCompositionInstance( - @PathVariable("compositionId") UUID compositionId, - @Valid @RequestBody AutomationComposition body, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathPostIntance, InstantiationResponse.class, request, log); + public ResponseEntity<InstantiationResponse> createCompositionInstance(UUID compositionId, + AutomationComposition body, UUID xonaprequestid) { + if (body.getInstanceId() == null) { + return stubUtils.getResponse(pathPostIntance, InstantiationResponse.class); + } else { + return stubUtils.getResponse(pathToResponseFile, InstantiationResponse.class); + } } @Override - public ResponseEntity<InstantiationResponse> deleteCompositionInstance( - @PathVariable("compositionId") UUID compositionId, - @PathVariable("instanceId") UUID instanceId, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToResponseFile, InstantiationResponse.class, request, log); + public ResponseEntity<InstantiationResponse> deleteCompositionInstance(UUID compositionId, UUID instanceId, + UUID xonaprequestid) { + return stubUtils.getResponse(pathToResponseFile, InstantiationResponse.class); } @Override - public ResponseEntity<AutomationComposition> getCompositionInstance( - @PathVariable("compositionId") UUID compositionId, - @PathVariable("instanceId") UUID instanceId, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToSingleIntance, AutomationComposition.class, request, log); + public ResponseEntity<AutomationComposition> getCompositionInstance(UUID compositionId, UUID instanceId, + UUID xonaprequestid) { + return stubUtils.getResponse(pathToSingleIntance, AutomationComposition.class); } @Override - public ResponseEntity<AutomationCompositions> queryCompositionInstances( - @PathVariable("compositionId") UUID compositionId, - @Valid @RequestParam(value = "name", required = false) String name, - @Valid @RequestParam(value = "version", required = false) String version, - @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { - return stubUtils.getResponse(pathToAllIntances, AutomationCompositions.class, request, log); - } - - public ResponseEntity<InstantiationResponse> updateCompositionInstance( - UUID compositionId, - UUID instanceId, - InstantiationUpdate body, - UUID xonaprequestid) { - return stubUtils.getResponse(pathToResponseFile, InstantiationResponse.class, request, log); + public ResponseEntity<AutomationCompositions> queryCompositionInstances(UUID compositionId, String name, + String version, UUID xonaprequestid) { + return stubUtils.getResponse(pathToAllIntances, AutomationCompositions.class); } @Override - public ResponseEntity<Void> ompositionInstanceState(UUID compositionId, UUID instanceId, - @Valid AcInstanceStateUpdate body, UUID requestId) { + public ResponseEntity<Void> compositionInstanceState(UUID compositionId, UUID instanceId, + @Valid AcInstanceStateUpdate body, UUID requestId) { // TODO Auto-generated method stub return null; } -}
\ No newline at end of file +} diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java index 650426681..3a209a096 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java @@ -22,13 +22,13 @@ package org.onap.policy.clamp.acm.runtime.main.rest.stub; import com.google.gson.Gson; import java.io.IOException; -import java.io.InputStream; import java.nio.charset.StandardCharsets; import javax.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardYamlCoder; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Profile; import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpStatus; @@ -40,21 +40,23 @@ import org.springframework.stereotype.Service; @Profile("stub") public class StubUtils { + private static final Logger log = LoggerFactory.getLogger(StubUtils.class); + private final HttpServletRequest request; + private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder(); private static final Gson JSON_TRANSLATOR = new Gson(); private static final String YAML = "application/yaml"; private static final String ACCEPT = "Accept"; - <T> ResponseEntity<T> getResponse(String path, Class<T> clazz, - HttpServletRequest request, Logger log) { - String accept = request.getHeader(ACCEPT); - final ClassPathResource resource = new ClassPathResource(path); - try (InputStream inputStream = resource.getInputStream()) { + <T> ResponseEntity<T> getResponse(String path, Class<T> clazz) { + var accept = request.getHeader(ACCEPT); + final var resource = new ClassPathResource(path); + try (var inputStream = resource.getInputStream()) { if (accept.contains(YAML)) { var targetObject = YAML_TRANSLATOR.decode(inputStream, clazz); return new ResponseEntity<>(targetObject, HttpStatus.OK); } else { - final String string = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + final var string = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); var targetObject = JSON_TRANSLATOR.fromJson(string, clazz); return new ResponseEntity<>(targetObject, HttpStatus.OK); } diff --git a/runtime-acm/src/main/resources/openapi/openapi.yaml b/runtime-acm/src/main/resources/openapi/openapi.yaml index 170e233c9..655ce7eeb 100644 --- a/runtime-acm/src/main/resources/openapi/openapi.yaml +++ b/runtime-acm/src/main/resources/openapi/openapi.yaml @@ -1316,7 +1316,7 @@ paths: description: This request manages deployment and locking of an automation composition instance. This endpoint can order deployment and undeployment of an AC Instance to participants and order unlocking and locking of AC instances on participants - operationId: ompositionInstanceState + operationId: compositionInstanceState parameters: - name : compositionId in: path |