aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancescoFioraEst <francesco.fiora@est.tech>2023-01-03 10:48:36 +0000
committerFrancesco Fiora <francesco.fiora@est.tech>2023-01-04 09:54:47 +0000
commit951196b4e0d4c64403f186693c2d1c53e25df3b1 (patch)
treebdfbd91c858902522be7866081496e2f5e878db4
parentc6fb86de3dae6f26aec9813cd5ef4cc8d9268359 (diff)
Refactor Post compositions to create and update ACM definitions
Issue-ID: POLICY-4492 Change-Id: Ica3885c7e2a048500a86abc194624ac22efd6bc2 Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
-rw-r--r--models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProvider.java8
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java23
-rw-r--r--runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java20
-rw-r--r--runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java8
4 files changed, 25 insertions, 34 deletions
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProvider.java
index 12a05946e..054271512 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProvider.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProvider.java
@@ -20,6 +20,7 @@
package org.onap.policy.clamp.models.acm.persistence.provider;
+import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@@ -52,7 +53,12 @@ public class AcDefinitionProvider {
public AutomationCompositionDefinition createAutomationCompositionDefinition(
final ToscaServiceTemplate serviceTemplate) {
var acmDefinition = new AutomationCompositionDefinition();
- acmDefinition.setCompositionId(UUID.randomUUID());
+ var compositionId = UUID.randomUUID();
+ acmDefinition.setCompositionId(compositionId);
+ if (serviceTemplate.getMetadata() == null) {
+ serviceTemplate.setMetadata(new HashMap<>());
+ }
+ serviceTemplate.getMetadata().put("compositionId", compositionId);
acmDefinition.setServiceTemplate(serviceTemplate);
var jpaAcmDefinition = ProviderUtils.getJpaAndValidate(acmDefinition, JpaAutomationCompositionDefinition::new,
"AutomationCompositionDefinition");
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 1d3b2992b..9f898d88d 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
@@ -25,13 +25,10 @@ import java.util.UUID;
import java.util.stream.Collectors;
import javax.ws.rs.core.Response.Status;
import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
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;
-import org.onap.policy.clamp.models.acm.utils.AcmUtils;
-import org.onap.policy.common.parameters.BeanValidationResult;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
@@ -61,9 +58,8 @@ public class CommissioningProvider {
* @param supervisionHandler the Supervision Handler
* @param participantProvider the Participant Provider
*/
- public CommissioningProvider(AcDefinitionProvider acDefinitionProvider,
- AutomationCompositionProvider acProvider, SupervisionHandler supervisionHandler,
- ParticipantProvider participantProvider) {
+ public CommissioningProvider(AcDefinitionProvider acDefinitionProvider, AutomationCompositionProvider acProvider,
+ SupervisionHandler supervisionHandler, ParticipantProvider participantProvider) {
this.acDefinitionProvider = acDefinitionProvider;
this.acProvider = acProvider;
this.supervisionHandler = supervisionHandler;
@@ -113,19 +109,10 @@ public class CommissioningProvider {
public CommissioningResponse updateCompositionDefinition(UUID compositionId, ToscaServiceTemplate serviceTemplate) {
var automationCompositions = acProvider.getAcInstancesByCompositionId(compositionId);
- var result = new BeanValidationResult("AutomationCompositions", automationCompositions);
- for (var automationComposition : automationCompositions) {
- if (!AutomationCompositionState.UNINITIALISED.equals(automationComposition.getState())) {
- throw new PfModelRuntimeException(Status.BAD_REQUEST,
- "There is an Automation Composition instantioation with state in "
- + automationComposition.getState());
- }
- result.addResult(AcmUtils.validateAutomationComposition(automationComposition, serviceTemplate));
- }
- if (!result.isValid()) {
- throw new PfModelRuntimeException(Status.BAD_REQUEST, "Service template non valid: " + result.getMessage());
+ if (!automationCompositions.isEmpty()) {
+ throw new PfModelRuntimeException(Status.BAD_REQUEST,
+ "There are ACM instances, Update of ACM Definition not allowed");
}
-
acDefinitionProvider.updateServiceTemplate(compositionId, serviceTemplate);
return createCommissioningResponse(compositionId, serviceTemplate);
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java
index a6b1ab38d..7f9dc8d19 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java
@@ -28,7 +28,6 @@ import org.onap.policy.clamp.acm.runtime.main.rest.gen.AutomationCompositionDefi
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.base.PfModelException;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates;
import org.springframework.context.annotation.Profile;
@@ -54,10 +53,15 @@ public class CommissioningController extends AbstractRestController implements A
*/
@Override
public ResponseEntity<CommissioningResponse> createCompositionDefinitions(ToscaServiceTemplate body,
- UUID requestId) {
-
- var response = provider.createAutomationCompositionDefinitions(body);
- return ResponseEntity.created(createUri("/compositions/" + response.getCompositionId())).body(response);
+ UUID requestId) {
+ var compositionId = body.getMetadata() != null ? body.getMetadata().get("compositionId") : null;
+ if (compositionId == null) {
+ var response = provider.createAutomationCompositionDefinitions(body);
+ return ResponseEntity.created(createUri("/compositions/" + response.getCompositionId())).body(response);
+ } else {
+ return ResponseEntity.ok()
+ .body(provider.updateCompositionDefinition(UUID.fromString(compositionId.toString()), body));
+ }
}
/**
@@ -79,7 +83,6 @@ public class CommissioningController extends AbstractRestController implements A
* @param version the version of the automation composition definition to get, null for all definitions
* @param requestId request ID used in ONAP logging
* @return the automation composition definitions
- * @throws PfModelException on errors getting details of all or specific automation composition definitions
*/
@Override
public ResponseEntity<ToscaServiceTemplates> queryCompositionDefinitions(String name, String version,
@@ -92,11 +95,6 @@ public class CommissioningController extends AbstractRestController implements A
return ResponseEntity.ok().body(provider.getAutomationCompositionDefinitions(compositionId));
}
- public ResponseEntity<CommissioningResponse> updateCompositionDefinition(UUID compositionId,
- ToscaServiceTemplate body, UUID requestId) {
- return ResponseEntity.ok().body(provider.updateCompositionDefinition(compositionId, body));
- }
-
@Override
public ResponseEntity<Void> compositionDefinitionPriming(UUID compositionId, UUID requestId,
@Valid AcTypeStateUpdate body) {
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java
index da43b1fb2..c84d7ea80 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java
@@ -29,12 +29,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
@@ -128,7 +128,6 @@ class CommissioningControllerTest extends CommonRestController {
}
}
- @Disabled
@Test
void testUpdate() {
var toscaDataType = new ToscaDataType();
@@ -143,8 +142,9 @@ class CommissioningControllerTest extends CommonRestController {
var compositionId = createEntryInDB("forUpdate");
var serviceTemplateUpdate = new ToscaServiceTemplate(serviceTemplate);
serviceTemplateUpdate.getDataTypes().put(toscaDataType.getName(), toscaDataType);
- var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId);
- var resp = invocationBuilder.put(Entity.json(serviceTemplateUpdate));
+ serviceTemplateUpdate.setMetadata(Map.of("compositionId", compositionId));
+ var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT);
+ var resp = invocationBuilder.post(Entity.json(serviceTemplateUpdate));
assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
var commissioningResponse = resp.readEntity(CommissioningResponse.class);
assertNotNull(commissioningResponse);