Deployment and undeployment on Participant Intermediary 31/133231/2
authorFrancescoFioraEst <francesco.fiora@est.tech>
Fri, 10 Feb 2023 15:28:50 +0000 (15:28 +0000)
committerFrancescoFioraEst <francesco.fiora@est.tech>
Mon, 13 Feb 2023 16:28:28 +0000 (16:28 +0000)
Handle AC Element Instance Deployment and undeployment
on Participant Intermediary.

Issue-ID: POLICY-4507
Change-Id: I6a6976a8893450467ee609a1a476dbfa473a0e82
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
21 files changed:
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AcElementDeployAck.java
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionDeployAckTest.java
participant/participant-impl/participant-impl-a1pms/src/main/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AutomationCompositionElementHandler.java
participant/participant-impl/participant-impl-a1pms/src/test/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AcElementHandlerTest.java
participant/participant-impl/participant-impl-a1pms/src/test/java/org/onap/policy/clamp/acm/participant/a1pms/utils/CommonTestData.java
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/handler/AutomationCompositionElementHandler.java
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/handler/AcElementHandlerTest.java
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/utils/CommonTestData.java
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandler.java
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandlerTest.java
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/AutomationCompositionElementListener.java
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/ParticipantIntermediaryApi.java
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImplTest.java
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandlerTest.java

index afbd61b..8f8a54f 100644 (file)
@@ -31,9 +31,6 @@ import lombok.ToString;
 @ToString
 public class AcElementDeployAck {
 
-    // State of the AutomationCompositionElement
-    private AutomationCompositionState state;
-
     // State of the AutomationCompositionElement
     private DeployState deployState;
 
index 6e5b504..8c50b01 100644 (file)
@@ -29,7 +29,8 @@ import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.models.acm.concepts.AcElementDeployAck;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.clamp.models.acm.utils.CommonTestData;
 import org.onap.policy.common.utils.coder.CoderException;
 
@@ -49,7 +50,7 @@ class AutomationCompositionDeployAckTest {
         // verify with all values
         orig.setAutomationCompositionId(UUID.randomUUID());
         orig.setParticipantId(CommonTestData.getParticipantId());
-        var acElementResult = new AcElementDeployAck(AutomationCompositionState.UNINITIALISED, null, null,
+        var acElementResult = new AcElementDeployAck(DeployState.DEPLOYED, LockState.LOCKED,
             true, "AutomationCompositionElement result");
         final var automationCompositionResultMap = Map.of(UUID.randomUUID(), acElementResult);
         orig.setAutomationCompositionResultMap(automationCompositionResultMap);
index bcc3fd4..a60e7b4 100755 (executable)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2022 Nordix Foundation.
+ *  Copyright (C) 2022-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,10 +36,9 @@ import org.onap.policy.clamp.acm.participant.a1pms.models.ConfigurationEntity;
 import org.onap.policy.clamp.acm.participant.a1pms.webclient.AcA1PmsClient;
 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -73,42 +72,20 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      *
      * @param automationCompositionId the ID of the automation composition
      * @param automationCompositionElementId the ID of the automation composition element
-     * @param currentState                   the current state of the automation composition element
-     * @param newState                       the state to which the automation composition element is changing to
      * @throws PfModelException in case of a model exception
      */
     @Override
-    public void automationCompositionElementStateChange(UUID automationCompositionId,
-            UUID automationCompositionElementId, AutomationCompositionState currentState,
-            AutomationCompositionOrderedState newState) throws A1PolicyServiceException {
-        switch (newState) {
-            case UNINITIALISED:
-                var configurationEntity = configRequestMap.get(automationCompositionElementId);
-                if (configurationEntity != null && acA1PmsClient.isPmsHealthy()) {
-                    acA1PmsClient.deleteService(configurationEntity.getPolicyServiceEntities());
-                    configRequestMap.remove(automationCompositionElementId);
-                    intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                            automationCompositionElementId, newState, AutomationCompositionState.UNINITIALISED,
-                            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                } else {
-                    LOGGER.warn("Failed to connect with A1PMS. Service configuration is: {}", configurationEntity);
-                    throw new A1PolicyServiceException(HttpStatus.SC_SERVICE_UNAVAILABLE,
-                            "Unable to connect with A1PMS");
-                }
-                break;
-            case PASSIVE:
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                        automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
-                        ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            case RUNNING:
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                        automationCompositionElementId, newState, AutomationCompositionState.RUNNING,
-                        ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            default:
-                LOGGER.warn("Cannot transition from state {} to state {}", currentState, newState);
-                break;
+    public void undeploy(UUID automationCompositionId, UUID automationCompositionElementId)
+            throws A1PolicyServiceException {
+        var configurationEntity = configRequestMap.get(automationCompositionElementId);
+        if (configurationEntity != null && acA1PmsClient.isPmsHealthy()) {
+            acA1PmsClient.deleteService(configurationEntity.getPolicyServiceEntities());
+            configRequestMap.remove(automationCompositionElementId);
+            intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, DeployState.UNDEPLOYED, LockState.NONE);
+        } else {
+            LOGGER.warn("Failed to connect with A1PMS. Service configuration is: {}", configurationEntity);
+            throw new A1PolicyServiceException(HttpStatus.SC_SERVICE_UNAVAILABLE, "Unable to connect with A1PMS");
         }
     }
 
@@ -116,24 +93,22 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      * Callback method to handle an update on an automation composition element.
      *
      * @param automationCompositionId the ID of the automation composition
-     * @param element      the information on the automation composition element
+     * @param element the information on the automation composition element
      * @param properties properties Map
      */
     @Override
-    public void automationCompositionElementUpdate(UUID automationCompositionId,
-            AutomationCompositionElement element, Map<String, Object> properties) throws A1PolicyServiceException {
+    public void deploy(UUID automationCompositionId, AcElementDeploy element, Map<String, Object> properties)
+            throws A1PolicyServiceException {
         try {
             var configurationEntity = CODER.convert(properties, ConfigurationEntity.class);
-            var violations =
-                    Validation.buildDefaultValidatorFactory().getValidator().validate(configurationEntity);
+            var violations = Validation.buildDefaultValidatorFactory().getValidator().validate(configurationEntity);
             if (violations.isEmpty()) {
                 if (acA1PmsClient.isPmsHealthy()) {
                     acA1PmsClient.createService(configurationEntity.getPolicyServiceEntities());
                     configRequestMap.put(element.getId(), configurationEntity);
 
                     intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(),
-                            AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.PASSIVE,
-                            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+                            DeployState.DEPLOYED, LockState.LOCKED);
                 } else {
                     LOGGER.error("Failed to connect with A1PMS");
                     throw new A1PolicyServiceException(HttpStatus.SC_SERVICE_UNAVAILABLE,
index ce775b6..a390766 100755 (executable)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2022 Nordix Foundation.
+ *  Copyright (C) 2022-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -39,8 +39,6 @@ import org.onap.policy.clamp.acm.participant.a1pms.utils.CommonTestData;
 import org.onap.policy.clamp.acm.participant.a1pms.utils.ToscaUtils;
 import org.onap.policy.clamp.acm.participant.a1pms.webclient.AcA1PmsClient;
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -79,27 +77,17 @@ class AcElementHandlerTest {
         var automationCompositionElementId = element.getId();
 
         var nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        automationCompositionElementHandler
-                .automationCompositionElementUpdate(commonTestData.getAutomationCompositionId(), element,
-                        nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
+        automationCompositionElementHandler.deploy(
+                commonTestData.getAutomationCompositionId(), element,
+                nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
 
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-                automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-                AutomationCompositionOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-                automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-                AutomationCompositionOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-                automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-                AutomationCompositionOrderedState.RUNNING));
+        assertDoesNotThrow(() -> automationCompositionElementHandler.undeploy(
+                automationCompositionId, automationCompositionElementId));
 
         when(acA1PmsClient.isPmsHealthy()).thenReturn(Boolean.FALSE);
         assertThrows(A1PolicyServiceException.class,
-                () -> automationCompositionElementHandler.automationCompositionElementStateChange(
-                        automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-                        AutomationCompositionOrderedState.UNINITIALISED));
+                () -> automationCompositionElementHandler.undeploy(
+                        automationCompositionId, automationCompositionElementId));
     }
 
     @Test
@@ -107,9 +95,9 @@ class AcElementHandlerTest {
         var element = commonTestData.getAutomationCompositionElement();
 
         var nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        assertDoesNotThrow(() -> automationCompositionElementHandler
-                .automationCompositionElementUpdate(commonTestData.getAutomationCompositionId(), element,
-                        nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT).getProperties()));
+        assertDoesNotThrow(() -> automationCompositionElementHandler.deploy(
+                commonTestData.getAutomationCompositionId(), element,
+                nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT).getProperties()));
     }
 
     @Test
@@ -118,8 +106,9 @@ class AcElementHandlerTest {
         when(acA1PmsClient.isPmsHealthy()).thenReturn(Boolean.FALSE);
 
         var nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        assertThrows(A1PolicyServiceException.class, () -> automationCompositionElementHandler
-                .automationCompositionElementUpdate(commonTestData.getAutomationCompositionId(), element,
+        assertThrows(A1PolicyServiceException.class,
+                () -> automationCompositionElementHandler.deploy(
+                        commonTestData.getAutomationCompositionId(), element,
                         nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT).getProperties()));
     }
 
@@ -127,7 +116,6 @@ class AcElementHandlerTest {
     void test_AutomationCompositionElementUpdateWithInvalidConfiguration() {
         var element = commonTestData.getAutomationCompositionElement();
         assertThrows(A1PolicyServiceException.class, () -> automationCompositionElementHandler
-                .automationCompositionElementUpdate(commonTestData.getAutomationCompositionId(), element,
-                        Map.of()));
+                .deploy(commonTestData.getAutomationCompositionId(), element, Map.of()));
     }
 }
index b68faa6..d31e81f 100755 (executable)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2022 Nordix Foundation.
+ *  Copyright (C) 2022-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2022 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,8 +24,8 @@ package org.onap.policy.clamp.acm.participant.a1pms.utils;
 import java.util.List;
 import java.util.UUID;
 import org.onap.policy.clamp.acm.participant.a1pms.models.A1PolicyServiceEntity;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 public class CommonTestData {
@@ -38,11 +38,11 @@ public class CommonTestData {
      *
      * @return automationCompositionElement object
      */
-    public AutomationCompositionElement getAutomationCompositionElement() {
-        var element = new AutomationCompositionElement();
+    public AcElementDeploy getAutomationCompositionElement() {
+        var element = new AcElementDeploy();
         element.setId(UUID.randomUUID());
         element.setDefinition(new ToscaConceptIdentifier(TEST_KEY_NAME, "1.0.1"));
-        element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        element.setOrderedState(DeployOrder.DEPLOY);
         return element;
     }
 
index 42b26c6..c62216d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,10 +38,9 @@ import org.onap.policy.clamp.acm.participant.http.main.models.ConfigRequest;
 import org.onap.policy.clamp.acm.participant.http.main.webclient.AcHttpClient;
 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -73,34 +72,13 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      * Handle a automation composition element state change.
      *
      * @param automationCompositionElementId the ID of the automation composition element
-     * @param currentState the current state of the automation composition element
-     * @param newState the state to which the automation composition element is changing to
      * @throws PfModelException in case of a model exception
      */
     @Override
-    public void automationCompositionElementStateChange(UUID automationCompositionId,
-        UUID automationCompositionElementId, AutomationCompositionState currentState,
-        AutomationCompositionOrderedState newState) {
-        switch (newState) {
-            case UNINITIALISED:
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, newState, AutomationCompositionState.UNINITIALISED,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            case PASSIVE:
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            case RUNNING:
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, newState, AutomationCompositionState.RUNNING,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            default:
-                LOGGER.warn("Cannot transition from state {} to state {}", currentState, newState);
-                break;
-        }
+    public void undeploy(UUID automationCompositionId,
+        UUID automationCompositionElementId) {
+        intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                automationCompositionElementId, DeployState.UNDEPLOYED, LockState.NONE);
     }
 
     /**
@@ -111,8 +89,8 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      * @param properties properties Map
      */
     @Override
-    public void automationCompositionElementUpdate(UUID automationCompositionId,
-        AutomationCompositionElement element, Map<String, Object> properties) {
+    public void deploy(UUID automationCompositionId,
+            AcElementDeploy element, Map<String, Object> properties) {
         try {
             var configRequest = CODER.convert(properties, ConfigRequest.class);
             var violations =
@@ -124,8 +102,7 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
                         .is2xxSuccessful()).collect(Collectors.toList());
                 if (failedResponseStatus.isEmpty()) {
                     intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(),
-                            AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.PASSIVE,
-                            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+                            DeployState.DEPLOYED, LockState.LOCKED);
                 } else {
                     LOGGER.error("Error on Invoking the http request: {}", failedResponseStatus);
                 }
index 8e77b2a..857490e 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,8 +38,6 @@ import org.onap.policy.clamp.acm.participant.http.main.models.ConfigRequest;
 import org.onap.policy.clamp.acm.participant.http.utils.CommonTestData;
 import org.onap.policy.clamp.acm.participant.http.utils.ToscaUtils;
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -49,13 +47,13 @@ class AcElementHandlerTest {
     @InjectMocks
     @Spy
     private AutomationCompositionElementHandler automationCompositionElementHandler =
-        new AutomationCompositionElementHandler();
+            new AutomationCompositionElementHandler();
 
     private final CommonTestData commonTestData = new CommonTestData();
 
     private static ToscaServiceTemplate serviceTemplate;
     private static final String HTTP_AUTOMATION_COMPOSITION_ELEMENT =
-        "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement";
+            "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement";
 
     @BeforeAll
     static void init() {
@@ -76,17 +74,8 @@ class AcElementHandlerTest {
         var config = Mockito.mock(ConfigRequest.class);
         assertDoesNotThrow(() -> automationCompositionElementHandler.invokeHttpClient(config));
 
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-            automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-            AutomationCompositionOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-            automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-            AutomationCompositionOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-            automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
-            AutomationCompositionOrderedState.RUNNING));
+        assertDoesNotThrow(() -> automationCompositionElementHandler.undeploy(
+                automationCompositionId, automationCompositionElementId));
 
         automationCompositionElementHandler.close();
     }
@@ -100,7 +89,7 @@ class AcElementHandlerTest {
         var map = new HashMap<>(nodeTemplatesMap.get(HTTP_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
         map.putAll(element.getProperties());
 
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementUpdate(
-            commonTestData.getAutomationCompositionId(), element, map));
+        assertDoesNotThrow(() -> automationCompositionElementHandler
+                .deploy(commonTestData.getAutomationCompositionId(), element, map));
     }
 }
index 48b7bdc..7ae9b33 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,8 +26,8 @@ import java.util.Map;
 import java.util.UUID;
 import org.onap.policy.clamp.acm.participant.http.main.models.ConfigurationEntity;
 import org.onap.policy.clamp.acm.participant.http.main.models.RestParams;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 public class CommonTestData {
@@ -41,11 +41,11 @@ public class CommonTestData {
      *
      * @return automationCompositionElement object
      */
-    public AutomationCompositionElement getAutomationCompositionElement() {
-        AutomationCompositionElement element = new AutomationCompositionElement();
+    public AcElementDeploy getAutomationCompositionElement() {
+        var element = new AcElementDeploy();
         element.setId(UUID.randomUUID());
         element.setDefinition(new ToscaConceptIdentifier(TEST_KEY_NAME, "1.0.1"));
-        element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        element.setOrderedState(DeployOrder.DEPLOY);
         return element;
     }
 
index c64bc49..3233cdc 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,10 +38,9 @@ import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceExcepti
 import org.onap.policy.clamp.acm.participant.kubernetes.helm.PodStatusValidator;
 import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
 import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartService;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -85,43 +84,21 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      * Callback method to handle a automation composition element state change.
      *
      * @param automationCompositionElementId the ID of the automation composition element
-     * @param currentState the current state of the automation composition element
-     * @param newState the state to which the automation composition element is changing to
      */
     @Override
-    public synchronized void automationCompositionElementStateChange(UUID automationCompositionId,
-        UUID automationCompositionElementId, AutomationCompositionState currentState,
-        AutomationCompositionOrderedState newState) {
-        switch (newState) {
-            case UNINITIALISED:
-                var chart = chartMap.get(automationCompositionElementId);
-                if (chart != null) {
-                    LOGGER.info("Helm deployment to be deleted {} ", chart.getReleaseName());
-                    try {
-                        chartService.uninstallChart(chart);
-                        intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                            automationCompositionElementId, newState, AutomationCompositionState.UNINITIALISED,
-                            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                        chartMap.remove(automationCompositionElementId);
-                        podStatusMap.remove(chart.getReleaseName());
-                    } catch (ServiceException se) {
-                        LOGGER.warn("Deletion of Helm deployment failed", se);
-                    }
-                }
-                break;
-            case PASSIVE:
+    public synchronized void undeploy(UUID automationCompositionId, UUID automationCompositionElementId) {
+        var chart = chartMap.get(automationCompositionElementId);
+        if (chart != null) {
+            LOGGER.info("Helm deployment to be deleted {} ", chart.getReleaseName());
+            try {
+                chartService.uninstallChart(chart);
                 intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            case RUNNING:
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, newState, AutomationCompositionState.RUNNING,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            default:
-                LOGGER.warn("Cannot transition from state {} to state {}", currentState, newState);
-                break;
+                        automationCompositionElementId, DeployState.UNDEPLOYED, LockState.NONE);
+                chartMap.remove(automationCompositionElementId);
+                podStatusMap.remove(chart.getReleaseName());
+            } catch (ServiceException se) {
+                LOGGER.warn("Deletion of Helm deployment failed", se);
+            }
         }
     }
 
@@ -134,8 +111,8 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      * @throws PfModelException in case of an exception
      */
     @Override
-    public synchronized void automationCompositionElementUpdate(UUID automationCompositionId,
-        AutomationCompositionElement element, Map<String, Object> properties) throws PfModelException {
+    public synchronized void deploy(UUID automationCompositionId, AcElementDeploy element,
+            Map<String, Object> properties) throws PfModelException {
         @SuppressWarnings("unchecked")
         var chartData = (Map<String, Object>) properties.get("chart");
 
@@ -149,8 +126,7 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
                 checkPodStatus(automationCompositionId, element.getId(), chartInfo,
                         config.uninitializedToPassiveTimeout, config.podStatusCheckInterval);
             }
-        } catch (ServiceException | CoderException | IOException | ExecutionException
-                | InterruptedException e) {
+        } catch (ServiceException | CoderException | IOException | ExecutionException | InterruptedException e) {
             LOGGER.warn("Installation of Helm chart failed", e);
         }
     }
@@ -160,16 +136,14 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      *
      * @param chart ChartInfo
      */
-    public void checkPodStatus(UUID automationCompositionId, UUID elementId,
-            ChartInfo chart, int timeout, int podStatusCheckInterval) throws ExecutionException, InterruptedException {
+    public void checkPodStatus(UUID automationCompositionId, UUID elementId, ChartInfo chart, int timeout,
+            int podStatusCheckInterval) throws ExecutionException, InterruptedException {
         // Invoke runnable thread to check pod status
-        var result = executor.submit(new PodStatusValidator(chart, timeout,
-                podStatusCheckInterval), "Done");
+        var result = executor.submit(new PodStatusValidator(chart, timeout, podStatusCheckInterval), "Done");
         if (!result.get().isEmpty()) {
             LOGGER.info("Pod Status Validator Completed: {}", result.isDone());
             intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, elementId,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.PASSIVE,
-                ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+                    DeployState.DEPLOYED, LockState.LOCKED);
         }
     }
 }
index f1357e4..ee0039c 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -50,9 +50,9 @@ import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
 import org.onap.policy.clamp.acm.participant.kubernetes.parameters.CommonTestData;
 import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartService;
 import org.onap.policy.clamp.acm.participant.kubernetes.utils.TestUtils;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -106,24 +106,13 @@ class AutomationCompositionElementHandlerTest {
 
         doNothing().when(chartService).uninstallChart(charts.get(0));
 
-        automationCompositionElementHandler.automationCompositionElementStateChange(
-            commonTestData.getAutomationCompositionId(), automationCompositionElementId1,
-            AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.UNINITIALISED);
+        automationCompositionElementHandler.undeploy(
+            commonTestData.getAutomationCompositionId(), automationCompositionElementId1);
 
         doThrow(new ServiceException("Error uninstalling the chart")).when(chartService).uninstallChart(charts.get(0));
 
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-            commonTestData.getAutomationCompositionId(), automationCompositionElementId1,
-            AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-            commonTestData.getAutomationCompositionId(), automationCompositionElementId1,
-            AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
-            commonTestData.getAutomationCompositionId(), automationCompositionElementId1,
-            AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.RUNNING));
-
+        assertDoesNotThrow(() -> automationCompositionElementHandler.undeploy(
+            commonTestData.getAutomationCompositionId(), automationCompositionElementId1));
     }
 
     @Test
@@ -132,14 +121,14 @@ class AutomationCompositionElementHandlerTest {
         doReturn(true).when(chartService).installChart(any());
         doNothing().when(automationCompositionElementHandler).checkPodStatus(any(), any(), any(), anyInt(), anyInt());
         var elementId1 = UUID.randomUUID();
-        var element = new AutomationCompositionElement();
+        var element = new AcElementDeploy();
         element.setId(elementId1);
         element.setDefinition(new ToscaConceptIdentifier(KEY_NAME, "1.0.1"));
-        element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        element.setOrderedState(DeployOrder.DEPLOY);
 
         var nodeTemplatesMap =
             toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        automationCompositionElementHandler.automationCompositionElementUpdate(
+        automationCompositionElementHandler.deploy(
             commonTestData.getAutomationCompositionId(), element,
             nodeTemplatesMap.get(K8S_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
 
@@ -149,7 +138,7 @@ class AutomationCompositionElementHandlerTest {
 
         var elementId2 = UUID.randomUUID();
         element.setId(elementId2);
-        automationCompositionElementHandler.automationCompositionElementUpdate(
+        automationCompositionElementHandler.deploy(
             commonTestData.getAutomationCompositionId(), element,
             nodeTemplatesMap.get(K8S_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
 
index ca27c82..0b03e23 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021,2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
@@ -31,10 +31,9 @@ import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationComposit
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
 import org.onap.policy.clamp.acm.participant.policy.client.PolicyApiHttpClient;
 import org.onap.policy.clamp.acm.participant.policy.client.PolicyPapHttpClient;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
 import org.onap.policy.models.pdp.concepts.DeploymentSubGroup;
@@ -73,50 +72,22 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
     /**
      * Callback method to handle a automation composition element state change.
      *
-     * @param automationCompositionId        the ID of the automation composition
+     * @param automationCompositionId the ID of the automation composition
      * @param automationCompositionElementId the ID of the automation composition element
-     * @param currentState                   the current state of the automation composition element
-     * @param orderedState                   the state to which the automation composition element is changing to
      */
     @Override
-    public void automationCompositionElementStateChange(UUID automationCompositionId,
-                                                        UUID automationCompositionElementId,
-                                                        AutomationCompositionState currentState,
-                                                        AutomationCompositionOrderedState orderedState) {
-        switch (orderedState) {
-            case UNINITIALISED:
-                try {
-                    undeployPolicies(automationCompositionElementId);
-                    deletePolicyData(automationCompositionId, automationCompositionElementId, orderedState);
-                    intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                        automationCompositionElementId, orderedState, AutomationCompositionState.UNINITIALISED,
-                        ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                } catch (PfModelRuntimeException e) {
-                    LOGGER.error("Undeploying/Deleting policy failed {}", automationCompositionElementId, e);
-                }
-                break;
-            case PASSIVE:
-                try {
-                    undeployPolicies(automationCompositionElementId);
-                } catch (PfModelRuntimeException e) {
-                    LOGGER.error("Undeploying policies failed - no policies to undeploy {}",
-                        automationCompositionElementId);
-                }
-                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, orderedState, AutomationCompositionState.PASSIVE,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
-                break;
-            case RUNNING:
-                LOGGER.info("Running state is not supported");
-                break;
-            default:
-                LOGGER.debug("Unknown orderedstate {}", orderedState);
-                break;
+    public void undeploy(UUID automationCompositionId, UUID automationCompositionElementId) {
+        try {
+            undeployPolicies(automationCompositionElementId);
+            deletePolicyData(automationCompositionId, automationCompositionElementId);
+            intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, DeployState.UNDEPLOYED, LockState.NONE);
+        } catch (PfModelRuntimeException e) {
+            LOGGER.error("Undeploying/Deleting policy failed {}", automationCompositionElementId, e);
         }
     }
 
-    private void deletePolicyData(UUID automationCompositionId,
-                                  UUID automationCompositionElementId, AutomationCompositionOrderedState newState) {
+    private void deletePolicyData(UUID automationCompositionId, UUID automationCompositionElementId) {
         // Delete all policies of this automationComposition from policy framework
         for (var policy : policyMap.entrySet()) {
             apiHttpClient.deletePolicy(policy.getKey(), policy.getValue());
@@ -129,8 +100,7 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
         policyTypeMap.clear();
     }
 
-    private void deployPolicies(UUID automationCompositionId, UUID automationCompositionElementId,
-                                AutomationCompositionOrderedState newState) {
+    private void deployPolicies(UUID automationCompositionId, UUID automationCompositionElementId) {
         var deployFailure = false;
         // Deploy all policies of this automationComposition from Policy Framework
         if (!policyMap.entrySet().isEmpty()) {
@@ -145,11 +115,10 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
         } else {
             LOGGER.debug("No policies to deploy to {}", automationCompositionElementId);
         }
-        if (! deployFailure) {
+        if (!deployFailure) {
             // Update the AC element state
             intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
-                    automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
-                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+                    automationCompositionElementId, DeployState.DEPLOYED, LockState.LOCKED);
         }
     }
 
@@ -158,7 +127,7 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
         if (!policyMap.entrySet().isEmpty()) {
             for (var policy : policyMap.entrySet()) {
                 papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(),
-                    DeploymentSubGroup.Action.DELETE);
+                        DeploymentSubGroup.Action.DELETE);
             }
             LOGGER.debug("Undeployed policies from {} successfully", automationCompositionElementId);
         } else {
@@ -175,8 +144,8 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
      * @throws PfModelException in case of an exception
      */
     @Override
-    public void automationCompositionElementUpdate(UUID automationCompositionId,
-            AutomationCompositionElement element, Map<String, Object> properties) throws PfModelException {
+    public void deploy(UUID automationCompositionId, AcElementDeploy element, Map<String, Object> properties)
+            throws PfModelException {
         var createPolicyTypeResp = HttpStatus.SC_OK;
         var createPolicyResp = HttpStatus.SC_OK;
 
@@ -187,7 +156,7 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
                     policyTypeMap.put(policyType.getName(), policyType.getVersion());
                 }
                 LOGGER.info("Found Policy Types in automation composition definition: {} , Creating Policy Types",
-                    automationCompositionDefinition.getName());
+                        automationCompositionDefinition.getName());
                 createPolicyTypeResp = apiHttpClient.createPolicyType(automationCompositionDefinition).getStatus();
             }
             if (automationCompositionDefinition.getToscaTopologyTemplate().getPolicies() != null) {
@@ -197,16 +166,16 @@ public class AutomationCompositionElementHandler implements AutomationCompositio
                     }
                 }
                 LOGGER.info("Found Policies in automation composition definition: {} , Creating Policies",
-                    automationCompositionDefinition.getName());
+                        automationCompositionDefinition.getName());
                 createPolicyResp = apiHttpClient.createPolicy(automationCompositionDefinition).getStatus();
             }
             if (createPolicyTypeResp == HttpStatus.SC_OK && createPolicyResp == HttpStatus.SC_OK) {
                 LOGGER.info("PolicyTypes/Policies for the automation composition element : {} are created "
                         + "successfully", element.getId());
-                deployPolicies(automationCompositionId, element.getId(), element.getOrderedState());
+                deployPolicies(automationCompositionId, element.getId());
             } else {
                 LOGGER.error("Creation of PolicyTypes/Policies failed. Policies will not be deployed.");
             }
         }
     }
-}
\ No newline at end of file
+}
index 4fc10b8..e0b4a69 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,10 +33,8 @@ import org.mockito.Mockito;
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
 import org.onap.policy.clamp.acm.participant.policy.client.PolicyApiHttpClient;
 import org.onap.policy.clamp.acm.participant.policy.client.PolicyPapHttpClient;
-import org.onap.policy.clamp.acm.participant.policy.main.parameters.CommonTestData;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
@@ -59,14 +57,7 @@ class AutomationCompositionElementHandlerTest {
     void testHandlerDoesNotThrowExceptions() {
         var handler = getTestingHandler();
 
-        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(AC_ID, automationCompositionElementId,
-                AutomationCompositionState.UNINITIALISED, AutomationCompositionOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(AC_ID, automationCompositionElementId,
-                AutomationCompositionState.RUNNING, AutomationCompositionOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(AC_ID, automationCompositionElementId,
-                AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.RUNNING));
+        assertDoesNotThrow(() -> handler.undeploy(AC_ID, automationCompositionElementId));
     }
 
     private AutomationCompositionElementHandler getTestingHandler() {
@@ -76,14 +67,11 @@ class AutomationCompositionElementHandlerTest {
         return handler;
     }
 
-    private AutomationCompositionElement getTestingAcElement() {
-        var element = new AutomationCompositionElement();
+    private AcElementDeploy getTestingAcElement() {
+        var element = new AcElementDeploy();
         element.setDefinition(DEFINITION);
-        element.setDescription("Description");
         element.setId(automationCompositionElementId);
-        element.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
-        element.setParticipantId(CommonTestData.getParticipantId());
-        element.setState(AutomationCompositionState.UNINITIALISED);
+        element.setOrderedState(DeployOrder.DEPLOY);
         var template = new ToscaServiceTemplate();
         template.setToscaTopologyTemplate(new ToscaTopologyTemplate());
         template.getToscaTopologyTemplate().setPolicies(List.of(Map.of("DummyPolicy", new ToscaPolicy())));
@@ -102,17 +90,16 @@ class AutomationCompositionElementHandlerTest {
         var handler = getTestingHandler();
         var element = getTestingAcElement();
 
-        assertDoesNotThrow(() -> handler.automationCompositionElementUpdate(AC_ID, element, Map.of()));
+        assertDoesNotThrow(() -> handler.deploy(AC_ID, element, Map.of()));
 
-        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(AC_ID, automationCompositionElementId,
-                AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.UNINITIALISED));
+        assertDoesNotThrow(() -> handler.undeploy(AC_ID, automationCompositionElementId));
 
         // Mock failure in policy deployment
         doReturn(Response.serverError().build()).when(pap).handlePolicyDeployOrUndeploy(any(), any(), any());
-        assertDoesNotThrow(() -> handler.automationCompositionElementUpdate(AC_ID, element, Map.of()));
+        assertDoesNotThrow(() -> handler.deploy(AC_ID, element, Map.of()));
 
         // Mock failure in policy type creation
         doReturn(Response.serverError().build()).when(api).createPolicyType(any());
-        assertDoesNotThrow(() -> handler.automationCompositionElementUpdate(AC_ID, element, Map.of()));
+        assertDoesNotThrow(() -> handler.deploy(AC_ID, element, Map.of()));
     }
 }
index ee769f4..da6bccb 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,9 +22,7 @@ package org.onap.policy.clamp.acm.participant.intermediary.api;
 
 import java.util.Map;
 import java.util.UUID;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
 import org.onap.policy.models.base.PfModelException;
 
 /**
@@ -35,13 +33,9 @@ public interface AutomationCompositionElementListener {
      * Handle a automation composition element state change.
      *
      * @param automationCompositionElementId the ID of the automation composition element
-     * @param currentState the current state of the automation composition element
-     * @param newState the state to which the automation composition element is changing to
      * @throws PfModelException in case of a model exception
      */
-    public void automationCompositionElementStateChange(UUID automationCompositionId,
-        UUID automationCompositionElementId, AutomationCompositionState currentState,
-        AutomationCompositionOrderedState newState) throws PfModelException;
+    public void undeploy(UUID automationCompositionId, UUID automationCompositionElementId) throws PfModelException;
 
     /**
      * Handle an update on a automation composition element.
@@ -51,6 +45,6 @@ public interface AutomationCompositionElementListener {
      * @param properties properties Map
      * @throws PfModelException from Policy framework
      */
-    public void automationCompositionElementUpdate(UUID automationCompositionId,
-        AutomationCompositionElement element, Map<String, Object> properties) throws PfModelException;
+    public void deploy(UUID automationCompositionId, AcElementDeploy element, Map<String, Object> properties)
+            throws PfModelException;
 }
index d74c41f..998a632 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 package org.onap.policy.clamp.acm.participant.intermediary.api;
 
 import java.util.UUID;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 
 /**
  * This interface is used by participant implementations to use the participant intermediary.
@@ -38,17 +36,14 @@ public interface ParticipantIntermediaryApi {
      * @param automationCompositionElementListener The automation composition element listener to register
      */
     void registerAutomationCompositionElementListener(
-        AutomationCompositionElementListener automationCompositionElementListener);
+            AutomationCompositionElementListener automationCompositionElementListener);
 
     /**
      * Update the state of a automation composition element.
      *
      * @param id the ID of the automation composition element to update the state on
-     * @param currentState the state of the automation composition element
      * @param newState the state of the automation composition element
-     * @return AutomationCompositionElement updated automation composition element
      */
-    AutomationCompositionElement updateAutomationCompositionElementState(UUID automationCompositionId,
-        UUID id, AutomationCompositionOrderedState currentState, AutomationCompositionState newState,
-        ParticipantMessageType messageType);
+    void updateAutomationCompositionElementState(UUID automationCompositionId, UUID id, DeployState newState,
+            LockState lockState);
 }
index acbcc37..d729a09 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,10 +25,8 @@ import java.util.UUID;
 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
 import org.onap.policy.clamp.acm.participant.intermediary.handler.AutomationCompositionHandler;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.springframework.stereotype.Component;
 
 /**
@@ -56,10 +54,9 @@ public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryAp
     }
 
     @Override
-    public AutomationCompositionElement updateAutomationCompositionElementState(UUID automationCompositionId, UUID id,
-            AutomationCompositionOrderedState currentState, AutomationCompositionState newState,
-            ParticipantMessageType messageType) {
-        return automationCompositionHandler.updateAutomationCompositionElementState(automationCompositionId, id,
-                currentState, newState);
+    public void updateAutomationCompositionElementState(UUID automationCompositionId, UUID id, DeployState newState,
+            LockState lockState) {
+        automationCompositionHandler.updateAutomationCompositionElementState(automationCompositionId, id, newState,
+                lockState);
     }
 }
index 95e0f27..2d845d4 100644 (file)
@@ -27,23 +27,26 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import java.util.stream.Collectors;
 import lombok.Getter;
 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
 import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
 import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
 import org.onap.policy.clamp.models.acm.concepts.AcElementDeployAck;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeploy;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeployAck;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
+import org.onap.policy.clamp.models.acm.persistence.provider.AcInstanceStateResolver;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
@@ -60,6 +63,7 @@ public class AutomationCompositionHandler {
 
     private final UUID participantId;
     private final ParticipantMessagePublisher publisher;
+    private final AcInstanceStateResolver acInstanceStateResolver;
 
     @Getter
     private final Map<UUID, AutomationComposition> automationCompositionMap = new LinkedHashMap<>();
@@ -68,7 +72,7 @@ public class AutomationCompositionHandler {
     private final Map<UUID, AutomationCompositionElement> elementsOnThisParticipant = new LinkedHashMap<>();
 
     @Getter
-    private List<AutomationCompositionElementListener> listeners = new ArrayList<>();
+    private final List<AutomationCompositionElementListener> listeners = new ArrayList<>();
 
     /**
      * Constructor, set the participant ID and messageSender.
@@ -79,6 +83,7 @@ public class AutomationCompositionHandler {
     public AutomationCompositionHandler(ParticipantParameters parameters, ParticipantMessagePublisher publisher) {
         this.participantId = parameters.getIntermediaryParameters().getParticipantId();
         this.publisher = publisher;
+        this.acInstanceStateResolver = new AcInstanceStateResolver();
     }
 
     public void registerAutomationCompositionElementListener(AutomationCompositionElementListener listener) {
@@ -90,30 +95,32 @@ public class AutomationCompositionHandler {
      *
      * @param automationCompositionId the automationComposition Id
      * @param id the automationComposition UUID
-     * @param orderedState the current state
-     * @param newState the ordered state
-     * @return automationCompositionElement the updated automation composition element
+     * @param deployState the DeployState state
      */
-    public AutomationCompositionElement updateAutomationCompositionElementState(UUID automationCompositionId, UUID id,
-            AutomationCompositionOrderedState orderedState, AutomationCompositionState newState) {
+    public void updateAutomationCompositionElementState(UUID automationCompositionId, UUID id, DeployState deployState,
+            LockState lockState) {
 
         if (id == null) {
             LOGGER.warn("Cannot update Automation composition element state, id is null");
-            return null;
+            return;
         }
 
         // Update states of AutomationCompositionElement in automationCompositionMap
         for (var automationComposition : automationCompositionMap.values()) {
             var element = automationComposition.getElements().get(id);
             if (element != null) {
-                element.setOrderedState(orderedState);
-                element.setState(newState);
+                element.setDeployState(deployState);
+                element.setLockState(lockState);
             }
             var checkOpt = automationComposition.getElements().values().stream()
-                    .filter(acElement -> !newState.equals(acElement.getState())).findAny();
+                    .filter(acElement -> !deployState.equals(acElement.getDeployState())).findAny();
+            if (checkOpt.isEmpty()) {
+                automationComposition.setDeployState(deployState);
+            }
+            checkOpt = automationComposition.getElements().values().stream()
+                    .filter(acElement -> !lockState.equals(acElement.getLockState())).findAny();
             if (checkOpt.isEmpty()) {
-                automationComposition.setState(newState);
-                automationComposition.setOrderedState(orderedState);
+                automationComposition.setLockState(lockState);
             }
         }
 
@@ -124,19 +131,17 @@ public class AutomationCompositionHandler {
                     new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
             automationCompositionStateChangeAck.setParticipantId(participantId);
             automationCompositionStateChangeAck.setAutomationCompositionId(automationCompositionId);
-            acElement.setOrderedState(orderedState);
-            acElement.setState(newState);
+            acElement.setDeployState(deployState);
+            acElement.setLockState(lockState);
             automationCompositionStateChangeAck.getAutomationCompositionResultMap().put(acElement.getId(),
-                    new AcElementDeployAck(newState, null, null, true,
+                    new AcElementDeployAck(deployState, lockState, true,
                             "Automation composition element {} state changed to {}\", id, newState)"));
-            LOGGER.debug("Automation composition element {} state changed to {}", id, newState);
+            LOGGER.debug("Automation composition element {} state changed to {}", id, deployState);
             automationCompositionStateChangeAck
-                    .setMessage("AutomationCompositionElement state changed to {} " + newState);
+                    .setMessage("AutomationCompositionElement state changed to {} " + deployState);
             automationCompositionStateChangeAck.setResult(true);
             publisher.sendAutomationCompositionAck(automationCompositionStateChangeAck);
-            return acElement;
         }
-        return null;
     }
 
     /**
@@ -168,8 +173,32 @@ public class AutomationCompositionHandler {
             return;
         }
 
-        handleState(automationComposition, stateChangeMsg.getOrderedState(), stateChangeMsg.getStartPhase(),
-                acElementDefinitions);
+        if (!checkConsistantOrderState(automationComposition, stateChangeMsg.getDeployOrderedState(),
+                stateChangeMsg.getLockOrderedState())) {
+            var automationCompositionAck =
+                    new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
+            automationCompositionAck.setParticipantId(participantId);
+            automationCompositionAck.setMessage("Automation composition is already in state "
+                    + stateChangeMsg.getDeployOrderedState() + " and " + stateChangeMsg.getLockOrderedState());
+            automationCompositionAck.setResult(false);
+            automationCompositionAck.setAutomationCompositionId(automationComposition.getInstanceId());
+            publisher.sendAutomationCompositionAck(automationCompositionAck);
+            return;
+        }
+
+        if (DeployOrder.NONE.equals(stateChangeMsg.getDeployOrderedState())) {
+            handleLockOrderState(automationComposition, stateChangeMsg.getLockOrderedState(),
+                    stateChangeMsg.getStartPhase(), acElementDefinitions);
+        } else {
+            handleDeployOrderState(automationComposition, stateChangeMsg.getDeployOrderedState(),
+                    stateChangeMsg.getStartPhase(), acElementDefinitions);
+        }
+    }
+
+    private boolean checkConsistantOrderState(AutomationComposition automationComposition, DeployOrder deployOrder,
+            LockOrder lockOrder) {
+        return acInstanceStateResolver.resolve(deployOrder, lockOrder, automationComposition.getDeployState(),
+                automationComposition.getLockState()) != null;
     }
 
     /**
@@ -180,18 +209,33 @@ public class AutomationCompositionHandler {
      * @param startPhaseMsg startPhase from message
      * @param acElementDefinitions the list of AutomationCompositionElementDefinition
      */
-    private void handleState(final AutomationComposition automationComposition,
-            AutomationCompositionOrderedState orderedState, Integer startPhaseMsg,
-            List<AutomationCompositionElementDefinition> acElementDefinitions) {
+    private void handleDeployOrderState(final AutomationComposition automationComposition, DeployOrder orderedState,
+            Integer startPhaseMsg, List<AutomationCompositionElementDefinition> acElementDefinitions) {
+
+        if (DeployOrder.UNDEPLOY.equals(orderedState)) {
+            handleUndeployState(automationComposition, startPhaseMsg, acElementDefinitions);
+        } else {
+            LOGGER.debug("StateChange message has no state, state is null {}", automationComposition.getKey());
+        }
+    }
+
+    /**
+     * Method to handle state changes.
+     *
+     * @param automationComposition participant response
+     * @param orderedState automation composition ordered state
+     * @param startPhaseMsg startPhase from message
+     * @param acElementDefinitions the list of AutomationCompositionElementDefinition
+     */
+    private void handleLockOrderState(final AutomationComposition automationComposition, LockOrder orderedState,
+            Integer startPhaseMsg, List<AutomationCompositionElementDefinition> acElementDefinitions) {
+
         switch (orderedState) {
-            case UNINITIALISED:
-                handleUninitialisedState(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
-                break;
-            case PASSIVE:
-                handlePassiveState(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+            case LOCK:
+                handleLockState(automationComposition, startPhaseMsg, acElementDefinitions);
                 break;
-            case RUNNING:
-                handleRunningState(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+            case UNLOCK:
+                handleUnlockState(automationComposition, startPhaseMsg, acElementDefinitions);
                 break;
             default:
                 LOGGER.debug("StateChange message has no state, state is null {}", automationComposition.getKey());
@@ -208,67 +252,49 @@ public class AutomationCompositionHandler {
     public void handleAutomationCompositionDeploy(AutomationCompositionDeploy updateMsg,
             List<AutomationCompositionElementDefinition> acElementDefinitions) {
 
-        if (!updateMsg.appliesTo(participantId)) {
+        if (updateMsg.getParticipantUpdatesList().isEmpty()) {
+            LOGGER.warn("No AutomationCompositionElement updates in message {}",
+                    updateMsg.getAutomationCompositionId());
             return;
         }
 
-        if (0 == updateMsg.getStartPhase()) {
-            handleAcUpdatePhase0(updateMsg, acElementDefinitions);
-        } else {
-            handleAcUpdatePhaseN(updateMsg, acElementDefinitions);
+        for (var participantDeploy : updateMsg.getParticipantUpdatesList()) {
+            if (participantId.equals(participantDeploy.getParticipantId())) {
+                if (updateMsg.isFirstStartPhase()) {
+                    initializeDeploy(updateMsg.getMessageId(), updateMsg.getAutomationCompositionId(),
+                            participantDeploy);
+                }
+                callParticipanDeploy(participantDeploy.getAcElementList(), acElementDefinitions,
+                        updateMsg.getStartPhase(), updateMsg.getAutomationCompositionId());
+            }
         }
     }
 
-    private void handleAcUpdatePhase0(AutomationCompositionDeploy updateMsg,
-            List<AutomationCompositionElementDefinition> acElementDefinitions) {
-        var automationComposition = automationCompositionMap.get(updateMsg.getAutomationCompositionId());
+    private void initializeDeploy(UUID messageId, UUID instanceId, ParticipantDeploy participantDeploy) {
+        var automationComposition = automationCompositionMap.get(instanceId);
 
-        // TODO: Updates to existing AutomationCompositions are not supported yet (Addition/Removal of
-        // AutomationComposition
-        // elements to existing AutomationComposition has to be supported).
         if (automationComposition != null) {
             var automationCompositionUpdateAck =
                     new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_DEPLOY_ACK);
             automationCompositionUpdateAck.setParticipantId(participantId);
 
-            automationCompositionUpdateAck.setMessage("Automation composition " + updateMsg.getAutomationCompositionId()
-                    + " already defined on participant " + participantId);
+            automationCompositionUpdateAck.setMessage(
+                    "Automation composition " + instanceId + " already defined on participant " + participantId);
             automationCompositionUpdateAck.setResult(false);
-            automationCompositionUpdateAck.setResponseTo(updateMsg.getMessageId());
-            automationCompositionUpdateAck.setAutomationCompositionId(updateMsg.getAutomationCompositionId());
+            automationCompositionUpdateAck.setResponseTo(messageId);
+            automationCompositionUpdateAck.setAutomationCompositionId(instanceId);
             publisher.sendAutomationCompositionAck(automationCompositionUpdateAck);
             return;
         }
 
-        if (updateMsg.getParticipantUpdatesList().isEmpty()) {
-            LOGGER.warn("No AutomationCompositionElement updates in message {}",
-                    updateMsg.getAutomationCompositionId());
-            return;
-        }
-
         automationComposition = new AutomationComposition();
-        automationComposition.setInstanceId(updateMsg.getAutomationCompositionId());
-        var acElements = storeElementsOnThisParticipant(updateMsg.getParticipantUpdatesList());
-        var acElementMap = prepareAcElementMap(acElements);
-        automationComposition.setElements(acElementMap);
-        automationCompositionMap.put(updateMsg.getAutomationCompositionId(), automationComposition);
-
-        handleAutomationCompositionElementUpdate(acElements, acElementDefinitions, updateMsg.getStartPhase(),
-                updateMsg.getAutomationCompositionId());
-    }
-
-    private void handleAcUpdatePhaseN(AutomationCompositionDeploy updateMsg,
-            List<AutomationCompositionElementDefinition> acElementDefinitions) {
-
-        var acElementList = updateMsg.getParticipantUpdatesList().stream()
-                .flatMap(participantUpdate -> participantUpdate.getAutomationCompositionElementList().stream())
-                .filter(element -> participantId.equals(element.getParticipantId())).collect(Collectors.toList());
-
-        handleAutomationCompositionElementUpdate(acElementList, acElementDefinitions, updateMsg.getStartPhase(),
-                updateMsg.getAutomationCompositionId());
+        automationComposition.setInstanceId(instanceId);
+        var acElements = storeElementsOnThisParticipant(participantDeploy);
+        automationComposition.setElements(prepareAcElementMap(acElements));
+        automationCompositionMap.put(instanceId, automationComposition);
     }
 
-    private void handleAutomationCompositionElementUpdate(List<AutomationCompositionElement> acElements,
+    private void callParticipanDeploy(List<AcElementDeploy> acElements,
             List<AutomationCompositionElementDefinition> acElementDefinitions, Integer startPhaseMsg,
             UUID automationCompositionId) {
         try {
@@ -280,7 +306,7 @@ public class AutomationCompositionHandler {
                         for (var acElementListener : listeners) {
                             var map = new HashMap<>(acElementNodeTemplate.getProperties());
                             map.putAll(element.getProperties());
-                            acElementListener.automationCompositionElementUpdate(automationCompositionId, element, map);
+                            acElementListener.deploy(automationCompositionId, element, map);
                         }
                     }
                 }
@@ -302,14 +328,16 @@ public class AutomationCompositionHandler {
         return null;
     }
 
-    private List<AutomationCompositionElement> storeElementsOnThisParticipant(
-            List<ParticipantDeploy> participantUpdates) {
-        var acElementList = participantUpdates.stream()
-                .flatMap(participantUpdate -> participantUpdate.getAutomationCompositionElementList().stream())
-                .filter(element -> participantId.equals(element.getParticipantId())).collect(Collectors.toList());
-
-        for (var element : acElementList) {
-            elementsOnThisParticipant.put(element.getId(), element);
+    private List<AutomationCompositionElement> storeElementsOnThisParticipant(ParticipantDeploy participantDeploy) {
+        List<AutomationCompositionElement> acElementList = new ArrayList<>();
+        for (var element : participantDeploy.getAcElementList()) {
+            var acElement = new AutomationCompositionElement();
+            acElement.setId(element.getId());
+            acElement.setDefinition(element.getDefinition());
+            acElement.setDeployState(DeployState.DEPLOYING);
+            acElement.setLockState(LockState.NONE);
+            elementsOnThisParticipant.put(element.getId(), acElement);
+            acElementList.add(acElement);
         }
         return acElementList;
     }
@@ -326,17 +354,18 @@ public class AutomationCompositionHandler {
      * Method to handle when the new state from participant is UNINITIALISED state.
      *
      * @param automationComposition participant response
-     * @param orderedState orderedState
      * @param startPhaseMsg startPhase from message
      * @param acElementDefinitions the list of AutomationCompositionElementDefinition
      */
-    private void handleUninitialisedState(final AutomationComposition automationComposition,
-            final AutomationCompositionOrderedState orderedState, Integer startPhaseMsg,
+    private void handleUndeployState(final AutomationComposition automationComposition, Integer startPhaseMsg,
             List<AutomationCompositionElementDefinition> acElementDefinitions) {
-        handleStateChange(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+
+        automationComposition.getElements().values().stream()
+                .forEach(acElement -> automationCompositionElementUndeploy(automationComposition.getInstanceId(),
+                        acElement, startPhaseMsg, acElementDefinitions));
+
         boolean isAllUninitialised = automationComposition.getElements().values().stream()
-                .filter(element -> !AutomationCompositionState.UNINITIALISED.equals(element.getState())).findAny()
-                .isEmpty();
+                .filter(element -> !DeployState.UNDEPLOYED.equals(element.getDeployState())).findAny().isEmpty();
         if (isAllUninitialised) {
             automationCompositionMap.remove(automationComposition.getInstanceId());
             automationComposition.getElements().values()
@@ -348,60 +377,55 @@ public class AutomationCompositionHandler {
      * Method to handle when the new state from participant is PASSIVE state.
      *
      * @param automationComposition participant response
-     * @param orderedState orderedState
      * @param startPhaseMsg startPhase from message
      * @param acElementDefinitions the list of AutomationCompositionElementDefinition
      */
-    private void handlePassiveState(final AutomationComposition automationComposition,
-            final AutomationCompositionOrderedState orderedState, Integer startPhaseMsg,
+    private void handleLockState(final AutomationComposition automationComposition, Integer startPhaseMsg,
             List<AutomationCompositionElementDefinition> acElementDefinitions) {
-        handleStateChange(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+        automationComposition.getElements().values().stream()
+                .forEach(acElement -> automationCompositionElementLock(automationComposition.getInstanceId(), acElement,
+                        startPhaseMsg, acElementDefinitions));
     }
 
     /**
      * Method to handle when the new state from participant is RUNNING state.
      *
      * @param automationComposition participant response
-     * @param orderedState orderedState
      * @param startPhaseMsg startPhase from message
      * @param acElementDefinitions the list of AutomationCompositionElementDefinition
      */
-    private void handleRunningState(final AutomationComposition automationComposition,
-            final AutomationCompositionOrderedState orderedState, Integer startPhaseMsg,
+    private void handleUnlockState(final AutomationComposition automationComposition, Integer startPhaseMsg,
             List<AutomationCompositionElementDefinition> acElementDefinitions) {
-        handleStateChange(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+        automationComposition.getElements().values().stream()
+                .forEach(acElement -> automationCompositionElementUnlock(automationComposition.getInstanceId(),
+                        acElement, startPhaseMsg, acElementDefinitions));
     }
 
-    /**
-     * Method to update the state of automation composition elements.
-     *
-     * @param automationComposition participant status in memory
-     * @param orderedState orderedState the new ordered state the participant should have
-     * @param startPhaseMsg startPhase from message
-     * @param acElementDefinitions the list of AutomationCompositionElementDefinition
-     */
-    private void handleStateChange(AutomationComposition automationComposition,
-            final AutomationCompositionOrderedState orderedState, Integer startPhaseMsg,
-            List<AutomationCompositionElementDefinition> acElementDefinitions) {
-
-        if (orderedState.equals(automationComposition.getOrderedState())) {
-            var automationCompositionAck =
-                    new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
-            automationCompositionAck.setParticipantId(participantId);
-            automationCompositionAck.setMessage("Automation composition is already in state " + orderedState);
-            automationCompositionAck.setResult(false);
-            automationCompositionAck.setAutomationCompositionId(automationComposition.getInstanceId());
-            publisher.sendAutomationCompositionAck(automationCompositionAck);
-            return;
+    private void automationCompositionElementLock(UUID instanceId, AutomationCompositionElement acElement,
+            Integer startPhaseMsg, List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        var acElementNodeTemplate = getAcElementNodeTemplate(acElementDefinitions, acElement.getDefinition());
+        if (acElementNodeTemplate != null) {
+            int startPhase = ParticipantUtils.findStartPhase(acElementNodeTemplate.getProperties());
+            if (startPhaseMsg.equals(startPhase)) {
+                updateAutomationCompositionElementState(instanceId, acElement.getId(), DeployState.DEPLOYED,
+                        LockState.LOCKED);
+            }
         }
+    }
 
-        automationComposition.getElements().values().stream()
-                .forEach(acElement -> automationCompositionElementStateChange(automationComposition, orderedState,
-                        acElement, startPhaseMsg, acElementDefinitions));
+    private void automationCompositionElementUnlock(UUID instanceId, AutomationCompositionElement acElement,
+            Integer startPhaseMsg, List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        var acElementNodeTemplate = getAcElementNodeTemplate(acElementDefinitions, acElement.getDefinition());
+        if (acElementNodeTemplate != null) {
+            int startPhase = ParticipantUtils.findStartPhase(acElementNodeTemplate.getProperties());
+            if (startPhaseMsg.equals(startPhase)) {
+                updateAutomationCompositionElementState(instanceId, acElement.getId(), DeployState.DEPLOYED,
+                        LockState.UNLOCKED);
+            }
+        }
     }
 
-    private void automationCompositionElementStateChange(AutomationComposition automationComposition,
-            AutomationCompositionOrderedState orderedState, AutomationCompositionElement acElement,
+    private void automationCompositionElementUndeploy(UUID instanceId, AutomationCompositionElement acElement,
             Integer startPhaseMsg, List<AutomationCompositionElementDefinition> acElementDefinitions) {
         var acElementNodeTemplate = getAcElementNodeTemplate(acElementDefinitions, acElement.getDefinition());
         if (acElementNodeTemplate != null) {
@@ -409,11 +433,9 @@ public class AutomationCompositionHandler {
             if (startPhaseMsg.equals(startPhase)) {
                 for (var acElementListener : listeners) {
                     try {
-                        acElementListener.automationCompositionElementStateChange(automationComposition.getInstanceId(),
-                                acElement.getId(), acElement.getState(), orderedState);
+                        acElementListener.undeploy(instanceId, acElement.getId());
                     } catch (PfModelException e) {
-                        LOGGER.debug("Automation composition element update failed {}",
-                                automationComposition.getInstanceId());
+                        LOGGER.debug("Automation composition element update failed {}", instanceId);
                     }
                 }
             }
index 3aae2c4..719c428 100644 (file)
@@ -261,7 +261,8 @@ public class ParticipantHandler {
         for (var entry : automationCompositionHandler.getAutomationCompositionMap().entrySet()) {
             var acInfo = new AutomationCompositionInfo();
             acInfo.setAutomationCompositionId(entry.getKey());
-            acInfo.setState(entry.getValue().getState());
+            acInfo.setDeployState(entry.getValue().getDeployState());
+            acInfo.setLockState(entry.getValue().getLockState());
             automationCompositionInfoList.add(acInfo);
         }
         return automationCompositionInfoList;
index 9b0f910..d86c9d0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,9 +27,8 @@ import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.common.utils.coder.CoderException;
 
 class ParticipantIntermediaryApiImplTest {
@@ -47,11 +46,10 @@ class ParticipantIntermediaryApiImplTest {
         var acElementListener = Mockito.mock(AutomationCompositionElementListener.class);
         apiImpl.registerAutomationCompositionElementListener(acElementListener);
 
-        var acElement = apiImpl.updateAutomationCompositionElementState(UUID.randomUUID(), uuid,
-                AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE,
-                ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
-        assertEquals(AutomationCompositionOrderedState.UNINITIALISED, acElement.getOrderedState());
+        apiImpl.updateAutomationCompositionElementState(UUID.randomUUID(), uuid, DeployState.UNDEPLOYED,
+                LockState.NONE);
+        var acElement = automationComposiitonHandler.getElementsOnThisParticipant().get(uuid);
+        assertEquals(DeployState.UNDEPLOYED, acElement.getDeployState());
         assertEquals(uuid, acElement.getId());
-
     }
 }
index ae8a8b2..35da039 100644 (file)
@@ -24,7 +24,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.Mockito.mock;
 
 import java.util.List;
@@ -33,14 +32,15 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.DeployState;
+import org.onap.policy.clamp.models.acm.concepts.LockState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeploy;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -55,15 +55,7 @@ class AutomationCompositionHandlerTest {
         assertNotNull(ach.getAutomationCompositionMap());
         assertNotNull(ach.getElementsOnThisParticipant());
 
-        var elementId1 = UUID.randomUUID();
-        var element = new AutomationCompositionElement();
-        element.setId(elementId1);
-        element.setDefinition(
-                new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "1.0.1"));
-
-        element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
-
-        AutomationCompositionElementListener listener = mock(AutomationCompositionElementListener.class);
+        var listener = mock(AutomationCompositionElementListener.class);
         ach.registerAutomationCompositionElementListener(listener);
         assertThat(ach.getListeners()).contains(listener);
     }
@@ -73,11 +65,11 @@ class AutomationCompositionHandlerTest {
         var id = UUID.randomUUID();
 
         var ach = commonTestData.getMockAutomationCompositionHandler();
-        assertNull(ach.updateAutomationCompositionElementState(null, null,
-                AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
+        assertDoesNotThrow(
+                () -> ach.updateAutomationCompositionElementState(null, null, DeployState.UNDEPLOYED, LockState.NONE));
 
-        assertNull(ach.updateAutomationCompositionElementState(null, id,
-                AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
+        assertDoesNotThrow(
+                () -> ach.updateAutomationCompositionElementState(null, id, DeployState.UNDEPLOYED, LockState.NONE));
     }
 
     @Test
@@ -89,29 +81,29 @@ class AutomationCompositionHandlerTest {
         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
         var key = ach.getElementsOnThisParticipant().keySet().iterator().next();
         var value = ach.getElementsOnThisParticipant().get(key);
-        assertEquals(AutomationCompositionState.UNINITIALISED, value.getState());
-        ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, uuid,
-                AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE);
-        assertEquals(AutomationCompositionState.PASSIVE, value.getState());
+        assertEquals(DeployState.UNDEPLOYED, value.getDeployState());
+        assertEquals(LockState.LOCKED, value.getLockState());
+        ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, uuid, DeployState.DEPLOYED,
+                LockState.UNLOCKED);
+        assertEquals(DeployState.DEPLOYED, value.getDeployState());
 
         ach.getAutomationCompositionMap().values().iterator().next().getElements().putIfAbsent(key, value);
-        ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.RUNNING);
-        assertEquals(AutomationCompositionState.RUNNING, value.getState());
+        ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key, DeployState.DEPLOYED,
+                LockState.UNLOCKED);
+        assertEquals(DeployState.DEPLOYED, value.getDeployState());
 
         ach.getElementsOnThisParticipant().remove(key, value);
         ach.getAutomationCompositionMap().values().iterator().next().getElements().clear();
-        assertNull(ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.RUNNING));
-
+        assertDoesNotThrow(() -> ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
+                DeployState.DEPLOYED, LockState.UNLOCKED));
     }
 
     @Test
-    void handleAutomationCompositionUpdateExceptionTest() {
+    void handleAutomationCompositionStateChangeTest() {
         var uuid = UUID.randomUUID();
         var partecipantId = CommonTestData.getParticipantId();
         var definition = CommonTestData.getDefinition();
-        var stateChange = commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.RUNNING);
+        var stateChange = commonTestData.getStateChange(partecipantId, uuid, DeployOrder.NONE, LockOrder.UNLOCK);
         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
         assertDoesNotThrow(() -> ach
                 .handleAutomationCompositionStateChange(mock(AutomationCompositionStateChange.class), List.of()));
@@ -121,20 +113,30 @@ class AutomationCompositionHandlerTest {
         stateChange.setAutomationCompositionId(UUID.randomUUID());
         stateChange.setParticipantId(newPartecipantId);
         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChange, List.of()));
+    }
 
+    @Test
+    void handleAutomationCompositionDeployTest() {
         var acd = new AutomationCompositionElementDefinition();
+        var definition = CommonTestData.getDefinition();
         acd.setAcElementDefinitionId(definition);
         var updateMsg = new AutomationCompositionDeploy();
         updateMsg.setAutomationCompositionId(UUID.randomUUID());
+        var uuid = UUID.randomUUID();
         updateMsg.setMessageId(uuid);
+        var partecipantId = CommonTestData.getParticipantId();
         updateMsg.setParticipantId(partecipantId);
+        updateMsg.setFirstStartPhase(true);
         updateMsg.setStartPhase(0);
         var acElementDefinitions = List.of(acd);
+        var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
         assertDoesNotThrow(() -> ach.handleAutomationCompositionDeploy(updateMsg, acElementDefinitions));
+        updateMsg.setFirstStartPhase(false);
         updateMsg.setStartPhase(1);
         assertDoesNotThrow(() -> ach.handleAutomationCompositionDeploy(updateMsg, acElementDefinitions));
 
         ach.getAutomationCompositionMap().clear();
+        updateMsg.setFirstStartPhase(true);
         updateMsg.setStartPhase(0);
         assertDoesNotThrow(() -> ach.handleAutomationCompositionDeploy(updateMsg, acElementDefinitions));
 
@@ -145,9 +147,9 @@ class AutomationCompositionHandlerTest {
         updateMsg.setStartPhase(1);
         var participantDeploy = new ParticipantDeploy();
         participantDeploy.setParticipantId(partecipantId);
-        var element = new AutomationCompositionElement();
+        var element = new AcElementDeploy();
         element.setDefinition(definition);
-        participantDeploy.setAutomationCompositionElementList(List.of(element));
+        participantDeploy.setAcElementList(List.of(element));
         updateMsg.setParticipantUpdatesList(List.of(participantDeploy));
 
         var acd2 = new AutomationCompositionElementDefinition();
@@ -158,34 +160,38 @@ class AutomationCompositionHandlerTest {
     }
 
     @Test
-    void automationCompositionStateChangeUninitialisedTest() {
+    void acUndeployTest() {
         var uuid = UUID.randomUUID();
         var partecipantId = CommonTestData.getParticipantId();
         var definition = CommonTestData.getDefinition();
 
-        var stateChangeUninitialised =
-                commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.UNINITIALISED);
+        var stateChangeUndeploy =
+                commonTestData.getStateChange(partecipantId, uuid, DeployOrder.UNDEPLOY, LockOrder.NONE);
 
         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
-        ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of());
-        stateChangeUninitialised.setAutomationCompositionId(UUID.randomUUID());
-        stateChangeUninitialised.setParticipantId(CommonTestData.getRndParticipantId());
-        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of()));
+        stateChangeUndeploy
+                .setAutomationCompositionId(ach.getAutomationCompositionMap().entrySet().iterator().next().getKey());
+        ach.handleAutomationCompositionStateChange(stateChangeUndeploy, List.of());
+        stateChangeUndeploy.setAutomationCompositionId(UUID.randomUUID());
+        stateChangeUndeploy.setParticipantId(CommonTestData.getRndParticipantId());
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangeUndeploy, List.of()));
     }
 
     @Test
-    void automationCompositionStateChangePassiveTest() {
+    void automationCompositionStateUnlock() {
         var uuid = UUID.randomUUID();
         var partecipantId = CommonTestData.getParticipantId();
         var definition = CommonTestData.getDefinition();
 
-        var stateChangePassive =
-                commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.PASSIVE);
+        var stateChangeUnlock =
+                commonTestData.getStateChange(partecipantId, uuid, DeployOrder.NONE, LockOrder.UNLOCK);
 
         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
-        ach.handleAutomationCompositionStateChange(stateChangePassive, List.of());
-        stateChangePassive.setAutomationCompositionId(UUID.randomUUID());
-        stateChangePassive.setParticipantId(CommonTestData.getRndParticipantId());
-        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangePassive, List.of()));
+        stateChangeUnlock
+                .setAutomationCompositionId(ach.getAutomationCompositionMap().entrySet().iterator().next().getKey());
+        ach.handleAutomationCompositionStateChange(stateChangeUnlock, List.of());
+        stateChangeUnlock.setAutomationCompositionId(UUID.randomUUID());
+        stateChangeUnlock.setParticipantId(CommonTestData.getRndParticipantId());
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangeUnlock, List.of()));
     }
 }
index 9641edc..4dcfd14 100644 (file)
@@ -37,11 +37,12 @@ import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHan
 import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
-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.DeployState;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.endpoints.parameters.TopicParameters;
 import org.onap.policy.common.utils.coder.Coder;
@@ -272,7 +273,7 @@ public class CommonTestData {
         acElement.setId(uuid);
         acElement.setParticipantId(participantId);
         acElement.setDefinition(definition);
-        acElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        acElement.setDeployState(DeployState.UNDEPLOYED);
 
         Map<UUID, AutomationCompositionElement> elementsOnThisParticipant = new LinkedHashMap<>();
         elementsOnThisParticipant.put(uuid, acElement);
@@ -289,14 +290,8 @@ public class CommonTestData {
     public AutomationCompositionHandler setTestAutomationCompositionHandler(ToscaConceptIdentifier definition,
             UUID uuid, UUID participantId) {
         var ach = getMockAutomationCompositionHandler();
-
-        var key = getTestAutomationCompositionMap().keySet().iterator().next();
-        var value = getTestAutomationCompositionMap().get(key);
-        ach.getAutomationCompositionMap().put(key, value);
-
-        var keyElem = setAutomationCompositionElementTest(uuid, definition, participantId).keySet().iterator().next();
-        var valueElem = setAutomationCompositionElementTest(uuid, definition, participantId).get(keyElem);
-        ach.getElementsOnThisParticipant().put(keyElem, valueElem);
+        ach.getAutomationCompositionMap().putAll(getTestAutomationCompositionMap());
+        ach.getElementsOnThisParticipant().putAll(setAutomationCompositionElementTest(uuid, definition, participantId));
 
         return ach;
     }
@@ -306,17 +301,18 @@ public class CommonTestData {
      *
      * @param participantId the participantId
      * @param  uuid UUID
-     * @param state a AutomationCompositionOrderedState
+     * @param deployOrder a DeployOrder
+     * @param lockOrder a LockOrder
      * @return a AutomationCompositionStateChange
      */
     public AutomationCompositionStateChange getStateChange(UUID participantId, UUID uuid,
-            AutomationCompositionOrderedState state) {
+            DeployOrder deployOrder, LockOrder lockOrder) {
         var stateChange = new AutomationCompositionStateChange();
         stateChange.setAutomationCompositionId(UUID.randomUUID());
         stateChange.setParticipantId(participantId);
         stateChange.setMessageId(uuid);
-        stateChange.setOrderedState(state);
-        stateChange.setCurrentState(AutomationCompositionState.UNINITIALISED);
+        stateChange.setDeployOrderedState(deployOrder);
+        stateChange.setLockOrderedState(lockOrder);
         stateChange.setTimestamp(Instant.ofEpochMilli(3000));
         return stateChange;
     }
index e16672d..fb285a8 100644 (file)
@@ -60,7 +60,7 @@ class SupervisionAcHandlerTest {
         var automationCompositionAckMessage =
                 new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
         for (var elementEntry : automationComposition.getElements().entrySet()) {
-            var acElementDeployAck = new AcElementDeployAck(null, DeployState.DEPLOYED, LockState.UNLOCKED, true, "");
+            var acElementDeployAck = new AcElementDeployAck(DeployState.DEPLOYED, LockState.UNLOCKED, true, "");
             automationCompositionAckMessage.getAutomationCompositionResultMap().put(elementEntry.getKey(),
                     acElementDeployAck);
         }
@@ -82,7 +82,7 @@ class SupervisionAcHandlerTest {
         var automationCompositionAckMessage =
                 new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_DEPLOY_ACK);
         for (var elementEntry : automationComposition.getElements().entrySet()) {
-            var acElementDeployAck = new AcElementDeployAck(null, DeployState.DEPLOYED, LockState.LOCKED, true, "");
+            var acElementDeployAck = new AcElementDeployAck(DeployState.DEPLOYED, LockState.LOCKED, true, "");
             automationCompositionAckMessage
                     .setAutomationCompositionResultMap(Map.of(elementEntry.getKey(), acElementDeployAck));
         }